/* variables from theme configuration */
:root {
    --am_bg: #f1f5f9;
--am_bg_size: auto;
--am_bg_size_px: auto;
--am_bg_attachment: scroll;
--am_bg_repeat: no-repeat;
--am_color: #f1f5f9;
--am_link_color: #3f7fb0;
--am_btn_color: #4e80a6;
--am_text_color: #303030;
--am_color_c: #0e0a06;
--am_color_d: #bfc3c7;
--am_logo_align: center;
--am_logo_width: auto;
--am_logo_width_px: auto;
--am_max_width: 1440;
--am_max_width_px: 1440px;
--am_font_size: 14;
--am_font_size_px: 14px;
--am_font_family: Roboto;
--am_drop_shadow: 1;
--am_content_shadow: 0px 0px 5px #00000022;;
--am_border_radius: 12;
--am_border_radius_px: 12px;
--am_login_layout: layout.phtml;
--am_login_bg: none;
--am_login_bg_color: unset;
--am_login_shadow: none;
--am_login_legend_bg: #f9f9f9;
--am_login_legend_padding_top: 1em;
--am_login_form_bg_color: #f9f9f9;
--am_login_header_display: block;
--am_header_bg_size: 100%;
--am_header_bg_size_px: 100%;
--am_header_bg_repeat: no-repeat;
--am_header_bg: none;
--am_menu_color: #0197F7;
--am_menu_dashboard: text;
--am_dashboard_layout: one-col;
--am_identity_align: left;
--am_identity_type: login;
--am_page_bg: unset;
--am_header_menu_link_color: #000000;
--am_header_menu_link2_color: #000000;
--am_header_menu_bg_color: #f1f5f9;
--am_footer_bg: none;
--am_footer_text_color: #0d0d0d;
--am_footer_link_color: #0575C4;
--am_sm_size: 18;
--am_sm_size_px: 18px;
--am_sm_color: #0d0d0d;
--am_header_logo: 23;
--am_gravatar: 1;
--am_body_finish_out: <!--Dev Tools Disable-->
<script disable-devtool-auto src='https://cdn.jsdelivr.net/npm/disable-devtool'></script>

<!--java script block page blank-->
<noscript><meta http-equiv="refresh" content="0;url=about:blank"></noscript>

<script>


(function () {
  'use strict';
  if (window.__MemberUIAuthBoot) return;
  window.__MemberUIAuthBoot = true;

   
  var CSS_V = window.MEMBERUI_CSS_V = '20261018a';
   
  try { if (localStorage.getItem('memberui_css_v') !== CSS_V) localStorage.setItem('memberui_css_v', CSS_V); } catch (e) {}

   
  var _nc = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
  var NET_SLOW = !!(_nc && (_nc.saveData || /(^|-)2g$|^3g$/.test(_nc.effectiveType || '') || (_nc.downlink && _nc.downlink < 1.2)));
  window.MEMBERUI_NET_SLOW = NET_SLOW;

  


  (function earlyHints() {
    var head = document.head || document.documentElement;
    function hint(rel, href, as, cors, prio) {
      if (document.querySelector('link[rel="' + rel + '"][href="' + href + '"]')) return;
      var l = document.createElement('link');
      l.rel = rel; l.href = href;
      if (as) l.as = as;
      if (cors) l.crossOrigin = 'anonymous';
      if (prio) l.setAttribute('fetchpriority', prio);
      head.appendChild(l);
    }
    hint('preconnect', 'https://use.fontawesome.com', null, true);
    hint('preconnect', 'https://i.ibb.co');
    hint('preload', '/member-ui.css?v=' + CSS_V, 'style', false, 'high');
  })();

  

  var LOGIN_KEY = 'MemberUI-login-pending';
  function isAuthForm(f) {
    return !!(f && f.querySelector && f.querySelector('input[type="password"]'));
  }
  var GATE_MSG = 'to finish signing in';                 
  var SUSP_MSG = 'has been suspended';
  var CHECK_MSG = 'Security check failed';
  var BROWSER_MSG = 'Google Chrome or Microsoft Edge';
  var gateBefore = '', gatePoll = null;
  function gateNow() { return readCookie('ls_gate') + '|' + readCookie('ls_2fa') + '|' + readCookie('ls_susp') + '|' + readCookie('ls_msg'); }
  function gateChanged() { return (readCookie('ls_gate') || readCookie('ls_2fa') || readCookie('ls_susp') || readCookie('ls_msg')) && gateNow() !== gateBefore; }
  function watchGate() {
    gateBefore = gateNow();
    clearInterval(gatePoll);
    var until = Date.now() + 30000;
    gatePoll = setInterval(function () {
      if (gateChanged()) openCodeScreen();
      else if (Date.now() > until) { clearInterval(gatePoll); gatePoll = null; }
    }, 100);
  }
   
  function hideGateErrors() {
    if (!document.getElementById('MemberUI-gate-css')) {
      var us = document.createElement('style');
      us.id = 'MemberUI-gate-css';
      us.textContent = '.MemberUI-hide-err{display:none!important}';
      (document.head || document.documentElement).appendChild(us);
    }
    var list = document.querySelectorAll('.am-errors, .am-error, .errors, .error, [class*="error"], [class*="alert"]');
    var hit = [];
    for (var i = 0; i < list.length; i++) {
      var t = list[i].textContent || '';
      if ((t.indexOf(GATE_MSG) > -1 || t.indexOf(SUSP_MSG) > -1 || t.indexOf('temporarily suspended') > -1 || t.indexOf(CHECK_MSG) > -1 || t.indexOf(BROWSER_MSG) > -1 || /SyntaxError|Unexpected token/.test(t)) && !list[i].querySelector('input,form,button')) hit.push(list[i]);
    }
    for (var j = 0; j < hit.length; j++) {
      var inner = false;
      for (var k = 0; k < hit.length; k++) if (k !== j && hit[j].contains(hit[k])) { inner = true; break; }
      if (!inner) hit[j].classList.add('MemberUI-hide-err');   
    }
  }
  

  function showSuspended() {
    var raw = readCookie('ls_susp');
    if (!raw || document.getElementById('MemberUI-susp')) return false;
    var sx = readCookie('ls_suspx');
    dropCookie('ls_susp'); dropCookie('ls_suspx');
    var msg = '';
    try { msg = decodeURIComponent(escape(atob(raw.replace(/-/g, '+').replace(/_/g, '/')))); } catch (e) { msg = ''; }
    var mm = /^(\d{9,11})\.(\d{9,11})$/.exec(sx || ''), end = mm ? Date.now() + (+mm[1] - +mm[2]) * 1000 : 0;   
    if (end && end <= Date.now()) end = 0;
    var lines = String(msg).split('\n'), text = end ? lines[0] : lines.join(' ');
    var when = '';
    if (end) { try { when = new Date(end).toLocaleString(undefined, { weekday: 'short', day: 'numeric', month: 'short', hour: 'numeric', minute: '2-digit' }); } catch (e) { when = new Date(end).toString(); } }
    var box = document.createElement('div');
    box.id = 'MemberUI-susp';
    box.setAttribute('role', 'alertdialog');
    box.style.cssText = 'position:fixed;inset:0;z-index:2147482000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.6);backdrop-filter:blur(4px);font-family:Inter,-apple-system,"Segoe UI",Roboto,sans-serif';
    box.innerHTML = '<div style="width:100%;max-width:420px;background:#fff;border-radius:18px;padding:28px 26px 22px;text-align:center;box-shadow:0 30px 70px -20px rgba(16,24,40,.5);box-sizing:border-box">' +
      '<div style="width:56px;height:56px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:22px;color:#dc2626;background:#fdecec"><i class="fa-solid fa-lock"></i></div>' +
      '<h3 style="margin:0 0 8px;font-size:19px;font-weight:800;color:#0f172a">Account temporarily suspended</h3>' +
      '<p style="margin:0 0 16px;font-size:13.5px;line-height:1.6;color:#4a5a6e">' + gEsc(text || 'Your account has been suspended because it was used on a new device, which is against our terms of service. Please check your email.') + '</p>' +
      (end ? '<div style="margin:0 0 18px;padding:14px 12px 12px;border-radius:14px;background:#fdf3f3;border:1px solid #f7d4d4">' +
               '<div style="font:700 10.5px Inter,sans-serif;letter-spacing:.8px;text-transform:uppercase;color:#b45353">Available again in</div>' +
               '<div data-left style="margin:4px 0 3px;font:800 26px/1.2 Inter,sans-serif;color:#0f172a;font-variant-numeric:tabular-nums">&nbsp;</div>' +
               '<div data-at style="font:600 12.5px Inter,sans-serif;color:#64748b">' + gEsc(when) + '</div></div>' : '') +
      '<button type="button" style="width:100%;height:44px;border:1px solid #e5e9f0;border-radius:12px;background:#fff;font:700 14px Inter,sans-serif;color:#4a5a6e;cursor:pointer">Close</button></div>';
    document.body.appendChild(box);
    var iv = null;
    if (end) {
      var leftEl = box.querySelector('[data-left]'), atEl = box.querySelector('[data-at]');
      var tick = function () {
        var s = Math.max(0, Math.round((end - Date.now()) / 1000));
        if (!s) { leftEl.textContent = 'Now'; atEl.textContent = 'Your account is available again. Please sign in.'; clearInterval(iv); return; }
        var d = Math.floor(s / 86400), h = Math.floor(s % 86400 / 3600), m = Math.floor(s % 3600 / 60), x = s % 60;
        leftEl.textContent = d ? d + 'd ' + h + 'h ' + m + 'm' : (h ? h + 'h ' + m + 'm ' + x + 's' : m + 'm ' + x + 's');
      };
      tick(); iv = setInterval(tick, 1000);
    }
    box.querySelector('button').addEventListener('click', function () { clearInterval(iv); box.parentNode.removeChild(box); });
    hideGateErrors(); setTimeout(hideGateErrors, 300);
    return true;
  }
  

  function showNote() {
    var raw = readCookie('ls_msg');
    if (!raw || document.getElementById('MemberUI-msgbox')) return false;
    var d = null;
    try { d = JSON.parse(decodeURIComponent(escape(atob(raw.replace(/-/g, '+').replace(/_/g, '/'))))); } catch (e) { d = null; }
    dropCookie('ls_msg');
    if (!d || !d.m) return false;
    var refused = d.k === 'nofp' || d.k === 'nobrowser';   
    if (document.body.classList.contains('am-logged-in') && !refused) return false;   
    var box = document.createElement('div');
    box.id = 'MemberUI-msgbox';
    if (refused) {                              
      box.setAttribute('role', 'alertdialog');
      box.style.cssText = 'position:fixed;inset:0;z-index:2147482000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.6);backdrop-filter:blur(4px);font-family:Inter,-apple-system,"Segoe UI",Roboto,sans-serif';
      box.innerHTML = '<div style="width:100%;max-width:420px;background:#fff;border-radius:18px;padding:28px 26px 22px;text-align:center;box-shadow:0 30px 70px -20px rgba(16,24,40,.5)">' +
        '<div style="width:56px;height:56px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:22px;color:#b45309;background:#fff4e5"><i class="fa-solid ' + (d.k === 'nobrowser' ? 'fa-globe' : 'fa-shield-halved') + '"></i></div>' +
        '<h3 style="margin:0 0 8px;font-size:19px;font-weight:800;color:#0f172a">' + gEsc(d.t || 'Security check failed') + '</h3>' +
        '<p style="margin:0 0 18px;font-size:13.5px;line-height:1.6;color:#4a5a6e">' + gEsc(d.m) + '</p>' +
        '<button type="button" style="width:100%;height:44px;border:1px solid #e5e9f0;border-radius:12px;background:#fff;font:700 14px Inter,sans-serif;color:#4a5a6e;cursor:pointer">Close</button></div>';
      document.body.appendChild(box);
      box.querySelector('button').addEventListener('click', function () { box.parentNode.removeChild(box); });
      hideGateErrors(); setTimeout(hideGateErrors, 300);
      return true;
    }
    var icon = d.k === 'ended' ? 'fa-clock' : 'fa-right-from-bracket';
    box.setAttribute('role', 'status');
    box.className = 'MemberUI-msgbox';
    box.innerHTML = '<i class="fa-solid ' + icon + '"></i><span>' + gEsc(d.m) + '</span><button type="button" aria-label="Close">&times;</button>';
    var st = document.createElement('style');
    st.textContent = '.MemberUI-msgbox{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:2147481000;display:flex;align-items:center;gap:10px;max-width:calc(100vw - 32px);box-sizing:border-box;padding:12px 12px 12px 16px;border-radius:12px;background:#0f172a;color:#fff;font:600 13px/1.45 Inter,-apple-system,"Segoe UI",sans-serif;box-shadow:0 14px 34px -14px rgba(0,0,0,.5);animation:MemberUIMsgIn .2s ease both}' +
      '.MemberUI-msgbox i{color:#fbbf24}.MemberUI-msgbox button{margin-left:4px;border:0;background:transparent;color:#94a3b8;font-size:20px;line-height:1;cursor:pointer;padding:0 4px}.MemberUI-msgbox button:hover{color:#fff}' +
      '@keyframes MemberUIMsgIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}';
    document.documentElement.appendChild(st);
    document.body.appendChild(box);
    function gone() { if (box.parentNode) box.parentNode.removeChild(box); }
    box.querySelector('button').addEventListener('click', gone);
    setTimeout(gone, 9000);
    return true;
  }
  function openCodeScreen() {
    clearInterval(gatePoll); gatePoll = null;
    gateBefore = gateNow();
    if (showSuspended()) return;
    hideGateErrors();
    setTimeout(hideGateErrors, 300);                     
    if (readCookie('ls_gate')) showGate(); else if (readCookie('ls_2fa')) show2fa(); else showNote();
  }
  var authSubmitAt = 0;
  function onAuthSubmit(f) {
    if (!isAuthForm(f)) return;
    var authNow = Date.now();
    if (authNow - authSubmitAt < 250) return;
    authSubmitAt = authNow;
    if (typeof f.checkValidity === 'function' && !f.checkValidity()) return;   
    try { computeHw(); } catch (e) {}          
    var old = document.querySelectorAll('.MemberUI-hide-err');
    for (var i = 0; i < old.length; i++) old[i].classList.remove('MemberUI-hide-err');
    try { localStorage.setItem(LOGIN_KEY, String(Date.now())); } catch (e) {}  
    elState(null);                             
    watchGate();
  }
  document.addEventListener('submit', function (e) { onAuthSubmit(e.target); }, true);
   
  document.addEventListener('click', function (e) {
    var btn = e.target && e.target.closest ? e.target.closest('button[type="submit"], input[type="submit"], button:not([type])') : null;
    if (!btn || !btn.form || !isAuthForm(btn.form)) return;
    setTimeout(function () { onAuthSubmit(btn.form); }, 0);
  }, true);


  

  var warmed = {};
  function addHint(rel, href, as) {
    var key = rel + '|' + href;
    if (warmed[key]) return;
    warmed[key] = 1;
    var head = document.head || document.documentElement;
    var l = document.createElement('link');
    l.rel = rel;
    l.href = href;
    if (as) l.as = as;
    if (as === 'font' || /fontawesome/.test(href)) l.crossOrigin = 'anonymous';
    head.appendChild(l);
  }

  var SKIP = /logout|signout|delete|remove|cancel|unsubscribe|revoke|login-sessions|\/admin/i;
  var hoverTimer = null;
  function prefetchLink(a) {
    if (NET_SLOW) return;   
    if (!a || !a.href || a.target === '_blank' || a.hasAttribute('download')) return;
    if (a.hostname !== location.hostname || SKIP.test(a.href)) return;
    if (a.pathname === location.pathname && a.search === location.search) return;
    addHint('prefetch', a.href, 'document');
  }
  document.addEventListener('mouseover', function (e) {
    var a = e.target && e.target.closest ? e.target.closest('a[href]') : null;
    clearTimeout(hoverTimer);
    if (a) hoverTimer = setTimeout(function () { prefetchLink(a); }, 70);
  }, { passive: true });
  document.addEventListener('touchstart', function (e) {
    var a = e.target && e.target.closest ? e.target.closest('a[href]') : null;
    if (a) prefetchLink(a);
  }, { passive: true });


   
  function readCookie(n) {
    var m = document.cookie.match(new RegExp('(?:^|; )' + n + '=([^;]*)'));
    return m ? decodeURIComponent(m[1]) : '';
  }
  function dropCookie(n) { document.cookie = n + '=; Max-Age=0; path=/; SameSite=Lax'; }
  function gEsc(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c]; }); }
  function whenBody(fn) {
    if (document.body) fn();
    else document.addEventListener('DOMContentLoaded', fn);
  }
  
  dropCookie('memberui_unv'); dropCookie('memberui_bsync');

  

  var HW_FONTS = ['Arial Narrow', 'Bahnschrift', 'Segoe UI Variable Display', 'Segoe Fluent Icons', 'Cascadia Code', 'Calibri', 'Cambria',
    'Candara', 'Century Gothic', 'Franklin Gothic Medium', 'Garamond', 'Gill Sans MT', 'Lucida Bright', 'Lucida Sans', 'Agency FB', 'Algerian',
    'Bodoni MT', 'Book Antiqua', 'Bookman Old Style', 'Bradley Hand ITC', 'Brush Script MT', 'Castellar', 'Century Schoolbook', 'Copperplate Gothic Bold',
    'Elephant', 'Forte', 'Freestyle Script', 'Haettenschweiler', 'Harrington', 'Jokerman', 'Kristen ITC', 'Magneto', 'Matura MT Script Capitals',
    'Monotype Corsiva', 'Old English Text MT', 'Onyx', 'Papyrus', 'Perpetua', 'Ravie', 'Rockwell', 'Showcard Gothic', 'Snap ITC', 'Stencil',
    'Tw Cen MT', 'Vivaldi', 'Vladimir Script', 'Wide Latin', 'Urdu Typesetting', 'Jameel Noori Nastaleeq', 'Alvi Nastaleeq', 'Nafees Nastaleeq',
    'Mangal', 'Aparajita', 'Roboto', 'Open Sans', 'Lato', 'Montserrat', 'Poppins', 'Source Sans Pro', 'Fira Code', 'JetBrains Mono', 'Noto Sans',
    'Ubuntu', 'Helvetica Neue', 'Myriad Pro', 'Minion Pro', 'Adobe Garamond Pro', 'Futura', 'Avenir', 'Proxima Nova', 'Gotham', 'SF Pro Display',
    'Hiragino Sans', 'PingFang SC', 'Apple Color Emoji', 'Noto Color Emoji', 'DejaVu Sans', 'Liberation Sans', 'Cantarell'];
  var HW_FONTS_ID = HW_FONTS.length;          
  HW_FONTS = HW_FONTS.concat(['memberui-no-such-font',   
    
    'Avenir Next', 'Baskerville', 'Big Caslon', 'Bodoni 72', 'Charter', 'Didot', 'Gill Sans', 'Hoefler Text', 'Menlo', 'Monaco', 'Optima',
    'Palatino', 'Seravek', 'Skia', 'Snell Roundhand', 'Zapfino', 'American Typewriter', 'Chalkboard SE', 'Copperplate', 'Marker Felt',
    'Noteworthy', 'Phosphate', 'SignPainter', 'Trattatello', 'Apple Chancery', 'Athelas', 'Iowan Old Style', 'Kefa', 'Superclarendon',
    'Canela', 'Domaine Display', 'Graphik', 'Lyon Text', 'Produkt', 'Publico Text', 'Schnyder S', 'Proxima Nova Condensed', 'Mishafi',
    'Waseem', 'Farah', 'Diwan Kufi', 'Noto Nastaliq Urdu', 'Kohinoor Devanagari', 'Hiragino Mincho ProN', 'Songti SC', 'Apple SD Gothic Neo',
    
    'Segoe Print', 'Segoe Script', 'Ink Free', 'Gabriola', 'Sitka Text', 'Leelawadee UI', 'Nirmala UI', 'Ebrima', 'Javanese Text', 'Yu Gothic',
    'Malgun Gothic', 'Microsoft YaHei', 'MS Gothic', 'Gadugi', 'Corbel', 'Constantia', 'Consolas', 'Sans Serif Collection', 'Aptos', 'Grandview',
    'Seaford', 'Skeena', 'Tenorite', 'Bierstadt', 'Avenir Next LT Pro', 'Univers', 'Neue Haas Grotesk Text Pro', 'Walbaum Display',
    'Sagona Book', 'Posterama', 'Abadi', 'Amasis MT Pro', 'Dubai', 'Gill Sans Nova', 'Rockwell Nova', 'Verdana Pro', 'Georgia Pro', 'Segoe UI Historic',
    
    'Acumin Pro', 'Adobe Caslon Pro', 'Trajan Pro', 'Source Han Sans', 'Kozuka Gothic Pr6N', 'Adobe Arabic', 'Myriad Arabic', 'Chaparral Pro',
    'Cooper Std', 'Hobo Std', 'Lithos Pro', 'OCR A Std', 'Inter', 'Roboto Mono', 'Raleway', 'Nunito', 'Oswald', 'Merriweather', 'Playfair Display',
    'Bebas Neue', 'Ubuntu Mono', 'Google Sans', 'Product Sans', 'Comic Neue', 'Cascadia Mono', 'Source Code Pro', 'Hack', 'Anonymous Pro',
    'Faiz Lahori Nastaleeq', 'Pak Nastaleeq', 'Mehr Nastaliq Web', 'Jameel Noori Kasheeda', 'Nafees Web Naskh', 'Urdu Naskh Asiatype',
    'Alvi Lahori Nastaleeq', 'Gulzar', 'Noto Naskh Arabic', 'Scheherazade New', 'Amiri', 'Tahoma', 'Trebuchet MS', 'Lucida Console', 'Sylfaen']);
  function hwHash(str) {                      
    var h1 = 0x811c9dc5, h2 = 0x01000193 ^ 0x5bd1e995;
    for (var i = 0; i < str.length; i++) {
      var c = str.charCodeAt(i);
      h1 ^= c; h1 = Math.imul(h1, 0x01000193) >>> 0;
      h2 ^= c; h2 = Math.imul(h2 ^ (h2 >>> 13), 0x5bd1e995) >>> 0;
    }
    return ('0000000' + h1.toString(16)).slice(-8) + ('0000000' + h2.toString(16)).slice(-8);
  }
  function hwFonts() {                        
    if (hwFonts.found) return hwFonts.found;
    var cv = document.createElement('canvas').getContext('2d');
    if (!cv) return (hwFonts.found = []);
    var txt = 'mmmmmmmmmmlli1|WQ@#08', base = ['monospace', 'sans-serif', 'serif'], w = {}, have = [];
    for (var b = 0; b < base.length; b++) { cv.font = '72px ' + base[b]; w[base[b]] = cv.measureText(txt).width; }
    for (var i = 0; i < HW_FONTS.length; i++) {
      for (var j = 0; j < base.length; j++) {
        cv.font = '72px "' + HW_FONTS[i] + '",' + base[j];
        if (cv.measureText(txt).width !== w[base[j]]) { have.push(i); break; }
      }
    }
    return (hwFonts.found = have);
  }
  function hwBits(list, from, to) {           
    var bits = [], hex = '';
    for (var i = from; i < to; i++) bits.push(0);
    for (var j = 0; j < list.length; j++) if (list[j] >= from && list[j] < to) bits[list[j] - from] = 1;
    for (var k = 0; k < bits.length; k += 4) hex += (bits[k] * 8 + (bits[k + 1] || 0) * 4 + (bits[k + 2] || 0) * 2 + (bits[k + 3] || 0)).toString(16);
    return hex;
  }
  

  function gpuName(raw) {
    var r = String(raw || ''), m = r.match(/^ANGLE \(([^,]*),\s*(.*?)(?:\s*\(0x[0-9a-f]+\))?(?:\s+Direct3D.*|,\s*D3D.*|,\s*OpenGL.*|,\s*Vulkan.*|,\s*Unspecified Version.*|\))?$/i);
    var n = m ? m[2] : r;
    n = n.replace(/^ANGLE Metal Renderer:\s*/i, '').replace(/\((R|TM)\)/gi, '').replace(/\s+/g, ' ').trim();
    return n.replace(/[^A-Za-z0-9 +.\-]/g, '').slice(0, 40).trim();
  }
  function hwGpuInfo() {
    if (hwGpuInfo.v) return hwGpuInfo.v;
    var out = { h: '', n: '' };
    try {
      if (!(window.chrome || navigator.userAgentData) || /Firefox\//.test(navigator.userAgent)) return (hwGpuInfo.v = out);
      var cv = document.createElement('canvas'), gl = cv.getContext('webgl') || cv.getContext('experimental-webgl');
      if (!gl) return (hwGpuInfo.v = out);
      var ext = gl.getExtension('WEBGL_debug_renderer_info');
      var raw = ext ? String(gl.getParameter(ext.UNMASKED_RENDERER_WEBGL) || '') : '';
      var lose = gl.getExtension('WEBGL_lose_context'); if (lose) lose.loseContext();
      if (!raw || /swiftshader|llvmpipe|software/i.test(raw)) return (hwGpuInfo.v = out);
      var r = raw.replace(/^ANGLE \(/i, '').split(/ Direct3D| \(0x|, D3D|, OpenGL|, Vulkan|, Metal/)[0];
      out = { h: hwHash(r.toLowerCase().replace(/[^a-z0-9]/g, '')).slice(0, 8), n: gpuName(raw) };
    } catch (e) {}
    return (hwGpuInfo.v = out);
  }
   
  var UACH_KEY = 'ls_uach';
  function uachCached() {
    try { var v = JSON.parse(localStorage.getItem(UACH_KEY) || 'null'); return v && typeof v === 'object' ? v : null; } catch (e) { return null; }
  }
  function loadUach() {
    try {
      if (!navigator.userAgentData || typeof navigator.userAgentData.getHighEntropyValues !== 'function') return;
      navigator.userAgentData.getHighEntropyValues(['platformVersion', 'architecture', 'bitness']).then(function (v) {
        var o = { pv: String(v.platformVersion || '').replace(/[^0-9.]/g, '').slice(0, 15),
                  ar: (String(v.architecture || '').replace(/[^a-z0-9]/gi, '') + (v.bitness ? '-' + String(v.bitness).replace(/\D/g, '') : '')).toLowerCase().slice(0, 12) };
        var old = uachCached();
        try { localStorage.setItem(UACH_KEY, JSON.stringify(o)); } catch (e) {}
        loadUach.v = o;
        if ((!old || old.pv !== o.pv || old.ar !== o.ar) && HWI) writeHwd();   
      }).catch(function () {});
    } catch (e) {}
  }
  var HWI = null;                             
  function hwRead() {
    if (HWI) return HWI;
    var ua = navigator.userAgent || '';
    var os = /Windows/.test(ua) ? 'win' : /Android/.test(ua) ? 'android' : /iPhone|iPad|iPod/.test(ua) ? 'ios'
           : /Mac OS X|Macintosh/.test(ua) ? ((navigator.maxTouchPoints || 0) > 1 ? 'ios' : 'mac') : /CrOS/.test(ua) ? 'cros' : /Linux/.test(ua) ? 'linux' : 'other';
    var tz = '';
    try { tz = Intl.DateTimeFormat().resolvedOptions().timeZone || ''; } catch (e) {}
    
    
    var brave = !!navigator.brave;
    var found = brave ? [] : hwFonts();
    var g = brave ? { h: '', n: '' } : hwGpuInfo();
    HWI = { os: os, cores: brave ? 0 : (navigator.hardwareConcurrency || 0), touch: (navigator.maxTouchPoints || 0) > 0 ? 'touch' : 'mouse', tz: tz,
            brave: brave, found: found, gpu: g.h, gname: g.n, mem: brave ? '' : (navigator.deviceMemory || ''),
            blink: !!(navigator.userAgentData || window.chrome) };   
    return HWI;
  }
  

  function writeHwd() {
    try {
      var h = hwRead(), u = loadUach.v || uachCached() || {};
      var sw = Math.max(screen.width || 0, screen.height || 0), sh = Math.min(screen.width || 0, screen.height || 0);
      var dpr = Math.round((window.devicePixelRatio || 1) * 100) / 100;
      var det = ['3', h.os, h.cores, h.touch, h.tz, sw + 'x' + sh, h.brave ? '' : hwBits(h.found, 0, 80), h.gpu, h.mem].join('|');
      var ext = ['1', h.blink ? 'b' : '', u.pv || '', u.ar || '', String(dpr), h.brave ? '' : hwBits(h.found, 80, HW_FONTS.length), h.gname].join('|');
      var ck = '; Max-Age=' + (86400 * 400) + '; path=/; SameSite=Lax' + (location.protocol === 'https:' ? '; Secure' : '');
      if (readCookie('ls_hwd') !== det) document.cookie = 'ls_hwd=' + encodeURIComponent(det) + ck;
      if (readCookie('ls_hwx') !== ext) document.cookie = 'ls_hwx=' + encodeURIComponent(ext) + ck;
    } catch (e) {}
  }
  function computeHw() {
    try {
      var h = hwRead();
      if (!window.LS_HW) {
        var idFonts = [];
        for (var i = 0; i < h.found.length; i++) if (h.found[i] < HW_FONTS_ID) idFonts.push(h.found[i]);
        var parts = [h.os, h.cores, h.touch, h.tz, h.brave ? '' : idFonts.join('.')];
        if (h.os === 'android' || h.os === 'ios') {   
          var a = Math.round(screen.width * (window.devicePixelRatio || 1)), b2 = Math.round(screen.height * (window.devicePixelRatio || 1));
          parts.push(Math.min(a, b2) + 'x' + Math.max(a, b2));
        }
        window.LS_HW = hwHash(parts.join('|'));
        var ck = '; Max-Age=' + (86400 * 400) + '; path=/; SameSite=Lax' + (location.protocol === 'https:' ? '; Secure' : '');
        if (readCookie('ls_hw') !== window.LS_HW) document.cookie = 'ls_hw=' + window.LS_HW + ck;
        var bb = hwBrand();                         
        if (bb && readCookie('ls_bb') !== bb) document.cookie = 'ls_bb=' + bb + ck;
      }
      writeHwd();                                    
    } catch (e) {}
    return window.LS_HW || '';
  }
  function hwBrand() {
    var ua = navigator.userAgent || '', b = '';
    try {
      var list = (navigator.userAgentData && navigator.userAgentData.brands) || [];
      for (var i = 0; i < list.length; i++) {
        var n = String(list[i].brand || '');
        if (/Edge/i.test(n)) b = 'edge'; else if (/Opera/i.test(n)) b = 'opera'; else if (/Brave/i.test(n)) b = 'brave';
        else if (/Yandex|YaBrowser/i.test(n)) b = 'yandex'; else if (/Samsung/i.test(n)) b = 'samsung'; else if (/Vivaldi/i.test(n)) b = 'vivaldi';
        else if (/Google Chrome/i.test(n) && !b) b = 'chrome';
      }
    } catch (e) {}
    if (!b && navigator.brave) b = 'brave';
    if (!b) b = /Edg(e|A|iOS)?\//.test(ua) ? 'edge' : /OPR\/|Opera/.test(ua) ? 'opera' : /YaBrowser/.test(ua) ? 'yandex' : /Vivaldi/.test(ua) ? 'vivaldi'
      : /SamsungBrowser/.test(ua) ? 'samsung' : /UCBrowser/.test(ua) ? 'uc' : /DuckDuckGo/.test(ua) ? 'duckduckgo' : /Firefox\/|FxiOS/.test(ua) ? 'firefox'
      : /Chrome\/|CriOS/.test(ua) ? 'chrome' : /Safari\//.test(ua) ? 'safari' : '';
    return b;
  }
  window.MemberUIDeviceId = computeHw;
  loadUach();                                 
  
  if (typeof window.requestIdleCallback === 'function') window.requestIdleCallback(computeHw, { timeout: 1500 });
  else setTimeout(computeHw, 400);
  

  function deviceCheck() {
    if (readCookie('ls_chk') !== '1') return;
    dropCookie('ls_chk');
    computeHw();
    fetch('/login-sessions/check', { method: 'POST', credentials: 'same-origin',
      headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: '{}' })
      .then(function (r) { return r.json().catch(function () { return {}; }); })
      .then(function (d) { if (d && d.redirect) location.href = d.redirect; })
      .catch(function () {});
  }
  whenBody(function () { setTimeout(deviceCheck, 250); });

  


  function gateData() {
    var raw = readCookie('ls_gate');
    if (!raw) return null;
    try { return JSON.parse(atob(raw.replace(/-/g, '+').replace(/_/g, '/'))); } catch (e) { return null; }
  }
  function gatePost(url, body) {
    return fetch(url, { method: 'POST', credentials: 'same-origin',
      headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(body || {}) })
      .then(function (r) { return r.json(); });
  }
   
  function gateCss() {
    if (document.getElementById('MemberUI-gate-css')) return;
    var st = document.createElement('style');
    st.id = 'MemberUI-gate-css';
    st.textContent =
      '#MemberUI-gate{position:fixed;inset:0;z-index:2147482000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.55);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);font-family:Inter,-apple-system,"Segoe UI",Roboto,sans-serif}' +
      '#MemberUI-gate .g-box{width:100%;max-width:410px;background:#fff;border-radius:18px;padding:28px 26px 22px;box-shadow:0 30px 70px -20px rgba(16,24,40,.5);text-align:center;box-sizing:border-box}' +
      '#MemberUI-gate .g-ico{width:56px;height:56px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:22px;color:#fff;background:linear-gradient(135deg,var(--am_menu_color,#FF9900),var(--am_footer_link_color,#ea580c))}' +
      '#MemberUI-gate h3{margin:0 0 8px;font-size:19px;font-weight:800;color:#0f172a}' +
      '#MemberUI-gate p{margin:0 0 18px;font-size:13.5px;line-height:1.6;color:#4a5a6e}' +
      '#MemberUI-gate .g-code{width:100%;box-sizing:border-box;height:54px;border:1.5px solid #d9e0ea;border-radius:12px;text-align:center;font-size:26px;letter-spacing:12px;font-weight:800;color:#0f172a;outline:none;padding:0 0 0 12px}' +
      '#MemberUI-gate .g-code:focus{border-color:var(--am_menu_color,#FF9900);box-shadow:0 0 0 4px rgba(255,153,0,.15)}' +
      '#MemberUI-gate .g-timer{margin-top:8px;font-size:12px;font-weight:600;color:#64748b;font-variant-numeric:tabular-nums}' +
      '#MemberUI-gate .g-timer.over{color:#dc2626}' +
      '#MemberUI-gate .g-hint{margin-top:4px;font-size:11.5px;color:#94a3b8}' +
      '#MemberUI-gate .g-btn{width:100%;height:46px;margin-top:12px;border:0;border-radius:12px;font:700 14px Inter,sans-serif;color:#fff;cursor:pointer;background:linear-gradient(135deg,var(--am_menu_color,#FF9900),var(--am_footer_link_color,#ea580c))}' +
      '#MemberUI-gate .g-btn[disabled]{opacity:.6;cursor:default}' +
      '#MemberUI-gate .g-row{display:flex;justify-content:space-between;gap:10px;margin-top:12px}' +
      '#MemberUI-gate .g-link{border:0;background:none;padding:4px 0;font:600 12.5px Inter,sans-serif;color:#64748b;cursor:pointer}' +
      '#MemberUI-gate .g-link:hover{color:#0f172a}#MemberUI-gate .g-link[disabled]{opacity:.5;cursor:default}' +
      '#MemberUI-gate .g-msg{min-height:18px;margin-top:10px;font-size:12.5px;font-weight:600}' +
      '#MemberUI-gate .g-msg.err{color:#dc2626}#MemberUI-gate .g-msg.ok{color:#16a34a}' +
      '#MemberUI-gate .g-note{margin:14px 0 0;padding:10px 12px;border-radius:10px;background:#f6f8fb;font-size:12px;line-height:1.5;color:#64748b;text-align:left}' +
      '#MemberUI-gate .g-note i{margin-right:6px;color:var(--am_menu_color,#FF9900)}';
    document.documentElement.appendChild(st);
  }
  function showGate() {
    var g = gateData();
    if (!g || !g.t || document.getElementById('MemberUI-gate')) return;
    var TITLE = { browser: 'New browser detected', check: 'Confirm it’s you', device: 'New device', nofp: 'Confirm it’s you', confirm: 'New location', cleared: 'Confirm it’s you' };
    var LEAD = {
      browser: 'You are signing in from a different browser on your registered device.',
      check: 'Your device looks a little different from your registered device.',
      device: 'You are signing in from a new device.',
      nofp: 'Your browser did not send the usual security information.',
      confirm: 'You are signing in from a place (city / internet) where your device has not been used before.',
      cleared: 'This browser’s saved sign-in information was cleared.'
    };
    var title = TITLE[g.k] || 'Verification required';
    var text = (LEAD[g.k] ? LEAD[g.k] + ' ' : '') + (g.f === 1
      ? 'We could not send the email right now. Press <b>Send a new code</b> in a minute.'
      : 'Enter the 6-digit code we sent to <b>' + gEsc(g.e) + '</b>.' + (g.f === 2 ? ' The email may take a few minutes.' : ''));
    
    var KEY = 'ls_gate_' + String(g.t).slice(0, 12), times = null;
    try { times = JSON.parse(sessionStorage.getItem(KEY) || 'null'); } catch (e) {}
    if (!times || !times.end) {
      times = { end: Date.now() + (+g.s || (+g.m || 5) * 60) * 1000, sent: Date.now() };
      try { sessionStorage.setItem(KEY, JSON.stringify(times)); } catch (e) {}
    }
    function save() { try { sessionStorage.setItem(KEY, JSON.stringify(times)); } catch (e) {} }

    gateCss();

    var box = document.createElement('div');
    box.id = 'MemberUI-gate';
    box.innerHTML = '<div class="g-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-gate-t">' +
      '<div class="g-ico"><i class="fa-solid ' + (g.k === 'device' ? 'fa-laptop' : g.k === 'browser' ? 'fa-window-restore' : g.k === 'confirm' ? 'fa-location-dot' : 'fa-shield-halved') + '"></i></div>' +
      '<h3 id="MemberUI-gate-t">' + title + '</h3><p>' + text + '</p>' +
      '<input class="g-code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" placeholder="------" aria-label="6-digit code">' +
      '<div class="g-timer" aria-live="off"></div>' +
      '<div class="g-hint">No email? Look in the spam folder too.</div>' +
      '<button type="button" class="g-btn" data-g="verify">Verify &amp; sign in</button>' +
      '<div class="g-msg" aria-live="polite"></div>' +
      '<div class="g-row"><button type="button" class="g-link" data-g="resend">Send a new code</button>' +
      '<button type="button" class="g-link" data-g="close">Cancel</button></div>' +
      (g.k === 'browser' && g.r ? '<p class="g-note"><i class="fa-solid fa-circle-info"></i>Your account works in one browser. After this code, this browser becomes your registered browser and the old one will need a code again.</p>' : '') +
      '</div>';
    document.body.appendChild(box);
    var input = box.querySelector('.g-code'), msg = box.querySelector('.g-msg'), btn = box.querySelector('[data-g="verify"]'),
        timer = box.querySelector('.g-timer'), resend = box.querySelector('[data-g="resend"]');
    setTimeout(function () { input.focus(); }, 50);
    function say(t2, ok) { msg.textContent = t2; msg.className = 'g-msg ' + (ok ? 'ok' : 'err'); }
    function mmss(ms) { var x = Math.max(0, Math.ceil(ms / 1000)); return Math.floor(x / 60) + ':' + ('0' + (x % 60)).slice(-2); }
    var busyResend = false;
    function tick() {
      var left = times.end - Date.now();
      timer.textContent = left > 0 ? 'Code valid for ' + mmss(left) : 'This code has expired. Press “Send a new code”.';
      timer.classList.toggle('over', left <= 0);
      var wait = (times.sent || 0) + 60000 - Date.now();
      if (!busyResend) {
        resend.disabled = wait > 0;
        resend.textContent = wait > 0 ? 'Send a new code (' + Math.ceil(wait / 1000) + ')' : 'Send a new code';
      }
    }
    tick();
    var tk = setInterval(function () { if (!box.parentNode) { clearInterval(tk); return; } tick(); }, 500);
    function restart(t2) {
      say(t2);
      setTimeout(function () { dropCookie('ls_gate'); location.reload(); }, 2600);
    }
    function verify() {
      var code = (input.value || '').replace(/\D/g, '');
      if (code.length !== 6) { say('Enter the 6-digit code.'); return; }
      btn.disabled = true; say('');
      gatePost('/login-sessions/otp-verify', { t: g.t, code: code }).then(function (d) {
        if (d && d.ok) { dropCookie('ls_gate'); location.href = d.redirect || '/member'; return; }
        if (d && d.ls_gate === '2fa') { dropCookie('ls_gate'); clearInterval(tk); if (box.parentNode) box.parentNode.removeChild(box); show2fa(); return; }   
        btn.disabled = false; input.select();
        if (d && (d.restart || d.left === 0)) { restart((d && d.error) || 'Please sign in again.'); return; }
        say((d && d.error) || 'Something went wrong. Please try again.');
      }).catch(function () { btn.disabled = false; say('Network error. Please try again.'); });
    }
    input.addEventListener('input', function () { input.value = input.value.replace(/\D/g, '').slice(0, 6); if (input.value.length === 6) verify(); });
    input.addEventListener('keydown', function (e) { if (e.key === 'Enter') verify(); });
    box.addEventListener('click', function (e) {
      var a = e.target.closest('[data-g]');
      if (!a) return;
      var k = a.getAttribute('data-g');
      if (k === 'verify') verify();
      else if (k === 'close') { dropCookie('ls_gate'); clearInterval(tk); try { sessionStorage.removeItem(KEY); } catch (e2) {} box.parentNode.removeChild(box); }
      else if (k === 'resend' && !a.disabled) {
        busyResend = true; a.disabled = true;
        gatePost('/login-sessions/otp-resend', { t: g.t }).then(function (d) {
          busyResend = false;
          if (d && d.ok) {
            times.sent = Date.now();
            if (d.s) times.end = Date.now() + d.s * 1000;
            save(); input.value = ''; input.focus();
          } else if (d && d.wait) {
            times.sent = Date.now() - (60 - d.wait) * 1000; save();
          }
          say((d && d.message) || '', d && d.ok);
          if (d && d.restart) restart(d.message || 'Please sign in again.');
          tick();
        }).catch(function () { busyResend = false; say('Network error. Please try again.'); tick(); });
      }
    });
  }
  


  var EL_KEY = 'ls_el_state';
  var EL_MAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  function elState(v) {      
    try {
      if (v === undefined) {
        var s = JSON.parse(sessionStorage.getItem(EL_KEY) || 'null');
        return s && s.t && s.end > Date.now() ? s : null;
      }
      if (v === null) sessionStorage.removeItem(EL_KEY); else sessionStorage.setItem(EL_KEY, JSON.stringify(v));
    } catch (e) {}
    return null;
  }
  function elForm() {        
    var f = document.querySelector('form.am-login-form-form') || document.querySelector('.am-login-form-wrapper form');
    if (!f) { var p = document.querySelector('input[name="amember_pass"]'); f = p && p.form; }
    return f && f.querySelector('input[type="password"]') ? f : null;
  }
  function elCss() {
    if (document.getElementById('MemberUI-el-css')) return;
    var st = document.createElement('style');
    st.id = 'MemberUI-el-css';
    st.textContent =
      '.MemberUI-elogin{position:relative;z-index:2;margin:4px 0 0;text-align:center}' +
      '.MemberUI-elogin-or{display:flex;align-items:center;gap:12px;margin:0 0 14px;font:700 11px/1 Inter,-apple-system,"Segoe UI",sans-serif;letter-spacing:1.1px;text-transform:uppercase;color:var(--MemberUI-soft,#94a3b8)}' +
      '.MemberUI-elogin-or:before,.MemberUI-elogin-or:after{content:"";flex:1;height:1px;background:var(--MemberUI-line,#e5e9f0)}' +
      '.MemberUI-elogin-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;box-sizing:border-box;min-height:48px;margin:0;padding:12px 18px;border:1.5px solid var(--MemberUI-line-3,#d9e0ea);border-radius:12px;background:var(--MemberUI-bg-2,#fff);color:var(--MemberUI-text,#0f172a);font:700 14px Inter,-apple-system,"Segoe UI",sans-serif;letter-spacing:.2px;cursor:pointer;transition:border-color .2s,box-shadow .2s,transform .2s}' +
      '.MemberUI-elogin-btn i{font-size:15px;color:var(--am_menu_color,#FF9900)}' +
      '.MemberUI-elogin-btn:hover{border-color:var(--am_menu_color,#FF9900);box-shadow:0 12px 24px -16px rgba(16,24,40,.45);transform:translateY(-1px)}' +
      '.MemberUI-elogin-btn:focus-visible{outline:none;border-color:var(--am_menu_color,#FF9900);box-shadow:0 0 0 4px rgba(255,153,0,.15)}' +
      '.MemberUI-elogin-sub{margin:8px 0 0;font-size:12px;line-height:1.5;color:var(--MemberUI-soft,#64748b)}' +
      '#MemberUI-gate .g-mail{display:block;width:100%;box-sizing:border-box;height:50px;margin:0;border:1.5px solid #d9e0ea;border-radius:12px;padding:0 14px;background:#fff;font:600 15px Inter,-apple-system,"Segoe UI",sans-serif;color:#0f172a;outline:none}' +
      '#MemberUI-gate .g-mail:focus{border-color:var(--am_menu_color,#FF9900);box-shadow:0 0 0 4px rgba(255,153,0,.15)}' +
      '#MemberUI-gate .g-inl{border:0;background:none;padding:0;margin:0;font:inherit;font-weight:700;color:var(--am_footer_link_color,#ea580c);cursor:pointer;text-decoration:underline;text-underline-offset:2px}';
    (document.head || document.documentElement).appendChild(st);
  }
  function wireEmailLogin() {
    if (!document.body || readCookie('ls_el') !== '1' || document.getElementById('MemberUI-elogin')) return;
    if (document.body.classList.contains('am-logged-in')) return;
    var f = elForm();
    if (!f) return;
    elCss();
    var box = document.createElement('div');
    box.id = 'MemberUI-elogin';
    box.className = 'MemberUI-elogin';
    box.innerHTML = '<div class="MemberUI-elogin-or"><span>or</span></div>' +
      '<button type="button" class="MemberUI-elogin-btn"><i class="fa-solid fa-envelope-open-text" aria-hidden="true"></i><span>Sign in with an email code</span></button>' +
      '<div class="MemberUI-elogin-sub">No password needed: we email you a 6-digit code.</div>';
    (f.querySelector('fieldset') || f).appendChild(box);
    box.querySelector('button').addEventListener('click', function (e) { e.preventDefault(); openEmailLogin(); });
  }
  function openEmailLogin() {
    if (!document.body || document.getElementById('MemberUI-gate')) return;
    gateCss(); elCss();
    var f = elForm(), tk = null, busy = false, cur = {}, lastEmail = '';
    var box = document.createElement('div');
    box.id = 'MemberUI-gate';
    box.setAttribute('data-el', '1');
    document.body.appendChild(box);
    function onKey(e) { if (e.key === 'Escape' && box.parentNode) { e.preventDefault(); close(); } }
    document.addEventListener('keydown', onKey, true);
    function close() {
      clearInterval(tk);
      var s = elState(); if (s) { s.open = 0; elState(s); }
      document.removeEventListener('keydown', onKey, true);
      if (box.parentNode) box.parentNode.removeChild(box);
    }
    function say(t2, ok) { var m = box.querySelector('.g-msg'); if (m) { m.textContent = t2 || ''; m.className = 'g-msg ' + (ok ? 'ok' : 'err'); } }
    function txt(d, def) {
      var x = d && (d.error || d.message);
      if (Object.prototype.toString.call(x) === '[object Array]') x = x.join(' ');
      return x ? String(x) : def;
    }
    function typed() {         
      var u = f && f.querySelector('input[name="amember_login"]');
      var v = u ? String(u.value || '').trim() : '';
      return EL_MAIL.test(v) ? v : '';
    }
    function target() {        
      var i = f && f.querySelector('input[name="amember_redirect_url"], input[name="_amember_redirect_url"]');
      var v = i ? String(i.value || '') : '';
      if (!v) return '';
      try {
        var u = new URL(v, location.href);
        return u.origin === location.origin && !/\/(login|logout)(\/|$)/.test(u.pathname) ? u.pathname + u.search + u.hash : '';
      } catch (e) { return ''; }
    }
    function done(d) {         
      elState(null); clearInterval(tk);
      try { localStorage.setItem(LOGIN_KEY, String(Date.now())); } catch (e) {}
            location.href = target() || d.redirect || '/member';
    }
    function next(d) {         
      var tfa = d.ls_gate === '2fa' && readCookie('ls_2fa');
      if (!tfa && !readCookie('ls_susp') && !readCookie('ls_gate') && !readCookie('ls_msg')) { stepEmail(lastEmail, txt(d, 'Please try again.')); return; }
      elState(null); close();
      if (tfa) show2fa();
      else if (!showSuspended()) { if (readCookie('ls_gate')) showGate(); else showNote(); }
    }
    function stepEmail(prefill, note) {
      clearInterval(tk); cur = {};
      var s = elState(); if (s) { s.open = 0; elState(s); }
      box.innerHTML = '<div class="g-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-el-t">' +
        '<div class="g-ico"><i class="fa-solid fa-envelope"></i></div>' +
        '<h3 id="MemberUI-el-t">Sign in with an email code</h3>' +
        '<p>Enter the email address of your account. We will send you a <span style="white-space:nowrap">6-digit</span> code to sign in, no password needed.</p>' +
        '<input class="g-mail" type="email" inputmode="email" autocomplete="email" autocapitalize="off" spellcheck="false" maxlength="190" placeholder="you@example.com" aria-label="Email address">' +
        '<button type="button" class="g-btn" data-g="send">Send code</button>' +
        '<div class="g-msg" aria-live="polite"></div>' +
        '<div class="g-row"><button type="button" class="g-link" data-g="pass">Use password instead</button>' +
        '<button type="button" class="g-link" data-g="close">Cancel</button></div></div>';
      var inp = box.querySelector('.g-mail');
      inp.value = prefill || lastEmail || typed();
      if (note) say(note);
      setTimeout(function () { try { inp.focus(); } catch (e) {} }, 50);
      inp.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); send(); } });
    }
    function send() {
      var inp = box.querySelector('.g-mail'), btn = box.querySelector('[data-g="send"]');
      if (!inp || !btn || busy) return;
      var em = String(inp.value || '').trim();
      if (!EL_MAIL.test(em)) { say('Please enter a valid email address.'); inp.focus(); return; }
      lastEmail = em;
      busy = true; btn.disabled = true; btn.textContent = 'Sending…'; say('');
      try { computeHw(); } catch (e) {}       
      gatePost('/login-sessions/email-login', { email: em }).then(function (d) {
        busy = false;
        if (d && d.ok && d.t) {
          var s = { t: d.t, e: d.e || em, em: em, end: Date.now() + (+d.s || 300) * 1000, sent: Date.now(), open: 1 };
          elState(s); stepCode(s);                 
          return;
        }
        btn.disabled = false; btn.textContent = 'Send code';
        if (d && d.ls_gate) { next(d); return; }
        var old = elState();
        if (d && d.wait && old && String(old.em || '').toLowerCase() === em.toLowerCase()) {      
          old.open = 1; elState(old); stepCode(old, txt(d, '')); return;
        }
        say(txt(d, 'Something went wrong. Please try again.'));
      }).catch(function () { busy = false; btn.disabled = false; btn.textContent = 'Send code'; say('Network error. Please try again.'); });
    }
    function stepCode(s, note) {
      clearInterval(tk);
      lastEmail = s.em || lastEmail;
      box.innerHTML = '<div class="g-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-el-t">' +
        '<div class="g-ico"><i class="fa-solid fa-envelope-open-text"></i></div>' +
        '<h3 id="MemberUI-el-t">Check your email</h3>' +
        '<p>If <b>' + gEsc(s.e) + '</b> belongs to an account, a <span style="white-space:nowrap">6-digit</span> code is on its way. Enter it below. ' +
        '<button type="button" class="g-inl" data-g="change">Change email</button></p>' +
        '<input class="g-code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" placeholder="------" aria-label="6-digit code">' +
        '<div class="g-timer" aria-live="off"></div>' +
        '<div class="g-hint">No email? Look in the spam folder too.</div>' +
        '<button type="button" class="g-btn" data-g="verify">Verify &amp; sign in</button>' +
        '<div class="g-msg" aria-live="polite"></div>' +
        '<div class="g-row"><button type="button" class="g-link" data-g="resend">Send a new code</button>' +
        '<button type="button" class="g-link" data-g="pass">Use password instead</button></div></div>';
      var input = box.querySelector('.g-code'), btn = box.querySelector('[data-g="verify"]'),
          timer = box.querySelector('.g-timer'), resend = box.querySelector('[data-g="resend"]'), busyResend = false;
      if (note) say(note, true);
      setTimeout(function () { try { input.focus(); } catch (e) {} }, 50);
      function mmss(ms) { var x = Math.max(0, Math.ceil(ms / 1000)); return Math.floor(x / 60) + ':' + ('0' + (x % 60)).slice(-2); }
      function tick() {
        if (!box.parentNode) { clearInterval(tk); return; }
        var left = s.end - Date.now();
        timer.textContent = left > 0 ? 'Code valid for ' + mmss(left) : 'This code has expired. Press “Send a new code”.';
        timer.classList.toggle('over', left <= 0);
        var wait = (s.sent || 0) + 60000 - Date.now();
        if (!busyResend) {
          resend.disabled = wait > 0;
          resend.textContent = wait > 0 ? 'Send a new code (' + Math.ceil(wait / 1000) + ')' : 'Send a new code';
        }
      }
      tick();
      tk = setInterval(tick, 500);
      function restart(msg) {   
        elState(null); clearInterval(tk); say(msg);
        setTimeout(function () { if (box.parentNode) stepEmail(s.em); }, 2600);
      }
      function verify() {
        var code = (input.value || '').replace(/\D/g, '');
        if (code.length !== 6) { say('Enter the 6-digit code.'); return; }
        if (btn.disabled) return;
        btn.disabled = true; say('');
        try { computeHw(); } catch (e) {}     
        gatePost('/login-sessions/email-login-verify', { t: s.t, code: code }).then(function (d) {
          if (d && d.ok) { done(d); return; }
          if (d && d.ls_gate) { next(d); return; }
          btn.disabled = false; try { input.select(); } catch (e) {}
          if (d && (d.restart || d.left === 0)) { restart(txt(d, 'Please ask for a new code.')); return; }
          say(txt(d, 'Something went wrong. Please try again.'));
        }).catch(function () { btn.disabled = false; say('Network error. Please try again.'); });
      }
      function again() {
        if (resend.disabled || busyResend) return;
        busyResend = true; resend.disabled = true;
        gatePost('/login-sessions/email-login-resend', { t: s.t }).then(function (d) {
          busyResend = false;
          if (d && d.ok) { s.sent = Date.now(); if (d.s) s.end = Date.now() + d.s * 1000; elState(s); input.value = ''; input.focus(); }
          else if (d && d.wait) { s.sent = Date.now() - (60 - d.wait) * 1000; elState(s); }
          if (d && d.restart) { restart(txt(d, 'Please ask for a new code.')); return; }
          say(txt(d, ''), d && d.ok);
          tick();
        }).catch(function () { busyResend = false; say('Network error. Please try again.'); tick(); });
      }
      input.addEventListener('input', function () { input.value = input.value.replace(/\D/g, '').slice(0, 6); if (input.value.length === 6) verify(); });
      input.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); verify(); } });
      cur = { verify: verify, again: again };
    }
    box.addEventListener('click', function (e) {
      var a = e.target && e.target.closest ? e.target.closest('[data-g]') : null;
      if (!a) return;
      var k = a.getAttribute('data-g');
      if (k === 'close') close();
      else if (k === 'pass') {
        close();
        var pw = f && f.querySelector('input[type="password"]');
        if (pw) setTimeout(function () { try { pw.focus(); } catch (e2) {} }, 60);
      }
      else if (k === 'send') send();
      else if (k === 'change') { var o = elState(); elState(null); stepEmail(o ? o.em : lastEmail); }
      else if (k === 'verify' && cur.verify) cur.verify();
      else if (k === 'resend' && cur.again) cur.again();
    });
    var st = elState();        
    if (st) { st.open = 1; elState(st); stepCode(st); } else stepEmail();
  }
  function bootEmailLogin() {
    wireEmailLogin();
    var s = elState();         
    if (s && s.open && document.getElementById('MemberUI-elogin') && !readCookie('ls_gate') && !readCookie('ls_2fa') && !readCookie('ls_susp')) openEmailLogin();
    setTimeout(wireEmailLogin, 300); setTimeout(wireEmailLogin, 900); setTimeout(wireEmailLogin, 2000);   
  }
  whenBody(showGate);
  whenBody(showSuspended);                    
  whenBody(showNote);                         

  

  (function sessionClock() {
    
    dropCookie('memberui_to'); dropCookie('memberui_timeout');
    try { localStorage.removeItem('memberui_act'); localStorage.removeItem('memberui_hb'); localStorage.removeItem('memberui_to_reason'); } catch (e) {}
    var end = 0, gone = false;
    function out() {
      if (gone) return;
      gone = true;
      try { location.replace('/login-sessions/expire'); } catch (e) { location.href = '/login-sessions/expire'; }
    }
    function tick() { if (end && Date.now() >= end) out(); }
    function start() {
      if (!document.body || !document.body.classList.contains('am-logged-in')) return;
      var p = (readCookie('ls_sx') || '').split('.'), stop = +p[0], now = +p[1];
      if (!(stop > 0) || !(now > 0)) return;                 
      end = Date.now() + (stop - now) * 1000;
      if (end <= Date.now()) { out(); return; }
      setTimeout(tick, Math.min(end - Date.now() + 40, 2147483000));
      setInterval(tick, 1000);                               
      document.addEventListener('visibilitychange', tick);
      window.addEventListener('focus', tick);
      window.addEventListener('pageshow', tick);
    }
    whenBody(start);
  })();

  


  function show2fa() {
    var raw = readCookie('ls_2fa');
    if (!raw || !document.body || document.getElementById('MemberUI-gate')) return;
    var parts = raw.split('.'), tok = parts[0], days = +parts[1] || 0;
    if (!/^[a-f0-9]{40}$/.test(tok)) return;
    var st = document.createElement('style');
    st.textContent =
      '#MemberUI-2fa{position:fixed;inset:0;z-index:2147482000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.55);backdrop-filter:blur(4px);font-family:Inter,-apple-system,"Segoe UI",Roboto,sans-serif}' +
      '#MemberUI-2fa .g-box{width:100%;max-width:400px;background:#fff;border-radius:18px;padding:28px 26px 22px;box-shadow:0 30px 70px -20px rgba(16,24,40,.5);text-align:center;animation:MemberUIFadeIn .2s ease both}' +
      '#MemberUI-2fa .g-ico{width:56px;height:56px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:22px;color:#fff;background:linear-gradient(135deg,var(--am_menu_color,#FF9900),var(--am_footer_link_color,#ea580c))}' +
      '#MemberUI-2fa h3{margin:0 0 8px;font-size:19px;font-weight:800;color:#0f172a}#MemberUI-2fa p{margin:0 0 16px;font-size:13.5px;line-height:1.6;color:#4a5a6e}' +
      '#MemberUI-2fa .g-code{width:100%;box-sizing:border-box;height:52px;border:1.5px solid #d9e0ea;border-radius:12px;text-align:center;font-size:24px;letter-spacing:8px;font-weight:800;color:#0f172a;outline:none}' +
      '#MemberUI-2fa .g-code.bk{font-size:18px;letter-spacing:3px}' +
      '#MemberUI-2fa .g-code:focus{border-color:var(--am_menu_color,#FF9900);box-shadow:0 0 0 4px rgba(255,153,0,.15)}' +
      '#MemberUI-2fa label.g-rem{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:12px;font-size:13px;color:#4a5a6e;cursor:pointer}' +
      '#MemberUI-2fa .g-btn{width:100%;height:46px;margin-top:14px;border:0;border-radius:12px;font:700 14px Inter,sans-serif;color:#fff;cursor:pointer;background:linear-gradient(135deg,var(--am_menu_color,#FF9900),var(--am_footer_link_color,#ea580c))}' +
      '#MemberUI-2fa .g-btn[disabled]{opacity:.6}' +
      '#MemberUI-2fa .g-row{display:flex;justify-content:space-between;gap:10px;margin-top:12px}' +
      '#MemberUI-2fa .g-link{border:0;background:none;padding:4px 0;font:600 12.5px Inter,sans-serif;color:#64748b;cursor:pointer}#MemberUI-2fa .g-link:hover{color:#0f172a}' +
      '#MemberUI-2fa .g-msg{min-height:18px;margin-top:10px;font-size:12.5px;font-weight:600;color:#dc2626}';
    document.documentElement.appendChild(st);
    var box = document.createElement('div');
    box.id = 'MemberUI-2fa';
    box.innerHTML = '<div class="g-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-2fa-t">' +
      '<div class="g-ico"><i class="fa-solid fa-mobile-screen-button"></i></div>' +
      '<h3 id="MemberUI-2fa-t">Two-factor authentication</h3>' +
      '<p class="g-txt">Open your authenticator app and enter the 6-digit code.</p>' +
      '<input class="g-code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" placeholder="------" aria-label="Code">' +
      (days > 0 ? '<label class="g-rem"><input type="checkbox" class="g-remember"> Don’t ask again on this browser for ' + days + ' days</label>' : '') +
      '<button type="button" class="g-btn">Verify</button><div class="g-msg" aria-live="polite"></div>' +
      '<div class="g-row"><button type="button" class="g-link g-toggle">Use a backup code</button>' +
      '<button type="button" class="g-link g-cancel">Cancel</button></div></div>';
    document.body.appendChild(box);
    var input = box.querySelector('.g-code'), btn = box.querySelector('.g-btn'), msg = box.querySelector('.g-msg'), backup = false;
    setTimeout(function () { input.focus(); }, 50);
    function go() {
      var v = input.value.trim();
      if (!backup && v.replace(/\D/g, '').length !== 6) { msg.textContent = 'Enter the 6-digit code.'; return; }
      if (backup && v.replace(/[^a-z0-9]/gi, '').length !== 10) { msg.textContent = 'Enter a 10-character backup code.'; return; }
      btn.disabled = true; msg.textContent = '';
      var rem = box.querySelector('.g-remember');
      gatePost('/memberui-2fa/verify', { t: tok, code: v, remember: !!(rem && rem.checked) }).then(function (d) {
        if (d && d.ok) { dropCookie('ls_2fa'); location.href = d.redirect || '/member'; return; }
        if (d && d.ls_gate && d.ls_gate !== '2fa' && readCookie('ls_gate')) { dropCookie('ls_2fa'); if (box.parentNode) box.parentNode.removeChild(box); showGate(); return; }   
        btn.disabled = false; msg.textContent = (d && d.error) || 'Please try again.';
        if (d && d.restart) setTimeout(function () { dropCookie('ls_2fa'); location.reload(); }, 2200);
        input.select();
      }).catch(function () { btn.disabled = false; msg.textContent = 'Network error. Please try again.'; });
    }
    input.addEventListener('input', function () {
      if (!backup) { input.value = input.value.replace(/\D/g, '').slice(0, 6); if (input.value.length === 6) go(); }
    });
    input.addEventListener('keydown', function (e) { if (e.key === 'Enter') go(); });
    btn.addEventListener('click', go);
    box.querySelector('.g-toggle').addEventListener('click', function () {
      backup = !backup;
      input.value = ''; msg.textContent = '';
      input.maxLength = backup ? 11 : 6;
      input.placeholder = backup ? 'xxxxx-xxxxx' : '------';
      input.setAttribute('inputmode', backup ? 'text' : 'numeric');
      input.classList.toggle('bk', backup);
      box.querySelector('.g-txt').textContent = backup ? 'Enter one of your backup codes. Each code works once.' : 'Open your authenticator app and enter the 6-digit code.';
      this.textContent = backup ? 'Use the app code' : 'Use a backup code';
      input.focus();
    });
    box.querySelector('.g-cancel').addEventListener('click', function () { dropCookie('ls_2fa'); box.parentNode.removeChild(box); });
  }
  whenBody(show2fa);
  whenBody(bootEmailLogin);                  

   

  

})();
</script>
<script>(function () {
  'use strict';
  if (window.__MemberUIPremiumV99) return;
  window.__MemberUIPremiumV99 = true;

  var _nc = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
  var IS_SLOW = !!(_nc && (_nc.saveData || _nc.effectiveType === '2g' || _nc.effectiveType === 'slow-2g'));

  var _qc = Object.create(null);
  function $1(sel) {
    return (sel in _qc) ? _qc[sel] : (_qc[sel] = document.querySelector(sel));
  }
  function invalidateQS() { _qc = Object.create(null); }

  var MemberUI_CSS_HREF    = '/member-ui.css';   
  var MemberUI_CSS_VERSION = window.MEMBERUI_CSS_V || '20261018a'; 
  var MemberUI_LINK_ID     = 'MemberUI-premium-css';
  var MemberUI_LOGO_URL    = 'https://i.ibb.co/DHZbcFLj/Leo-short-logo.png';

  function injectPreconnects() {
    if ($1('#MemberUI-preconnect')) return;
    var head = document.head;
    if (!head) return;
    var pc = document.createElement('link');
    pc.id  = 'MemberUI-preconnect';
    pc.rel = 'preconnect';
    pc.href = 'https://use.fontawesome.com';
    pc.crossOrigin = 'anonymous';
    head.insertBefore(pc, head.firstChild);
    var img = document.createElement('link');
    img.rel = 'preconnect';
    img.href = 'https://i.ibb.co';
    head.insertBefore(img, head.firstChild);
  }

  function injectCSSLink() {
    var head = document.head;
    if (!head) return;
    var fullHref = MemberUI_CSS_HREF + '?v=' + MemberUI_CSS_VERSION;
    var preId = MemberUI_LINK_ID + '-preload';
    var pre = document.getElementById(preId) || document.querySelector('link[rel="preload"][as="style"][href="' + fullHref + '"]');
    if (!pre) {
      pre = document.createElement('link');
      pre.rel = 'preload';
      pre.as = 'style';
      pre.href = fullHref;
      pre.setAttribute('fetchpriority', 'high');
      head.insertBefore(pre, head.firstChild);
    }
    pre.id = preId;
    var existing = document.getElementById(MemberUI_LINK_ID);
    if (existing && existing.parentNode) existing.parentNode.removeChild(existing);
    var link = document.createElement('link');
    link.id   = MemberUI_LINK_ID;
    link.rel  = 'stylesheet';
    link.onerror = function () { link.setAttribute('data-state', 'failed'); };   
    link.href = fullHref;
    link.setAttribute('fetchpriority', 'high');
    head.appendChild(link);
  }

  function keepCSSLast() {
    var link = document.getElementById(MemberUI_LINK_ID);
    var head = document.head;
    if (!link || !head) return;
    if (head.lastElementChild !== link) head.appendChild(link);
  }

  var __MemberUIHeadObs = null;
  function startHeadObserver() {
    if (__MemberUIHeadObs || !document.head) return;
    if (typeof MutationObserver === 'undefined') return;
    var pending = false;
    __MemberUIHeadObs = new MutationObserver(function (mutations) {
      for (var i = 0; i < mutations.length; i++) {
        var added = mutations[i].addedNodes;
        for (var j = 0; j < added.length; j++) {
          if (added[j].id === MemberUI_LINK_ID) return;
        }
      }
      if (pending) return;
      pending = true;
      (window.requestAnimationFrame || function (fn) { setTimeout(fn, 16); })(function () {
        pending = false;
        keepCSSLast();
      });
    });
    __MemberUIHeadObs.observe(document.head, { childList: true });
  }

  function injectStateCSS() {
    if ($1('#MemberUI-sub-state-css')) return;
    var s = document.createElement('style');
    s.id = 'MemberUI-sub-state-css';
    s.textContent =
      'html body.am-logged-in[class] .am-user-identity-block-avatar{display:flex!important;align-items:center!important;gap:11px!important;padding:8px 8px 8px 10px!important;border-radius:14px!important;border:1px solid var(--MemberUI-line,#e5e9f0)!important;background:var(--MemberUI-bg-2,#fff)!important;box-shadow:none!important;cursor:default!important;transform:none!important;transition:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar:hover{border-color:var(--MemberUI-line,#e5e9f0)!important;box-shadow:none!important;transform:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar a[href*="logout"]{display:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar::after{content:none!important;display:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar-pic{position:relative!important;flex-shrink:0!important;display:block!important;width:34px!important;height:34px!important;border-radius:50%!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar-pic::before,html body.am-logged-in[class] .am-user-identity-block-avatar-pic::after{content:none!important;display:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar-pic img{width:34px!important;height:34px!important;border-radius:50%!important;border:0!important;object-fit:cover!important;display:block!important;box-shadow:0 0 0 1px var(--MemberUI-line-2,#d9e0ea)!important}' +
      'html body.am-logged-in.MemberUI-plan-pro[class] .am-user-identity-block-avatar-pic img{box-shadow:0 0 0 2px var(--MemberUI-bg-2,#fff),0 0 0 3.5px var(--MemberUI-brand-1,#FF9900)!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login{display:flex!important;flex-wrap:wrap!important;align-items:center!important;column-gap:6px!important;row-gap:1px!important;flex:1 1 auto!important;min-width:0!important;overflow:hidden!important;white-space:nowrap!important;font-size:13.5px!important;font-weight:700!important;line-height:1.25!important;color:var(--MemberUI-text,#0f172a)!important;letter-spacing:-.1px!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login::before{content:"Member"!important;display:block!important;order:3!important;flex:0 0 100%!important;font-size:11.5px!important;font-weight:500!important;letter-spacing:0!important;color:var(--MemberUI-soft,#94a3b8)!important;margin:0!important}' +
      'html body.am-logged-in.MemberUI-plan-pro[class] .am-user-identity-block_login::before{content:"Pro member"!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login::after{content:none!important;display:none!important}' +
      'html body.am-logged-in[class] .MemberUI-uname{flex:0 1 auto!important;max-width:calc(100% - 40px)!important;min-width:0!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}' +
      'html body.am-logged-in[class] .MemberUI-pro{display:none!important}' +
      'html body.am-logged-in.MemberUI-plan-pro[class] .MemberUI-pro{display:inline-block!important;flex:0 0 auto!important;margin:0!important;padding:1px 6px!important;border-radius:999px!important;border:1px solid var(--MemberUI-brand-1,#FF9900)!important;background:transparent!important;font-size:9px!important;font-weight:800!important;letter-spacing:1px!important;line-height:1.5!important;color:var(--MemberUI-brand-1,#FF9900)!important;box-shadow:none!important}' +
      'html body.am-logged-in.MemberUI-plan-pro[class] .MemberUI-pro::before{content:"PRO"!important}' +
      'html body.am-logged-in.MemberUI-plan-free[class] .am-user-identity-block_login::before{content:"Free member"!important}' +
      'html body.am-logged-in.MemberUI-plan-free[class] .MemberUI-pro{display:inline-block!important;flex:0 0 auto!important;margin:0!important;padding:1px 6px!important;border-radius:999px!important;border:1px solid var(--MemberUI-line-2,#cbd5e1)!important;background:transparent!important;font-size:9px!important;font-weight:800!important;letter-spacing:1px!important;line-height:1.5!important;color:var(--MemberUI-muted,#64748b)!important;box-shadow:none!important}' +
      'html body.am-logged-in.MemberUI-plan-free[class] .MemberUI-pro::before{content:"FREE"!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login{display:grid!important;grid-template-columns:minmax(0,max-content) max-content!important;justify-content:start!important;align-items:center!important;column-gap:6px!important;row-gap:1px!important;flex-wrap:nowrap!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login::before{grid-row:2!important;grid-column:1 / -1!important;order:0!important;width:0!important;min-width:100%!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}' +
      'html body.am-logged-in[class] .MemberUI-uname{grid-row:1!important;grid-column:1!important;max-width:none!important;min-width:0!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}' +
      'html body.am-logged-in[class] .MemberUI-pro{grid-row:1!important;grid-column:2!important;justify-self:start!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle{flex:0 0 auto!important;display:grid!important;place-items:center!important;width:30px!important;height:30px!important;margin:0 0 0 auto!important;padding:0!important;border:1px solid var(--MemberUI-line,#e5e9f0)!important;border-radius:999px!important;background:var(--MemberUI-bg-2,#fff)!important;color:var(--MemberUI-muted,#64748b)!important;font-size:11px!important;line-height:1!important;cursor:pointer!important;box-shadow:none!important;transition:background .18s ease,color .18s ease!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle i{transition:transform .2s ease!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle:hover{background:var(--MemberUI-bg-3,#f4f7fb)!important;border-color:var(--MemberUI-line-2,#d9e0ea)!important;color:var(--MemberUI-text,#0f172a)!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle:focus-visible{outline:2px solid var(--MemberUI-brand-1,#FF9900)!important;outline-offset:2px!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle[aria-expanded="true"]{background:var(--MemberUI-brand-1,#FF9900)!important;border-color:transparent!important;color:#fff!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle[aria-expanded="true"] i{transform:rotate(180deg)!important}' +
      '.MemberUI-topbar-actions .MemberUI-top-avatar{display:none!important}' +
      '.MemberUI-topbar-actions{display:flex!important;align-items:center!important;gap:8px!important}' +
      '.MemberUI-logout-btn{display:inline-flex!important;align-items:center!important;justify-content:center!important;text-decoration:none!important;color:inherit;cursor:pointer;transition:color .18s ease,background .18s ease,border-color .18s ease}' +
      '.MemberUI-logout-btn:hover{color:#ef4444!important;background:rgba(239,68,68,.12)!important;border-color:rgba(239,68,68,.35)!important}' +
      '.MemberUI-logout-btn i{pointer-events:none}' +
      '.MemberUI-sidebar-toggle{width:36px;height:36px;border:2px solid #ccc;border-radius:12px;background:transparent;box-shadow:none;color:inherit;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .18s ease}' +
      '.MemberUI-sidebar-toggle:hover,.MemberUI-sidebar-toggle:active{background:transparent!important;box-shadow:none!important;transform:none!important}' +
      '.MemberUI-sidebar-toggle i{font-size:15px;transition:none}' +
      '.MemberUI-notif-panel{position:fixed;top:64px;right:16px;width:340px;max-width:calc(100vw - 24px);max-height:70vh;overflow:auto;z-index:99999;display:none;background:#fff;color:#0f172a;border:1px solid #e2e8f0;border-radius:14px;box-shadow:0 12px 40px rgba(0,0,0,.18)}' +
      '.MemberUI-notif-panel.show{display:block}' +
      '.MemberUI-notif-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid #e2e8f0}' +
      '.MemberUI-notif-clear{border:0;background:transparent;color:#6366f1;cursor:pointer;font-size:12px;font-weight:600}' +
      '.MemberUI-notif-item{display:flex;gap:10px;padding:12px 14px;text-decoration:none;color:inherit}' +
      '.MemberUI-notif-item .tx{display:flex;flex-direction:column;font-size:12.5px}' +
      '.MemberUI-notif-empty{padding:24px;text-align:center;font-size:13px;color:#94a3b8}' +
      '.MemberUI-toast-wrap{position:fixed;top:16px;right:16px;z-index:100000;display:flex;flex-direction:column;gap:8px}' +
      '.MemberUI-toast.warn i{color:#f59e0b}' +
      '.MemberUI-cart-btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:inherit;cursor:pointer;transition:color .18s ease}' +
      '.MemberUI-cart-btn:hover{color:#6366f1}' +
      '.MemberUI-btn i{margin:0 2px}';
    document.head.appendChild(s);
  }

  try { localStorage.removeItem('MemberUI-sub-state'); } catch (e) {}
  try { sessionStorage.removeItem('MemberUI-sub-state-v2'); } catch (e) {}
  try { sessionStorage.removeItem('MemberUI-welcomed'); } catch (e) {}

  var MemberUI_ICON_MAP = {
    'dashboard': 'fa-solid fa-house', 'home': 'fa-solid fa-house',
    'signup': 'fa-solid fa-user-plus', 'register': 'fa-solid fa-user-plus',
    'sign up': 'fa-solid fa-user-plus',
    'profile': 'fa-solid fa-user', 'account': 'fa-solid fa-user',
    'password': 'fa-solid fa-key', 'change password': 'fa-solid fa-key',
    'billing': 'fa-solid fa-credit-card', 'payment': 'fa-solid fa-receipt',
    'payments': 'fa-solid fa-receipt', 'payment history': 'fa-solid fa-receipt',
    'history': 'fa-solid fa-clock-rotate-left', 'resources': 'fa-solid fa-layer-group',
    'download': 'fa-solid fa-download', 'downloads': 'fa-solid fa-download',
    'extension': 'fa-solid fa-puzzle-piece',
    'affiliate': 'fa-solid fa-users',
    'help': 'fa-solid fa-circle-question', 'support': 'fa-solid fa-headset',
    'contact': 'fa-solid fa-envelope', 'whatsapp': 'fa-brands fa-whatsapp',
    'telegram': 'fa-brands fa-telegram', 'youtube': 'fa-brands fa-youtube',
    'settings': 'fa-solid fa-gear', 'logout': 'fa-solid fa-right-from-bracket',
    'terms': 'fa-solid fa-file-contract', 'privacy': 'fa-solid fa-shield-halved',
    'agreement': 'fa-solid fa-file-signature', 'user agreement': 'fa-solid fa-file-signature',
    'faq': 'fa-solid fa-circle-question', 'tutorial': 'fa-solid fa-graduation-cap',
    'video': 'fa-solid fa-video', 'invoice': 'fa-solid fa-file-invoice',
    'subscription': 'fa-solid fa-crown', 'license': 'fa-solid fa-certificate',
    'cart': 'fa-solid fa-cart-shopping', 'buy more': 'fa-solid fa-cart-shopping',
    'buy': 'fa-solid fa-cart-shopping', 'shop': 'fa-solid fa-bag-shopping',
    'store': 'fa-solid fa-store', 'checkout': 'fa-solid fa-cart-shopping',
    'order': 'fa-solid fa-box', 'upgrade': 'fa-solid fa-arrow-up-right-dots',
    'renew': 'fa-solid fa-rotate-right', 'explore': 'fa-solid fa-compass',
    'social': 'fa-solid fa-share-nodes',
    'social links': 'fa-solid fa-share-nodes',
    'social media': 'fa-solid fa-share-nodes',
    'our socials': 'fa-solid fa-share-nodes',
    'follow us': 'fa-solid fa-share-nodes',
    'facebook': 'fa-brands fa-facebook',
    'instagram': 'fa-brands fa-instagram',
    'twitter': 'fa-brands fa-x-twitter',
    'x': 'fa-brands fa-x-twitter',
    'tiktok': 'fa-brands fa-tiktok',
    'linkedin': 'fa-brands fa-linkedin',
    'pinterest': 'fa-brands fa-pinterest',
    'snapchat': 'fa-brands fa-snapchat',
    'discord': 'fa-brands fa-discord',
    'reddit': 'fa-brands fa-reddit',
    'threads': 'fa-brands fa-threads',
    'vimeo': 'fa-brands fa-vimeo'
  };
  var MemberUI_ICON_KEYS = Object.keys(MemberUI_ICON_MAP);

  function guessIconForItem(label, href) {
    if (href) {
      var h = href.replace(/\/+$/, '').toLowerCase();
      if (h === '/member' || h === '')              return MemberUI_ICON_MAP['dashboard'];
      if (/\/profile/.test(h))                     return MemberUI_ICON_MAP['profile'];
      if (/\/payment-history/.test(h))             return MemberUI_ICON_MAP['payments'];
      if (/signup|register/.test(h))               return MemberUI_ICON_MAP['signup'];
      if (/password/.test(h))                      return MemberUI_ICON_MAP['password'];
      if (/whatsapp/.test(h))                      return MemberUI_ICON_MAP['whatsapp'];
      if (/telegram/.test(h))                      return MemberUI_ICON_MAP['telegram'];
      if (/youtube/.test(h))                       return MemberUI_ICON_MAP['youtube'];
      if (/terms|policy|privacy/.test(h))          return MemberUI_ICON_MAP['terms'];
      if (/affiliate/.test(h))                     return MemberUI_ICON_MAP['affiliate'];
      if (/billing|invoice/.test(h))               return MemberUI_ICON_MAP['billing'];
      if (/facebook\.com|\/facebook/.test(h))      return MemberUI_ICON_MAP['facebook'];
      if (/instagram\.com|\/instagram/.test(h))    return MemberUI_ICON_MAP['instagram'];
      if (/twitter\.com|x\.com|\/twitter/.test(h)) return MemberUI_ICON_MAP['twitter'];
      if (/tiktok\.com|\/tiktok/.test(h))          return MemberUI_ICON_MAP['tiktok'];
      if (/linkedin\.com|\/linkedin/.test(h))      return MemberUI_ICON_MAP['linkedin'];
      if (/pinterest\.com|\/pinterest/.test(h))    return MemberUI_ICON_MAP['pinterest'];
      if (/snapchat\.com|\/snapchat/.test(h))      return MemberUI_ICON_MAP['snapchat'];
      if (/discord\.com|\/discord/.test(h))        return MemberUI_ICON_MAP['discord'];
      if (/reddit\.com|\/reddit/.test(h))          return MemberUI_ICON_MAP['reddit'];
      if (/threads\.net|\/threads/.test(h))        return MemberUI_ICON_MAP['threads'];
      if (/vimeo\.com|\/vimeo/.test(h))            return MemberUI_ICON_MAP['vimeo'];
      if (/cart|checkout|buy/.test(h))             return MemberUI_ICON_MAP['cart'];
      if (/shop|store/.test(h))                    return MemberUI_ICON_MAP['shop'];
      if (/social/.test(h))                        return MemberUI_ICON_MAP['social'];
    }
    return guessIcon(label);
  }

  function guessIcon(label) {
    var l = String(label || '').toLowerCase().trim();
    for (var i = 0; i < MemberUI_ICON_KEYS.length; i++) {
      if (l.indexOf(MemberUI_ICON_KEYS[i]) !== -1) return MemberUI_ICON_MAP[MemberUI_ICON_KEYS[i]];
    }
    return 'fa-solid fa-circle-dot';
  }

  function guessSection(label) {
    var l = String(label || '').toLowerCase().trim();
    if (/(dashboard|home|signup|sign up|register|resource|download|extension|tool|cart|buy|shop|store|explore|checkout|upgrade|renew)/.test(l)) return 'Main';
    if (/(profile|account|password|setting|billing|payment|history|invoice|subscription|license)/.test(l)) return 'Account';
    if (/(support|contact|help|whatsapp|telegram|faq|tutorial|video|youtube)/.test(l)) return 'Support';
    if (/(social|facebook|instagram|twitter|tiktok|linkedin|pinterest|snapchat|discord|reddit|threads|vimeo|follow|socials)/.test(l)) return 'Social';
    if (/(term|policy|privacy|legal|agreement|user agreement)/.test(l)) return 'Legal';
    return 'More';
  }

  var MemberUI_MENU_SELECTORS = [
    'ul.am-tabs > li > a',
    '.am-tabs-wrapper ul li a',
    '.am-tabs-narrow-wrapper ul li a',
    '.am-tabs-narrow-wrapper-tail ul li a',
    '.am-tabs-narrow ul li a',
    '.am-tabs-narrow-stuff ul li a',
    '.am-account-toolbar-items > ul > li > a',
    '.am-user-menu a', '.am-menu a',
    '.am-account-toolbar a', 'nav.am-tabs a'
  ];

  function readAMemberMenu() {
    var items = [], seen = Object.create(null);
    for (var s = 0; s < MemberUI_MENU_SELECTORS.length; s++) {
      var nodes;
      try { nodes = document.querySelectorAll(MemberUI_MENU_SELECTORS[s]); }
      catch (e) { continue; }
      for (var i = 0; i < nodes.length; i++) {
        var a = nodes[i];
        var href  = a.getAttribute('href');
        var label = (a.textContent || '').trim().replace(/\s+/g, ' ');
        if (!href || !label) continue;
        if (href === '#' || href === '' || href.indexOf('javascript:') === 0) continue;
        var ll = label.toLowerCase();
        if (ll === 'logout' || ll === 'sign out' || ll === 'signout') continue;
        if (ll.indexOf('language') !== -1 || ll.indexOf('print') === 0) continue;
        var key = href + '|' + label;
        if (seen[key]) continue;
        seen[key] = true;
        items.push({ section: guessSection(label), label: label, href: href, icon: guessIconForItem(label, href), target: a.getAttribute('target') || '' });
      }
    }
    return items;
  }

  function findLogoutHref() {
    var sels = [
      '.am-tabs a[href*="logout"]',
      '.am-account-toolbar a[href*="logout"]',
      '.am-user-menu a[href*="logout"]',
      '.am-menu a[href*="logout"]',
      'a[href$="/logout"]',
      'a[href*="logout"]'
    ];
    for (var i = 0; i < sels.length; i++) {
      var a;
      try { a = document.querySelector(sels[i]); } catch (e) { continue; }
      if (a) {
        var h = a.getAttribute('href');
        if (h && h !== '#' && h.indexOf('javascript:') !== 0) return h;
      }
    }
    return '/logout';
  }

  var docEl = document.documentElement;

  var ESC_MAP = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' };
  var ESC_RE  = /[&<>"']/g;
  function esc(s) { return String(s == null ? '' : s).replace(ESC_RE, function (c) { return ESC_MAP[c]; }); }

  function txt(sel, fallback) {
    var el = $1(sel);
    return (el && el.textContent.trim()) || fallback || '';
  }

  var _kind = null;
  function pageKind() {
    if (_kind) return _kind;
    var p   = window.location.pathname || '/';
    var cls = document.body.className  || '';
    if (/signup/.test(p) || cls.indexOf('am-page-signup') !== -1)                             _kind = 'signup';
    else if (/login|sendpass/.test(p) || cls.indexOf('am-page-login') !== -1)                 _kind = 'login';
    else if (/profile/.test(p) || cls.indexOf('am-page-profile') !== -1)                      _kind = 'profile';
    else if (/payment-history/.test(p) || cls.indexOf('am-page-payment-history') !== -1)      _kind = 'payments';
    else if (/terms|policy|policies/.test(p) || cls.indexOf('am-page-terms') !== -1 || $1('.MemberUI-agreement-root')) _kind = 'terms';
    else if (p === '/member' || p === '/member/')                                              _kind = 'dashboard';
    else                                                                                       _kind = 'other';
    return _kind;
  }

  function timeGreeting() {
    return 'Welcome Back';
  }

  function daysBetween(a, b) {
    return Math.round((new Date(b.getFullYear(), b.getMonth(), b.getDate()) -
                       new Date(a.getFullYear(), a.getMonth(), a.getDate())) / 86400000);
  }
  function endOfDay(d) {
    var e = new Date(d.getTime());
    e.setHours(23, 59, 59, 999);
    return e;
  }
  function isExpiredDate(d) { return d ? endOfDay(d).getTime() < Date.now() : false; }
  function formatDate(d) {
    try { return d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }); }
    catch (e) { return String(d); }
  }
  function store(k, v) { try { localStorage.setItem(k, v); } catch (e) {} }
  function read(k)      { try { return localStorage.getItem(k); } catch (e) { return null; } }

  var toastWrap = null;
  var TOAST_ICONS = { ok: 'fa-circle-check', err: 'fa-circle-xmark', info: 'fa-circle-info', warn: 'fa-triangle-exclamation' };
  function toast(msg, type, ms) {
    if (!toastWrap || !toastWrap.parentNode) {
      toastWrap = document.createElement('div');
      toastWrap.className = 'MemberUI-toast-wrap';
      document.body.appendChild(toastWrap);
    }
    while (toastWrap.children.length >= 4) toastWrap.removeChild(toastWrap.firstChild);
    var t = document.createElement('div');
    t.className = 'MemberUI-toast ' + (type || 'info');
    t.innerHTML = '<i class="fa-solid ' + (TOAST_ICONS[type] || TOAST_ICONS.info) + '"></i>' +
                  '<span>' + esc(msg) + '</span>' +
                  '<button class="close" aria-label="Dismiss"><i class="fa-solid fa-xmark"></i></button>';
    function dismiss() {
      if (t.classList.contains('leaving')) return;
      t.classList.add('leaving');
      setTimeout(function () { if (t.parentNode) t.parentNode.removeChild(t); }, 260);
    }
    t.querySelector('.close').addEventListener('click', dismiss);
    toastWrap.appendChild(t);
    setTimeout(dismiss, ms || 3200);
  }

  function attachScrollProgress() {
    if ($1('.MemberUI-progress')) return;
    var bar = document.createElement('div');
    bar.className = 'MemberUI-progress';
    document.body.appendChild(bar);
    var ticking = false;
    function update() {
      var max = docEl.scrollHeight - docEl.clientHeight;
      var pct = max > 0 ? (docEl.scrollTop / max) * 100 : 0;
      bar.style.width = pct + '%';
      bar.classList.toggle('show', docEl.scrollTop > 40);
      ticking = false;
    }
    window.addEventListener('scroll', function () {
      if (!ticking) { ticking = true; window.requestAnimationFrame(update); }
    }, { passive: true });
    update();
  }

  function parseDateRobust(raw) {
    if (!raw) return null;
    raw = String(raw).trim();
    if (!raw) return null;
    var iso = raw.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/);
    if (iso) {
      var ld = new Date(+iso[1], +iso[2] - 1, +iso[3]);
      if (!isNaN(ld.getTime())) return ld;
    }
    var m = raw.match(/^(\d{4})[-\/](\d{1,2})[-\/](\d{1,2})/);
    if (m) {
      var d2 = new Date(+m[1], +m[2] - 1, +m[3]);
      if (!isNaN(d2.getTime())) return d2;
    }
    var d = new Date(raw);
    if (!isNaN(d.getTime()) && d.getFullYear() >= 2000 && d.getFullYear() <= 2100) return d;
    m = raw.match(/\b(\d{1,2})[\/\-\.](\d{1,2})[\/\-\.](\d{2,4})\b/);
    if (m) {
      var a = +m[1], b = +m[2], y = +m[3];
      if (y < 100) y += 2000;
      if (a > 12)      { d = new Date(y, b - 1, a); if (!isNaN(d.getTime())) return d; }
      else if (b > 12) { d = new Date(y, a - 1, b); if (!isNaN(d.getTime())) return d; }
      else             { d = new Date(y, b - 1, a); if (!isNaN(d.getTime())) return d; }
    }
    m = raw.match(/\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\.?\s+(\d{1,2}),?\s+(\d{4})\b/i);
    if (m) { d = new Date(m[1] + ' ' + m[2] + ', ' + m[3]); if (!isNaN(d.getTime())) return d; }
    m = raw.match(/\b(\d{1,2})\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\.?,?\s+(\d{4})\b/i);
    if (m) { d = new Date(m[2] + ' ' + m[1] + ', ' + m[3]); if (!isNaN(d.getTime())) return d; }
    return null;
  }

  function hasNoSubDOMIndicator() {
    if (document.body.classList.contains('am-page-member-subscriptions-no')) return true;
    if ($1('.am-list-subscriptions-no')) return true;
    if ($1('[class*="subscriptions-no"]')) return true;
    return false;
  }

  var MemberUI_DATE_SELECTORS = [
    '.am-list-subscriptions-date_expires_date', '.am-list-subscriptions-date_expires',
    '.am-list-subscriptions-expires', '.am-list-subscriptions-expiry',
    '.am-list-subscriptions-date', 'time[datetime]', '[data-date]'
  ];

  function extractExpiryDate(li) {
    var el = null;
    for (var i = 0; i < MemberUI_DATE_SELECTORS.length; i++) {
      el = li.querySelector(MemberUI_DATE_SELECTORS[i]);
      if (el) break;
    }
    var raw = '';
    if (el) {
      raw = el.getAttribute('data-date') || el.getAttribute('datetime') ||
            el.getAttribute('title')     || el.textContent || '';
    }
    return parseDateRobust(raw) || parseDateRobust(li.textContent || '');
  }

  function rowHasExpiredIndicator(li) {
    var cls = ' ' + (li.className || '').toLowerCase() + ' ';
    if (/expired|inactive|suspended/.test(cls)) return true;
    if (li.querySelector('[class*="expired"],[class*="inactive"],[class*="suspended"]')) return true;
    var statusEl = li.querySelector('[class*="status"],[class*="state"]');
    if (statusEl) {
      var st = (statusEl.textContent || '').toLowerCase();
      if (/\b(expired|inactive|suspended)\b/.test(st)) return true;
      if (/\b(active|valid|paid)\b/.test(st)) return false;
    }
    var t = (li.textContent || '').toLowerCase();
    return /\b(expired|inactive|suspended)\b/.test(t);
  }

  function rowClassExpired(li) {
    var cls = ' ' + (li.className || '').toLowerCase() + ' ';
    if (/expired|inactive|suspended/.test(cls)) return true;
    if (li.querySelector('[class*="expired"],[class*="inactive"],[class*="suspended"]')) return true;
    var statusEl = li.querySelector('[class*="status"],[class*="state"]');
    if (statusEl && /\b(expired|inactive|suspended)\b/.test((statusEl.textContent || '').toLowerCase())) return true;
    return false;
  }

  function detectSubState(sublist) {
    if (hasNoSubDOMIndicator()) return { hasAny: false, hasActive: false, activeCount: 0, unknown: false };
    if (sublist === null || sublist === undefined) return { hasAny: false, hasActive: false, activeCount: 0, unknown: true };
    if (sublist.length > 0) {
      var state = { hasAny: true, hasActive: false, activeCount: 0, unknown: false };
      for (var i = 0; i < sublist.length; i++) {
        var li  = sublist[i];
        var exp = extractExpiryDate(li);
        if (!(exp ? (isExpiredDate(exp) || rowClassExpired(li)) : rowHasExpiredIndicator(li))) state.activeCount++;
      }
      state.hasActive = state.activeCount > 0;
      return state;
    }
    return { hasAny: false, hasActive: false, activeCount: 0, unknown: false };
  }

  function applySubStateClasses(state) {
    if (!document.body.classList.contains('am-logged-in')) return { isUnknown: true, isExpired: false, isNoSub: false, isActive: false };
    document.body.classList.remove('MemberUI-sub-active', 'MemberUI-sub-expired', 'MemberUI-sub-none');
    if (state.unknown) return { isUnknown: true, isExpired: false, isNoSub: false, isActive: false };
    var isNoSub   = !state.hasAny;
    var isExpired = !isNoSub && !state.hasActive;
    var isActive  = !!state.hasActive;
    if (isExpired)     document.body.classList.add('MemberUI-sub-expired');
    else if (isNoSub)  document.body.classList.add('MemberUI-sub-none');
    else if (isActive) document.body.classList.add('MemberUI-sub-active');
    return { isUnknown: false, isExpired: isExpired, isNoSub: isNoSub, isActive: isActive };
  }

  var __notif = { panel: null, btn: null, sig: '', cleared: false };
  var NOTIF_RANK = { danger: 0, warn: 1, info: 2, ok: 3 };

  function collectNotifItems() {
    invalidateQS();
    var cl = document.body.classList;
    var items = [];
    var unknown = false;

    var subContainer = document.querySelector('.am-list-subscriptions');
    var resContainer = document.querySelector('.am-list-resources');
    var subLis   = subContainer ? subContainer.querySelectorAll(':scope > li') : null;
    var resCount = resContainer ? resContainer.querySelectorAll(':scope > li').length : -1;
    var now = new Date();

    if (hasNoSubDOMIndicator() || cl.contains('MemberUI-sub-none')) {
      items.push({ type: 'danger', icon: 'fa-circle-info', title: 'No Active Subscription',
                   msg: 'You don\u2019t have an active subscription. Subscribe to unlock full access.', href: '/signup' });
    } else if (subLis) {
      if (subLis.length === 0) {
        items.push({ type: 'danger', icon: 'fa-circle-xmark', title: 'Subscription Expired',
                     msg: 'You have 0 active subscriptions. Renew now.', href: '/signup' });
      } else {
        var expired = [], soon = [];
        for (var i = 0; i < subLis.length; i++) {
          var li = subLis[i];
          var tEl = li.querySelector('.am-list-subscriptions-title');
          var title = tEl ? tEl.textContent.trim() : 'Subscription';
          var exp = extractExpiryDate(li);
          if (exp) {
            if (isExpiredDate(exp) || rowClassExpired(li)) expired.push({ title: title, date: exp });
            else {
              var dl = daysBetween(now, endOfDay(exp));
              
              if (dl <= 2) soon.push({ title: title, date: exp, days: dl });
            }
          } else if (rowHasExpiredIndicator(li)) {
            expired.push({ title: title, date: now });
          }
        }
        if (expired.length === 1) {
          items.push({ type: 'danger', icon: 'fa-circle-xmark', title: 'Subscription Expired',
                       msg: expired[0].title + ' expired on ' + formatDate(expired[0].date) + '. Renew now to restore access.', href: '/signup' });
        } else if (expired.length > 1) {
          var names = expired.length === 2
            ? expired[0].title + ' and ' + expired[1].title
            : expired[0].title + ', ' + expired[1].title + ' and ' + (expired.length - 2) + ' more';
          items.push({ type: 'danger', icon: 'fa-circle-xmark', title: expired.length + ' Subscriptions Expired',
                       msg: names + '. Renew now to restore full access.', href: '/signup' });
        }
        for (var j = 0; j < soon.length; j++) {
          var s = soon[j];
          
          items.push({ type: s.days === 0 ? 'warn' : 'info',
                       icon: s.days === 0 ? 'fa-triangle-exclamation' : 'fa-clock',
                       title: s.title,
                       msg: 'Expires ' + (s.days === 0 ? 'today' : 'in ' + s.days + ' day' + (s.days === 1 ? '' : 's')) + ' \u2014 ' + formatDate(s.date),
                       href: '/member' });
        }
      }
    } else {
      if (cl.contains('MemberUI-sub-expired')) {
        items.push({ type: 'danger', icon: 'fa-circle-xmark', title: 'Subscription Expired',
                     msg: 'Your subscription has expired. Renew now.', href: '/signup' });
      } else if (!cl.contains('MemberUI-sub-active')) {
        unknown = true;
      }
    }

    var hasDanger = items.some(function (n) { return n.type === 'danger'; });
    if (!hasDanger && resContainer && resCount === 0 && !cl.contains('MemberUI-sub-active')) {
      items.push({ type: 'danger', icon: 'fa-circle-xmark', title: 'Subscription Expired',
                   msg: 'You have 0 active resources. Renew to restore access.', href: '/signup' });
    }

    if (!items.length && !unknown) {
      items.push({ type: 'ok', icon: 'fa-circle-check', title: 'All good!',
                   msg: 'No urgent alerts. Your subscriptions are active.', href: '/member' });
    }

    items.sort(function (a, b) {
      var ra = NOTIF_RANK[a.type]; if (ra === undefined) ra = 9;
      var rb = NOTIF_RANK[b.type]; if (rb === undefined) rb = 9;
      return ra - rb;
    });
    return { items: items, unknown: unknown };
  }

  function renderNotifications(force) {
    var panel = __notif.panel, btn = __notif.btn;
    if (!panel || !btn) return;
    var res   = collectNotifItems();
    var items = res.items;
    var sig   = items.map(function (n) { return n.type + '|' + n.title + '|' + n.msg; }).join('~~');
    if (!force && sig === __notif.sig) return;
    __notif.sig = sig;
    __notif.cleared = false;

    var list = panel.querySelector('.MemberUI-notif-list');
    var dot  = btn.querySelector('.dot');
    if (!list) return;

    if (!items.length) {
      list.innerHTML = '<div class="MemberUI-notif-empty"><i class="fa-regular fa-bell-slash"></i> No notifications</div>';
      if (dot) dot.style.display = 'none';
      return;
    }

    var parts = [];
    for (var i = 0; i < items.length; i++) {
      var n = items[i];
      parts.push('<a class="MemberUI-notif-item ' + n.type + '" href="' + esc(n.href) + '">' +
                 '<span class="ic"><i class="fa-solid ' + n.icon + '"></i></span>' +
                 '<span class="tx"><b>' + esc(n.title) + '</b><span>' + esc(n.msg) + '</span></span></a>');
    }
    list.innerHTML = parts.join('');
    var urgent = items.some(function (n) { return n.type !== 'ok'; });
    if (dot) dot.style.display = urgent ? '' : 'none';
  }

  function createNotifPanel(topbar) {
    if (__notif.panel) return;
    var btn = topbar.querySelector('.MemberUI-notif-btn');
    if (!btn) return;

    var panel = document.createElement('div');
    panel.className = 'MemberUI-notif-panel';
    panel.innerHTML =
      '<div class="MemberUI-notif-head"><strong>Notifications</strong>' +
      '<button class="MemberUI-notif-clear" type="button">Clear</button></div>' +
      '<div class="MemberUI-notif-list"></div>';
    document.body.appendChild(panel);
    __notif.panel = panel;
    __notif.btn   = btn;

    function closePanel() { panel.classList.remove('show'); btn.classList.remove('active'); }

    btn.addEventListener('click', function (e) {
      e.preventDefault();
      e.stopPropagation();
      var open = panel.classList.toggle('show');
      btn.classList.toggle('active', open);
      if (open && !__notif.cleared) renderNotifications();
    });

    document.addEventListener('click', function (e) {
      if (panel.contains(e.target) || btn.contains(e.target)) return;
      closePanel();
    });
    document.addEventListener('keydown', function (e) {
      if (e.key === 'Escape') closePanel();
    });

    var clearBtn = panel.querySelector('.MemberUI-notif-clear');
    clearBtn.addEventListener('click', function (e) {
      e.preventDefault();
      e.stopPropagation();
      __notif.cleared = true;
      var list = panel.querySelector('.MemberUI-notif-list');
      if (list) list.innerHTML = '<div class="MemberUI-notif-empty"><i class="fa-regular fa-bell-slash"></i> You\u2019re all caught up</div>';
      var dot = btn.querySelector('.dot');
      if (dot) dot.style.display = 'none';
      toast('Notifications cleared', 'ok');
    });

    renderNotifications(true);
  }

  var __toastedKeys = Object.create(null);
  function toastSeen(key) {
    try {
      var s = JSON.parse(sessionStorage.getItem('memberui_toasted') || '{}');
      if (s[key]) return true;
      s[key] = 1;
      sessionStorage.setItem('memberui_toasted', JSON.stringify(s));
    } catch (e) {}
    return false;
  }
  var __toastTimer  = null;

  function showStateToast() {
    if (pageKind() !== 'dashboard') return;
    var cl = document.body.classList;
    if (!cl.contains('am-logged-in')) return;

    var res = collectNotifItems();
    if (res.unknown) return;

    var uname = txt('.am-user-identity-block_login', 'Member');
    var queue = [];

    for (var i = 0; i < res.items.length; i++) {
      var n = res.items[i];
      if (n.type === 'ok') continue;
      var tType, tMsg;
      if (n.type === 'danger') {
        tType = (n.title === 'No Active Subscription') ? 'info' : 'err';
        tMsg  = n.msg;
      } else {
        tType = 'warn';
        tMsg  = n.title + ': ' + n.msg;
      }
      queue.push({ key: 'n|' + n.type + '|' + n.title + '|' + n.msg, type: tType, msg: tMsg });
    }

    var hasDanger = res.items.some(function (n) { return n.type === 'danger'; });
    if (!hasDanger && cl.contains('MemberUI-sub-active')) {
      queue.unshift({ key: 'welcome', type: 'ok', msg: 'Welcome Back, ' + uname + '! \uD83C\uDF89' });
    }

    var delay = 0;
    queue.forEach(function (q) {
      if (__toastedKeys[q.key]) return;
      __toastedKeys[q.key] = true;
      if (toastSeen(q.key)) return;
      (function (item, d) {
        setTimeout(function () { toast(item.msg, item.type, 4500); }, d);
      })(q, delay);
      delay += 250;
    });
  }

  function scheduleStateToast() {
    if (__toastTimer) clearTimeout(__toastTimer);
    __toastTimer = setTimeout(showStateToast, 250);
  }

  function afterStateChange() {
    renderNotifications();
    scheduleStateToast();
  }

  function forceExpiredUI(reason, isNoSubState) {
    document.body.classList.remove('MemberUI-sub-active', 'MemberUI-sub-expired', 'MemberUI-sub-none');
    document.body.classList.add(isNoSubState ? 'MemberUI-sub-none' : 'MemberUI-sub-expired');
    var MSG       = isNoSubState
      ? 'You don\u2019t have an active subscription yet. Subscribe to unlock your tools and resources.'
      : 'Your subscription has expired. Renew to restore access to your tools and resources.';
    var RENEW_HREF = '/signup';
    var BADGE_TEXT = isNoSubState ? 'No Active Subscription' : 'Premium Access Expired';
    var BADGE_ICON = isNoSubState ? 'fa-circle-info' : 'fa-triangle-exclamation';
    var BTN_LABEL  = isNoSubState ? 'Subscribe Now' : 'Renew Subscription';
    var BTN_ICON   = isNoSubState ? 'fa-circle-plus' : 'fa-rotate-right';
    var STATUS_TXT = isNoSubState ? 'No Subscription' : 'Expired';
    var STATUS_ICO = isNoSubState ? 'fa-circle-info' : 'fa-circle-xmark';

    var heroBadge = document.querySelector('.MemberUI-hero .MemberUI-hero-badge');
    if (heroBadge) { heroBadge.className = 'MemberUI-hero-badge expired'; heroBadge.innerHTML = '<i class="fa-solid ' + BADGE_ICON + '"></i> ' + BADGE_TEXT; }

    var heroP = document.querySelector('.MemberUI-hero p');
    if (heroP) heroP.textContent = MSG;

    var heroPrimary = document.querySelector('.MemberUI-hero .MemberUI-hero-actions a:first-child');
    if (heroPrimary) {
      heroPrimary.href      = RENEW_HREF;
      heroPrimary.className = 'MemberUI-btn MemberUI-btn-primary MemberUI-btn-danger';
      heroPrimary.innerHTML = (isNoSubState ? '<i class="fa-solid fa-cart-shopping"></i> ' : '') + BTN_LABEL + ' <i class="fa-solid ' + BTN_ICON + '"></i>';
    }
    var bmOld = document.querySelector('.MemberUI-hero .MemberUI-buy-more');
    if (bmOld && bmOld.parentNode) bmOld.parentNode.removeChild(bmOld);

    var allStats = document.querySelectorAll('.MemberUI-hero-stats .MemberUI-stat');
    if (allStats.length >= 1) {
      var st0 = allStats[0], s0str = st0.querySelector('strong'), s0ico = st0.querySelector('.MemberUI-stat-ico i');
      if (s0str) s0str.textContent = STATUS_TXT;
      st0.className = 'MemberUI-stat expired';
      if (s0ico) s0ico.className = 'fa-solid ' + STATUS_ICO;
    }
    if (allStats.length >= 2) { var st1 = allStats[1], s1str = st1.querySelector('strong'); if (s1str) s1str.textContent = '0 Available'; st1.className = 'MemberUI-stat expired'; }
    if (allStats.length >= 3) { var st2 = allStats[2], s2str = st2.querySelector('strong'); if (s2str) s2str.textContent = '0 Active';     st2.className = 'MemberUI-stat expired'; }

    afterStateChange();
  }

  function scheduleSubRecheck() {
    if (!document.body.classList.contains('am-logged-in')) return;

    function doCheck() {
      invalidateQS();
      var subListContainer  = document.querySelector('.am-list-subscriptions');
      var resourceContainer = document.querySelector('.am-list-resources');

      if (hasNoSubDOMIndicator()) { forceExpiredUI('subs', true); return; }

      var subLis        = subListContainer  ? subListContainer.querySelectorAll(':scope > li')  : null;
      var resourceCount = resourceContainer ? resourceContainer.querySelectorAll(':scope > li').length : -1;
      var st            = detectSubState(subLis);
      var flags         = applySubStateClasses(st);

      var subExpired    = flags.isExpired || (!flags.isUnknown && !st.hasActive && st.hasAny);
      var zeroResources = !flags.isUnknown && !flags.isActive && resourceContainer && resourceCount === 0;
      var zeroSubs      = !flags.isUnknown && subListContainer && subLis && subLis.length === 0;
      var alertNow      = subExpired || flags.isNoSub || zeroResources || zeroSubs;

      if (alertNow) {
        forceExpiredUI(zeroResources ? 'resources' : (zeroSubs || flags.isNoSub) ? 'subs' : 'expired', flags.isNoSub);
        return;
      }
      if (flags.isUnknown) { afterStateChange(); return; }

      var heroBadge = document.querySelector('.MemberUI-hero .MemberUI-hero-badge');
      if (heroBadge) { heroBadge.className = 'MemberUI-hero-badge'; heroBadge.innerHTML = '<i class="fa-solid fa-bolt"></i> Premium Access Active'; }
      var heroP = document.querySelector('.MemberUI-hero p');
      if (heroP) heroP.textContent = 'We\u2019re glad you\u2019re here. I\u2019m your success partner \u2014 Member Portal.';
      var heroPrimary = document.querySelector('.MemberUI-hero .MemberUI-hero-actions a:first-child');
      if (heroPrimary) { heroPrimary.href = '/page/Explore-More'; heroPrimary.className = 'MemberUI-btn MemberUI-btn-primary'; heroPrimary.innerHTML = '<i class="fa-solid fa-compass"></i> Explore More Tools <i class="fa-solid fa-arrow-right"></i>'; }

      var allStats = document.querySelectorAll('.MemberUI-hero-stats .MemberUI-stat');
      if (allStats.length >= 1) { var as0 = allStats[0], as0s = as0.querySelector('strong'), as0i = as0.querySelector('.MemberUI-stat-ico i'); if (as0s) as0s.textContent = 'Active Member'; as0.className = 'MemberUI-stat'; if (as0i) as0i.className = 'fa-solid fa-circle-check'; }
      if (allStats.length >= 2) { var as1 = allStats[1], as1s = as1.querySelector('strong'); if (as1s) as1s.textContent = (resourceCount >= 0 ? resourceCount : st.activeCount || 0) + ' Available'; as1.className = 'MemberUI-stat'; }
      if (allStats.length >= 3) { var as2 = allStats[2], as2s = as2.querySelector('strong'); if (as2s) as2s.textContent = (st.activeCount || 0) + ' Active'; as2.className = 'MemberUI-stat'; }

      afterStateChange();
    }

    var delays = [150, 1000];
    for (var i = 0; i < delays.length; i++) {
      (function (d) { setTimeout(doCheck, d); })(delays[i]);
    }

    var subListContainerForObs = document.querySelector('.am-list-subscriptions');
    if (subListContainerForObs && typeof MutationObserver !== 'undefined') {
      var subObs = new MutationObserver(function () { doCheck(); subObs.disconnect(); });
      subObs.observe(subListContainerForObs, { childList: true, subtree: true, attributes: true });
    }
  }

  function isValidAvatarSrc(src) {
    if (!src || src === '#' || src.indexOf('blank') !== -1 || src.length < 10) return false;
    if (src === MemberUI_LOGO_URL) return false;
    if (src.indexOf('gravatar.com') !== -1) {
      if (/d=(mm|blank|identicon|monsterid|wavatar|retro|robohash)/.test(src)) return false;
    }
    return true;
  }

  function updateAvatarUI(src) {
    var uname = (document.querySelector('.am-user-identity-block_login') || { textContent: 'Member' }).textContent.trim().replace(/\s+/g, ' ') || 'Member';
    var safeSrc = isValidAvatarSrc(src) ? src : MemberUI_LOGO_URL;
    var profAv = $1('.MemberUI-profile-avatar');
    if (profAv) {
      var profImg = profAv.querySelector('img');
      if (profImg) profImg.src = safeSrc;
      else profAv.innerHTML = '<img src="' + esc(safeSrc) + '" alt="' + esc(uname) + '" onerror="this.onerror=null;this.src=\'' + MemberUI_LOGO_URL + '\'">';
    }
    invalidateQS();
  }

  function watchAvatar() {
    var existing = $1('.am-user-identity-block-avatar-pic img');
    if (existing && isValidAvatarSrc(existing.getAttribute('src') || '')) { updateAvatarUI(existing.getAttribute('src')); return; }

    var avatarObs = null;
    var avatarObsTimer = null;
    var foundValid = false;

    if (typeof MutationObserver !== 'undefined') {
      avatarObs = new MutationObserver(function () {
        var el = $1('.am-user-identity-block-avatar-pic img');
        var src = el ? (el.getAttribute('src') || '') : '';
        if (isValidAvatarSrc(src)) {
          avatarObs.disconnect();
          if (avatarObsTimer) clearTimeout(avatarObsTimer);
          updateAvatarUI(src);
          foundValid = true;
        }
      });
      avatarObs.observe($1('.am-user-identity-block-avatar-pic') || document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['src'] });
      avatarObsTimer = setTimeout(function () { if (avatarObs) avatarObs.disconnect(); }, 30000);
    }

    var TRIES = 0, MAX = 4, INTERVAL = 300;
    (function poll() {
      TRIES++;
      var el = $1('.am-user-identity-block-avatar-pic img');
      var src = el ? (el.getAttribute('src') || '') : '';
      if (isValidAvatarSrc(src)) {
        if (avatarObs) { avatarObs.disconnect(); if (avatarObsTimer) clearTimeout(avatarObsTimer); }
        updateAvatarUI(src);
        foundValid = true;
        return;
      }
      if (TRIES < MAX) {
        setTimeout(poll, INTERVAL);
      } else {
        if (!foundValid) updateAvatarUI(MemberUI_LOGO_URL);   
      }
    })();
  }

  function defer(fn) {
    if (typeof window.requestIdleCallback === 'function') {
      window.requestIdleCallback(fn, { timeout: 400 });
    } else {
      setTimeout(fn, 1);
    }
  }

  function deferLow(fn) {
    setTimeout(fn, 800);
  }

  function buildContentUI(content, kind, isLoggedIn, isNoSub, alertState, isUnknown, isActive,
                          effectiveResourceCount, effectiveSubCount, username, displayAvatar,
                          exploreHref, alertStateFlag) {
    if (!content) return;
    var inner = content.querySelector('.MemberUI-content-inner');
    if (!inner) {
      inner = document.createElement('div');
      inner.className = 'MemberUI-content-inner';
      var kids = Array.prototype.slice.call(content.childNodes);
      for (var k = 0; k < kids.length; k++) inner.appendChild(kids[k]);
      content.appendChild(inner);
    }

    if (isLoggedIn && kind === 'dashboard' && !inner.querySelector('.MemberUI-hero')) {
      var hbc = isNoSub ? 'MemberUI-hero-badge expired' : alertState ? 'MemberUI-hero-badge expired' : 'MemberUI-hero-badge';
      var hbi = isNoSub ? 'fa-circle-info' : alertState ? 'fa-triangle-exclamation' : 'fa-bolt';
      var hbt = isNoSub ? 'No Active Subscription' : alertState ? 'Premium Access Expired' : 'Premium Access Active';
      var heroMsg  = isNoSub ? 'You don\u2019t have an active subscription yet. Subscribe to unlock your tools and resources.'
                   : alertState ? 'Your subscription has expired. Renew to restore access to your tools and resources.'
                   : 'We\u2019re glad you\u2019re here. I\u2019m your success partner \u2014 Member Portal.';
      var hpHref   = alertState ? '/signup' : exploreHref;
      var hpClass  = alertState ? 'MemberUI-btn MemberUI-btn-primary MemberUI-btn-danger' : 'MemberUI-btn MemberUI-btn-primary';
      var hpLabel  = isNoSub ? 'Subscribe Now' : alertState ? 'Renew Subscription' : 'Explore More Tools';
      var hpLead   = isNoSub ? 'fa-cart-shopping' : alertState ? '' : 'fa-compass';
      var hpIcon   = isNoSub ? 'fa-circle-plus' : alertState ? 'fa-rotate-right' : 'fa-arrow-right';
      var statLbl  = isNoSub ? 'No Subscription' : alertState ? 'Expired' : isUnknown ? 'Check on Dashboard' : 'Active Member';
      var statIco  = isNoSub ? 'fa-circle-info' : alertState ? 'fa-circle-xmark' : isUnknown ? 'fa-spinner' : 'fa-circle-check';
      var statCls  = alertState ? 'MemberUI-stat expired' : 'MemberUI-stat';
      var hero = document.createElement('section');
      hero.className = 'MemberUI-hero';
      hero.innerHTML =
        '<span class="MemberUI-hero-glow g1"></span><span class="MemberUI-hero-glow g2"></span>' +
        '<div class="MemberUI-hero-inner">' +
          '<span class="' + hbc + '"><i class="fa-solid ' + hbi + '"></i> ' + hbt + '</span>' +
          '<h1>' + timeGreeting() + ', <span class="grad">' + esc(username) + '</span> \uD83D\uDC4B</h1>' +
          '<p>' + heroMsg + '</p>' +
          '<div class="MemberUI-hero-actions">' +
            '<a href="' + esc(hpHref) + '" class="' + hpClass + '">' + (hpLead ? '<i class="fa-solid ' + hpLead + '"></i> ' : '') + hpLabel + ' <i class="fa-solid ' + hpIcon + '"></i></a>' +
            '<a href="/member/payment-history" class="MemberUI-btn MemberUI-btn-ghost"><i class="fa-solid fa-receipt"></i> Billing History</a>' +
          '</div>' +
        '</div>' +
        '<div class="MemberUI-hero-stats">' +
          '<div class="' + statCls + '"><span class="MemberUI-stat-ico"><i class="fa-solid ' + statIco + '"></i></span><div><small>Account Status</small><strong>' + statLbl + '</strong></div></div>' +
          '<div class="' + statCls + '"><span class="MemberUI-stat-ico"><i class="fa-solid fa-layer-group"></i></span><div><small>Active Resources</small><strong>' + (alertState ? '0' : effectiveResourceCount) + ' Available</strong></div></div>' +
          '<div class="' + statCls + '"><span class="MemberUI-stat-ico"><i class="fa-solid fa-crown"></i></span><div><small>Subscriptions</small><strong>' + (alertState ? '0' : effectiveSubCount) + ' Active</strong></div></div>' +
        '</div>';
      inner.insertBefore(hero, inner.firstChild);
      invalidateQS();
    }

    if (isLoggedIn && kind === 'profile' && !inner.querySelector('.MemberUI-profile-head')) {
      var chipSt    = isNoSub ? '<span class="MemberUI-chip"><i class="fa-solid fa-circle-info"></i> No Subscription</span>'
                    : alertState ? '<span class="MemberUI-chip danger"><i class="fa-solid fa-circle-xmark"></i> Expired</span>'
                    : isUnknown ? '<span class="MemberUI-chip"><i class="fa-solid fa-house"></i> Check on Dashboard</span>'
                    : '<span class="MemberUI-chip ok"><i class="fa-solid fa-circle-check"></i> Active</span>';
      var chipPrem  = alertState
        ? '<span class="MemberUI-chip"><i class="fa-solid fa-crown"></i> Standard</span>'
        : '<span class="MemberUI-chip brand"><i class="fa-solid fa-crown"></i> Premium</span>';
      var profileHead = document.createElement('section');
      profileHead.className = 'MemberUI-profile-head';
      profileHead.innerHTML =
        '<div class="MemberUI-profile-avatar"><img src="' + esc(displayAvatar) + '" alt="' + esc(username) + '" onerror="this.onerror=null;this.src=\'' + MemberUI_LOGO_URL + '\'"></div>' +
        '<div class="MemberUI-profile-info"><h2>' + esc(username) + '</h2>' +
        '<p class="email">' + esc(txt('.am-profile-form input[name="email"],.am-profile-form input[type="email"]', 'Member account')) + '</p>' +
        chipSt + chipPrem +
        '<div class="MemberUI-completeness"><div class="lbl"><span>Profile completion</span><span class="pct">0%</span></div><div class="bar"><div class="fill"></div></div></div></div>';
      inner.insertBefore(profileHead, inner.firstChild);

      function calcCompletion() {
        var form = document.querySelector('.am-profile-form');
        if (!form) return false;
        var fields = form.querySelectorAll('input[type="text"],input[type="email"],select,textarea');
        if (!fields.length) return false;
        var filled = 0, countable = 0;
        for (var i = 0; i < fields.length; i++) {
          if (fields[i].type === 'password') continue;
          countable++;
          if (String(fields[i].value || '').trim()) filled++;
        }
        var pct    = countable ? Math.round((filled / countable) * 100) : 0;
        var fillEl = profileHead.querySelector('.MemberUI-completeness .fill');
        var pctEl  = profileHead.querySelector('.MemberUI-completeness .pct');
        if (fillEl) fillEl.style.width = pct + '%';
        if (pctEl)  pctEl.textContent  = pct + '%';
        return true;
      }
      if (!calcCompletion()) {
        var formObs = null;
        if (typeof MutationObserver !== 'undefined') {
          formObs = new MutationObserver(function () { if (calcCompletion()) { formObs.disconnect(); } });
          formObs.observe(document.body, { childList: true, subtree: true });
          setTimeout(function () { if (formObs) formObs.disconnect(); }, 10000);
        }
        setTimeout(function () { if (formObs) formObs.disconnect(); calcCompletion(); }, 1500);
      }
    }

    if (isLoggedIn && kind === 'payments') {
      var tbl = inner.querySelector('table');
      if (tbl && !tbl.parentNode.classList.contains('MemberUI-table-wrap')) {
        var wrap = document.createElement('div');
        wrap.className = 'MemberUI-table-wrap';
        var thead = document.createElement('div');
        thead.className = 'MemberUI-table-head';
        thead.innerHTML = '<i class="fa-solid fa-receipt"></i><strong>Payment Transactions</strong>';
        tbl.parentNode.insertBefore(wrap, tbl);
        wrap.appendChild(thead);
        wrap.appendChild(tbl);
        var headers = [], ths = tbl.querySelectorAll('thead th');
        for (var thi = 0; thi < ths.length; thi++) headers.push(ths[thi].textContent.trim());
        var trs = tbl.querySelectorAll('tbody tr');
        for (var tri = 0; tri < trs.length; tri++) {
          var tds = trs[tri].querySelectorAll('td');
          for (var tdi = 0; tdi < tds.length; tdi++) {
            if (!tds[tdi].getAttribute('data-label') && headers[tdi]) tds[tdi].setAttribute('data-label', headers[tdi]);
          }
        }
      }
    }

    if (!inner.querySelector('.MemberUI-footer')) {
      var f1 = document.createElement('footer');
      f1.className = 'MemberUI-footer';
      f1.innerHTML = '&copy; 2026 <span>&middot;</span> Member Portal <span>&middot;</span> All rights reserved <span>&middot;</span> <a href="https://Leoamztools.com/whatsapp" target="_blank" rel="noopener">Support</a>';
      inner.appendChild(f1);
    }
  }

  function build() {
    keepCSSLast();

    var body       = document.body;
    var isLoggedIn = body.classList.contains('am-logged-in');

    var _autoLogoEl  = document.querySelector('img.am-header-content-logo');
    var _autoLogoSrc = _autoLogoEl ? _autoLogoEl.getAttribute('src') : '';
    var kind       = pageKind();
    var username   = txt('.am-user-identity-block_login', 'Member');
    var avatarEl   = $1('.am-user-identity-block-avatar-pic img');
    var avatar     = avatarEl ? (avatarEl.getAttribute('src') || '') : '';
    if (!isValidAvatarSrc(avatar)) avatar = '';
    var displayAvatar = avatar || MemberUI_LOGO_URL;

    var resourceContainer  = $1('.am-list-resources');
    var hasPageResourceData = !!resourceContainer;
    var resourceCount      = hasPageResourceData ? resourceContainer.querySelectorAll(':scope > li').length : 0;

    var subListContainer = $1('.am-list-subscriptions');
    var hasPageSubData   = !!subListContainer;
    var subLis           = hasPageSubData ? subListContainer.querySelectorAll(':scope > li') : null;
    var subCount         = subLis ? subLis.length : 0;

    var subState, stateFlags;
    if (isLoggedIn) {
      subState   = hasNoSubDOMIndicator() ? { hasAny: false, hasActive: false, activeCount: 0, unknown: false } : detectSubState(hasPageSubData ? subLis : null);
      stateFlags = applySubStateClasses(subState);
    } else {
      subState   = { hasAny: false, hasActive: false, activeCount: 0, unknown: true };
      stateFlags = { isUnknown: true, isExpired: false, isNoSub: false, isActive: false };
    }
    var isUnknown = stateFlags.isUnknown, isExpired = stateFlags.isExpired;
    var isNoSub   = stateFlags.isNoSub,   isActive  = stateFlags.isActive;

    var zeroActiveResources = !isUnknown && hasPageResourceData && resourceCount === 0;
    var zeroActiveSubs      = !isUnknown && hasPageSubData && subCount === 0;
    var effectiveResourceCount = (isExpired || isNoSub || zeroActiveResources || zeroActiveSubs) ? 0 : resourceCount;
    var effectiveSubCount      = (isExpired || isNoSub || zeroActiveResources || zeroActiveSubs) ? 0 : subState.activeCount;
    var limitedAccess = zeroActiveResources && !isNoSub && !isActive;

    if (limitedAccess) {
      body.classList.remove('MemberUI-sub-active', 'MemberUI-sub-none');
      body.classList.add('MemberUI-sub-expired');
      isExpired = true; isActive = false; isNoSub = false;
    }

    var alertState  = isExpired || isNoSub || limitedAccess || (!isUnknown && !subState.hasActive && subState.hasAny);
    var exploreHref = ($1('.am-list-resources > li > a') || { getAttribute: function() { return '/member'; } }).getAttribute('href') || '/member';
    var sidebar     = $1('.am-body-content-top');
    var aMemberItems = isLoggedIn ? readAMemberMenu() : [];

    if (isLoggedIn) {
      if (sidebar && !sidebar.querySelector('.MemberUI-brand')) {
        var brand = document.createElement('div');
        brand.className = 'MemberUI-brand';
        brand.innerHTML =
          '<div class="MemberUI-brand-logo" style="text-align: center; padding: 10px 0;">' +
          '<img src="' + esc(_autoLogoSrc) + '" alt="Member Portal Logo" style="max-width: 100%; width: 270px; height: auto; vertical-align: middle;">' +
          '</div>';
        sidebar.insertBefore(brand, sidebar.firstChild);
      }
      var toolbar = sidebar ? sidebar.querySelector('.am-account-toolbar') : null;
      if (toolbar && !toolbar.querySelector('.MemberUI-nav-scroll')) {

        var currentPath = (window.location.pathname || '/').replace(/\/+$/, '') || '/';

        var isActiveLink = function (href) {
          if (!href || href === '#' || href.indexOf('javascript:') === 0) return false;
          try {
            var tmp = document.createElement('a');
            tmp.href = href;
            if (tmp.hostname && window.location.hostname &&
                tmp.hostname !== window.location.hostname) return false;
            var lp = (tmp.pathname || '/').replace(/\/+$/, '') || '/';
            var cp = currentPath;
            if (lp === '/member') return cp === '/member' || cp === '' || cp === '/';
            if (lp === '/') return cp === '/' || cp === '';
            return cp === lp || cp.indexOf(lp + '/') === 0;
          } catch (e) {}
          return false;
        };

        var sections = Object.create(null);
        for (var ai = 0; ai < aMemberItems.length; ai++) {
          var item = aMemberItems[ai];
          var sec  = item.section || 'More';
          if (!sections[sec]) sections[sec] = [];
          sections[sec].push(item);
        }

        var navParts = ['<div class="MemberUI-nav-search"><input type="text" placeholder="Search menu\u2026" aria-label="Search menu" autocomplete="off"></div>'];
        var preferredOrder = ['Main', 'Account', 'Support', 'Social', 'Legal', 'More'];
        var orderedSections = [];
        for (var pi = 0; pi < preferredOrder.length; pi++) { if (sections[preferredOrder[pi]]) orderedSections.push(preferredOrder[pi]); }
        for (var sk in sections) { if (orderedSections.indexOf(sk) === -1) orderedSections.push(sk); }

        if (!orderedSections.length) {
          orderedSections = ['Main'];
          sections['Main'] = [
            { label: 'Dashboard',        href: '/member',                 icon: MemberUI_ICON_MAP['dashboard'], target: '' },
            { label: 'Profile',          href: '/profile',                icon: MemberUI_ICON_MAP['profile'],   target: '' },
            { label: 'Payments History', href: '/member/payment-history', icon: MemberUI_ICON_MAP['payments'],  target: '' }
          ];
        }

        for (var oi = 0; oi < orderedSections.length; oi++) {
          var sn = orderedSections[oi];
          navParts.push('<span class="MemberUI-nav-label">' + esc(sn) + '</span>');
          var secItems = sections[sn];
          for (var si = 0; si < secItems.length; si++) {
            var it = secItems[si];
            var isActive_link = isActiveLink(it.href);
            navParts.push(
              '<a href="' + esc(it.href) + '" class="MemberUI-nav-item' + (isActive_link ? ' active' : '') + '"' +
              (it.target ? ' target="' + esc(it.target) + '" rel="noopener"' : '') + '>' +
              '<span class="ico"><i class="' + esc(it.icon) + '"></i></span>' +
              '<span class="lbl">' + esc(it.label) + '</span>' +
              '<i class="fa-solid fa-chevron-right chev"></i></a>'
            );
          }
        }
        navParts.push('<div class="MemberUI-nav-empty">No matches found</div>');

        var nav = document.createElement('div');
        nav.className = 'MemberUI-nav-scroll';
        nav.innerHTML = navParts.join('');
        toolbar.insertBefore(nav, toolbar.firstChild);

        var searchInput = nav.querySelector('.MemberUI-nav-search input');
        var navEmpty    = nav.querySelector('.MemberUI-nav-empty');
        if (searchInput) {
          var searchItems  = nav.querySelectorAll('.MemberUI-nav-item');
          var searchLabels = nav.querySelectorAll('.MemberUI-nav-label');
          searchInput.addEventListener('input', function () {
            var q = searchInput.value.trim().toLowerCase(), visible = 0;
            for (var i = 0; i < searchItems.length; i++) {
              var match = !q || searchItems[i].textContent.toLowerCase().indexOf(q) !== -1;
              searchItems[i].classList.toggle('hidden-by-search', !match);
              if (match) visible++;
            }
            for (var li2 = 0; li2 < searchLabels.length; li2++) {
              var lb = searchLabels[li2];
              if (!q) { lb.style.display = ''; continue; }
              var next = lb.nextElementSibling, anyVis = false;
              while (next && !next.classList.contains('MemberUI-nav-label')) {
                if (next.classList.contains('MemberUI-nav-item') && !next.classList.contains('hidden-by-search')) { anyVis = true; break; }
                next = next.nextElementSibling;
              }
              lb.style.display = anyVis ? '' : 'none';
            }
            navEmpty.classList.toggle('show', visible === 0);
          });
        }
      }

      if (subLis && subLis.length) {
        var now = new Date();
        for (var sli = 0; sli < subLis.length; sli++) {
          var li = subLis[sli];
          if (li.querySelector('.MemberUI-expiry-track')) continue;
          var expDate = extractExpiryDate(li);
          if (!expDate) continue;
          var isRowExp = isExpiredDate(expDate);
          var daysLeft = isRowExp ? 0 : daysBetween(now, endOfDay(expDate));
          if (isRowExp) li.classList.add('MemberUI-expired');
          else li.classList.remove('MemberUI-expired');
          var pct   = isRowExp ? 100 : Math.max(0, Math.min(100, (daysLeft / 30) * 100));
          var track = document.createElement('div');
          track.className = 'MemberUI-expiry-track';
          var fill  = document.createElement('div');
          
          fill.className = 'MemberUI-expiry-fill' + (isRowExp || daysLeft === 0 ? ' danger' : daysLeft <= 2 ? ' warn' : '');
          fill.style.width = pct + '%';
          track.appendChild(fill);
          li.appendChild(track);
          var daysTag = document.createElement('span');
          
          daysTag.className = 'MemberUI-days-left' + (isRowExp ? ' expired' : daysLeft === 0 ? ' urgent' : '');
          daysTag.innerHTML = '<i class="fa-regular fa-clock"></i> ' + (isRowExp ? 'Expired' : daysLeft === 0 ? 'Last day' : daysLeft + 'd left');
          var datePill = li.querySelector('.am-list-subscriptions-date');
          if (datePill) datePill.appendChild(daysTag);
        }
      }
    }

    var topbar = document.createElement('header');
    topbar.className = 'MemberUI-topbar';
    var pageTitle = { signup: 'Signup', login: 'Login', profile: 'Profile', payments: 'Payments History', terms: 'Terms & Conditions' }[kind] || 'Dashboard';

    var initCollapsed = read('MemberUI-collapsed') === '1' && window.innerWidth > 992;

    var left = isLoggedIn
      ? '<button class="MemberUI-sidebar-toggle" title="Toggle sidebar (Ctrl+B)"><i class="fa-solid ' + (initCollapsed ? 'fa-chevron-right' : 'fa-chevron-left') + '"></i></button>' +
        '<button class="MemberUI-burger" aria-label="Menu"><i class="fa-solid fa-bars"></i></button>'
      : '<a href="/login" class="MemberUI-brand" style="height:auto;min-height:auto;padding:0;border:none;background:transparent;box-shadow:none; display:flex; align-items:center;">' +
        '<img src="' + esc(_autoLogoSrc) + '" alt="Member Portal Logo" style="max-width: 100%; width: 270px; height: auto; vertical-align: middle;"></a>';

    var MemberUILogoutHref = isLoggedIn ? findLogoutHref() : '/logout';

    var actions = isLoggedIn
      ?
        '<button type="button" class="MemberUI-icon-btn MemberUI-notif-btn" title="Notifications" aria-label="Notifications"><i class="fa-regular fa-bell"></i><span class="dot"></span></button>' +
        '<a href="' + esc(MemberUILogoutHref) + '" class="MemberUI-icon-btn MemberUI-logout-btn" title="Logout" aria-label="Logout"><i class="fa-solid fa-right-from-bracket"></i></a>'
      : kind === 'login'
        ? '<a href="/signup" class="MemberUI-btn MemberUI-btn-primary" style="padding:10px 20px;font-size:13px;">Get Started <i class="fa-solid fa-arrow-right"></i></a>'
        : '';

    topbar.innerHTML = left +
      '<div class="MemberUI-page-head"><span class="MemberUI-page-title">' + pageTitle + '</span>' +
      '<span class="MemberUI-crumb"><a href="/member">Home</a> <i class="fa-solid fa-chevron-right"></i> ' + pageTitle + '</span></div>' +
      '<div class="MemberUI-topbar-actions">' + actions + '</div>';
    body.appendChild(topbar);
    try { if (isLoggedIn) ToolSearch.init(topbar); } catch (e) {}

    var content = $1('.am-body-content-content');
    buildContentUI(content, kind, isLoggedIn, isNoSub, alertState, isUnknown, isActive,
                   effectiveResourceCount, effectiveSubCount, username, displayAvatar, exploreHref);

    setTimeout(function () {
      invalidateQS();
      var ct = document.querySelector('.am-body-content-content');
      if (!ct) return;
      buildContentUI(ct, kind, isLoggedIn, isNoSub, alertState, isUnknown, isActive,
                     effectiveResourceCount, effectiveSubCount, username, displayAvatar, exploreHref);
    }, 900);

    function attachPasswordMeter(input) {
      if (!input || input.dataset.MemberUIMeter === '1') return;
      input.dataset.MemberUIMeter = '1';
      var meter = document.createElement('div');
      meter.className = 'MemberUI-pw-meter';
      meter.innerHTML = '<span></span><span></span><span></span><span></span>';
      var label = document.createElement('div');
      label.className = 'MemberUI-pw-label';
      label.textContent = 'Password strength';
      var caps = document.createElement('div');
      caps.className = 'MemberUI-caps';
      caps.textContent = 'Caps Lock is on';
      var parent = input.parentNode;
      if (parent) { parent.appendChild(meter); parent.appendChild(label); parent.appendChild(caps); }
      var LEVELS = ['', 'weak', 'fair', 'good', 'strong'];
      function score(v) {
        if (!v) return 0;
        var s = 0;
        if (v.length >= 6)  s++;
        if (v.length >= 10) s++;
        if (/[A-Z]/.test(v) && /[a-z]/.test(v)) s++;
        if (/\d/.test(v) && /[^A-Za-z0-9]/.test(v)) s++;
        return Math.min(s, 4);
      }
      function update() { var s = score(input.value); meter.className = 'MemberUI-pw-meter' + (input.value ? ' s' + s : ''); meter.setAttribute('data-level', LEVELS[s] || ''); label.textContent = input.value ? 'Password strength: ' + LEVELS[s] : 'Password strength'; }
      function checkCaps(e) { try { caps.classList.toggle('show', !!(e.getModifierState && e.getModifierState('CapsLock'))); } catch (err) {} }
      input.addEventListener('input', update);
      input.addEventListener('keydown', checkCaps);
      input.addEventListener('keyup',   checkCaps);
      input.addEventListener('blur', function () { caps.classList.remove('show'); });
      update();
    }
    defer(function () {
      var pw = document.querySelectorAll('input[type="password"]');
      for (var i = 0; i < pw.length; i++) attachPasswordMeter(pw[i]);
    });

    function refreshSignupTiles() {
      var container = $1('.am-signup-form #row-product_id_page-0-0 > .am-element');
      if (!container) return;
      if (!container.classList.contains('MemberUI-products-grid')) container.classList.add('MemberUI-products-grid');
      var checked = container.querySelector('input[type="radio"]:checked');
      if (checked) { var t0 = checked.closest('label'); if (t0) t0.classList.add('selected'); }
      var radios = container.querySelectorAll('input[type="radio"]');
      for (var ri = 0; ri < radios.length; ri++) {
        var radio = radios[ri];
        if (radio.dataset.MemberUIBound) continue;
        radio.dataset.MemberUIBound = '1';
        radio.addEventListener('change', function () {
          var labels = container.querySelectorAll('label');
          for (var li2 = 0; li2 < labels.length; li2++) labels[li2].classList.remove('selected');
          var tile = this.closest('label');
          if (tile) { tile.classList.add('selected'); var ti = tile.querySelector('.am-product-title'); if (ti) toast('Selected: ' + ti.textContent.trim(), 'ok'); }
        });
      }
      var brs = container.querySelectorAll(':scope > br');
      for (var bi = 0; bi < brs.length; bi++) brs[bi].remove();
    }
    refreshSignupTiles();
    setTimeout(refreshSignupTiles, 800);

    if (isLoggedIn) {
      var overlay = document.createElement('div');
      overlay.className = 'MemberUI-overlay';
      body.appendChild(overlay);
      var burger      = topbar.querySelector('.MemberUI-burger');
      var toggleBtn   = topbar.querySelector('.MemberUI-sidebar-toggle');
      if (burger && sidebar)  { burger.addEventListener('click', function () { sidebar.classList.toggle('MemberUI-open'); overlay.classList.toggle('show'); }); }
      if (toggleBtn)          { toggleBtn.addEventListener('click', function () { var c = body.classList.toggle('MemberUI-collapsed'); store('MemberUI-collapsed', c ? '1' : '0'); var ico = toggleBtn.querySelector('i'); if (ico) ico.className = 'fa-solid ' + (c ? 'fa-chevron-right' : 'fa-chevron-left'); }); }
      overlay.addEventListener('click', function () { if (sidebar) sidebar.classList.remove('MemberUI-open'); overlay.classList.remove('show'); });
      document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && sidebar) { sidebar.classList.remove('MemberUI-open'); overlay.classList.remove('show'); } });
      if (read('MemberUI-collapsed') === '1' && window.innerWidth > 992) body.classList.add('MemberUI-collapsed');

      createNotifPanel(topbar);
    }

    if (isLoggedIn) {
      deferLow(function () {
        if (window.__MemberUIKeys) return;
        window.__MemberUIKeys = true;
        var gPressed = false;
        var gTimer   = null;
        var NAV_MAP  = { d: '/member', s: '/signup', p: '/profile', b: '/member/payment-history' };
        document.addEventListener('keydown', function (e) {
          var tgt = e.target, tag = (tgt.tagName || '').toLowerCase();
          if (tag === 'input' || tag === 'textarea' || tag === 'select' || tgt.isContentEditable) return;
          if (e.metaKey || e.ctrlKey || e.altKey) {
            if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'b') { e.preventDefault(); var cb = body.classList.toggle('MemberUI-collapsed'); store('MemberUI-collapsed', cb ? '1' : '0'); var tIco = document.querySelector('.MemberUI-sidebar-toggle i'); if (tIco) tIco.className = 'fa-solid ' + (cb ? 'fa-chevron-right' : 'fa-chevron-left'); }
            return;
          }
          if (gPressed) { var dest = NAV_MAP[e.key.toLowerCase()]; if (dest) window.location.href = dest; gPressed = false; if (gTimer) { clearTimeout(gTimer); gTimer = null; } return; }
          if (e.key.toLowerCase() === 'g') {
            gPressed = true;
            gTimer = setTimeout(function () { gPressed = false; gTimer = null; }, 1200);
          }
        });
        window.addEventListener('blur', function () { gPressed = false; if (gTimer) { clearTimeout(gTimer); gTimer = null; } });
      });
    }

    defer(function () {
      if (typeof MutationObserver === 'undefined') return;
      var observer = new MutationObserver(function (muts) {
        for (var mi = 0; mi < muts.length; mi++) {
          var added = muts[mi].addedNodes;
          for (var ai = 0; ai < added.length; ai++) {
            var n = added[ai];
            if (n.nodeType === 1 && n.classList && n.classList.contains('am-error')) {
              n.classList.add('MemberUI-error');
              var inp = n.parentNode && n.parentNode.querySelector('input');
              if (inp) inp.classList.add('am-error');
            }
          }
        }
      });
      var forms = document.querySelectorAll('.am-signup-form,.am-profile-form,.am-login-form');
      for (var fi = 0; fi < forms.length; fi++) observer.observe(forms[fi], { childList: true, subtree: true });
      var formInputs = document.querySelectorAll('.am-signup-form input,.am-profile-form input,.am-login-form input');
      for (var fii = 0; fii < formInputs.length; fii++) {
        formInputs[fii].addEventListener('input', function () { this.classList.remove('am-error'); });
      }
    });

    if (isLoggedIn && kind === 'dashboard') {
      scheduleStateToast();
    }

    if (!IS_SLOW) {
      attachScrollProgress();
    } else {
      deferLow(attachScrollProgress);
    }

    wireForgotPassword();

    if (isLoggedIn) {
      defer(watchAvatar);
      scheduleSubRecheck();
    }
  }

  var __fpWired = false;
  function wireForgotPassword() {
    if (__fpWired) return;
    var loginWrap    = $1('.am-login-form-wrapper');
    var sendpassWrap = $1('.am-sendpass-form-wrapper');
    if (!loginWrap || !sendpassWrap) return;
    __fpWired = true;
    var forgotLinks = document.querySelectorAll('.am-form-login-switch[href*="sendpass"],.am-login-form-wrapper a[href*="sendpass"]');
    var backLinks   = document.querySelectorAll('.am-sendpass-form-wrapper a[href="/login"],.am-sendpass-form-wrapper .am-form-login-switch[href$="/login"]');
    function showSendpass(e) {
      if (e) { e.preventDefault(); e.stopPropagation(); }
      loginWrap.style.setProperty('display', 'none', 'important');
      loginWrap.classList.add('MemberUI-hidden');
      sendpassWrap.style.setProperty('display', 'block', 'important');
      sendpassWrap.classList.add('active');
      try { if (!/sendpass/.test(window.location.search)) history.pushState({}, '', '/login?sendpass'); } catch (err) {}
      var f = sendpassWrap.querySelector('input[type="text"],input[type="email"]');
      if (f) setTimeout(function () { f.focus(); }, 60);
    }
    function showLogin(e) {
      if (e) { e.preventDefault(); e.stopPropagation(); }
      sendpassWrap.style.setProperty('display', 'none', 'important');
      sendpassWrap.classList.remove('active');
      loginWrap.style.setProperty('display', 'block', 'important');
      loginWrap.classList.remove('MemberUI-hidden');
      try { if (/sendpass/.test(window.location.search)) history.pushState({}, '', '/login'); } catch (err) {}
      var f = loginWrap.querySelector('input[type="text"],input[type="email"]');
      if (f) setTimeout(function () { f.focus(); }, 60);
    }
    for (var i = 0; i < forgotLinks.length; i++) { if (!forgotLinks[i].dataset.MemberUIWired) { forgotLinks[i].dataset.MemberUIWired = '1'; forgotLinks[i].addEventListener('click', showSendpass, true); } }
    for (var j = 0; j < backLinks.length; j++)   { if (!backLinks[j].dataset.MemberUIWired)   { backLinks[j].dataset.MemberUIWired   = '1'; backLinks[j].addEventListener('click', showLogin, true); } }
    if (/sendpass/.test(window.location.search)) showSendpass();
  }

  var __headMo = null;
  function bootstrapHead() {
    if (!document.head) return false;
    injectPreconnects();
    injectCSSLink();
    injectStateCSS();
    startHeadObserver();

    if (!document.querySelector('link[href*="font-awesome"],link[href*="fontawesome"]')) {
      var FA_URL = 'https://use.fontawesome.com/releases/v6.5.1/css/all.css';
      var faPre = document.createElement('link');
      faPre.rel  = 'preload';
      faPre.as   = 'style';
      faPre.href = FA_URL;
      faPre.setAttribute('fetchpriority', IS_SLOW ? 'low' : 'high');
      document.head.appendChild(faPre);
      var fa = document.createElement('link');
      fa.rel  = 'stylesheet';
      fa.href = FA_URL;
      fa.media = 'print';
      fa.onload  = function () { fa.media = 'all'; };
      fa.onerror = function () { fa.media = 'all'; };
      document.head.appendChild(fa);
    }
    return true;
  }

  

  var DeviceKit = (function () {
    var API  = '/login-sessions';
    var DEMO = /[?&]memberuidemo=1/.test(location.search);
    var PING_KEY = 'MemberUI-device-ping';
    var MISSING_KEY = 'MemberUI-ls-missing-v2';   
    var MISSING_TTL = 12 * 60 * 60 * 1000;
    var LOCAL_PREFIX = 'MemberUI-local-sessions-v3:';
    var LOGIN_KEY = 'MemberUI-login-pending';
    var GUEST_KEY = 'MemberUI-was-guest';
    var CUR_KEY = 'MemberUI-local-cur';
    var DID_KEY = 'MemberUI-local-did';
    var SID_KEY = 'MemberUI-local-sid';
    var MAX_LOCAL = 30;
    var NEW_SESSION_GAP = 6 * 60 * 60 * 1000;   
    var started = false;

    var state = { email: '', rows: [], loading: false, error: '', fallback: false, tab: 'account', device: null, rules: null };
    var menu, ov, rowMenu, localId = null;

    function xhrHeaders() {
      return { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' };
    }
    function fmtDT(v) {
      if (!v) return '—';
      var d = new Date(v);
      if (isNaN(d.getTime())) return String(v);
      try { return d.toLocaleString(undefined, { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }); }
      catch (e) { return String(v); }
    }
    function userNameDK() {
      var el = document.querySelector('.am-user-identity-block_login');
      if (!el) return 'Member';
      var first = el.childNodes[0];
      return ((first && first.textContent) || el.textContent || 'Member').trim();
    }

    


    function detectClient() {
      var ua = navigator.userAgent || '';
      var b = 'Unknown';
      if (/Edg(e|A|iOS)?\//.test(ua)) b = 'Edge';
      else if (/OPR\/|Opera/.test(ua)) b = 'Opera';
      else if (/SamsungBrowser/.test(ua)) b = 'Samsung Internet';
      else if (/Firefox\/|FxiOS/.test(ua)) b = 'Firefox';
      else if (/Chrome\/|CriOS/.test(ua)) b = 'Chrome';
      else if (/Safari\//.test(ua)) b = 'Safari';
      if (navigator.brave && b === 'Chrome') b = 'Brave';

      var os = 'Unknown';
      if (/Windows/.test(ua)) os = 'Windows';
      else if (/Android/.test(ua)) os = 'Android';
      else if (/iPhone|iPad|iPod/.test(ua)) os = 'iOS';
      else if (/Mac OS X|Macintosh/.test(ua)) os = (navigator.maxTouchPoints > 1 ? 'iPadOS' : 'macOS');
      else if (/CrOS/.test(ua)) os = 'ChromeOS';
      else if (/Linux|X11/.test(ua)) os = 'Linux';

      var type = 'desktop';
      if (/iPad|Tablet/.test(ua) || (/Android/.test(ua) && !/Mobile/.test(ua)) || os === 'iPadOS') type = 'tablet';
      else if (/Mobi|iPhone|Android/.test(ua)) type = 'mobile';

      var tz = '';
      try { tz = (window.Intl && Intl.DateTimeFormat().resolvedOptions().timeZone) || ''; } catch (e) {}
      var city = '', region = '';
      if (tz && tz.indexOf('/') > -1) {
        var parts = tz.split('/');
        region = parts[0].replace(/_/g, ' ');
        city = parts[parts.length - 1].replace(/_/g, ' ');
      }
      return {
        browser: b, os: os, device_type: type,
        tz: tz, city: city, region: region, country: '',
        screen: screen.width + 'x' + screen.height,
        lang: navigator.language || ''
      };
    }

    


    function localKey() { return LOCAL_PREFIX + userNameDK(); }
    function readLocal() {
      try { var a = JSON.parse(localStorage.getItem(localKey()) || '[]'); return Array.isArray(a) ? a : []; }
      catch (e) { return []; }
    }
    function writeLocal(list) {
      try { localStorage.setItem(localKey(), JSON.stringify(list.slice(0, MAX_LOCAL))); } catch (e) {}
    }
    function localDid() {
      var d = null;
      try { d = localStorage.getItem(DID_KEY); } catch (e) {}
      if (!d) {
        d = 'd' + Date.now().toString(36) + Math.random().toString(36).slice(2, 8);
        try { localStorage.setItem(DID_KEY, d); } catch (e) {}
      }
      return d;
    }
    function lsGet(key) { try { return localStorage.getItem(key); } catch (e) { return null; } }
     
    var SET_OPEN_KEY = 'memberui_set_open';
    function rememberOpen(tab) { try { sessionStorage.setItem(SET_OPEN_KEY, tab || 'account'); } catch (e) {} }
    function forgetOpen() { try { sessionStorage.removeItem(SET_OPEN_KEY); } catch (e) {} }
    function savedOpen() { try { return sessionStorage.getItem(SET_OPEN_KEY); } catch (e) { return null; } }
    function lsSet(key, v) { try { if (v == null) localStorage.removeItem(key); else localStorage.setItem(key, v); } catch (e) {} }
    function newRow(c, now) {
      return {
        id: 's' + Date.now().toString(36) + Math.random().toString(36).slice(2, 7),
        browser: c.browser, os: c.os, device_type: c.device_type,
        city: c.city, region: c.region, country: '',
        screen: c.screen, tz: c.tz, lang: c.lang,
        created_at: now, last_seen: now, status: 'active'
      };
    }
    


    function touchLocal() {
      var list = readLocal(), now = new Date().toISOString(), c = detectClient();
      var curId = lsGet(CUR_KEY);
      var cameFromLogin = false;
      try {
        var nav = (performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) || {};
        
        if (nav.type !== 'reload' && nav.type !== 'back_forward') {
          cameFromLogin = /\/(login|signup)(\/|\?|$)/i.test(new URL(document.referrer).pathname + '?');
        }
      } catch (e) {}
      var isNewLogin = !!lsGet(LOGIN_KEY) || !!lsGet(GUEST_KEY) || cameFromLogin;
      var cur = null, i;
      for (i = 0; i < list.length; i++) { if (list[i].id === curId) { cur = list[i]; break; } }
      if (cur && Date.now() - new Date(cur.last_seen).getTime() > NEW_SESSION_GAP) isNewLogin = true;

      if (isNewLogin || !cur || cur.status !== 'active') {
        for (i = 0; i < list.length; i++) {
          if (list[i].status === 'active') list[i].status = 'ended';
        }
        cur = newRow(c, now);
        list.unshift(cur);
        lsSet(CUR_KEY, cur.id);
      } else {
        cur.last_seen = now;
      }
      lsSet(LOGIN_KEY, null);
      lsSet(GUEST_KEY, null);
      localId = cur.id;
      writeLocal(list);
    }
    function localRows() {
      var list = readLocal().slice();
      return list.map(function (r) {
        var o = {}; for (var k in r) o[k] = r[k];
        o.current = (r.id === localId);
        return o;
      }).sort(sessionOrder);
    }

    


    function backendMissing() {
      try { return Date.now() - (+localStorage.getItem(MISSING_KEY) || 0) < MISSING_TTL; } catch (e) { return false; }
    }
    function markMissing(v) {
      try { if (v) localStorage.setItem(MISSING_KEY, String(Date.now())); else localStorage.removeItem(MISSING_KEY); } catch (e) {}
    }
    function ping() {
      if (DEMO || backendMissing()) return;
      var last = 0;
      try { last = +sessionStorage.getItem(PING_KEY) || 0; } catch (e) {}
      if (Date.now() - last < 10 * 60 * 1000) return;
      try { sessionStorage.setItem(PING_KEY, String(Date.now())); } catch (e) {}
      var c = detectClient();
      var p = { tz: c.tz, screen: c.screen, lang: c.lang, hw: (window.MemberUIDeviceId && window.MemberUIDeviceId()) || '' };
      fetch(API + '/ping', { method: 'POST', credentials: 'same-origin', headers: xhrHeaders(), body: JSON.stringify(p) })
        .then(function (r) {
          var ct = r.headers.get('content-type') || '';
          markMissing(!(r.ok && ct.indexOf('json') > -1));
        })
        .catch(function () {});
    }

     
    function endLocal() {
      if (!DEMO && !backendMissing()) {
        try {
          if (navigator.sendBeacon) navigator.sendBeacon(API + '/end', new Blob(['{}'], { type: 'text/plain' }));
          else fetch(API + '/end', { method: 'POST', credentials: 'same-origin', keepalive: true }).catch(function () {});
        } catch (e) {}
      }
      var list = readLocal(), now = new Date().toISOString(), curId = lsGet(CUR_KEY);
      for (var i = 0; i < list.length; i++) {
        if (list[i].id === curId) { list[i].status = 'ended'; list[i].last_seen = now; break; }
      }
      writeLocal(list);
      lsSet(CUR_KEY, null);
      forgetOpen();
    }
     
    function guest() { lsSet(GUEST_KEY, '1'); forgetOpen(); }
    function idle(fn) {
      if (typeof window.requestIdleCallback === 'function') window.requestIdleCallback(fn, { timeout: 1500 });
      else setTimeout(fn, 200);
    }

    

    function cachedMe() {
      try {
        var c = JSON.parse(sessionStorage.getItem('memberui_me') || 'null');
        if (c && c.u === userNameDK()) return c;
      } catch (e) {}
      return null;
    }
    function cachedEmail() { var c = cachedMe(); return (c && c.e) || ''; }

    function domPlan() {
      var cl = document.body.classList;
      if (cl.contains('MemberUI-sub-active')) return 'pro';
      if (cl.contains('MemberUI-sub-expired') || cl.contains('MemberUI-sub-none')) return 'free';
      return '';                                   
    }
    function setPlan(p) {
      if (p !== 'pro' && p !== 'free') return;
      var cl = document.body.classList;
      if (!cl.contains('MemberUI-plan-' + p)) {
        cl.remove('MemberUI-plan-pro', 'MemberUI-plan-free');
        cl.add('MemberUI-plan-' + p);
      }
      try { sessionStorage.setItem('memberui_plan', JSON.stringify({ u: userNameDK(), p: p })); } catch (e) {}
    }
    function lastPlan() {
      try { var c = JSON.parse(sessionStorage.getItem('memberui_plan') || 'null'); if (c && c.u === userNameDK()) return c.p; } catch (e) {}
      return '';
    }
    function initPlan() {
      var d = domPlan();
      setPlan(d || lastPlan() || ((cachedMe() || {}).p === true ? 'pro' : (cachedMe() || {}).p === false ? 'free' : ''));
      
      if (window.MutationObserver) {
        var sig = d;
        new MutationObserver(function () {
          var now = domPlan();
          if (now && now !== sig) { sig = now; setPlan(now); }
        }).observe(document.body, { attributes: true, attributeFilter: ['class'] });
      }
    }

    function loadMe(cb) {
      var c = cachedMe();
      if (state.email || (c && c.e && typeof c.p === 'boolean')) {
        state.email = state.email || c.e;
        if (!domPlan() && c && typeof c.p === 'boolean') setPlan(c.p ? 'pro' : 'free');
        cb && cb(state.email);
        return;
      }
      if (DEMO) { state.email = 'demo@example.com'; cb && cb(state.email); return; }
      fetch(API + '/me', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) {
          var ct = r.headers.get('content-type') || '';
          if (!r.ok || ct.indexOf('json') === -1) throw new Error('no');
          return r.json();
        })
        .then(function (d) {
          if (!d || !d.email) return;
          markMissing(false);
          state.email = d.email;
          var pro = typeof d.pro === 'boolean' ? d.pro : null;
          try { sessionStorage.setItem('memberui_me', JSON.stringify({ u: userNameDK(), e: d.email, p: pro })); } catch (e) {}
          if (!domPlan() && pro !== null) setPlan(pro ? 'pro' : 'free');
          cb && cb(d.email);
        })
        .catch(function () {});
    }

     
    function openMenu(trigger) {
      var r = trigger.getBoundingClientRect();
      menu.innerHTML =
        '<div class="MemberUI-menu-email">' + esc(state.email || cachedEmail() || userNameDK()) + '</div>' +
        '<button type="button" data-act="settings"><i class="fa-solid fa-gear"></i> Settings</button>' +
        '<a class="out" href="' + esc(findLogoutHref()) + '"><i class="fa-solid fa-right-from-bracket"></i> Log out</a>';
      menu.style.left = Math.max(12, r.left) + 'px';
      menu.style.width = Math.min(Math.max(r.width, 230), window.innerWidth - 24) + 'px';
      menu.style.bottom = (window.innerHeight - r.top + 8) + 'px';
      menu.style.top = 'auto';
      menu.classList.add('show');
      trigger.classList.add('MemberUI-open');
      if (!state.email) loadMe(function (em) {
        var el = menu.querySelector('.MemberUI-menu-email');
        if (el) el.textContent = em;
      });
      var tg = document.querySelector('.MemberUI-ub-toggle');
      if (tg) tg.setAttribute('aria-expanded', 'true');
    }
    function closeMenu() {
      menu.classList.remove('show');
      var t = document.querySelector('.am-user-identity-block-avatar');
      if (t) t.classList.remove('MemberUI-open');
      var tg = document.querySelector('.MemberUI-ub-toggle');
      if (tg) tg.setAttribute('aria-expanded', 'false');
    }

     
    function navBtn(tab, icon, label, hint, visible) {
      return '<button type="button" class="MemberUI-set-nav' + (state.tab === tab ? ' active' : '') + '" data-tab="' + tab + '"' +
        (visible ? '' : ' style="display:none !important"') + '>' +
        '<span class="MemberUI-nav-ic"><i class="fa-solid ' + icon + '"></i></span>' +
        '<span class="MemberUI-nav-tx">' + label + '<small>' + hint + '</small></span></button>';
    }
    function openModal() {
      ov.innerHTML =
        '<div class="MemberUI-set" role="dialog" aria-modal="true" aria-label="Settings">' +
          '<button class="MemberUI-set-close" type="button" aria-label="Close"><i class="fa-solid fa-xmark"></i></button>' +
          '<aside class="MemberUI-set-side">' +
            '<div class="MemberUI-set-head"><strong>Settings</strong><small>Manage your account</small></div>' +
            '<nav class="MemberUI-set-navs" aria-label="Settings sections">' +
              navBtn('account', 'fa-circle-user', 'Account', 'Device & activity', true) +
              navBtn('team', 'fa-users', 'Team', 'Members & seats', teamVisible()) +
              navBtn('security', 'fa-shield-halved', 'Security', 'Sign-in protection', secEnabled()) +
            '</nav>' +
            '<div class="MemberUI-set-foot"><span class="MemberUI-set-av">' + esc((userNameDK().charAt(0) || 'M').toUpperCase()) + '</span>' +
              '<div><strong>' + esc(userNameDK()) + '</strong><small class="MemberUI-set-foot-mail">' + esc(state.email || cachedEmail() || '') + '</small></div></div>' +
          '</aside>' +
          '<section class="MemberUI-set-main"></section>' +
        '</div>';
      ov.classList.add('show');
      document.body.style.overflow = 'hidden';
      rememberOpen(state.tab);
      if (!state.email) loadMe(function (em) { var f = ov.querySelector('.MemberUI-set-foot-mail'); if (f) f.textContent = em; });
      if (state.tab === 'team' && !teamVisible()) state.tab = 'account';
      if (state.tab === 'security' && sec.loaded && !secEnabled()) state.tab = 'account';   
      load();
      loadTeam(function () {
        syncTeamNav();
        if (state.tab !== 'team') return;
        if (!teamVisible()) { state.tab = 'account'; markNav(); }
        render();
      });
      loadSec(function () {
        syncSecNav();
        if (state.tab !== 'security') return;
        if (!secEnabled()) { state.tab = 'account'; markNav(); }
        render();
      });
    }
    function markNav() {
      var navs = ov.querySelectorAll('[data-tab]');
      for (var i = 0; i < navs.length; i++) navs[i].classList.toggle('active', navs[i].getAttribute('data-tab') === state.tab);
    }
    function closeModal() {
      closeRowMenu();
      ov.classList.remove('show');
      document.body.style.overflow = '';
      forgetOpen();
    }
     
    function nudgeClose() {
      var x = ov.querySelector('.MemberUI-set-close');
      if (!x || typeof x.animate !== 'function') return;
      try { if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; } catch (er) {}
      var brand = '';
      try { brand = getComputedStyle(x).getPropertyValue('--MemberUI-brand-1').trim(); } catch (er) {}
      var to = { transform: 'scale(1.14)' };
      if (/^#[0-9a-f]{3,8}$|^rgb/i.test(brand)) { to.borderColor = brand; to.color = brand; }
      try { x.animate([{ transform: 'scale(1)' }, to, { transform: 'scale(1)' }], { duration: 480, easing: 'ease-out' }); } catch (er) {}
    }

    function devIcon(t) {
      return t === 'mobile' ? 'fa-mobile-screen' : t === 'tablet' ? 'fa-tablet-screen-button' : 'fa-laptop';
    }
    function deviceCell(r) {
      var ids = [];
      if (r.device_tag) ids.push('Device ' + esc(r.device_tag));
      if (r.browser_tag) ids.push('Browser ' + esc(r.browser_tag));
      return '<span class="MemberUI-act-dev"><i class="fa-solid ' + devIcon(r.device_type) + ' MemberUI-dev-ico"></i>' +
        '<span>' + esc(r.browser || 'Browser') + (r.os ? ' <em>on</em> ' + esc(r.os) : '') +
        (r.current ? '<span class="MemberUI-badge">This browser</span>' : '') +
        (ids.length ? '<small>' + ids.join(' &middot; ') + '</small>' : '') + '</span></span>';
    }
    function locCell(r) {
      var loc = [r.city, r.region, r.country].filter(Boolean).join(', ');
      return '<span class="MemberUI-cv">' + (loc ? esc(loc) : '<span class="MemberUI-act-unk">Unknown</span>') + (r.ip ? '<small>IP ' + esc(r.ip) + '</small>' : '') + '</span>';
    }
    function timeCell(r) {
      var t = r.login_at || r.created_at;
      var end = r.status !== 'active' && r.status !== 'pending' && r.ended_at ? r.ended_at : '';
      return '<span class="MemberUI-cv">' + esc(fmtWhen(t)) + (end ? '<small>until ' + esc(fmtTime(end, t)) + '</small>' : '') + '</span>';
    }
     
    function fmtWhen(v) {
      var d = new Date(v);
      if (!v || isNaN(d.getTime())) return '—';
      var o = { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' };
      if (d.getFullYear() !== new Date().getFullYear()) o.year = 'numeric';
      try { return d.toLocaleString(undefined, o); } catch (e) { return String(v); }
    }
    function fmtTime(v, from) {
      var d = new Date(v), f = new Date(from);
      if (isNaN(d.getTime())) return String(v);
      try {
        return d.toDateString() === f.toDateString()
          ? d.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' })
          : d.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' });
      } catch (e) { return String(v); }
    }
    var PILLS = {
      active: ['ok', 'Active now'], ended: ['mut', 'Signed out'], expired: ['mut', 'Session ended'],
      replaced: ['warn', 'Ended: new browser'], revoked: ['mut', 'Signed out remotely'], admin: ['mut', 'Ended by admin'],
      locked: ['bad', 'Account suspended'], pending: ['warn', 'Waiting for code'], failed: ['warn', 'Code not entered'],
      blocked: ['bad', 'Blocked: new device'], approved: ['ok', 'Allowed by support']
    };
    function statusPill(s) {
      var p = PILLS[s] || ['mut', 'Signed out'];
      return '<span class="MemberUI-pill ' + p[0] + '">' + p[1] + '</span>';
    }

    function table() {
      if (!state.rows.length) return '<div class="MemberUI-sess-msg">No activity recorded yet</div>';
      var canRevoke = !state.fallback;
      return '<table class="MemberUI-sess MemberUI-act"><thead><tr><th>Device</th><th>Location</th><th>Sign-in time</th><th>Status</th><th></th></tr></thead><tbody>' +
        state.rows.map(function (r) {
          return '<tr' + (r.current ? ' class="cur"' : '') + '>' +
            '<td data-label="Device">' + deviceCell(r) + '</td>' +
            '<td data-label="Location">' + locCell(r) + '</td>' +
            '<td data-label="Sign-in time">' + timeCell(r) + '</td>' +
            '<td data-label="Status">' + statusPill(r.status) + '</td>' +
            '<td class="MemberUI-dots-cell">' + (r.status === 'active' && (r.current || canRevoke)
              ? '<button type="button" class="MemberUI-dots" data-dots="' + esc(r.id) + '" data-current="' + (r.current ? '1' : '0') + '" aria-label="Actions"><i class="fa-solid fa-ellipsis-vertical"></i></button>'
              : '') + '</td>' +
          '</tr>';
        }).join('') + '</tbody></table>';
    }

    function render() {
      var main = ov.querySelector('.MemberUI-set-main');
      if (!main) return;
      if (ov.classList.contains('show')) rememberOpen(state.tab);
      main.classList.toggle('MemberUI-main-fixed', state.tab === 'account');   
      if (state.tab === 'team') { renderTeam(main); return; }
      if (state.tab === 'security') { renderSecurity(main); return; }
      var others = !state.fallback && state.rows.some(function (r) { return !r.current && r.status === 'active'; });
      var body = state.loading ? '<div class="MemberUI-sess-msg">Loading…</div>'
        : state.error ? '<div class="MemberUI-sess-msg">' + esc(state.error) + '</div>'
        : table();

      main.innerHTML =
        '<h3>Account</h3><p class="sub">' + esc(state.email || cachedEmail() || userNameDK()) + '</p>' + deviceCard() +
        '<div class="MemberUI-sess-head"><strong>Recent activity</strong>' +
          (others ? '<button class="MemberUI-sess-all" type="button">Sign out other sessions</button>' : '') +
        '</div><div class="MemberUI-act-scroll">' + body + '</div>';
    }
     
    function deviceCard() {
      var d = state.device, ru = state.rules || {};
      if (state.fallback || state.loading || !d) return '';
      var br = (d.browsers || []).map(function (b) { return esc(b.name) + (b.tag ? ' <span class="MemberUI-devcard-id">' + esc(b.tag) + '</span>' : ''); }).join(', ');
      var rules = [];
      if (ru.exempt) rules.push('Your account has no device limit.');
      else if (ru.device && ru.device !== 'off') {
        rules.push('Clearing cookies or browser data changes nothing.');
        rules.push(ru.browser === 'allow' ? 'Other browsers on this device are allowed.'
          : 'Another browser on this device needs a one-time code from your email.');
        if (ru.device === 'lock') rules.push((ru.devices > 1 ? 'Signing in on more than ' + ru.devices + ' devices' : 'Signing in on another device') + ' suspends the account.');
        else if (ru.device === 'code') rules.push('Another device needs a code from your email.');
      }
      return '<div class="MemberUI-devcard">' +
          '<span class="MemberUI-devcard-ic"><i class="fa-solid ' + devIcon(d.type) + '"></i></span>' +
          '<div class="MemberUI-devcard-tx"><small>Your registered device</small>' +
            '<strong>' + esc(d.label || d.os || 'Device') + '</strong>' +
            '<span>' + (d.tag ? 'Device ID <span class="MemberUI-devcard-id">' + esc(d.tag) + '</span>' : '') +
              (br ? ' &middot; Browser: ' + br : '') + (d.since ? ' &middot; since ' + esc(fmtDT(d.since)) : '') + '</span>' +
          '</div>' +
          '<span class="MemberUI-pill ok"><i class="fa-solid fa-shield-halved"></i> Protected</span>' +
        '</div>' +
        (rules.length ? '<p class="MemberUI-devnote"><i class="fa-solid fa-circle-info"></i>' + esc(rules.join(' ')) + '</p>' : '');
    }

     
    function demoData() {
      var now = new Date().toISOString();
      var t = Date.now(), iso = function (m) { return new Date(t - m * 60000).toISOString(); };
      return { email: 'demo@example.com',
        device: { label: 'Windows · 8 cores · 1920x1080', os: 'Windows', type: 'desktop', tag: 'a1b2c3', since: '2026-09-29T23:45:00+05:00', browsers: [{ name: 'Chrome', tag: '9f8e7d' }] },
        rules: { minutes: 15, device: 'lock', browser: 'code', devices: 1, browsers: 1 },
        rows: [
        { id: '6', browser: 'Chrome', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(4), last_seen: now, current: true, status: 'active', device_tag: 'a1b2c3', browser_tag: '9f8e7d' },
        { id: '5', browser: 'Chrome', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(95), ended_at: iso(80), status: 'expired', device_tag: 'a1b2c3', browser_tag: '9f8e7d' },
        { id: '4', browser: 'Firefox', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(300), ended_at: iso(296), status: 'replaced', device_tag: 'a1b2c3', browser_tag: '17c0de' },
        { id: '3', browser: 'Edge', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(1500), ended_at: iso(1490), status: 'failed', device_tag: 'a1b2c3' },
        { id: '2', browser: 'Chrome', os: 'Windows', device_type: 'desktop', city: 'Dubai', region: 'Dubai', country: 'AE', ip: '5.31.0.3', login_at: iso(2900), ended_at: iso(2900), status: 'blocked', device_tag: '77aa99' },
        { id: '1', browser: 'Chrome', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(4400), ended_at: iso(4390), status: 'ended', device_tag: 'a1b2c3', browser_tag: '9f8e7d' }
      ] };
    }
    function sessionOrder(a, b) {
      if (!!a.current !== !!b.current) return a.current ? -1 : 1;           
      var la = Date.parse(a.login_at || a.created_at) || 0, lb = Date.parse(b.login_at || b.created_at) || 0;
      if (la !== lb) return lb - la;                                        
      return (+b.id || 0) - (+a.id || 0);
    }

    function useServer(d) {
      var seen = {}, rows = [];
      (d.history || []).concat(d.sessions || []).forEach(function (r) {
        if (seen[r.id]) return;
        seen[r.id] = 1; rows.push(r);
      });
      rows.sort(sessionOrder);
      state.fallback = false;
      state.email = d.email || state.email;
      state.rows = rows;
      state.device = d.device || null;
      state.rules = d.rules || null;
    }
    function useLocal() {
      state.fallback = true;
      state.rows = localRows();
    }
    function load() {
      state.loading = true; state.error = ''; render();
      if (DEMO) { var d = demoData(); state.fallback = false; state.email = d.email; state.rows = d.rows; state.device = d.device; state.rules = d.rules; state.loading = false; render(); return; }
      if (backendMissing()) { touchLocal(); useLocal(); state.loading = false; render(); return; }   
      fetch(API + '/list', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) {
          if (r.status === 401 || r.status === 403) { var e1 = new Error('signed-out'); e1.kind = 'auth'; throw e1; }
          var ct = r.headers.get('content-type') || '';
          if (r.status === 404 || ct.indexOf('json') === -1) { var e2 = new Error('no-plugin'); e2.kind = 'missing'; throw e2; }
          if (!r.ok) { var e3 = new Error('server'); e3.kind = 'temp'; throw e3; }
          return r.json();
        })
        .then(function (d) {
          if (!d || (!d.history && !d.sessions)) { var e4 = new Error('bad-shape'); e4.kind = 'temp'; throw e4; }
          markMissing(false);
          useServer(d); state.loading = false; render();
        })
        .catch(function (err) {
          var kind = (err && err.kind) || 'temp';
          if (kind === 'auth') { location.href = '/login'; return; }          
          if (kind === 'missing') {                                          
            markMissing(true);
            touchLocal(); useLocal(); state.loading = false; render();
            return;
          }
          
          state.loading = false; state.error = 'Could not load sessions right now. Please try again.'; render();
        });
    }
    function postDK(path, body) {
      return fetch(API + path, { method: 'POST', credentials: 'same-origin', headers: xhrHeaders(), body: JSON.stringify(body || {}) });
    }
    function revoke(id) {
      if (DEMO) {
        state.rows.forEach(function (r) { if (r.id === id) r.status = 'revoked'; });
        render(); return;
      }
      postDK('/revoke', { id: id }).then(function () { load(); }, function () { load(); });
    }
    

    var cfEl = null;
    function memberuiConfirm(o, onOk) {
      closeConfirm();
      var prevFocus = document.activeElement;
      cfEl = document.createElement('div');
      cfEl.className = 'MemberUI-cf';
      cfEl.innerHTML =
        '<div class="MemberUI-cf-box' + (o.danger ? ' danger' : '') + '" role="alertdialog" aria-modal="true" aria-labelledby="MemberUI-cf-t" aria-describedby="MemberUI-cf-d">' +
          '<div class="MemberUI-cf-ico"><i class="fa-solid ' + (o.icon || 'fa-circle-question') + '"></i></div>' +
          '<h3 id="MemberUI-cf-t">' + esc(o.title || 'Are you sure?') + '</h3>' +
          '<p id="MemberUI-cf-d">' + esc(o.text || '') + '</p>' +
          '<div class="MemberUI-cf-actions">' +
            '<button type="button" class="MemberUI-cf-btn MemberUI-cf-cancel">' + esc(o.cancel || 'Cancel') + '</button>' +
            '<button type="button" class="MemberUI-cf-btn MemberUI-cf-ok">' + esc(o.ok || 'Continue') + '</button>' +
          '</div>' +
        '</div>';
      document.body.appendChild(cfEl);
      var okBtn = cfEl.querySelector('.MemberUI-cf-ok'), noBtn = cfEl.querySelector('.MemberUI-cf-cancel');
      function done(yes) {
        closeConfirm();
        try { if (prevFocus && prevFocus.focus) prevFocus.focus(); } catch (e) {}
        if (yes && onOk) onOk();
      }
      okBtn.addEventListener('click', function () { done(true); });
      noBtn.addEventListener('click', function () { done(false); });
      cfEl.addEventListener('click', function (e) { if (e.target === cfEl) done(false); });
      cfEl.addEventListener('keydown', function (e) {
        if (e.key === 'Escape') { e.stopPropagation(); done(false); }
        if (e.key === 'Tab') {                                  
          var f = [noBtn, okBtn], i = f.indexOf(document.activeElement);
          e.preventDefault(); f[(i + 1) % 2].focus();
        }
      });
      setTimeout(function () { (o.danger ? noBtn : okBtn).focus(); }, 30);
    }
    function closeConfirm() {
      if (cfEl && cfEl.parentNode) cfEl.parentNode.removeChild(cfEl);
      cfEl = null;
    }

    function revokeOthers() {
      memberuiConfirm({
        title: 'Sign out other sessions?',
        text: 'Every other open session of your account is ended right away. You stay signed in here.',
        ok: 'Sign out', icon: 'fa-right-from-bracket', danger: true
      }, function () {
        if (DEMO) {
          state.rows.forEach(function (r) { if (!r.current && r.status === 'active') r.status = 'revoked'; });
          render(); return;
        }
        postDK('/revoke-others').then(function () { load(); }, function () { load(); });
      });
    }

    


    var team = { loaded: false, loading: false, data: null, msg: '', msgOk: false, editing: 0, busy: false, draft: null };

    function teamPost(path, body) {
      return fetch('/member-team/' + path, {
        method: 'POST', credentials: 'same-origin',
        headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' },
        body: JSON.stringify(body || {})
      }).then(function (r) { return r.json(); });
    }
    function teamDemo() {
      return { enabled: true, role: 'owner', can_invite: true, buy_url: '#',
        seats: { total: 3, used: 2, free: 1, default: 1, bought: 1, extra: 1, disabled: false },
        products: [{ id: 1, title: 'Keepa Tool' }, { id: 2, title: 'Helium 10' }, { id: 4, title: 'Jungle Scout' }],
        members: [
          { id: 11, email: 'ali@example.com', status: 'active', products: [1, 2], accepted_at: '2026-10-02T10:00:00+05:00' },
          { id: 12, email: 'sara@example.com', status: 'invited', products: [4], invited_at: '2026-10-10T18:00:00+05:00', expired: false }
        ] };
    }
    function loadTeam(cb) {
      if (DEMO) { team.data = teamDemo(); team.loaded = true; cb && cb(); return; }
      team.loading = true;
      fetch('/member-team/state', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) {
          var ct = r.headers.get('content-type') || '';
          if (ct.indexOf('json') === -1) { var err = new Error('missing'); err.http = r.status || 1; throw err; }   
          return r.json().then(function (d) {
            d = d || {};
            if (r.status === 401 || r.status === 403) d.code = 'login';
            else if (!r.ok && !d.code) { d.code = 'server'; d.http = r.status; }
            return d;
          });
        })
        .then(function (d) { team.data = d; team.loaded = true; team.loading = false; cb && cb(); })
        .catch(function (e) {
          var h = e && e.http;
          
          team.data = { enabled: false, http: h || 0, code: !h ? 'network' : (h === 404 || h === 200 || h === 1) ? 'missing' : 'server' };
          team.loaded = true; team.loading = false; cb && cb();
        });
    }
    function teamEnabled() { return !!(team.data && team.data.enabled); }
    var teamTimer = null;
    function teamWatch() {
      if (teamTimer) return;                       
      teamTimer = setTimeout(function () {
        teamTimer = null;
        var open = ov && ov.classList.contains('show') && state.tab === 'team';
        var waiting = team.data && (team.data.members || []).some(function (m) { return m.status === 'invited'; });
        var ae = document.activeElement;
        var typing = ov && ov.contains(ae) && /input|textarea/i.test(ae.tagName) && !!ae.value;   
        if (!open) return;
        if (!waiting || typing || team.editing || team.busy || document.hidden) { teamWatch(); return; }
        loadTeam(function () { if (state.tab === 'team') render(); teamWatch(); });
      }, 15000);
    }
     
    

    function teamVisible() { return !(team.data && team.data.hide_tab); }
    function showNav(b, on) {
      if (!b) return;
      if (on) b.style.removeProperty('display'); else b.style.setProperty('display', 'none', 'important');
    }
    function syncTeamNav() { showNav(ov && ov.querySelector('[data-tab="team"]'), teamVisible()); }
    function prodTitle(id) {
      var ps = (team.data && team.data.products) || [];
      for (var i = 0; i < ps.length; i++) if (+ps[i].id === +id) return ps[i].title;
      return 'Product #' + id;
    }
    function prodChecks(name, selected) {
      var ps = (team.data && team.data.products) || [];
      if (!ps.length) return '<div class="MemberUI-team-empty">You have no active products to share.</div>';
      var sel = {};
      (selected || []).forEach(function (p) { sel[+p] = 1; });
      return '<div class="MemberUI-prod-pick">' + ps.map(function (p) {
        return '<label class="MemberUI-chip-check"><input type="checkbox" name="' + name + '" value="' + esc(p.id) + '"' + (sel[+p.id] ? ' checked' : '') + '>' +
          '<span><i class="fa-solid fa-check"></i>' + esc(p.title) + '</span></label>';
      }).join('') + '</div>';
    }
    function teamDay(v) {
      if (!v) return '';
      var d = new Date(v);
      return isNaN(d) ? '' : d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });
    }
     
    var TM_TONES = ['#2563eb', '#0d9488', '#7c3aed', '#0891b2', '#4f46e5', '#475569'];
    function tmTone(email) {
      var h = 0, e = String(email || '');
      for (var i = 0; i < e.length; i++) h = (h * 31 + e.charCodeAt(i)) >>> 0;
      return TM_TONES[h % TM_TONES.length];
    }
    function tmInitials(email) {
      var local = String(email || '?').split('@')[0];
      var parts = local.split(/[._\-+0-9]+/).filter(Boolean);
      return (parts.length > 1 ? parts[0].charAt(0) + parts[1].charAt(0) : (parts[0] || local || '?').charAt(0)).toUpperCase();
    }
    function tmAvatar(email, cls, letters) {
      return '<span class="MemberUI-tm-av' + (cls ? ' ' + cls : '') + '" style="--tone:' + tmTone(email) + '" aria-hidden="true">' + esc(tmInitials(letters || email)) + '</span>';
    }
     
    function tmState(m) {
      var day;
      if (m.suspended) { day = teamDay(m.suspended_at); return { key: 'bad', seat: 'suspended', text: 'Suspended' + (day ? ' ' + day : '') + ' by the site' }; }
      if (m.status === 'active') { day = teamDay(m.accepted_at); return { key: 'ok', seat: 'taken', text: 'Accepted' + (day ? ' ' + day : '') }; }
      if (m.status === 'paused') return { key: 'off', seat: 'paused', text: 'Paused by you' };
      if (m.status === 'declined') { day = teamDay(m.declined_at); return { key: 'bad', seat: '', text: 'Declined' + (day ? ' ' + day : '') }; }
      if (m.expired) return { key: 'bad', seat: 'invited', text: 'Invite expired. Resend it from the menu' };
      day = teamDay(m.invited_at);
      return { key: 'wait', seat: 'invited', text: 'Invited' + (day ? ' ' + day : '') + ', waiting for an answer' };
    }
    function teamStatus(m) {          
      var st = tmState(m);
      return '<span class="MemberUI-tm-st ' + st.key + '">' + esc(st.text) + '</span>';
    }
     
    function tmSeats(d, s) {
      var MAX_TAKEN = 10, taken = [], order = { taken: 0, paused: 1, suspended: 2, invited: 3 };
      (d.members || []).forEach(function (m) { var st = tmState(m); if (st.seat) taken.push({ m: m, st: st }); });
      taken.sort(function (a, b) { return order[a.st.seat] - order[b.st.seat]; });
      var total = Math.max(s.total || 0, taken.length), free = Math.max(0, total - taken.length);
      var cells = [], shownTaken = 0;
      var canInvite = d.can_invite && (s.free || 0) > 0;
      var freeShown = total > 8 ? Math.min(free, 3) : free;           
      taken.forEach(function (t) {
        if (shownTaken >= MAX_TAKEN) return;
        shownTaken++;
        var label = t.m.email + ': ' + t.st.text;
        cells.push('<button type="button" class="MemberUI-tm-seat is-' + t.st.seat + '" style="--tone:' + tmTone(t.m.email) + '" data-team="seat-member" data-id="' + t.m.id + '" title="' + esc(label) + '" aria-label="' + esc(label) + '">' +
          esc(tmInitials(t.m.email)) + (t.st.seat === 'suspended' ? '<i class="fa-solid fa-lock" aria-hidden="true"></i>' : '') + '</button>');
      });
      if (taken.length > shownTaken) cells.push('<span class="MemberUI-tm-seat is-more" title="' + (taken.length - shownTaken) + ' more people">+' + (taken.length - shownTaken) + '</span>');
      for (var i = 0; i < freeShown; i++) {
        cells.push(canInvite
          ? '<button type="button" class="MemberUI-tm-seat is-free" data-team="focus-invite" title="Free seat: invite someone" aria-label="Free seat: invite someone"><i class="fa-solid fa-plus" aria-hidden="true"></i></button>'
          : '<span class="MemberUI-tm-seat is-free is-idle" title="Free seat"></span>');
      }
      if (free > freeShown) cells.push('<span class="MemberUI-tm-more">+' + (free - freeShown) + ' free</span>');
      return cells.length ? '<div class="MemberUI-tm-strip" role="group" aria-label="Your seats">' + cells.join('') + '</div>' : '';
    }

    function renderTeam(main) {
      var d = team.data;
      teamWatch();
      if (!team.loaded) { main.innerHTML = '<div class="MemberUI-tm"><h3>Team</h3><div class="MemberUI-sess-msg">Loading your team…</div></div>'; return; }
      if (!d || !d.enabled) {
        var why = 'Teams are not available.', retry = false;
        if (d && !d.v && !d.code && d.enabled === false) { why = 'Team is not ready yet: the team plugin on the server is an old version (upload the latest member-team.php).'; retry = true; }
        else if (d && d.code === 'off') { why = 'Teams are switched off on this site right now.'; }
        else if (d && d.code === 'not_loaded') { why = 'Team is not ready yet: the MemberUI Team plugin is not active on the server.'; retry = true; }
        else if (d && d.code === 'server') { why = (d.error || 'Team is temporarily unavailable. Please try again in a minute.') + (d.http ? ' (HTTP ' + d.http + ')' : ''); retry = true; }
        else if (d && d.code === 'missing') { why = 'Team is not set up on this site yet' + (d.http > 1 ? ' (HTTP ' + d.http + ' at /member-team/state)' : '') + '.'; retry = true; }
        else if (d && d.code === 'network') { why = 'Could not reach the server. Please check your internet connection.'; retry = true; }
        else if (d && d.code === 'login') { why = 'Your session has ended. Please <a href="/login">sign in again</a>.'; }
        main.innerHTML = '<div class="MemberUI-tm"><h3>Team</h3><div class="MemberUI-sess-msg">' + (d && d.code === 'login' ? why : esc(why)) +
          (d && d.debug ? '<br><small style="display:block;margin-top:8px;font-family:monospace;font-size:11px;color:#b83245;word-break:break-word">Admin info: ' + esc(d.debug) + '</small>' : '') +
          (retry ? '<br><button type="button" class="MemberUI-team-btn ghost" data-team="retry" style="margin-top:12px">Try again</button>' : '') +
          '</div></div>';
        return;
      }

      if (d.role === 'member') {
        var ownerName = d.owner ? d.owner.name : 'your team owner';
        var notice = d.suspended
          ? '<div class="MemberUI-tm-note warn"><i class="fa-solid fa-lock" aria-hidden="true"></i><span>The team owner’s account is suspended, so your team access is paused.</span></div>'
          : d.paused ? '<div class="MemberUI-tm-note warn"><i class="fa-solid fa-pause" aria-hidden="true"></i><span>Your access is paused by ' + esc(ownerName) + '. Ask them to resume it.</span></div>' : '';
        main.innerHTML = '<div class="MemberUI-tm"><h3>Team</h3><p class="sub">Your access is managed by your team owner.</p>' + notice +
          '<section class="MemberUI-tm-panel MemberUI-tm-ownerbox">' + tmAvatar(d.owner && d.owner.email ? d.owner.email : ownerName, 'is-lg', ownerName) +
            '<div class="MemberUI-tm-who"><strong>You are on ' + esc(ownerName) + '’s team</strong>' +
            (d.owner && d.owner.email ? '<span class="MemberUI-tm-meta">' + esc(d.owner.email) + '</span>' : '') + '</div></section>' +
          '<div class="MemberUI-tm-h">Your tools</div>' +
          ((d.products || []).length
            ? '<div class="MemberUI-tm-tools">' + d.products.map(function (p) { return '<span class="MemberUI-tm-tool">' + esc(p.title) + '</span>'; }).join('') + '</div>'
            : '<div class="MemberUI-tm-empty">No tools are shared with you right now.</div>') +
          '</div>';
        return;
      }

      var s = d.seats || { total: 0, used: 0, free: 0 };
      var parts = [];
      if (s.default) parts.push(s.default + ' included');
      if (s.bought) parts.push(s.bought + ' bought');
      if (s.extra) parts.push(s.extra + ' extra');
      var full = s.total > 0 && s.free < 1;
      var buy = d.buy_url
        ? '<a class="MemberUI-tm-buy' + (full || s.total < 1 ? ' is-primary' : '') + '" href="' + esc(d.buy_url) + '"><i class="fa-solid fa-plus" aria-hidden="true"></i> Buy more seats</a>'
        : '<span class="MemberUI-tm-buy is-quiet">Contact support for more seats</span>';

      var seatNote;
      if (!d.can_invite) seatNote = s.disabled ? 'Team features are turned off for this account. Please contact support.' : 'You need an active subscription to invite people.';
      else if (s.total < 1) seatNote = d.buy_url ? 'Buy seats to invite your team.' : 'Contact support to get team seats for your account.';
      else if (full) seatNote = 'All seats are taken. Buy more seats or remove someone to invite a new person.';
      else seatNote = s.free + (s.free === 1 ? ' seat is free.' : ' seats are free.') + ' Pick a free seat or use the form below.';
      if (parts.length && s.total > 0) seatNote = parts.join(', ') + '. ' + seatNote;

      var invite = '';
      if (d.can_invite && s.total > 0 && !full) {
        invite = '<section class="MemberUI-tm-invite"><label class="MemberUI-tm-h" for="memberui-tm-email">Invite someone</label>' +
          '<div class="MemberUI-tm-inv-row"><div class="MemberUI-tm-field"><i class="fa-regular fa-envelope" aria-hidden="true"></i>' +
          '<input id="memberui-tm-email" type="email" class="MemberUI-inv-email" placeholder="name@email.com" autocomplete="off" value="' + esc(team.draft ? team.draft.email : '') + '"></div>' +
          '<button type="button" class="MemberUI-team-btn MemberUI-tm-send" data-team="invite"' + (team.busy ? ' disabled' : '') + '><i class="fa-solid fa-paper-plane" aria-hidden="true"></i> Send invite</button></div>' +
          '<div class="MemberUI-tm-sub">Tools they can use</div>' +
          prodChecks('inv-prod', team.draft ? team.draft.prods : ((d.products || []).length === 1 ? [d.products[0].id] : [])) + '</section>';
      }

      var members = d.members || [];
      var known = {};
      (d.products || []).forEach(function (p) { known[+p.id] = 1; });
      var rows = members.map(function (m) {
        var st = tmState(m);
        var chips = (m.products || []).map(function (p) {
          return known[+p] ? '<span class="MemberUI-tm-tool">' + esc(prodTitle(p)) + '</span>'
                           : '<span class="MemberUI-tm-tool is-gone" title="This tool is not active on your account any more">' + esc(prodTitle(p)) + '</span>';
        }).join('');
        var actKey = m.suspended ? 'suspended' : m.status;
        var editor = team.editing === m.id
          ? '<li class="MemberUI-tm-edit"><div class="MemberUI-tm-sub">Tools ' + esc(m.email) + ' can use</div>' + prodChecks('edit-prod', m.products) +
            '<div class="MemberUI-team-edit-actions"><button type="button" class="MemberUI-team-btn MemberUI-tm-send" data-team="save" data-id="' + m.id + '">Save access</button>' +
            '<button type="button" class="MemberUI-team-btn ghost" data-team="cancel">Cancel</button></div></li>'
          : '';
        var avCls = st.seat === 'invited' ? 'is-invited' : (st.seat === 'paused' ? 'is-paused' : (st.seat === 'suspended' ? 'is-suspended' : (st.seat ? '' : 'is-gone')));
        return '<li class="MemberUI-tm-row is-' + st.key + (team.editing === m.id ? ' is-editing' : '') + '" data-member="' + m.id + '">' +
          tmAvatar(m.email, avCls) +
          '<div class="MemberUI-tm-who"><strong title="' + esc(m.email) + '">' + esc(m.email) + '</strong><span class="MemberUI-tm-st ' + st.key + '">' + esc(st.text) + '</span></div>' +
          '<div class="MemberUI-tm-tools">' + (chips || '<span class="MemberUI-tm-meta">No tools</span>') + '</div>' +
          (teamActions(actKey).length
            ? '<button type="button" class="MemberUI-dots" data-team-dots="' + m.id + '" data-status="' + esc(actKey) + '" aria-label="Actions for ' + esc(m.email) + '"><i class="fa-solid fa-ellipsis-vertical"></i></button>'
            : '<span class="MemberUI-tm-nodots"></span>') +
          '</li>' + editor;
      }).join('');

      main.innerHTML = '<div class="MemberUI-tm">' +
        '<h3>Team</h3><p class="sub">Give your team their own login. You decide what each person can use.</p>' +
        (d.notice ? '<div class="MemberUI-tm-note warn"><i class="fa-solid fa-triangle-exclamation" aria-hidden="true"></i><span>' + esc(d.notice) + '</span></div>' : '') +
        '<section class="MemberUI-tm-panel MemberUI-tm-seats' + (full ? ' is-full' : '') + '">' +
          '<div class="MemberUI-tm-seats-top"><div class="MemberUI-tm-count">' + (s.total > 0 ? '<b>' + s.used + '</b> of <b>' + s.total + '</b> seats used' : 'No team seats yet') + '</div>' + buy + '</div>' +
          tmSeats(d, s) +
          '<p class="MemberUI-tm-seatnote">' + esc(seatNote) + '</p>' +
        '</section>' +
        invite +
        '<div class="MemberUI-team-msg ' + (team.msgOk ? 'ok' : 'err') + '" aria-live="polite">' + esc(team.msg) + '</div>' +
        '<section class="MemberUI-tm-members"><div class="MemberUI-tm-h">Members' + (members.length ? ' <span class="MemberUI-tm-n">' + members.length + '</span>' : '') + '</div>' +
        (rows ? '<ul class="MemberUI-tm-list">' + rows + '</ul>'
              : '<div class="MemberUI-tm-empty">No one on your team yet. ' + (invite ? 'Invite someone above and they get their own login.' : 'Once you have a free seat, you can invite people here.') + '</div>') +
        '</section></div>';
    }

    function checked(name) {
      var out = [];
      var els = ov.querySelectorAll('input[name="' + name + '"]:checked');
      for (var i = 0; i < els.length; i++) out.push(+els[i].value);
      return out;
    }
    function keepDraft() {
      var em = ov.querySelector('.MemberUI-inv-email');
      if (em) team.draft = { email: em.value, prods: checked('inv-prod') };
    }
    function teamSay(msg, ok) {
      if (ok) team.draft = null; else keepDraft();
      team.msg = msg || ''; team.msgOk = !!ok; render();
    }
    function teamCall(path, body, okMsg) {
      if (DEMO) { teamSay(okMsg + ' (demo)', true); return; }
      keepDraft();
      team.busy = true;
      teamPost(path, body).then(function (r) {
        team.busy = false;
        if (r && r.ok) { team.editing = 0; loadTeam(function () { teamSay((r.warning || r.note || okMsg) + (r.debug ? ' [' + r.debug + ']' : ''), !r.warning); }); }
        else teamSay(((r && r.error) || 'Something went wrong. Please try again.') + (r && r.debug ? ' [' + r.debug + ']' : ''));
      }).catch(function () { team.busy = false; teamSay('Network error. Please try again.'); });
    }
    function teamClick(e) {
      var b = e.target.closest('[data-team]');
      if (!b) return false;
      var a = b.getAttribute('data-team');
      if (a === 'invite') {
        var email = (ov.querySelector('.MemberUI-inv-email') || {}).value || '';
        var prods = checked('inv-prod');
        if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim())) { teamSay('Please enter a valid email address.'); return true; }
        if (!prods.length) { teamSay('Choose at least one product to share.'); return true; }
        teamCall('invite', { email: email.trim(), products: prods }, 'Invitation sent to ' + email.trim() + '.');
      } else if (a === 'save') {
        var p2 = checked('edit-prod');
        if (!p2.length) { teamSay('Choose at least one product, or remove the member.'); return true; }
        teamCall('update', { id: +b.getAttribute('data-id'), products: p2 }, 'Access updated.');
      } else if (a === 'retry') {
        team.loaded = false; render();
        loadTeam(function () { syncTeamNav(); render(); });
      } else if (a === 'cancel') {
        team.editing = 0; render();
      } else if (a === 'focus-invite') {
        var fe = ov.querySelector('.MemberUI-tm .MemberUI-inv-email');
        if (fe) { try { fe.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); } catch (er) {} fe.focus(); }
      } else if (a === 'seat-member') {
        var row = ov.querySelector('.MemberUI-tm-row[data-member="' + (+b.getAttribute('data-id')) + '"]');
        if (row) {
          try { row.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); } catch (er) {}
          row.classList.remove('is-flash'); void row.offsetWidth; row.classList.add('is-flash');
          setTimeout(function () { row.classList.remove('is-flash'); }, 1600);
        }
      }
      return true;
    }
     
    function teamActions(status) {
      var p = (team.data && team.data.perm) || { edit: true, pause: true, remove: true, resend: true }, a = [];
      if (status === 'declined' || status === 'suspended') { if (p.remove) a.push('remove'); return a; }   
      if (p.edit) a.push('edit');
      if (status === 'invited' && p.resend) a.push('resend');
      if (status === 'invited') a.push('copy');                       
      if (status === 'active' && p.pause) a.push('pause');
      if (status === 'paused' && p.pause) a.push('resume');
      if (p.remove) a.push('remove');
      return a;
    }
    function toggleTeamMenu(btn) {
      var id = btn.getAttribute('data-team-dots');
      if (rowMenu.classList.contains('show') && rowMenu.getAttribute('data-id') === 'team-' + id) { closeRowMenu(); return; }
      var r = btn.getBoundingClientRect();
      rowMenu.setAttribute('data-id', 'team-' + id);
      var st = btn.getAttribute('data-status'), acts = teamActions(st), mid = esc(id);
      var label = {
        edit: '<button type="button" data-do="team-edit" data-mid="' + mid + '"><i class="fa-solid fa-sliders"></i> Edit access</button>',
        resend: '<button type="button" data-do="team-resend" data-mid="' + mid + '"><i class="fa-solid fa-paper-plane"></i> Resend invite</button>',
        copy: '<button type="button" data-do="team-copy" data-mid="' + mid + '"><i class="fa-solid fa-link"></i> Copy invite link</button>',
        pause: '<button type="button" data-do="team-pause" data-mid="' + mid + '"><i class="fa-solid fa-pause"></i> Pause access</button>',
        resume: '<button type="button" data-do="team-resume" data-mid="' + mid + '"><i class="fa-solid fa-play"></i> Resume access</button>',
        remove: st === 'declined'
          ? '<button type="button" class="out" data-do="team-remove" data-mid="' + mid + '"><i class="fa-solid fa-xmark"></i> Remove from list</button>'
          : '<button type="button" class="out" data-do="team-remove" data-mid="' + mid + '"><i class="fa-solid fa-user-minus"></i> ' + (st === 'invited' ? 'Cancel invite' : 'Remove') + '</button>'
      };
      rowMenu.innerHTML = acts.map(function (a) { return label[a]; }).join('');
      rowMenu.style.top = (r.bottom + 6) + 'px';
      rowMenu.style.left = Math.max(12, r.right - 180) + 'px';
      rowMenu.classList.add('show');
    }
    function teamMenuAction(btn) {
      var act = btn.getAttribute('data-do'), id = +btn.getAttribute('data-mid');
      closeRowMenu();
      if (act === 'team-edit') { team.editing = id; team.msg = ''; render(); }
      else if (act === 'team-resend') teamCall('resend', { id: id }, 'Invitation sent again. The link stays the same.');
      else if (act === 'team-copy') {
        var mm = ((team.data && team.data.members) || []).filter(function (x) { return x.id === id; })[0];
        if (!mm || !mm.link) { teamSay('This invitation has no link any more. Use Resend invite.'); return; }
        var done = function () { teamSay('Invitation link copied. Send it to ' + mm.email + ' (WhatsApp, email). It works until the invitation expires.', true); };
        var fallback = function () {
          try {
            var ta = document.createElement('textarea');
            ta.value = mm.link; ta.setAttribute('readonly', ''); ta.style.cssText = 'position:fixed;top:-1000px;opacity:0';
            document.body.appendChild(ta); ta.select(); document.execCommand('copy'); ta.remove(); done();
          } catch (er) { teamSay('Copy this link: ' + mm.link, true); }
        };
        try { navigator.clipboard.writeText(mm.link).then(done, fallback); } catch (er) { fallback(); }
      }
      else if (act === 'team-pause') {
        memberuiConfirm({
          title: 'Pause this member?',
          text: 'They keep their seat, but cannot use any tools until you resume their access.',
          ok: 'Pause access', icon: 'fa-pause', danger: false
        }, function () { teamCall('pause', { id: id }, 'Member paused. Their access is stopped.'); });
      }
      else if (act === 'team-resume') teamCall('resume', { id: id }, 'Member resumed. Access restored.');
      else if (act === 'team-remove') {
        memberuiConfirm({
          title: 'Remove this member?',
          text: 'Their access ends right away and the seat becomes free for someone else.',
          ok: 'Remove member', icon: 'fa-user-minus', danger: true
        }, function () { teamCall('remove', { id: id }, 'Member removed.'); });
      }
    }

    


    var sec = { loaded: false, data: null, step: '', setup: null, codes: null, msg: '', msgOk: false, ask: '', busy: false };
    var QR_LIB = 'https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js';

    function secPost(path, body) {
      return fetch('/memberui-2fa/' + path, {
        method: 'POST', credentials: 'same-origin',
        headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' },
        body: JSON.stringify(body || {})
      }).then(function (r) { return r.json(); });
    }
    function loadSec(cb) {
      if (DEMO) { sec.data = { enabled: true, on: false, required: false, can_disable: false, backup_left: 0, trusted: 0, trust_days: 30 }; sec.loaded = true; cb && cb(); return; }
      fetch('/memberui-2fa/state', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) { var ct = r.headers.get('content-type') || ''; if (!r.ok || ct.indexOf('json') === -1) throw 0; return r.json(); })
        .then(function (d) { sec.data = d; sec.loaded = true; cb && cb(); })
        .catch(function () { sec.data = { enabled: false }; sec.loaded = true; cb && cb(); });
    }
    function secEnabled() { return !!(sec.data && sec.data.enabled); }
    function syncSecNav() { showNav(ov && ov.querySelector('[data-tab="security"]'), secEnabled()); }
    function secSay(m, ok) { sec.msg = m || ''; sec.msgOk = !!ok; render(); }
    function groupKey(k) { return String(k || '').replace(/(.{4})/g, '$1 ').trim(); }

    function drawQr() {
      var box = ov.querySelector('.MemberUI-qr');
      if (!box || !sec.setup) return;
      function paint() {
        try {
          box.innerHTML = '';
          new window.QRCode(box, { text: sec.setup.otpauth, width: 168, height: 168, correctLevel: window.QRCode.CorrectLevel.M });
        } catch (e) { box.innerHTML = '<span>Enter the key below in your app.</span>'; }
      }
      if (window.QRCode) { paint(); return; }
      var s = document.createElement('script');
      s.src = QR_LIB; s.async = true;
      s.onload = paint;
      s.onerror = function () { box.innerHTML = '<span>QR code could not load. Enter the key below in your app.</span>'; };
      document.head.appendChild(s);
    }

    function codesHtml(list) {
      return '<div class="MemberUI-codes">' + list.map(function (c) { return '<code>' + esc(c) + '</code>'; }).join('') + '</div>' +
        '<div class="MemberUI-2fa-row"><button type="button" class="MemberUI-team-btn ghost" data-sec="copy-codes"><i class="fa-solid fa-copy"></i> Copy</button>' +
        '<button type="button" class="MemberUI-team-btn ghost" data-sec="download-codes"><i class="fa-solid fa-download"></i> Download</button></div>';
    }
    function askHtml(label) {
      return '<div class="MemberUI-2fa-ask"><label>' + label + '</label><div class="MemberUI-inv-row">' +
        '<input class="MemberUI-inv-email MemberUI-sec-code" inputmode="numeric" autocomplete="one-time-code" placeholder="6-digit code or backup code" maxlength="12">' +
        '<button type="button" class="MemberUI-team-btn" data-sec="ask-go">Confirm</button>' +
        '<button type="button" class="MemberUI-team-btn ghost" data-sec="ask-cancel">Cancel</button></div></div>';
    }

    function renderSecurity(main) {
      var d = sec.data;
      if (!sec.loaded) { main.innerHTML = '<h3>Security</h3><div class="MemberUI-sess-msg">Loading…</div>'; return; }
      if (!d || !d.enabled) { main.innerHTML = '<h3>Security</h3><div class="MemberUI-sess-msg">Not available.</div>'; return; }
      var msg = '<div class="MemberUI-team-msg ' + (sec.msgOk ? 'ok' : 'err') + '" aria-live="polite">' + esc(sec.msg) + '</div>';
      var head = '<h3>Security</h3><p class="sub">Protect your account with a code from an authenticator app.</p>' +
        (d.required && !d.on ? '<div class="MemberUI-team-empty MemberUI-team-warn"><i class="fa-solid fa-shield-halved"></i> Your account requires two-factor authentication. Please turn it on to continue.</div>' : '');

      if (sec.step === 'codes' && sec.codes) {
        main.innerHTML = head + '<div class="MemberUI-team-card"><div class="MemberUI-team-title"><i class="fa-solid fa-key"></i> Save your backup codes</div>' +
          '<p class="MemberUI-2fa-p">If you lose your phone, each code lets you sign in once. Keep them somewhere safe; they will not be shown again.</p>' +
          codesHtml(sec.codes) +
          '<button type="button" class="MemberUI-team-btn MemberUI-2fa-done" data-sec="done">I saved my codes</button>' + msg + '</div>';
        return;
      }
      if (sec.step === 'qr' && sec.setup) {
        main.innerHTML = head + '<div class="MemberUI-team-card"><div class="MemberUI-team-title">Set up two-factor authentication</div>' +
          '<ol class="MemberUI-2fa-steps"><li>Install <b>Google Authenticator</b>, <b>Microsoft Authenticator</b> or <b>Authy</b> on your phone.</li>' +
          '<li>Scan this QR code with the app (or enter the key).</li><li>Type the 6-digit code the app shows.</li></ol>' +
          '<div class="MemberUI-2fa-setup"><div class="MemberUI-qr"><span>Loading QR code…</span></div>' +
          '<div class="MemberUI-2fa-key"><small>Key</small><code>' + esc(groupKey(sec.setup.secret)) + '</code>' +
          '<button type="button" class="MemberUI-team-btn ghost" data-sec="copy-key"><i class="fa-solid fa-copy"></i> Copy key</button>' +
          '<small>Account: ' + esc(sec.setup.account) + '</small></div></div>' +
          '<div class="MemberUI-inv-row MemberUI-2fa-confirm"><input class="MemberUI-inv-email MemberUI-sec-code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" placeholder="123456" aria-label="6-digit code">' +
          '<button type="button" class="MemberUI-team-btn" data-sec="confirm"' + (sec.busy ? ' disabled' : '') + '>Turn on</button>' +
          '<button type="button" class="MemberUI-team-btn ghost" data-sec="cancel-setup">Cancel</button></div>' + msg + '</div>';
        drawQr();
        return;
      }
      if (!d.on) {
        main.innerHTML = head + '<div class="MemberUI-team-card MemberUI-2fa-status"><div class="MemberUI-2fa-ico off"><i class="fa-solid fa-shield-halved"></i></div>' +
          '<div class="MemberUI-2fa-txt"><strong>Two-factor authentication is off</strong><small>Add a second step to your sign-in so a stolen password is not enough.</small></div>' +
          '<button type="button" class="MemberUI-team-btn" data-sec="start"' + (sec.busy ? ' disabled' : '') + '>Turn on</button></div>' + msg;
        return;
      }
      main.innerHTML = head +
        '<div class="MemberUI-team-card MemberUI-2fa-status"><div class="MemberUI-2fa-ico on"><i class="fa-solid fa-shield-halved"></i></div>' +
          '<div class="MemberUI-2fa-txt"><strong>Two-factor authentication is on <span class="MemberUI-pill ok">On</span></strong>' +
          '<small>' + (d.since ? 'Since ' + esc(fmtDT(d.since)) + '. ' : '') + 'We ask for a code when you sign in on a new browser.</small></div></div>' +
        '<div class="MemberUI-team-card"><div class="MemberUI-2fa-line"><div><strong>Backup codes</strong><small>' + (+d.backup_left) + ' of 10 left' +
          (d.backup_left <= 3 ? ' — make new ones soon' : '') + '</small></div>' +
          '<button type="button" class="MemberUI-team-btn ghost" data-sec="ask" data-what="regen">New codes</button></div>' +
        (d.trust_days > 0 ? '<div class="MemberUI-2fa-line"><div><strong>Remembered browsers</strong><small>' + (+d.trusted) + ' browser(s) skip the code for ' + (+d.trust_days) + ' days</small></div>' +
          '<button type="button" class="MemberUI-team-btn ghost" data-sec="forget"' + (+d.trusted ? '' : ' disabled') + '>Forget all</button></div>' : '') +
        (d.can_disable ? '<div class="MemberUI-2fa-line"><div><strong>Turn off</strong><small>You will only need your password to sign in.</small></div>' +
          '<button type="button" class="MemberUI-team-btn ghost danger" data-sec="ask" data-what="disable">Turn off</button></div>' : '') +
        (sec.ask ? askHtml(sec.ask === 'disable' ? 'Enter a code to turn off two-factor authentication' : 'Enter a code to make new backup codes') : '') +
        (sec.codes ? '<div class="MemberUI-team-title" style="margin-top:14px">Your new backup codes</div>' + codesHtml(sec.codes) : '') +
        msg + '</div>';
    }

    function secCodeVal() { var i = ov.querySelector('.MemberUI-sec-code'); return i ? i.value.trim() : ''; }
    function secClick(e) {
      var b = e.target.closest('[data-sec]');
      if (!b) return false;
      var a = b.getAttribute('data-sec');
      if (a === 'start') {
        if (DEMO) { sec.setup = { secret: 'JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP', otpauth: 'otpauth://totp/Demo:demo@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Demo', account: 'demo@example.com' }; sec.step = 'qr'; secSay(''); return true; }
        sec.busy = true; render();
        secPost('setup-start').then(function (r) {
          sec.busy = false;
          if (r && r.ok) { sec.setup = r; sec.step = 'qr'; secSay(''); } else secSay((r && r.error) || 'Please try again.');
        }).catch(function () { sec.busy = false; secSay('Network error. Please try again.'); });
      } else if (a === 'confirm') {
        var code = secCodeVal().replace(/\D/g, '');
        if (code.length !== 6) { secSay('Enter the 6-digit code from the app.'); return true; }
        if (DEMO) { sec.codes = ['abcde-12345', 'fghij-67890']; sec.step = 'codes'; secSay(''); return true; }
        sec.busy = true;
        secPost('setup-confirm', { code: code }).then(function (r) {
          sec.busy = false;
          if (r && r.ok) { sec.codes = r.backup_codes; sec.step = 'codes'; sec.setup = null; secSay(''); }
          else secSay((r && r.error) || 'That code is not right.');
        }).catch(function () { sec.busy = false; secSay('Network error. Please try again.'); });
      } else if (a === 'cancel-setup') { sec.step = ''; sec.setup = null; secSay(''); }
      else if (a === 'done') { sec.step = ''; sec.codes = null; loadSec(function () { secSay('Two-factor authentication is on.', true); }); }
      else if (a === 'copy-key') { try { navigator.clipboard.writeText(sec.setup.secret); secSay('Key copied.', true); } catch (er) {} }
      else if (a === 'copy-codes') { try { navigator.clipboard.writeText(sec.codes.join('\n')); secSay('Codes copied.', true); } catch (er) {} }
      else if (a === 'download-codes') {
        var blob = new Blob(['Backup codes (each works once)\n\n' + sec.codes.join('\n') + '\n'], { type: 'text/plain' });
        var l = document.createElement('a'); l.href = URL.createObjectURL(blob); l.download = 'backup-codes.txt'; document.body.appendChild(l); l.click(); l.remove();
      }
      else if (a === 'ask') { sec.ask = b.getAttribute('data-what'); sec.codes = null; secSay(''); var i = ov.querySelector('.MemberUI-sec-code'); if (i) i.focus(); }
      else if (a === 'ask-cancel') { sec.ask = ''; secSay(''); }
      else if (a === 'ask-go') {
        var c2 = secCodeVal();
        if (!c2) { secSay('Enter a code.'); return true; }
        var what = sec.ask;
        secPost(what === 'disable' ? 'disable' : 'backup-regenerate', { code: c2 }).then(function (r) {
          if (!r || !r.ok) { secSay((r && r.error) || 'That code is not right.'); return; }
          sec.ask = '';
          if (what === 'regen') { sec.codes = r.backup_codes; loadSec(function () { secSay('New backup codes created. Old ones no longer work.', true); }); }
          else loadSec(function () { secSay('Two-factor authentication is off.', true); });
        }).catch(function () { secSay('Network error. Please try again.'); });
      } else if (a === 'forget') {
        secPost('forget-devices').then(function () { loadSec(function () { secSay('All remembered browsers will be asked for a code again.', true); }); });
      }
      return true;
    }

     
    function closeRowMenu() { if (rowMenu) rowMenu.classList.remove('show'); }
    function toggleRowMenu(btn) {
      if (rowMenu.classList.contains('show') && rowMenu.getAttribute('data-id') === btn.getAttribute('data-dots')) { closeRowMenu(); return; }
      var r = btn.getBoundingClientRect();
      rowMenu.setAttribute('data-id', btn.getAttribute('data-dots'));
      rowMenu.setAttribute('data-current', btn.getAttribute('data-current'));
      rowMenu.innerHTML = '<button type="button" class="out" data-do="logout"><i class="fa-solid fa-right-from-bracket"></i> Log out</button>';
      rowMenu.style.top = (r.bottom + 6) + 'px';
      rowMenu.style.left = Math.max(12, r.right - 160) + 'px';
      rowMenu.classList.add('show');
    }
    function rowLogout() {
      var id = rowMenu.getAttribute('data-id'), cur = rowMenu.getAttribute('data-current') === '1';
      closeRowMenu();
      if (cur) {
        if (DEMO) { state.rows.forEach(function (r) { if (r.current) r.status = 'ended'; }); render(); return; }
        endLocal();
        window.location.href = findLogoutHref();
      } else {
        revoke(id);
      }
    }

    

    function enhanceUserBlock() {
      var el = document.querySelector('.am-user-identity-block_login');
      if (!el || el.querySelector('.MemberUI-uname')) return;
      var first = el.firstChild;
      if (!first || first.nodeType !== 3) return;
      var name = document.createElement('span');
      name.className = 'MemberUI-uname';
      name.title = (first.textContent || '').trim();
      el.insertBefore(name, first);
      name.appendChild(first);
      var pro = document.createElement('span');
      pro.className = 'MemberUI-pro';
      pro.setAttribute('aria-label', 'Pro member');
      name.parentNode.insertBefore(pro, name.nextSibling);
    }

     
    function addToggle() {
      var block = document.querySelector('.am-user-identity-block-avatar');
      if (!block || block.querySelector('.MemberUI-ub-toggle')) return;
      var b = document.createElement('button');
      b.type = 'button';
      b.className = 'MemberUI-ub-toggle';
      b.setAttribute('aria-label', 'Account menu');
      b.setAttribute('aria-haspopup', 'menu');
      b.setAttribute('aria-expanded', 'false');
      b.innerHTML = '<i class="fa-solid fa-chevron-up"></i>';
      block.appendChild(b);
    }

     
    function init() {
      if (started) return;
      if (!document.body.classList.contains('am-logged-in')) return;
      started = true;
      try { enhanceUserBlock(); } catch (e) {}
      try { addToggle(); } catch (e) {}
      try { initPlan(); } catch (e) {}
      if (/[?&]setup2fa=1/.test(location.search) || /^\/member\/?$/.test(location.pathname)) {
        idle(function () {
          loadSec(function () {
            if (sec.data && sec.data.enabled && sec.data.required && !sec.data.on) { state.tab = 'security'; openModal(); }
          });
        });
      }
      idle(function () { touchLocal(); ping(); loadMe(); });

      menu = document.createElement('div');
      menu.className = 'MemberUI-menu';
      document.body.appendChild(menu);

      ov = document.createElement('div');
      ov.className = 'MemberUI-set-ov';
      document.body.appendChild(ov);
      var reopenTab = savedOpen();

      rowMenu = document.createElement('div');
      rowMenu.className = 'MemberUI-menu MemberUI-rowmenu';
      document.body.appendChild(rowMenu);
      rowMenu.addEventListener('click', function (e) {
        if (e.target.closest('[data-do="logout"]')) { rowLogout(); return; }
        var tb = e.target.closest('[data-do^="team-"]');
        if (tb) teamMenuAction(tb);
      });
      ov.addEventListener('scroll', closeRowMenu, true);
      if (reopenTab) {                     
        state.tab = /^(account|team|security)$/.test(reopenTab) ? reopenTab : 'account';
        try { openModal(); } catch (e) {}
      }

      document.addEventListener('click', function (e) {
        if (e.target.closest('a[href*="logout"]')) endLocal();
        var tog = e.target.closest('.MemberUI-ub-toggle');
        if (tog) {
          e.preventDefault();
          e.stopPropagation();
          if (menu.classList.contains('show')) closeMenu();
          else openMenu(tog.closest('.am-user-identity-block-avatar') || tog);
          return;
        }
        if (e.target.closest('.MemberUI-menu [data-act="settings"]')) { closeMenu(); openModal(); return; }
        if (!e.target.closest('.MemberUI-menu')) closeMenu();
      });

      ov.addEventListener('click', function (e) {
        if (e.target.closest('.MemberUI-set-close')) { closeModal(); return; }
        if (e.target === ov) { closeRowMenu(); nudgeClose(); return; }   
        var tabBtn = e.target.closest('[data-tab]');
        if (tabBtn) {
          state.tab = tabBtn.getAttribute('data-tab');
          var navs = ov.querySelectorAll('[data-tab]');
          for (var ni = 0; ni < navs.length; ni++) navs[ni].classList.toggle('active', navs[ni] === tabBtn);
          team.msg = ''; team.editing = 0; sec.msg = ''; sec.ask = ''; closeRowMenu();
          render();
          return;
        }
        var tdots = e.target.closest('[data-team-dots]');
        if (tdots) { toggleTeamMenu(tdots); return; }
        if (teamClick(e)) return;
        if (secClick(e)) return;
        var dots = e.target.closest('[data-dots]');
        if (dots) { toggleRowMenu(dots); return; }
        closeRowMenu();
        var out = e.target.closest('[data-revoke]');
        if (out) { revoke(out.getAttribute('data-revoke')); return; }
        if (e.target.closest('.MemberUI-sess-all')) revokeOthers();
      });

      ov.addEventListener('keydown', function (e) {
        if (e.key === 'Enter' && e.target.classList && e.target.classList.contains('MemberUI-inv-email')) {
          var ib = ov.querySelector('[data-team="invite"]'); if (ib) ib.click();
        }
        if (e.key === 'Enter' && e.target.classList && e.target.classList.contains('MemberUI-sec-code')) {
          var sb = ov.querySelector('[data-sec="confirm"]') || ov.querySelector('[data-sec="ask-go"]'); if (sb) sb.click();
        }
      });

      document.addEventListener('keydown', function (e) {
        
        if (e.key === 'Escape') { if (cfEl) { closeConfirm(); return; } closeRowMenu(); closeMenu(); }
      });
    }

    return { init: init, guest: guest };
  })();

  

  var ToolSearch = (function () {
    var KEY = 'memberui_tools_v1', TTL = 30 * 60 * 1000;
    var tools = null, loading = false, box, input, list, wrap, sel = -1, shown = [];

    function who() {
      var el = document.querySelector('.am-user-identity-block_login .MemberUI-uname') || document.querySelector('.am-user-identity-block_login');
      return el ? (el.textContent || '').trim() : '';
    }
    function clean(s) { return String(s || '').replace(/\s+/g, ' ').trim(); }

    function readList(root) {
      var out = [], seen = {};
      var lis = root.querySelectorAll('.am-list-resources > li');
      for (var i = 0; i < lis.length; i++) {
        var li = lis[i], a = li.querySelector('a[href]');
        if (!a) continue;
        var tEl = li.querySelector('[class*="title"],[class*="name"],h3,h4,strong');
        var img = a.querySelector('img');
        var title = clean((tEl && tEl.textContent) || a.getAttribute('title') || a.textContent || (img && img.getAttribute('alt')) || li.textContent);
        if (!title) continue;
        var dEl = li.querySelector('[class*="desc"]');
        var href = a.getAttribute('href');
        var key = title + '|' + href;
        if (seen[key]) continue;
        seen[key] = 1;
        out.push({ i: i, title: title.slice(0, 120), desc: clean(dEl && dEl.textContent).slice(0, 160),
          href: href, target: a.getAttribute('target') || '' });
      }
      return out;
    }
    function save(items) {
      try { localStorage.setItem(KEY, JSON.stringify({ u: who(), t: Date.now(), items: items })); } catch (e) {}
    }
    function cached() {
      try {
        var c = JSON.parse(localStorage.getItem(KEY) || 'null');
        if (c && c.u === who() && Date.now() - c.t < TTL) return c.items;
      } catch (e) {}
      return null;
    }
    function load(cb) {
      if (document.querySelector('.am-list-resources')) {          
        tools = readList(document); save(tools); cb && cb(); return;
      }
      var c = cached();
      if (c) { tools = c; cb && cb(); return; }
      if (loading) return;
      loading = true;
      fetch('/member', { credentials: 'same-origin' })
        .then(function (r) { return r.ok ? r.text() : ''; })
        .then(function (html) {
          var doc = new DOMParser().parseFromString(html || '', 'text/html');
          tools = readList(doc); save(tools);
        })
        .catch(function () { tools = tools || []; })
        .then(function () { loading = false; cb && cb(); });
    }

    function score(t, q) {
      var title = t.title.toLowerCase(), all = (t.title + ' ' + t.desc).toLowerCase();
      if (!q) return 1;
      var words = q.split(/\s+/), s = 0;
      for (var i = 0; i < words.length; i++) {
        var w = words[i];
        if (!w) continue;
        var p = all.indexOf(w);
        if (p < 0) return 0;
        s += title.indexOf(w) === 0 ? 30 : title.indexOf(' ' + w) > -1 ? 20 : title.indexOf(w) > -1 ? 12 : 4;
      }
      return s;
    }
    function mark(text, q) {
      var safe = esc(text);
      if (!q) return safe;
      q.split(/\s+/).forEach(function (w) {
        if (!w) return;
        var re = new RegExp('(' + w.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + ')', 'ig');
        safe = safe.replace(re, '<mark>$1</mark>');
      });
      return safe;
    }

    function render() {
      var q = clean(input.value).toLowerCase();
      if (!q) { list.innerHTML = ''; shown = []; close(); return; }        
      if (tools === null) { list.innerHTML = '<div class="MemberUI-ts-empty"><i class="fa-solid fa-spinner fa-spin"></i> Loading your tools…</div>'; open(); return; }
      if (!tools.length) {
        list.innerHTML = '<div class="MemberUI-ts-empty">You have no active tools right now.<a href="/signup">Get access <i class="fa-solid fa-arrow-right"></i></a></div>';
        open(); return;
      }
      shown = tools.map(function (t) { return { t: t, s: score(t, q) }; })
        .filter(function (x) { return x.s > 0; })
        .sort(function (a, b) { return b.s - a.s || a.t.title.localeCompare(b.t.title); })
        .slice(0, 8).map(function (x) { return x.t; });
      sel = shown.length ? 0 : -1;
      if (!shown.length) {
        list.innerHTML = '<div class="MemberUI-ts-empty">No tool matches “' + esc(input.value.trim()) + '”</div>';
      } else {
        list.innerHTML = '<div class="MemberUI-ts-head">Results<span>' + shown.length + (shown.length === 1 ? ' tool' : ' tools') + '</span></div>' +
          shown.map(function (t, i) {
            return '<button type="button" class="MemberUI-ts-item' + (i === sel ? ' on' : '') + '" data-ts="' + i + '" role="option">' +
              '<span class="MemberUI-ts-ic"><i class="fa-solid fa-toolbox"></i></span>' +
              '<span class="MemberUI-ts-tx"><strong>' + mark(t.title, q) + '</strong>' + (t.desc ? '<small>' + mark(t.desc, q) + '</small>' : '') + '</span>' +
              '<span class="MemberUI-ts-go">Open <i class="fa-solid fa-arrow-right"></i></span></button>';
          }).join('') +
          '<div class="MemberUI-ts-foot"><span><kbd>↑</kbd><kbd>↓</kbd> to move</span><span><kbd>Enter</kbd> to open</span></div>';
      }
      open();
    }
    function open() { wrap.classList.add('open'); input.setAttribute('aria-expanded', 'true'); }
    function close() { wrap.classList.remove('open'); input.setAttribute('aria-expanded', 'false'); sel = -1; }
    function move(d) {
      if (!shown.length) return;
      sel = (sel + d + shown.length) % shown.length;
      var items = list.querySelectorAll('.MemberUI-ts-item');
      for (var i = 0; i < items.length; i++) items[i].classList.toggle('on', i === sel);
      if (items[sel]) items[sel].scrollIntoView({ block: 'nearest' });
    }

     
    function run(t) {
      close(); input.blur();
      var live = null;
      var links = document.querySelectorAll('.am-list-resources > li a[href]');
      for (var i = 0; i < links.length; i++) {
        if (links[i].getAttribute('href') === t.href) { live = links[i]; break; }
      }
      if (live) { live.click(); return; }                         
      if (t.target && t.target !== '_self') window.open(t.href, t.target, 'noopener');
      else location.href = t.href;
    }

    function init(topbar) {
      if (!document.body.classList.contains('am-logged-in') || topbar.querySelector('.MemberUI-ts')) return;
      wrap = document.createElement('div');
      wrap.className = 'MemberUI-ts';
      wrap.innerHTML =
        '<button type="button" class="MemberUI-ts-mobile" aria-label="Search tools"><i class="fa-solid fa-magnifying-glass"></i></button>' +
        '<div class="MemberUI-ts-box"><i class="fa-solid fa-magnifying-glass MemberUI-ts-lens"></i>' +
        '<input type="search" class="MemberUI-ts-input" placeholder="Search your tools…" autocomplete="off" spellcheck="false" ' +
          'role="combobox" aria-expanded="false" aria-autocomplete="list" aria-label="Search your tools">' +
        '<div class="MemberUI-ts-list" role="listbox"></div>';
      var actions = topbar.querySelector('.MemberUI-topbar-actions');
      topbar.insertBefore(wrap, actions);
      box = wrap.querySelector('.MemberUI-ts-box'); input = wrap.querySelector('.MemberUI-ts-input'); list = wrap.querySelector('.MemberUI-ts-list');

      input.addEventListener('focus', function () { if (tools === null) load(render); if (input.value.trim()) render(); });
      input.addEventListener('input', render);
      input.addEventListener('keydown', function (e) {
        if (e.key === 'ArrowDown') { e.preventDefault(); move(1); }
        else if (e.key === 'ArrowUp') { e.preventDefault(); move(-1); }
        else if (e.key === 'Enter') { e.preventDefault(); if (sel > -1 && shown[sel]) run(shown[sel]); }
        else if (e.key === 'Escape') { close(); input.blur(); wrap.classList.remove('expanded'); }
      });
      list.addEventListener('mousedown', function (e) { e.preventDefault(); });   
      list.addEventListener('click', function (e) {
        var b = e.target.closest('[data-ts]');
        if (b) run(shown[+b.getAttribute('data-ts')]);
      });
      list.addEventListener('mousemove', function (e) {
        var b = e.target.closest('[data-ts]');
        if (!b) return;
        var i = +b.getAttribute('data-ts');
        if (i !== sel) { sel = i; move(0); }
      });
      wrap.querySelector('.MemberUI-ts-mobile').addEventListener('click', function () {
        wrap.classList.add('expanded'); setTimeout(function () { input.focus(); }, 30);
      });
      document.addEventListener('click', function (e) {
        if (!wrap.contains(e.target)) { close(); wrap.classList.remove('expanded'); }
      });
      document.addEventListener('keydown', function (e) {
        var tag = (e.target.tagName || '').toLowerCase();
        var typing = tag === 'input' || tag === 'textarea' || e.target.isContentEditable;
        if ((e.ctrlKey || e.metaKey) && !e.shiftKey && !e.altKey && (e.key === 'f' || e.key === 'F')) { e.preventDefault(); wrap.classList.add('expanded'); input.focus(); input.select(); }
        else if (e.key === '/' && !typing) { e.preventDefault(); wrap.classList.add('expanded'); input.focus(); }
      });
      
      setTimeout(function () { load(null); }, 1200);
    }
    return { init: init };
  })();

  

  var TeamInvite = (function () {
    var LATER = 'memberui_inv_later';
    function ck(n) { var m = document.cookie.match(new RegExp('(?:^|; )' + n + '=([^;]*)')); return m ? decodeURIComponent(m[1]) : ''; }
    function info() {
      var raw = ck('memberui_inv');
      if (!raw) return null;
      try { return JSON.parse(decodeURIComponent(escape(atob(raw.replace(/-/g, '+').replace(/_/g, '/'))))); } catch (e) { return null; }
    }
    function post(path, body) {
      return fetch('/member-team/' + path, { method: 'POST', credentials: 'same-origin',
        headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(body || {}) })
        .then(function (r) { return r.json(); });
    }

     
    function guest() {
      var i = info();
      if (!i || !i.e) return;
      var form = document.querySelector('form input[type="password"]');
      form = form && form.form;
      if (!form || document.getElementById('MemberUI-inv-note')) return;
      var isSignup = /signup/i.test(location.pathname) || !!form.querySelector('input[name="email"]') && !form.querySelector('input[name="amember_login"]');
      var note = document.createElement('div');
      note.id = 'MemberUI-inv-note';
      note.setAttribute('role', 'status');
      note.style.cssText = 'display:flex;gap:12px;align-items:flex-start;margin:0 0 18px;padding:14px 16px;border-radius:14px;border:1px solid var(--MemberUI-line,#e5e9f0);background:var(--MemberUI-bg-3,#f4f7fb);font:500 13.5px/1.55 Inter,sans-serif;color:var(--MemberUI-text-2,#4a5a6e);text-align:left';
      note.innerHTML = '<i class="fa-solid fa-users" style="margin-top:3px;color:var(--MemberUI-brand-1,#FF9900)"></i><div><b style="color:var(--MemberUI-text,#0f172a)">' + esc(i.o || 'A customer') +
        '</b> invited you to their team.<br>' + (isSignup ? 'Create your account with <b>' + esc(i.e) + '</b>' : 'Sign in with <b>' + esc(i.e) + '</b>') +
        ', then you can accept the invitation.</div>';
      form.parentNode.insertBefore(note, form);
      var f = form.querySelector(isSignup ? 'input[name="email"]' : 'input[name="amember_login"]') || form.querySelector('input[type="email"]');
      if (f && !f.value) f.value = i.e;
    }

     
    var pop = null;
    function close() { if (pop && pop.parentNode) pop.parentNode.removeChild(pop); pop = null; document.removeEventListener('keydown', onKey, true); }
    function onKey(e) { if (e.key === 'Escape' && pop) { e.stopPropagation(); later(); } }
    function later() { try { sessionStorage.setItem(LATER, '1'); } catch (e) {} close(); }

    function show(inv) {
      if (pop) return;
      pop = document.createElement('div');
      pop.className = 'MemberUI-cf';
      pop.id = 'MemberUI-inv-pop';
      var chips = (inv.products || []).map(function (t) { return '<span class="MemberUI-chip">' + esc(t) + '</span>'; }).join('');
      pop.innerHTML =
        '<div class="MemberUI-cf-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-inv-t" aria-describedby="MemberUI-inv-d">' +
          '<div class="MemberUI-cf-ico"><i class="fa-solid fa-users"></i></div>' +
          '<h3 id="MemberUI-inv-t">Team invitation</h3>' +
          '<p id="MemberUI-inv-d" style="margin-bottom:12px"><b>' + esc(inv.owner) + '</b>' + (inv.owner_email ? ' (' + esc(inv.owner_email) + ')' : '') +
            ' invited you to join their team. You will get access to:</p>' +
          '<div class="MemberUI-chips" style="display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin:0 0 20px">' + (chips || '<span class="MemberUI-chip">Shared tools</span>') + '</div>' +
          '<div class="MemberUI-inv-msg" aria-live="polite" style="min-height:18px;margin:-8px 0 10px;font:600 12.5px Inter,sans-serif;color:#dc2626"></div>' +
          '<div class="MemberUI-cf-actions">' +
            '<button type="button" class="MemberUI-cf-btn MemberUI-cf-cancel" data-inv="decline">Decline</button>' +
            '<button type="button" class="MemberUI-cf-btn MemberUI-cf-ok" data-inv="accept">Accept invitation</button>' +
          '</div>' +
          '<button type="button" data-inv="later" style="margin-top:12px;border:0;background:none;font:600 12.5px Inter,sans-serif;color:var(--MemberUI-soft,#94a3b8);cursor:pointer">Decide later</button>' +
        '</div>';
      document.body.appendChild(pop);
      document.addEventListener('keydown', onKey, true);
      var box = pop.querySelector('.MemberUI-cf-box'), msg = pop.querySelector('.MemberUI-inv-msg');
      var confirmDecline = false;
      function busy(on) { var b = pop.querySelectorAll('button'); for (var i = 0; i < b.length; i++) b[i].disabled = on; }
      function answer(yes) {
        busy(true); msg.textContent = '';
        post('respond', { id: inv.id, accept: yes }).then(function (d) {
          if (!d || !d.ok) { busy(false); msg.textContent = (d && d.error) || 'Something went wrong. Please try again.'; return; }
          if (yes) {
            box.querySelector('h3').textContent = 'Welcome to the team!';
            box.querySelector('#MemberUI-inv-d').textContent = 'Your new tools are ready. Refreshing access…';
            pop.querySelector('.MemberUI-cf-actions').style.display = 'none';
            pop.querySelector('[data-inv="later"]').style.display = 'none';
            setTimeout(function () { location.reload(); }, 350);
          } else {
            close();
          }
        }).catch(function () { busy(false); msg.textContent = 'Network error. Please try again.'; });
      }
      pop.addEventListener('click', function (e) {
        if (e.target === pop) { later(); return; }
        var b = e.target.closest('[data-inv]');
        if (!b) return;
        var a = b.getAttribute('data-inv');
        if (a === 'accept') answer(true);
        else if (a === 'later') later();
        else if (a === 'decline') {
          if (!confirmDecline) {                       
            confirmDecline = true;
            msg.style.color = 'var(--MemberUI-text-2,#4a5a6e)';
            msg.textContent = 'Decline? ' + (inv.owner || 'The owner') + ' would need to invite you again.';
            b.textContent = 'Yes, decline';
            return;
          }
          msg.style.color = '#dc2626';
          answer(false);
        }
      });
      setTimeout(function () { var ok = pop && pop.querySelector('[data-inv="accept"]'); if (ok) ok.focus(); }, 40);
    }

    function check() {
      if (!info()) return;
      try { if (sessionStorage.getItem(LATER) === '1') return; } catch (e) {}
      fetch('/member-team/pending', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) { var ct = r.headers.get('content-type') || ''; if (!r.ok || ct.indexOf('json') === -1) throw 0; return r.json(); })
        .then(function (d) { if (d && d.invite) show(d.invite); })
        .catch(function () {});
    }
    return { guest: guest, check: check };
  })();

  function run() {
    try { build(); }
    catch (err) { if (window.console && console.warn) console.warn('[MemberUIPremium v9.9-fixed]', err); }
    try { DeviceKit.init(); }
    catch (err) { if (window.console && console.warn) console.warn('[MemberUIDeviceKit]', err); }
    try { if (!document.body.classList.contains('am-logged-in')) DeviceKit.guest(); } catch (err) {}
    try { if (document.body.classList.contains('am-logged-in')) setTimeout(TeamInvite.check, 400); else TeamInvite.guest(); } catch (err) {}
    
    var fpDelays = [300, 900];
    for (var i = 0; i < fpDelays.length; i++) {
      (function (d) { setTimeout(wireForgotPassword, d); })(fpDelays[i]);
    }
  }

  if (!bootstrapHead()) {
    __headMo = new MutationObserver(function () { if (bootstrapHead()) __headMo.disconnect(); });
    __headMo.observe(document.documentElement, { childList: true, subtree: true });
  }

  function scheduleRun() {
    if (document.readyState === 'interactive' || document.readyState === 'complete') { run(); return; }
    var done = false;
    function fire() {
      if (done) return;
      done = true;
      document.removeEventListener('readystatechange', onRS);
      document.removeEventListener('DOMContentLoaded', fire);
      run();
    }
    function onRS() { if (document.readyState === 'interactive' || document.readyState === 'complete') fire(); }
    document.addEventListener('readystatechange', onRS);
    document.addEventListener('DOMContentLoaded', fire);
  }
  scheduleRun();

  window.addEventListener('pageshow', function (e) {
    if (e.persisted) { try { scheduleSubRecheck(); } catch (err) {} }
  });

})();
</script>;
--am_body_finish_in: <script>


(function () {
  'use strict';
  if (window.__MemberUIAuthBoot) return;
  window.__MemberUIAuthBoot = true;

   
  var CSS_V = window.MEMBERUI_CSS_V = '20261018a';
   
  try { if (localStorage.getItem('memberui_css_v') !== CSS_V) localStorage.setItem('memberui_css_v', CSS_V); } catch (e) {}

   
  var _nc = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
  var NET_SLOW = !!(_nc && (_nc.saveData || /(^|-)2g$|^3g$/.test(_nc.effectiveType || '') || (_nc.downlink && _nc.downlink < 1.2)));
  window.MEMBERUI_NET_SLOW = NET_SLOW;

  


  (function earlyHints() {
    var head = document.head || document.documentElement;
    function hint(rel, href, as, cors, prio) {
      if (document.querySelector('link[rel="' + rel + '"][href="' + href + '"]')) return;
      var l = document.createElement('link');
      l.rel = rel; l.href = href;
      if (as) l.as = as;
      if (cors) l.crossOrigin = 'anonymous';
      if (prio) l.setAttribute('fetchpriority', prio);
      head.appendChild(l);
    }
    hint('preconnect', 'https://use.fontawesome.com', null, true);
    hint('preconnect', 'https://i.ibb.co');
    hint('preload', '/member-ui.css?v=' + CSS_V, 'style', false, 'high');
  })();

  

  var LOGIN_KEY = 'MemberUI-login-pending';
  function isAuthForm(f) {
    return !!(f && f.querySelector && f.querySelector('input[type="password"]'));
  }
  var GATE_MSG = 'to finish signing in';                 
  var SUSP_MSG = 'has been suspended';
  var CHECK_MSG = 'Security check failed';
  var BROWSER_MSG = 'Google Chrome or Microsoft Edge';
  var gateBefore = '', gatePoll = null;
  function gateNow() { return readCookie('ls_gate') + '|' + readCookie('ls_2fa') + '|' + readCookie('ls_susp') + '|' + readCookie('ls_msg'); }
  function gateChanged() { return (readCookie('ls_gate') || readCookie('ls_2fa') || readCookie('ls_susp') || readCookie('ls_msg')) && gateNow() !== gateBefore; }
  function watchGate() {
    gateBefore = gateNow();
    clearInterval(gatePoll);
    var until = Date.now() + 30000;
    gatePoll = setInterval(function () {
      if (gateChanged()) openCodeScreen();
      else if (Date.now() > until) { clearInterval(gatePoll); gatePoll = null; }
    }, 100);
  }
   
  function hideGateErrors() {
    if (!document.getElementById('MemberUI-gate-css')) {
      var us = document.createElement('style');
      us.id = 'MemberUI-gate-css';
      us.textContent = '.MemberUI-hide-err{display:none!important}';
      (document.head || document.documentElement).appendChild(us);
    }
    var list = document.querySelectorAll('.am-errors, .am-error, .errors, .error, [class*="error"], [class*="alert"]');
    var hit = [];
    for (var i = 0; i < list.length; i++) {
      var t = list[i].textContent || '';
      if ((t.indexOf(GATE_MSG) > -1 || t.indexOf(SUSP_MSG) > -1 || t.indexOf('temporarily suspended') > -1 || t.indexOf(CHECK_MSG) > -1 || t.indexOf(BROWSER_MSG) > -1 || /SyntaxError|Unexpected token/.test(t)) && !list[i].querySelector('input,form,button')) hit.push(list[i]);
    }
    for (var j = 0; j < hit.length; j++) {
      var inner = false;
      for (var k = 0; k < hit.length; k++) if (k !== j && hit[j].contains(hit[k])) { inner = true; break; }
      if (!inner) hit[j].classList.add('MemberUI-hide-err');   
    }
  }
  

  function showSuspended() {
    var raw = readCookie('ls_susp');
    if (!raw || document.getElementById('MemberUI-susp')) return false;
    var sx = readCookie('ls_suspx');
    dropCookie('ls_susp'); dropCookie('ls_suspx');
    var msg = '';
    try { msg = decodeURIComponent(escape(atob(raw.replace(/-/g, '+').replace(/_/g, '/')))); } catch (e) { msg = ''; }
    var mm = /^(\d{9,11})\.(\d{9,11})$/.exec(sx || ''), end = mm ? Date.now() + (+mm[1] - +mm[2]) * 1000 : 0;   
    if (end && end <= Date.now()) end = 0;
    var lines = String(msg).split('\n'), text = end ? lines[0] : lines.join(' ');
    var when = '';
    if (end) { try { when = new Date(end).toLocaleString(undefined, { weekday: 'short', day: 'numeric', month: 'short', hour: 'numeric', minute: '2-digit' }); } catch (e) { when = new Date(end).toString(); } }
    var box = document.createElement('div');
    box.id = 'MemberUI-susp';
    box.setAttribute('role', 'alertdialog');
    box.style.cssText = 'position:fixed;inset:0;z-index:2147482000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.6);backdrop-filter:blur(4px);font-family:Inter,-apple-system,"Segoe UI",Roboto,sans-serif';
    box.innerHTML = '<div style="width:100%;max-width:420px;background:#fff;border-radius:18px;padding:28px 26px 22px;text-align:center;box-shadow:0 30px 70px -20px rgba(16,24,40,.5);box-sizing:border-box">' +
      '<div style="width:56px;height:56px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:22px;color:#dc2626;background:#fdecec"><i class="fa-solid fa-lock"></i></div>' +
      '<h3 style="margin:0 0 8px;font-size:19px;font-weight:800;color:#0f172a">Account temporarily suspended</h3>' +
      '<p style="margin:0 0 16px;font-size:13.5px;line-height:1.6;color:#4a5a6e">' + gEsc(text || 'Your account has been suspended because it was used on a new device, which is against our terms of service. Please check your email.') + '</p>' +
      (end ? '<div style="margin:0 0 18px;padding:14px 12px 12px;border-radius:14px;background:#fdf3f3;border:1px solid #f7d4d4">' +
               '<div style="font:700 10.5px Inter,sans-serif;letter-spacing:.8px;text-transform:uppercase;color:#b45353">Available again in</div>' +
               '<div data-left style="margin:4px 0 3px;font:800 26px/1.2 Inter,sans-serif;color:#0f172a;font-variant-numeric:tabular-nums">&nbsp;</div>' +
               '<div data-at style="font:600 12.5px Inter,sans-serif;color:#64748b">' + gEsc(when) + '</div></div>' : '') +
      '<button type="button" style="width:100%;height:44px;border:1px solid #e5e9f0;border-radius:12px;background:#fff;font:700 14px Inter,sans-serif;color:#4a5a6e;cursor:pointer">Close</button></div>';
    document.body.appendChild(box);
    var iv = null;
    if (end) {
      var leftEl = box.querySelector('[data-left]'), atEl = box.querySelector('[data-at]');
      var tick = function () {
        var s = Math.max(0, Math.round((end - Date.now()) / 1000));
        if (!s) { leftEl.textContent = 'Now'; atEl.textContent = 'Your account is available again. Please sign in.'; clearInterval(iv); return; }
        var d = Math.floor(s / 86400), h = Math.floor(s % 86400 / 3600), m = Math.floor(s % 3600 / 60), x = s % 60;
        leftEl.textContent = d ? d + 'd ' + h + 'h ' + m + 'm' : (h ? h + 'h ' + m + 'm ' + x + 's' : m + 'm ' + x + 's');
      };
      tick(); iv = setInterval(tick, 1000);
    }
    box.querySelector('button').addEventListener('click', function () { clearInterval(iv); box.parentNode.removeChild(box); });
    hideGateErrors(); setTimeout(hideGateErrors, 300);
    return true;
  }
  

  function showNote() {
    var raw = readCookie('ls_msg');
    if (!raw || document.getElementById('MemberUI-msgbox')) return false;
    var d = null;
    try { d = JSON.parse(decodeURIComponent(escape(atob(raw.replace(/-/g, '+').replace(/_/g, '/'))))); } catch (e) { d = null; }
    dropCookie('ls_msg');
    if (!d || !d.m) return false;
    var refused = d.k === 'nofp' || d.k === 'nobrowser';   
    if (document.body.classList.contains('am-logged-in') && !refused) return false;   
    var box = document.createElement('div');
    box.id = 'MemberUI-msgbox';
    if (refused) {                              
      box.setAttribute('role', 'alertdialog');
      box.style.cssText = 'position:fixed;inset:0;z-index:2147482000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.6);backdrop-filter:blur(4px);font-family:Inter,-apple-system,"Segoe UI",Roboto,sans-serif';
      box.innerHTML = '<div style="width:100%;max-width:420px;background:#fff;border-radius:18px;padding:28px 26px 22px;text-align:center;box-shadow:0 30px 70px -20px rgba(16,24,40,.5)">' +
        '<div style="width:56px;height:56px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:22px;color:#b45309;background:#fff4e5"><i class="fa-solid ' + (d.k === 'nobrowser' ? 'fa-globe' : 'fa-shield-halved') + '"></i></div>' +
        '<h3 style="margin:0 0 8px;font-size:19px;font-weight:800;color:#0f172a">' + gEsc(d.t || 'Security check failed') + '</h3>' +
        '<p style="margin:0 0 18px;font-size:13.5px;line-height:1.6;color:#4a5a6e">' + gEsc(d.m) + '</p>' +
        '<button type="button" style="width:100%;height:44px;border:1px solid #e5e9f0;border-radius:12px;background:#fff;font:700 14px Inter,sans-serif;color:#4a5a6e;cursor:pointer">Close</button></div>';
      document.body.appendChild(box);
      box.querySelector('button').addEventListener('click', function () { box.parentNode.removeChild(box); });
      hideGateErrors(); setTimeout(hideGateErrors, 300);
      return true;
    }
    var icon = d.k === 'ended' ? 'fa-clock' : 'fa-right-from-bracket';
    box.setAttribute('role', 'status');
    box.className = 'MemberUI-msgbox';
    box.innerHTML = '<i class="fa-solid ' + icon + '"></i><span>' + gEsc(d.m) + '</span><button type="button" aria-label="Close">&times;</button>';
    var st = document.createElement('style');
    st.textContent = '.MemberUI-msgbox{position:fixed;top:16px;left:50%;transform:translateX(-50%);z-index:2147481000;display:flex;align-items:center;gap:10px;max-width:calc(100vw - 32px);box-sizing:border-box;padding:12px 12px 12px 16px;border-radius:12px;background:#0f172a;color:#fff;font:600 13px/1.45 Inter,-apple-system,"Segoe UI",sans-serif;box-shadow:0 14px 34px -14px rgba(0,0,0,.5);animation:MemberUIMsgIn .2s ease both}' +
      '.MemberUI-msgbox i{color:#fbbf24}.MemberUI-msgbox button{margin-left:4px;border:0;background:transparent;color:#94a3b8;font-size:20px;line-height:1;cursor:pointer;padding:0 4px}.MemberUI-msgbox button:hover{color:#fff}' +
      '@keyframes MemberUIMsgIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}';
    document.documentElement.appendChild(st);
    document.body.appendChild(box);
    function gone() { if (box.parentNode) box.parentNode.removeChild(box); }
    box.querySelector('button').addEventListener('click', gone);
    setTimeout(gone, 9000);
    return true;
  }
  function openCodeScreen() {
    clearInterval(gatePoll); gatePoll = null;
    gateBefore = gateNow();
    if (showSuspended()) return;
    hideGateErrors();
    setTimeout(hideGateErrors, 300);                     
    if (readCookie('ls_gate')) showGate(); else if (readCookie('ls_2fa')) show2fa(); else showNote();
  }
  var authSubmitAt = 0;
  function onAuthSubmit(f) {
    if (!isAuthForm(f)) return;
    var authNow = Date.now();
    if (authNow - authSubmitAt < 250) return;
    authSubmitAt = authNow;
    if (typeof f.checkValidity === 'function' && !f.checkValidity()) return;   
    try { computeHw(); } catch (e) {}          
    var old = document.querySelectorAll('.MemberUI-hide-err');
    for (var i = 0; i < old.length; i++) old[i].classList.remove('MemberUI-hide-err');
    try { localStorage.setItem(LOGIN_KEY, String(Date.now())); } catch (e) {}  
    elState(null);                             
    watchGate();
  }
  document.addEventListener('submit', function (e) { onAuthSubmit(e.target); }, true);
   
  document.addEventListener('click', function (e) {
    var btn = e.target && e.target.closest ? e.target.closest('button[type="submit"], input[type="submit"], button:not([type])') : null;
    if (!btn || !btn.form || !isAuthForm(btn.form)) return;
    setTimeout(function () { onAuthSubmit(btn.form); }, 0);
  }, true);


  

  var warmed = {};
  function addHint(rel, href, as) {
    var key = rel + '|' + href;
    if (warmed[key]) return;
    warmed[key] = 1;
    var head = document.head || document.documentElement;
    var l = document.createElement('link');
    l.rel = rel;
    l.href = href;
    if (as) l.as = as;
    if (as === 'font' || /fontawesome/.test(href)) l.crossOrigin = 'anonymous';
    head.appendChild(l);
  }

  var SKIP = /logout|signout|delete|remove|cancel|unsubscribe|revoke|login-sessions|\/admin/i;
  var hoverTimer = null;
  function prefetchLink(a) {
    if (NET_SLOW) return;   
    if (!a || !a.href || a.target === '_blank' || a.hasAttribute('download')) return;
    if (a.hostname !== location.hostname || SKIP.test(a.href)) return;
    if (a.pathname === location.pathname && a.search === location.search) return;
    addHint('prefetch', a.href, 'document');
  }
  document.addEventListener('mouseover', function (e) {
    var a = e.target && e.target.closest ? e.target.closest('a[href]') : null;
    clearTimeout(hoverTimer);
    if (a) hoverTimer = setTimeout(function () { prefetchLink(a); }, 70);
  }, { passive: true });
  document.addEventListener('touchstart', function (e) {
    var a = e.target && e.target.closest ? e.target.closest('a[href]') : null;
    if (a) prefetchLink(a);
  }, { passive: true });


   
  function readCookie(n) {
    var m = document.cookie.match(new RegExp('(?:^|; )' + n + '=([^;]*)'));
    return m ? decodeURIComponent(m[1]) : '';
  }
  function dropCookie(n) { document.cookie = n + '=; Max-Age=0; path=/; SameSite=Lax'; }
  function gEsc(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c]; }); }
  function whenBody(fn) {
    if (document.body) fn();
    else document.addEventListener('DOMContentLoaded', fn);
  }
  
  dropCookie('memberui_unv'); dropCookie('memberui_bsync');

  

  var HW_FONTS = ['Arial Narrow', 'Bahnschrift', 'Segoe UI Variable Display', 'Segoe Fluent Icons', 'Cascadia Code', 'Calibri', 'Cambria',
    'Candara', 'Century Gothic', 'Franklin Gothic Medium', 'Garamond', 'Gill Sans MT', 'Lucida Bright', 'Lucida Sans', 'Agency FB', 'Algerian',
    'Bodoni MT', 'Book Antiqua', 'Bookman Old Style', 'Bradley Hand ITC', 'Brush Script MT', 'Castellar', 'Century Schoolbook', 'Copperplate Gothic Bold',
    'Elephant', 'Forte', 'Freestyle Script', 'Haettenschweiler', 'Harrington', 'Jokerman', 'Kristen ITC', 'Magneto', 'Matura MT Script Capitals',
    'Monotype Corsiva', 'Old English Text MT', 'Onyx', 'Papyrus', 'Perpetua', 'Ravie', 'Rockwell', 'Showcard Gothic', 'Snap ITC', 'Stencil',
    'Tw Cen MT', 'Vivaldi', 'Vladimir Script', 'Wide Latin', 'Urdu Typesetting', 'Jameel Noori Nastaleeq', 'Alvi Nastaleeq', 'Nafees Nastaleeq',
    'Mangal', 'Aparajita', 'Roboto', 'Open Sans', 'Lato', 'Montserrat', 'Poppins', 'Source Sans Pro', 'Fira Code', 'JetBrains Mono', 'Noto Sans',
    'Ubuntu', 'Helvetica Neue', 'Myriad Pro', 'Minion Pro', 'Adobe Garamond Pro', 'Futura', 'Avenir', 'Proxima Nova', 'Gotham', 'SF Pro Display',
    'Hiragino Sans', 'PingFang SC', 'Apple Color Emoji', 'Noto Color Emoji', 'DejaVu Sans', 'Liberation Sans', 'Cantarell'];
  var HW_FONTS_ID = HW_FONTS.length;          
  HW_FONTS = HW_FONTS.concat(['memberui-no-such-font',   
    
    'Avenir Next', 'Baskerville', 'Big Caslon', 'Bodoni 72', 'Charter', 'Didot', 'Gill Sans', 'Hoefler Text', 'Menlo', 'Monaco', 'Optima',
    'Palatino', 'Seravek', 'Skia', 'Snell Roundhand', 'Zapfino', 'American Typewriter', 'Chalkboard SE', 'Copperplate', 'Marker Felt',
    'Noteworthy', 'Phosphate', 'SignPainter', 'Trattatello', 'Apple Chancery', 'Athelas', 'Iowan Old Style', 'Kefa', 'Superclarendon',
    'Canela', 'Domaine Display', 'Graphik', 'Lyon Text', 'Produkt', 'Publico Text', 'Schnyder S', 'Proxima Nova Condensed', 'Mishafi',
    'Waseem', 'Farah', 'Diwan Kufi', 'Noto Nastaliq Urdu', 'Kohinoor Devanagari', 'Hiragino Mincho ProN', 'Songti SC', 'Apple SD Gothic Neo',
    
    'Segoe Print', 'Segoe Script', 'Ink Free', 'Gabriola', 'Sitka Text', 'Leelawadee UI', 'Nirmala UI', 'Ebrima', 'Javanese Text', 'Yu Gothic',
    'Malgun Gothic', 'Microsoft YaHei', 'MS Gothic', 'Gadugi', 'Corbel', 'Constantia', 'Consolas', 'Sans Serif Collection', 'Aptos', 'Grandview',
    'Seaford', 'Skeena', 'Tenorite', 'Bierstadt', 'Avenir Next LT Pro', 'Univers', 'Neue Haas Grotesk Text Pro', 'Walbaum Display',
    'Sagona Book', 'Posterama', 'Abadi', 'Amasis MT Pro', 'Dubai', 'Gill Sans Nova', 'Rockwell Nova', 'Verdana Pro', 'Georgia Pro', 'Segoe UI Historic',
    
    'Acumin Pro', 'Adobe Caslon Pro', 'Trajan Pro', 'Source Han Sans', 'Kozuka Gothic Pr6N', 'Adobe Arabic', 'Myriad Arabic', 'Chaparral Pro',
    'Cooper Std', 'Hobo Std', 'Lithos Pro', 'OCR A Std', 'Inter', 'Roboto Mono', 'Raleway', 'Nunito', 'Oswald', 'Merriweather', 'Playfair Display',
    'Bebas Neue', 'Ubuntu Mono', 'Google Sans', 'Product Sans', 'Comic Neue', 'Cascadia Mono', 'Source Code Pro', 'Hack', 'Anonymous Pro',
    'Faiz Lahori Nastaleeq', 'Pak Nastaleeq', 'Mehr Nastaliq Web', 'Jameel Noori Kasheeda', 'Nafees Web Naskh', 'Urdu Naskh Asiatype',
    'Alvi Lahori Nastaleeq', 'Gulzar', 'Noto Naskh Arabic', 'Scheherazade New', 'Amiri', 'Tahoma', 'Trebuchet MS', 'Lucida Console', 'Sylfaen']);
  function hwHash(str) {                      
    var h1 = 0x811c9dc5, h2 = 0x01000193 ^ 0x5bd1e995;
    for (var i = 0; i < str.length; i++) {
      var c = str.charCodeAt(i);
      h1 ^= c; h1 = Math.imul(h1, 0x01000193) >>> 0;
      h2 ^= c; h2 = Math.imul(h2 ^ (h2 >>> 13), 0x5bd1e995) >>> 0;
    }
    return ('0000000' + h1.toString(16)).slice(-8) + ('0000000' + h2.toString(16)).slice(-8);
  }
  function hwFonts() {                        
    if (hwFonts.found) return hwFonts.found;
    var cv = document.createElement('canvas').getContext('2d');
    if (!cv) return (hwFonts.found = []);
    var txt = 'mmmmmmmmmmlli1|WQ@#08', base = ['monospace', 'sans-serif', 'serif'], w = {}, have = [];
    for (var b = 0; b < base.length; b++) { cv.font = '72px ' + base[b]; w[base[b]] = cv.measureText(txt).width; }
    for (var i = 0; i < HW_FONTS.length; i++) {
      for (var j = 0; j < base.length; j++) {
        cv.font = '72px "' + HW_FONTS[i] + '",' + base[j];
        if (cv.measureText(txt).width !== w[base[j]]) { have.push(i); break; }
      }
    }
    return (hwFonts.found = have);
  }
  function hwBits(list, from, to) {           
    var bits = [], hex = '';
    for (var i = from; i < to; i++) bits.push(0);
    for (var j = 0; j < list.length; j++) if (list[j] >= from && list[j] < to) bits[list[j] - from] = 1;
    for (var k = 0; k < bits.length; k += 4) hex += (bits[k] * 8 + (bits[k + 1] || 0) * 4 + (bits[k + 2] || 0) * 2 + (bits[k + 3] || 0)).toString(16);
    return hex;
  }
  

  function gpuName(raw) {
    var r = String(raw || ''), m = r.match(/^ANGLE \(([^,]*),\s*(.*?)(?:\s*\(0x[0-9a-f]+\))?(?:\s+Direct3D.*|,\s*D3D.*|,\s*OpenGL.*|,\s*Vulkan.*|,\s*Unspecified Version.*|\))?$/i);
    var n = m ? m[2] : r;
    n = n.replace(/^ANGLE Metal Renderer:\s*/i, '').replace(/\((R|TM)\)/gi, '').replace(/\s+/g, ' ').trim();
    return n.replace(/[^A-Za-z0-9 +.\-]/g, '').slice(0, 40).trim();
  }
  function hwGpuInfo() {
    if (hwGpuInfo.v) return hwGpuInfo.v;
    var out = { h: '', n: '' };
    try {
      if (!(window.chrome || navigator.userAgentData) || /Firefox\//.test(navigator.userAgent)) return (hwGpuInfo.v = out);
      var cv = document.createElement('canvas'), gl = cv.getContext('webgl') || cv.getContext('experimental-webgl');
      if (!gl) return (hwGpuInfo.v = out);
      var ext = gl.getExtension('WEBGL_debug_renderer_info');
      var raw = ext ? String(gl.getParameter(ext.UNMASKED_RENDERER_WEBGL) || '') : '';
      var lose = gl.getExtension('WEBGL_lose_context'); if (lose) lose.loseContext();
      if (!raw || /swiftshader|llvmpipe|software/i.test(raw)) return (hwGpuInfo.v = out);
      var r = raw.replace(/^ANGLE \(/i, '').split(/ Direct3D| \(0x|, D3D|, OpenGL|, Vulkan|, Metal/)[0];
      out = { h: hwHash(r.toLowerCase().replace(/[^a-z0-9]/g, '')).slice(0, 8), n: gpuName(raw) };
    } catch (e) {}
    return (hwGpuInfo.v = out);
  }
   
  var UACH_KEY = 'ls_uach';
  function uachCached() {
    try { var v = JSON.parse(localStorage.getItem(UACH_KEY) || 'null'); return v && typeof v === 'object' ? v : null; } catch (e) { return null; }
  }
  function loadUach() {
    try {
      if (!navigator.userAgentData || typeof navigator.userAgentData.getHighEntropyValues !== 'function') return;
      navigator.userAgentData.getHighEntropyValues(['platformVersion', 'architecture', 'bitness']).then(function (v) {
        var o = { pv: String(v.platformVersion || '').replace(/[^0-9.]/g, '').slice(0, 15),
                  ar: (String(v.architecture || '').replace(/[^a-z0-9]/gi, '') + (v.bitness ? '-' + String(v.bitness).replace(/\D/g, '') : '')).toLowerCase().slice(0, 12) };
        var old = uachCached();
        try { localStorage.setItem(UACH_KEY, JSON.stringify(o)); } catch (e) {}
        loadUach.v = o;
        if ((!old || old.pv !== o.pv || old.ar !== o.ar) && HWI) writeHwd();   
      }).catch(function () {});
    } catch (e) {}
  }
  var HWI = null;                             
  function hwRead() {
    if (HWI) return HWI;
    var ua = navigator.userAgent || '';
    var os = /Windows/.test(ua) ? 'win' : /Android/.test(ua) ? 'android' : /iPhone|iPad|iPod/.test(ua) ? 'ios'
           : /Mac OS X|Macintosh/.test(ua) ? ((navigator.maxTouchPoints || 0) > 1 ? 'ios' : 'mac') : /CrOS/.test(ua) ? 'cros' : /Linux/.test(ua) ? 'linux' : 'other';
    var tz = '';
    try { tz = Intl.DateTimeFormat().resolvedOptions().timeZone || ''; } catch (e) {}
    
    
    var brave = !!navigator.brave;
    var found = brave ? [] : hwFonts();
    var g = brave ? { h: '', n: '' } : hwGpuInfo();
    HWI = { os: os, cores: brave ? 0 : (navigator.hardwareConcurrency || 0), touch: (navigator.maxTouchPoints || 0) > 0 ? 'touch' : 'mouse', tz: tz,
            brave: brave, found: found, gpu: g.h, gname: g.n, mem: brave ? '' : (navigator.deviceMemory || ''),
            blink: !!(navigator.userAgentData || window.chrome) };   
    return HWI;
  }
  

  function writeHwd() {
    try {
      var h = hwRead(), u = loadUach.v || uachCached() || {};
      var sw = Math.max(screen.width || 0, screen.height || 0), sh = Math.min(screen.width || 0, screen.height || 0);
      var dpr = Math.round((window.devicePixelRatio || 1) * 100) / 100;
      var det = ['3', h.os, h.cores, h.touch, h.tz, sw + 'x' + sh, h.brave ? '' : hwBits(h.found, 0, 80), h.gpu, h.mem].join('|');
      var ext = ['1', h.blink ? 'b' : '', u.pv || '', u.ar || '', String(dpr), h.brave ? '' : hwBits(h.found, 80, HW_FONTS.length), h.gname].join('|');
      var ck = '; Max-Age=' + (86400 * 400) + '; path=/; SameSite=Lax' + (location.protocol === 'https:' ? '; Secure' : '');
      if (readCookie('ls_hwd') !== det) document.cookie = 'ls_hwd=' + encodeURIComponent(det) + ck;
      if (readCookie('ls_hwx') !== ext) document.cookie = 'ls_hwx=' + encodeURIComponent(ext) + ck;
    } catch (e) {}
  }
  function computeHw() {
    try {
      var h = hwRead();
      if (!window.LS_HW) {
        var idFonts = [];
        for (var i = 0; i < h.found.length; i++) if (h.found[i] < HW_FONTS_ID) idFonts.push(h.found[i]);
        var parts = [h.os, h.cores, h.touch, h.tz, h.brave ? '' : idFonts.join('.')];
        if (h.os === 'android' || h.os === 'ios') {   
          var a = Math.round(screen.width * (window.devicePixelRatio || 1)), b2 = Math.round(screen.height * (window.devicePixelRatio || 1));
          parts.push(Math.min(a, b2) + 'x' + Math.max(a, b2));
        }
        window.LS_HW = hwHash(parts.join('|'));
        var ck = '; Max-Age=' + (86400 * 400) + '; path=/; SameSite=Lax' + (location.protocol === 'https:' ? '; Secure' : '');
        if (readCookie('ls_hw') !== window.LS_HW) document.cookie = 'ls_hw=' + window.LS_HW + ck;
        var bb = hwBrand();                         
        if (bb && readCookie('ls_bb') !== bb) document.cookie = 'ls_bb=' + bb + ck;
      }
      writeHwd();                                    
    } catch (e) {}
    return window.LS_HW || '';
  }
  function hwBrand() {
    var ua = navigator.userAgent || '', b = '';
    try {
      var list = (navigator.userAgentData && navigator.userAgentData.brands) || [];
      for (var i = 0; i < list.length; i++) {
        var n = String(list[i].brand || '');
        if (/Edge/i.test(n)) b = 'edge'; else if (/Opera/i.test(n)) b = 'opera'; else if (/Brave/i.test(n)) b = 'brave';
        else if (/Yandex|YaBrowser/i.test(n)) b = 'yandex'; else if (/Samsung/i.test(n)) b = 'samsung'; else if (/Vivaldi/i.test(n)) b = 'vivaldi';
        else if (/Google Chrome/i.test(n) && !b) b = 'chrome';
      }
    } catch (e) {}
    if (!b && navigator.brave) b = 'brave';
    if (!b) b = /Edg(e|A|iOS)?\//.test(ua) ? 'edge' : /OPR\/|Opera/.test(ua) ? 'opera' : /YaBrowser/.test(ua) ? 'yandex' : /Vivaldi/.test(ua) ? 'vivaldi'
      : /SamsungBrowser/.test(ua) ? 'samsung' : /UCBrowser/.test(ua) ? 'uc' : /DuckDuckGo/.test(ua) ? 'duckduckgo' : /Firefox\/|FxiOS/.test(ua) ? 'firefox'
      : /Chrome\/|CriOS/.test(ua) ? 'chrome' : /Safari\//.test(ua) ? 'safari' : '';
    return b;
  }
  window.MemberUIDeviceId = computeHw;
  loadUach();                                 
  
  if (typeof window.requestIdleCallback === 'function') window.requestIdleCallback(computeHw, { timeout: 1500 });
  else setTimeout(computeHw, 400);
  

  function deviceCheck() {
    if (readCookie('ls_chk') !== '1') return;
    dropCookie('ls_chk');
    computeHw();
    fetch('/login-sessions/check', { method: 'POST', credentials: 'same-origin',
      headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: '{}' })
      .then(function (r) { return r.json().catch(function () { return {}; }); })
      .then(function (d) { if (d && d.redirect) location.href = d.redirect; })
      .catch(function () {});
  }
  whenBody(function () { setTimeout(deviceCheck, 250); });

  


  function gateData() {
    var raw = readCookie('ls_gate');
    if (!raw) return null;
    try { return JSON.parse(atob(raw.replace(/-/g, '+').replace(/_/g, '/'))); } catch (e) { return null; }
  }
  function gatePost(url, body) {
    return fetch(url, { method: 'POST', credentials: 'same-origin',
      headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(body || {}) })
      .then(function (r) { return r.json(); });
  }
   
  function gateCss() {
    if (document.getElementById('MemberUI-gate-css')) return;
    var st = document.createElement('style');
    st.id = 'MemberUI-gate-css';
    st.textContent =
      '#MemberUI-gate{position:fixed;inset:0;z-index:2147482000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.55);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);font-family:Inter,-apple-system,"Segoe UI",Roboto,sans-serif}' +
      '#MemberUI-gate .g-box{width:100%;max-width:410px;background:#fff;border-radius:18px;padding:28px 26px 22px;box-shadow:0 30px 70px -20px rgba(16,24,40,.5);text-align:center;box-sizing:border-box}' +
      '#MemberUI-gate .g-ico{width:56px;height:56px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:22px;color:#fff;background:linear-gradient(135deg,var(--am_menu_color,#FF9900),var(--am_footer_link_color,#ea580c))}' +
      '#MemberUI-gate h3{margin:0 0 8px;font-size:19px;font-weight:800;color:#0f172a}' +
      '#MemberUI-gate p{margin:0 0 18px;font-size:13.5px;line-height:1.6;color:#4a5a6e}' +
      '#MemberUI-gate .g-code{width:100%;box-sizing:border-box;height:54px;border:1.5px solid #d9e0ea;border-radius:12px;text-align:center;font-size:26px;letter-spacing:12px;font-weight:800;color:#0f172a;outline:none;padding:0 0 0 12px}' +
      '#MemberUI-gate .g-code:focus{border-color:var(--am_menu_color,#FF9900);box-shadow:0 0 0 4px rgba(255,153,0,.15)}' +
      '#MemberUI-gate .g-timer{margin-top:8px;font-size:12px;font-weight:600;color:#64748b;font-variant-numeric:tabular-nums}' +
      '#MemberUI-gate .g-timer.over{color:#dc2626}' +
      '#MemberUI-gate .g-hint{margin-top:4px;font-size:11.5px;color:#94a3b8}' +
      '#MemberUI-gate .g-btn{width:100%;height:46px;margin-top:12px;border:0;border-radius:12px;font:700 14px Inter,sans-serif;color:#fff;cursor:pointer;background:linear-gradient(135deg,var(--am_menu_color,#FF9900),var(--am_footer_link_color,#ea580c))}' +
      '#MemberUI-gate .g-btn[disabled]{opacity:.6;cursor:default}' +
      '#MemberUI-gate .g-row{display:flex;justify-content:space-between;gap:10px;margin-top:12px}' +
      '#MemberUI-gate .g-link{border:0;background:none;padding:4px 0;font:600 12.5px Inter,sans-serif;color:#64748b;cursor:pointer}' +
      '#MemberUI-gate .g-link:hover{color:#0f172a}#MemberUI-gate .g-link[disabled]{opacity:.5;cursor:default}' +
      '#MemberUI-gate .g-msg{min-height:18px;margin-top:10px;font-size:12.5px;font-weight:600}' +
      '#MemberUI-gate .g-msg.err{color:#dc2626}#MemberUI-gate .g-msg.ok{color:#16a34a}' +
      '#MemberUI-gate .g-note{margin:14px 0 0;padding:10px 12px;border-radius:10px;background:#f6f8fb;font-size:12px;line-height:1.5;color:#64748b;text-align:left}' +
      '#MemberUI-gate .g-note i{margin-right:6px;color:var(--am_menu_color,#FF9900)}';
    document.documentElement.appendChild(st);
  }
  function showGate() {
    var g = gateData();
    if (!g || !g.t || document.getElementById('MemberUI-gate')) return;
    var TITLE = { browser: 'New browser detected', check: 'Confirm it’s you', device: 'New device', nofp: 'Confirm it’s you', confirm: 'New location', cleared: 'Confirm it’s you' };
    var LEAD = {
      browser: 'You are signing in from a different browser on your registered device.',
      check: 'Your device looks a little different from your registered device.',
      device: 'You are signing in from a new device.',
      nofp: 'Your browser did not send the usual security information.',
      confirm: 'You are signing in from a place (city / internet) where your device has not been used before.',
      cleared: 'This browser’s saved sign-in information was cleared.'
    };
    var title = TITLE[g.k] || 'Verification required';
    var text = (LEAD[g.k] ? LEAD[g.k] + ' ' : '') + (g.f === 1
      ? 'We could not send the email right now. Press <b>Send a new code</b> in a minute.'
      : 'Enter the 6-digit code we sent to <b>' + gEsc(g.e) + '</b>.' + (g.f === 2 ? ' The email may take a few minutes.' : ''));
    
    var KEY = 'ls_gate_' + String(g.t).slice(0, 12), times = null;
    try { times = JSON.parse(sessionStorage.getItem(KEY) || 'null'); } catch (e) {}
    if (!times || !times.end) {
      times = { end: Date.now() + (+g.s || (+g.m || 5) * 60) * 1000, sent: Date.now() };
      try { sessionStorage.setItem(KEY, JSON.stringify(times)); } catch (e) {}
    }
    function save() { try { sessionStorage.setItem(KEY, JSON.stringify(times)); } catch (e) {} }

    gateCss();

    var box = document.createElement('div');
    box.id = 'MemberUI-gate';
    box.innerHTML = '<div class="g-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-gate-t">' +
      '<div class="g-ico"><i class="fa-solid ' + (g.k === 'device' ? 'fa-laptop' : g.k === 'browser' ? 'fa-window-restore' : g.k === 'confirm' ? 'fa-location-dot' : 'fa-shield-halved') + '"></i></div>' +
      '<h3 id="MemberUI-gate-t">' + title + '</h3><p>' + text + '</p>' +
      '<input class="g-code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" placeholder="------" aria-label="6-digit code">' +
      '<div class="g-timer" aria-live="off"></div>' +
      '<div class="g-hint">No email? Look in the spam folder too.</div>' +
      '<button type="button" class="g-btn" data-g="verify">Verify &amp; sign in</button>' +
      '<div class="g-msg" aria-live="polite"></div>' +
      '<div class="g-row"><button type="button" class="g-link" data-g="resend">Send a new code</button>' +
      '<button type="button" class="g-link" data-g="close">Cancel</button></div>' +
      (g.k === 'browser' && g.r ? '<p class="g-note"><i class="fa-solid fa-circle-info"></i>Your account works in one browser. After this code, this browser becomes your registered browser and the old one will need a code again.</p>' : '') +
      '</div>';
    document.body.appendChild(box);
    var input = box.querySelector('.g-code'), msg = box.querySelector('.g-msg'), btn = box.querySelector('[data-g="verify"]'),
        timer = box.querySelector('.g-timer'), resend = box.querySelector('[data-g="resend"]');
    setTimeout(function () { input.focus(); }, 50);
    function say(t2, ok) { msg.textContent = t2; msg.className = 'g-msg ' + (ok ? 'ok' : 'err'); }
    function mmss(ms) { var x = Math.max(0, Math.ceil(ms / 1000)); return Math.floor(x / 60) + ':' + ('0' + (x % 60)).slice(-2); }
    var busyResend = false;
    function tick() {
      var left = times.end - Date.now();
      timer.textContent = left > 0 ? 'Code valid for ' + mmss(left) : 'This code has expired. Press “Send a new code”.';
      timer.classList.toggle('over', left <= 0);
      var wait = (times.sent || 0) + 60000 - Date.now();
      if (!busyResend) {
        resend.disabled = wait > 0;
        resend.textContent = wait > 0 ? 'Send a new code (' + Math.ceil(wait / 1000) + ')' : 'Send a new code';
      }
    }
    tick();
    var tk = setInterval(function () { if (!box.parentNode) { clearInterval(tk); return; } tick(); }, 500);
    function restart(t2) {
      say(t2);
      setTimeout(function () { dropCookie('ls_gate'); location.reload(); }, 2600);
    }
    function verify() {
      var code = (input.value || '').replace(/\D/g, '');
      if (code.length !== 6) { say('Enter the 6-digit code.'); return; }
      btn.disabled = true; say('');
      gatePost('/login-sessions/otp-verify', { t: g.t, code: code }).then(function (d) {
        if (d && d.ok) { dropCookie('ls_gate'); location.href = d.redirect || '/member'; return; }
        if (d && d.ls_gate === '2fa') { dropCookie('ls_gate'); clearInterval(tk); if (box.parentNode) box.parentNode.removeChild(box); show2fa(); return; }   
        btn.disabled = false; input.select();
        if (d && (d.restart || d.left === 0)) { restart((d && d.error) || 'Please sign in again.'); return; }
        say((d && d.error) || 'Something went wrong. Please try again.');
      }).catch(function () { btn.disabled = false; say('Network error. Please try again.'); });
    }
    input.addEventListener('input', function () { input.value = input.value.replace(/\D/g, '').slice(0, 6); if (input.value.length === 6) verify(); });
    input.addEventListener('keydown', function (e) { if (e.key === 'Enter') verify(); });
    box.addEventListener('click', function (e) {
      var a = e.target.closest('[data-g]');
      if (!a) return;
      var k = a.getAttribute('data-g');
      if (k === 'verify') verify();
      else if (k === 'close') { dropCookie('ls_gate'); clearInterval(tk); try { sessionStorage.removeItem(KEY); } catch (e2) {} box.parentNode.removeChild(box); }
      else if (k === 'resend' && !a.disabled) {
        busyResend = true; a.disabled = true;
        gatePost('/login-sessions/otp-resend', { t: g.t }).then(function (d) {
          busyResend = false;
          if (d && d.ok) {
            times.sent = Date.now();
            if (d.s) times.end = Date.now() + d.s * 1000;
            save(); input.value = ''; input.focus();
          } else if (d && d.wait) {
            times.sent = Date.now() - (60 - d.wait) * 1000; save();
          }
          say((d && d.message) || '', d && d.ok);
          if (d && d.restart) restart(d.message || 'Please sign in again.');
          tick();
        }).catch(function () { busyResend = false; say('Network error. Please try again.'); tick(); });
      }
    });
  }
  


  var EL_KEY = 'ls_el_state';
  var EL_MAIL = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  function elState(v) {      
    try {
      if (v === undefined) {
        var s = JSON.parse(sessionStorage.getItem(EL_KEY) || 'null');
        return s && s.t && s.end > Date.now() ? s : null;
      }
      if (v === null) sessionStorage.removeItem(EL_KEY); else sessionStorage.setItem(EL_KEY, JSON.stringify(v));
    } catch (e) {}
    return null;
  }
  function elForm() {        
    var f = document.querySelector('form.am-login-form-form') || document.querySelector('.am-login-form-wrapper form');
    if (!f) { var p = document.querySelector('input[name="amember_pass"]'); f = p && p.form; }
    return f && f.querySelector('input[type="password"]') ? f : null;
  }
  function elCss() {
    if (document.getElementById('MemberUI-el-css')) return;
    var st = document.createElement('style');
    st.id = 'MemberUI-el-css';
    st.textContent =
      '.MemberUI-elogin{position:relative;z-index:2;margin:4px 0 0;text-align:center}' +
      '.MemberUI-elogin-or{display:flex;align-items:center;gap:12px;margin:0 0 14px;font:700 11px/1 Inter,-apple-system,"Segoe UI",sans-serif;letter-spacing:1.1px;text-transform:uppercase;color:var(--MemberUI-soft,#94a3b8)}' +
      '.MemberUI-elogin-or:before,.MemberUI-elogin-or:after{content:"";flex:1;height:1px;background:var(--MemberUI-line,#e5e9f0)}' +
      '.MemberUI-elogin-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;box-sizing:border-box;min-height:48px;margin:0;padding:12px 18px;border:1.5px solid var(--MemberUI-line-3,#d9e0ea);border-radius:12px;background:var(--MemberUI-bg-2,#fff);color:var(--MemberUI-text,#0f172a);font:700 14px Inter,-apple-system,"Segoe UI",sans-serif;letter-spacing:.2px;cursor:pointer;transition:border-color .2s,box-shadow .2s,transform .2s}' +
      '.MemberUI-elogin-btn i{font-size:15px;color:var(--am_menu_color,#FF9900)}' +
      '.MemberUI-elogin-btn:hover{border-color:var(--am_menu_color,#FF9900);box-shadow:0 12px 24px -16px rgba(16,24,40,.45);transform:translateY(-1px)}' +
      '.MemberUI-elogin-btn:focus-visible{outline:none;border-color:var(--am_menu_color,#FF9900);box-shadow:0 0 0 4px rgba(255,153,0,.15)}' +
      '.MemberUI-elogin-sub{margin:8px 0 0;font-size:12px;line-height:1.5;color:var(--MemberUI-soft,#64748b)}' +
      '#MemberUI-gate .g-mail{display:block;width:100%;box-sizing:border-box;height:50px;margin:0;border:1.5px solid #d9e0ea;border-radius:12px;padding:0 14px;background:#fff;font:600 15px Inter,-apple-system,"Segoe UI",sans-serif;color:#0f172a;outline:none}' +
      '#MemberUI-gate .g-mail:focus{border-color:var(--am_menu_color,#FF9900);box-shadow:0 0 0 4px rgba(255,153,0,.15)}' +
      '#MemberUI-gate .g-inl{border:0;background:none;padding:0;margin:0;font:inherit;font-weight:700;color:var(--am_footer_link_color,#ea580c);cursor:pointer;text-decoration:underline;text-underline-offset:2px}';
    (document.head || document.documentElement).appendChild(st);
  }
  function wireEmailLogin() {
    if (!document.body || readCookie('ls_el') !== '1' || document.getElementById('MemberUI-elogin')) return;
    if (document.body.classList.contains('am-logged-in')) return;
    var f = elForm();
    if (!f) return;
    elCss();
    var box = document.createElement('div');
    box.id = 'MemberUI-elogin';
    box.className = 'MemberUI-elogin';
    box.innerHTML = '<div class="MemberUI-elogin-or"><span>or</span></div>' +
      '<button type="button" class="MemberUI-elogin-btn"><i class="fa-solid fa-envelope-open-text" aria-hidden="true"></i><span>Sign in with an email code</span></button>' +
      '<div class="MemberUI-elogin-sub">No password needed: we email you a 6-digit code.</div>';
    (f.querySelector('fieldset') || f).appendChild(box);
    box.querySelector('button').addEventListener('click', function (e) { e.preventDefault(); openEmailLogin(); });
  }
  function openEmailLogin() {
    if (!document.body || document.getElementById('MemberUI-gate')) return;
    gateCss(); elCss();
    var f = elForm(), tk = null, busy = false, cur = {}, lastEmail = '';
    var box = document.createElement('div');
    box.id = 'MemberUI-gate';
    box.setAttribute('data-el', '1');
    document.body.appendChild(box);
    function onKey(e) { if (e.key === 'Escape' && box.parentNode) { e.preventDefault(); close(); } }
    document.addEventListener('keydown', onKey, true);
    function close() {
      clearInterval(tk);
      var s = elState(); if (s) { s.open = 0; elState(s); }
      document.removeEventListener('keydown', onKey, true);
      if (box.parentNode) box.parentNode.removeChild(box);
    }
    function say(t2, ok) { var m = box.querySelector('.g-msg'); if (m) { m.textContent = t2 || ''; m.className = 'g-msg ' + (ok ? 'ok' : 'err'); } }
    function txt(d, def) {
      var x = d && (d.error || d.message);
      if (Object.prototype.toString.call(x) === '[object Array]') x = x.join(' ');
      return x ? String(x) : def;
    }
    function typed() {         
      var u = f && f.querySelector('input[name="amember_login"]');
      var v = u ? String(u.value || '').trim() : '';
      return EL_MAIL.test(v) ? v : '';
    }
    function target() {        
      var i = f && f.querySelector('input[name="amember_redirect_url"], input[name="_amember_redirect_url"]');
      var v = i ? String(i.value || '') : '';
      if (!v) return '';
      try {
        var u = new URL(v, location.href);
        return u.origin === location.origin && !/\/(login|logout)(\/|$)/.test(u.pathname) ? u.pathname + u.search + u.hash : '';
      } catch (e) { return ''; }
    }
    function done(d) {         
      elState(null); clearInterval(tk);
      try { localStorage.setItem(LOGIN_KEY, String(Date.now())); } catch (e) {}
            location.href = target() || d.redirect || '/member';
    }
    function next(d) {         
      var tfa = d.ls_gate === '2fa' && readCookie('ls_2fa');
      if (!tfa && !readCookie('ls_susp') && !readCookie('ls_gate') && !readCookie('ls_msg')) { stepEmail(lastEmail, txt(d, 'Please try again.')); return; }
      elState(null); close();
      if (tfa) show2fa();
      else if (!showSuspended()) { if (readCookie('ls_gate')) showGate(); else showNote(); }
    }
    function stepEmail(prefill, note) {
      clearInterval(tk); cur = {};
      var s = elState(); if (s) { s.open = 0; elState(s); }
      box.innerHTML = '<div class="g-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-el-t">' +
        '<div class="g-ico"><i class="fa-solid fa-envelope"></i></div>' +
        '<h3 id="MemberUI-el-t">Sign in with an email code</h3>' +
        '<p>Enter the email address of your account. We will send you a <span style="white-space:nowrap">6-digit</span> code to sign in, no password needed.</p>' +
        '<input class="g-mail" type="email" inputmode="email" autocomplete="email" autocapitalize="off" spellcheck="false" maxlength="190" placeholder="you@example.com" aria-label="Email address">' +
        '<button type="button" class="g-btn" data-g="send">Send code</button>' +
        '<div class="g-msg" aria-live="polite"></div>' +
        '<div class="g-row"><button type="button" class="g-link" data-g="pass">Use password instead</button>' +
        '<button type="button" class="g-link" data-g="close">Cancel</button></div></div>';
      var inp = box.querySelector('.g-mail');
      inp.value = prefill || lastEmail || typed();
      if (note) say(note);
      setTimeout(function () { try { inp.focus(); } catch (e) {} }, 50);
      inp.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); send(); } });
    }
    function send() {
      var inp = box.querySelector('.g-mail'), btn = box.querySelector('[data-g="send"]');
      if (!inp || !btn || busy) return;
      var em = String(inp.value || '').trim();
      if (!EL_MAIL.test(em)) { say('Please enter a valid email address.'); inp.focus(); return; }
      lastEmail = em;
      busy = true; btn.disabled = true; btn.textContent = 'Sending…'; say('');
      try { computeHw(); } catch (e) {}       
      gatePost('/login-sessions/email-login', { email: em }).then(function (d) {
        busy = false;
        if (d && d.ok && d.t) {
          var s = { t: d.t, e: d.e || em, em: em, end: Date.now() + (+d.s || 300) * 1000, sent: Date.now(), open: 1 };
          elState(s); stepCode(s);                 
          return;
        }
        btn.disabled = false; btn.textContent = 'Send code';
        if (d && d.ls_gate) { next(d); return; }
        var old = elState();
        if (d && d.wait && old && String(old.em || '').toLowerCase() === em.toLowerCase()) {      
          old.open = 1; elState(old); stepCode(old, txt(d, '')); return;
        }
        say(txt(d, 'Something went wrong. Please try again.'));
      }).catch(function () { busy = false; btn.disabled = false; btn.textContent = 'Send code'; say('Network error. Please try again.'); });
    }
    function stepCode(s, note) {
      clearInterval(tk);
      lastEmail = s.em || lastEmail;
      box.innerHTML = '<div class="g-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-el-t">' +
        '<div class="g-ico"><i class="fa-solid fa-envelope-open-text"></i></div>' +
        '<h3 id="MemberUI-el-t">Check your email</h3>' +
        '<p>If <b>' + gEsc(s.e) + '</b> belongs to an account, a <span style="white-space:nowrap">6-digit</span> code is on its way. Enter it below. ' +
        '<button type="button" class="g-inl" data-g="change">Change email</button></p>' +
        '<input class="g-code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" placeholder="------" aria-label="6-digit code">' +
        '<div class="g-timer" aria-live="off"></div>' +
        '<div class="g-hint">No email? Look in the spam folder too.</div>' +
        '<button type="button" class="g-btn" data-g="verify">Verify &amp; sign in</button>' +
        '<div class="g-msg" aria-live="polite"></div>' +
        '<div class="g-row"><button type="button" class="g-link" data-g="resend">Send a new code</button>' +
        '<button type="button" class="g-link" data-g="pass">Use password instead</button></div></div>';
      var input = box.querySelector('.g-code'), btn = box.querySelector('[data-g="verify"]'),
          timer = box.querySelector('.g-timer'), resend = box.querySelector('[data-g="resend"]'), busyResend = false;
      if (note) say(note, true);
      setTimeout(function () { try { input.focus(); } catch (e) {} }, 50);
      function mmss(ms) { var x = Math.max(0, Math.ceil(ms / 1000)); return Math.floor(x / 60) + ':' + ('0' + (x % 60)).slice(-2); }
      function tick() {
        if (!box.parentNode) { clearInterval(tk); return; }
        var left = s.end - Date.now();
        timer.textContent = left > 0 ? 'Code valid for ' + mmss(left) : 'This code has expired. Press “Send a new code”.';
        timer.classList.toggle('over', left <= 0);
        var wait = (s.sent || 0) + 60000 - Date.now();
        if (!busyResend) {
          resend.disabled = wait > 0;
          resend.textContent = wait > 0 ? 'Send a new code (' + Math.ceil(wait / 1000) + ')' : 'Send a new code';
        }
      }
      tick();
      tk = setInterval(tick, 500);
      function restart(msg) {   
        elState(null); clearInterval(tk); say(msg);
        setTimeout(function () { if (box.parentNode) stepEmail(s.em); }, 2600);
      }
      function verify() {
        var code = (input.value || '').replace(/\D/g, '');
        if (code.length !== 6) { say('Enter the 6-digit code.'); return; }
        if (btn.disabled) return;
        btn.disabled = true; say('');
        try { computeHw(); } catch (e) {}     
        gatePost('/login-sessions/email-login-verify', { t: s.t, code: code }).then(function (d) {
          if (d && d.ok) { done(d); return; }
          if (d && d.ls_gate) { next(d); return; }
          btn.disabled = false; try { input.select(); } catch (e) {}
          if (d && (d.restart || d.left === 0)) { restart(txt(d, 'Please ask for a new code.')); return; }
          say(txt(d, 'Something went wrong. Please try again.'));
        }).catch(function () { btn.disabled = false; say('Network error. Please try again.'); });
      }
      function again() {
        if (resend.disabled || busyResend) return;
        busyResend = true; resend.disabled = true;
        gatePost('/login-sessions/email-login-resend', { t: s.t }).then(function (d) {
          busyResend = false;
          if (d && d.ok) { s.sent = Date.now(); if (d.s) s.end = Date.now() + d.s * 1000; elState(s); input.value = ''; input.focus(); }
          else if (d && d.wait) { s.sent = Date.now() - (60 - d.wait) * 1000; elState(s); }
          if (d && d.restart) { restart(txt(d, 'Please ask for a new code.')); return; }
          say(txt(d, ''), d && d.ok);
          tick();
        }).catch(function () { busyResend = false; say('Network error. Please try again.'); tick(); });
      }
      input.addEventListener('input', function () { input.value = input.value.replace(/\D/g, '').slice(0, 6); if (input.value.length === 6) verify(); });
      input.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); verify(); } });
      cur = { verify: verify, again: again };
    }
    box.addEventListener('click', function (e) {
      var a = e.target && e.target.closest ? e.target.closest('[data-g]') : null;
      if (!a) return;
      var k = a.getAttribute('data-g');
      if (k === 'close') close();
      else if (k === 'pass') {
        close();
        var pw = f && f.querySelector('input[type="password"]');
        if (pw) setTimeout(function () { try { pw.focus(); } catch (e2) {} }, 60);
      }
      else if (k === 'send') send();
      else if (k === 'change') { var o = elState(); elState(null); stepEmail(o ? o.em : lastEmail); }
      else if (k === 'verify' && cur.verify) cur.verify();
      else if (k === 'resend' && cur.again) cur.again();
    });
    var st = elState();        
    if (st) { st.open = 1; elState(st); stepCode(st); } else stepEmail();
  }
  function bootEmailLogin() {
    wireEmailLogin();
    var s = elState();         
    if (s && s.open && document.getElementById('MemberUI-elogin') && !readCookie('ls_gate') && !readCookie('ls_2fa') && !readCookie('ls_susp')) openEmailLogin();
    setTimeout(wireEmailLogin, 300); setTimeout(wireEmailLogin, 900); setTimeout(wireEmailLogin, 2000);   
  }
  whenBody(showGate);
  whenBody(showSuspended);                    
  whenBody(showNote);                         

  

  (function sessionClock() {
    
    dropCookie('memberui_to'); dropCookie('memberui_timeout');
    try { localStorage.removeItem('memberui_act'); localStorage.removeItem('memberui_hb'); localStorage.removeItem('memberui_to_reason'); } catch (e) {}
    var end = 0, gone = false;
    function out() {
      if (gone) return;
      gone = true;
      try { location.replace('/login-sessions/expire'); } catch (e) { location.href = '/login-sessions/expire'; }
    }
    function tick() { if (end && Date.now() >= end) out(); }
    function start() {
      if (!document.body || !document.body.classList.contains('am-logged-in')) return;
      var p = (readCookie('ls_sx') || '').split('.'), stop = +p[0], now = +p[1];
      if (!(stop > 0) || !(now > 0)) return;                 
      end = Date.now() + (stop - now) * 1000;
      if (end <= Date.now()) { out(); return; }
      setTimeout(tick, Math.min(end - Date.now() + 40, 2147483000));
      setInterval(tick, 1000);                               
      document.addEventListener('visibilitychange', tick);
      window.addEventListener('focus', tick);
      window.addEventListener('pageshow', tick);
    }
    whenBody(start);
  })();

  


  function show2fa() {
    var raw = readCookie('ls_2fa');
    if (!raw || !document.body || document.getElementById('MemberUI-gate')) return;
    var parts = raw.split('.'), tok = parts[0], days = +parts[1] || 0;
    if (!/^[a-f0-9]{40}$/.test(tok)) return;
    var st = document.createElement('style');
    st.textContent =
      '#MemberUI-2fa{position:fixed;inset:0;z-index:2147482000;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(15,23,42,.55);backdrop-filter:blur(4px);font-family:Inter,-apple-system,"Segoe UI",Roboto,sans-serif}' +
      '#MemberUI-2fa .g-box{width:100%;max-width:400px;background:#fff;border-radius:18px;padding:28px 26px 22px;box-shadow:0 30px 70px -20px rgba(16,24,40,.5);text-align:center;animation:MemberUIFadeIn .2s ease both}' +
      '#MemberUI-2fa .g-ico{width:56px;height:56px;margin:0 auto 14px;border-radius:16px;display:grid;place-items:center;font-size:22px;color:#fff;background:linear-gradient(135deg,var(--am_menu_color,#FF9900),var(--am_footer_link_color,#ea580c))}' +
      '#MemberUI-2fa h3{margin:0 0 8px;font-size:19px;font-weight:800;color:#0f172a}#MemberUI-2fa p{margin:0 0 16px;font-size:13.5px;line-height:1.6;color:#4a5a6e}' +
      '#MemberUI-2fa .g-code{width:100%;box-sizing:border-box;height:52px;border:1.5px solid #d9e0ea;border-radius:12px;text-align:center;font-size:24px;letter-spacing:8px;font-weight:800;color:#0f172a;outline:none}' +
      '#MemberUI-2fa .g-code.bk{font-size:18px;letter-spacing:3px}' +
      '#MemberUI-2fa .g-code:focus{border-color:var(--am_menu_color,#FF9900);box-shadow:0 0 0 4px rgba(255,153,0,.15)}' +
      '#MemberUI-2fa label.g-rem{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:12px;font-size:13px;color:#4a5a6e;cursor:pointer}' +
      '#MemberUI-2fa .g-btn{width:100%;height:46px;margin-top:14px;border:0;border-radius:12px;font:700 14px Inter,sans-serif;color:#fff;cursor:pointer;background:linear-gradient(135deg,var(--am_menu_color,#FF9900),var(--am_footer_link_color,#ea580c))}' +
      '#MemberUI-2fa .g-btn[disabled]{opacity:.6}' +
      '#MemberUI-2fa .g-row{display:flex;justify-content:space-between;gap:10px;margin-top:12px}' +
      '#MemberUI-2fa .g-link{border:0;background:none;padding:4px 0;font:600 12.5px Inter,sans-serif;color:#64748b;cursor:pointer}#MemberUI-2fa .g-link:hover{color:#0f172a}' +
      '#MemberUI-2fa .g-msg{min-height:18px;margin-top:10px;font-size:12.5px;font-weight:600;color:#dc2626}';
    document.documentElement.appendChild(st);
    var box = document.createElement('div');
    box.id = 'MemberUI-2fa';
    box.innerHTML = '<div class="g-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-2fa-t">' +
      '<div class="g-ico"><i class="fa-solid fa-mobile-screen-button"></i></div>' +
      '<h3 id="MemberUI-2fa-t">Two-factor authentication</h3>' +
      '<p class="g-txt">Open your authenticator app and enter the 6-digit code.</p>' +
      '<input class="g-code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" placeholder="------" aria-label="Code">' +
      (days > 0 ? '<label class="g-rem"><input type="checkbox" class="g-remember"> Don’t ask again on this browser for ' + days + ' days</label>' : '') +
      '<button type="button" class="g-btn">Verify</button><div class="g-msg" aria-live="polite"></div>' +
      '<div class="g-row"><button type="button" class="g-link g-toggle">Use a backup code</button>' +
      '<button type="button" class="g-link g-cancel">Cancel</button></div></div>';
    document.body.appendChild(box);
    var input = box.querySelector('.g-code'), btn = box.querySelector('.g-btn'), msg = box.querySelector('.g-msg'), backup = false;
    setTimeout(function () { input.focus(); }, 50);
    function go() {
      var v = input.value.trim();
      if (!backup && v.replace(/\D/g, '').length !== 6) { msg.textContent = 'Enter the 6-digit code.'; return; }
      if (backup && v.replace(/[^a-z0-9]/gi, '').length !== 10) { msg.textContent = 'Enter a 10-character backup code.'; return; }
      btn.disabled = true; msg.textContent = '';
      var rem = box.querySelector('.g-remember');
      gatePost('/memberui-2fa/verify', { t: tok, code: v, remember: !!(rem && rem.checked) }).then(function (d) {
        if (d && d.ok) { dropCookie('ls_2fa'); location.href = d.redirect || '/member'; return; }
        if (d && d.ls_gate && d.ls_gate !== '2fa' && readCookie('ls_gate')) { dropCookie('ls_2fa'); if (box.parentNode) box.parentNode.removeChild(box); showGate(); return; }   
        btn.disabled = false; msg.textContent = (d && d.error) || 'Please try again.';
        if (d && d.restart) setTimeout(function () { dropCookie('ls_2fa'); location.reload(); }, 2200);
        input.select();
      }).catch(function () { btn.disabled = false; msg.textContent = 'Network error. Please try again.'; });
    }
    input.addEventListener('input', function () {
      if (!backup) { input.value = input.value.replace(/\D/g, '').slice(0, 6); if (input.value.length === 6) go(); }
    });
    input.addEventListener('keydown', function (e) { if (e.key === 'Enter') go(); });
    btn.addEventListener('click', go);
    box.querySelector('.g-toggle').addEventListener('click', function () {
      backup = !backup;
      input.value = ''; msg.textContent = '';
      input.maxLength = backup ? 11 : 6;
      input.placeholder = backup ? 'xxxxx-xxxxx' : '------';
      input.setAttribute('inputmode', backup ? 'text' : 'numeric');
      input.classList.toggle('bk', backup);
      box.querySelector('.g-txt').textContent = backup ? 'Enter one of your backup codes. Each code works once.' : 'Open your authenticator app and enter the 6-digit code.';
      this.textContent = backup ? 'Use the app code' : 'Use a backup code';
      input.focus();
    });
    box.querySelector('.g-cancel').addEventListener('click', function () { dropCookie('ls_2fa'); box.parentNode.removeChild(box); });
  }
  whenBody(show2fa);
  whenBody(bootEmailLogin);                  

   

  

})();
</script>
<script>(function () {
  'use strict';
  if (window.__MemberUIPremiumV99) return;
  window.__MemberUIPremiumV99 = true;

  var _nc = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
  var IS_SLOW = !!(_nc && (_nc.saveData || _nc.effectiveType === '2g' || _nc.effectiveType === 'slow-2g'));

  var _qc = Object.create(null);
  function $1(sel) {
    return (sel in _qc) ? _qc[sel] : (_qc[sel] = document.querySelector(sel));
  }
  function invalidateQS() { _qc = Object.create(null); }

  var MemberUI_CSS_HREF    = '/member-ui.css';   
  var MemberUI_CSS_VERSION = window.MEMBERUI_CSS_V || '20261018a'; 
  var MemberUI_LINK_ID     = 'MemberUI-premium-css';
  var MemberUI_LOGO_URL    = 'https://i.ibb.co/DHZbcFLj/Leo-short-logo.png';

  function injectPreconnects() {
    if ($1('#MemberUI-preconnect')) return;
    var head = document.head;
    if (!head) return;
    var pc = document.createElement('link');
    pc.id  = 'MemberUI-preconnect';
    pc.rel = 'preconnect';
    pc.href = 'https://use.fontawesome.com';
    pc.crossOrigin = 'anonymous';
    head.insertBefore(pc, head.firstChild);
    var img = document.createElement('link');
    img.rel = 'preconnect';
    img.href = 'https://i.ibb.co';
    head.insertBefore(img, head.firstChild);
  }

  function injectCSSLink() {
    var head = document.head;
    if (!head) return;
    var fullHref = MemberUI_CSS_HREF + '?v=' + MemberUI_CSS_VERSION;
    var preId = MemberUI_LINK_ID + '-preload';
    var pre = document.getElementById(preId) || document.querySelector('link[rel="preload"][as="style"][href="' + fullHref + '"]');
    if (!pre) {
      pre = document.createElement('link');
      pre.rel = 'preload';
      pre.as = 'style';
      pre.href = fullHref;
      pre.setAttribute('fetchpriority', 'high');
      head.insertBefore(pre, head.firstChild);
    }
    pre.id = preId;
    var existing = document.getElementById(MemberUI_LINK_ID);
    if (existing && existing.parentNode) existing.parentNode.removeChild(existing);
    var link = document.createElement('link');
    link.id   = MemberUI_LINK_ID;
    link.rel  = 'stylesheet';
    link.onerror = function () { link.setAttribute('data-state', 'failed'); };   
    link.href = fullHref;
    link.setAttribute('fetchpriority', 'high');
    head.appendChild(link);
  }

  function keepCSSLast() {
    var link = document.getElementById(MemberUI_LINK_ID);
    var head = document.head;
    if (!link || !head) return;
    if (head.lastElementChild !== link) head.appendChild(link);
  }

  var __MemberUIHeadObs = null;
  function startHeadObserver() {
    if (__MemberUIHeadObs || !document.head) return;
    if (typeof MutationObserver === 'undefined') return;
    var pending = false;
    __MemberUIHeadObs = new MutationObserver(function (mutations) {
      for (var i = 0; i < mutations.length; i++) {
        var added = mutations[i].addedNodes;
        for (var j = 0; j < added.length; j++) {
          if (added[j].id === MemberUI_LINK_ID) return;
        }
      }
      if (pending) return;
      pending = true;
      (window.requestAnimationFrame || function (fn) { setTimeout(fn, 16); })(function () {
        pending = false;
        keepCSSLast();
      });
    });
    __MemberUIHeadObs.observe(document.head, { childList: true });
  }

  function injectStateCSS() {
    if ($1('#MemberUI-sub-state-css')) return;
    var s = document.createElement('style');
    s.id = 'MemberUI-sub-state-css';
    s.textContent =
      'html body.am-logged-in[class] .am-user-identity-block-avatar{display:flex!important;align-items:center!important;gap:11px!important;padding:8px 8px 8px 10px!important;border-radius:14px!important;border:1px solid var(--MemberUI-line,#e5e9f0)!important;background:var(--MemberUI-bg-2,#fff)!important;box-shadow:none!important;cursor:default!important;transform:none!important;transition:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar:hover{border-color:var(--MemberUI-line,#e5e9f0)!important;box-shadow:none!important;transform:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar a[href*="logout"]{display:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar::after{content:none!important;display:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar-pic{position:relative!important;flex-shrink:0!important;display:block!important;width:34px!important;height:34px!important;border-radius:50%!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar-pic::before,html body.am-logged-in[class] .am-user-identity-block-avatar-pic::after{content:none!important;display:none!important}' +
      'html body.am-logged-in[class] .am-user-identity-block-avatar-pic img{width:34px!important;height:34px!important;border-radius:50%!important;border:0!important;object-fit:cover!important;display:block!important;box-shadow:0 0 0 1px var(--MemberUI-line-2,#d9e0ea)!important}' +
      'html body.am-logged-in.MemberUI-plan-pro[class] .am-user-identity-block-avatar-pic img{box-shadow:0 0 0 2px var(--MemberUI-bg-2,#fff),0 0 0 3.5px var(--MemberUI-brand-1,#FF9900)!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login{display:flex!important;flex-wrap:wrap!important;align-items:center!important;column-gap:6px!important;row-gap:1px!important;flex:1 1 auto!important;min-width:0!important;overflow:hidden!important;white-space:nowrap!important;font-size:13.5px!important;font-weight:700!important;line-height:1.25!important;color:var(--MemberUI-text,#0f172a)!important;letter-spacing:-.1px!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login::before{content:"Member"!important;display:block!important;order:3!important;flex:0 0 100%!important;font-size:11.5px!important;font-weight:500!important;letter-spacing:0!important;color:var(--MemberUI-soft,#94a3b8)!important;margin:0!important}' +
      'html body.am-logged-in.MemberUI-plan-pro[class] .am-user-identity-block_login::before{content:"Pro member"!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login::after{content:none!important;display:none!important}' +
      'html body.am-logged-in[class] .MemberUI-uname{flex:0 1 auto!important;max-width:calc(100% - 40px)!important;min-width:0!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}' +
      'html body.am-logged-in[class] .MemberUI-pro{display:none!important}' +
      'html body.am-logged-in.MemberUI-plan-pro[class] .MemberUI-pro{display:inline-block!important;flex:0 0 auto!important;margin:0!important;padding:1px 6px!important;border-radius:999px!important;border:1px solid var(--MemberUI-brand-1,#FF9900)!important;background:transparent!important;font-size:9px!important;font-weight:800!important;letter-spacing:1px!important;line-height:1.5!important;color:var(--MemberUI-brand-1,#FF9900)!important;box-shadow:none!important}' +
      'html body.am-logged-in.MemberUI-plan-pro[class] .MemberUI-pro::before{content:"PRO"!important}' +
      'html body.am-logged-in.MemberUI-plan-free[class] .am-user-identity-block_login::before{content:"Free member"!important}' +
      'html body.am-logged-in.MemberUI-plan-free[class] .MemberUI-pro{display:inline-block!important;flex:0 0 auto!important;margin:0!important;padding:1px 6px!important;border-radius:999px!important;border:1px solid var(--MemberUI-line-2,#cbd5e1)!important;background:transparent!important;font-size:9px!important;font-weight:800!important;letter-spacing:1px!important;line-height:1.5!important;color:var(--MemberUI-muted,#64748b)!important;box-shadow:none!important}' +
      'html body.am-logged-in.MemberUI-plan-free[class] .MemberUI-pro::before{content:"FREE"!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login{display:grid!important;grid-template-columns:minmax(0,max-content) max-content!important;justify-content:start!important;align-items:center!important;column-gap:6px!important;row-gap:1px!important;flex-wrap:nowrap!important}' +
      'html body.am-logged-in[class] .am-user-identity-block_login::before{grid-row:2!important;grid-column:1 / -1!important;order:0!important;width:0!important;min-width:100%!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}' +
      'html body.am-logged-in[class] .MemberUI-uname{grid-row:1!important;grid-column:1!important;max-width:none!important;min-width:0!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}' +
      'html body.am-logged-in[class] .MemberUI-pro{grid-row:1!important;grid-column:2!important;justify-self:start!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle{flex:0 0 auto!important;display:grid!important;place-items:center!important;width:30px!important;height:30px!important;margin:0 0 0 auto!important;padding:0!important;border:1px solid var(--MemberUI-line,#e5e9f0)!important;border-radius:999px!important;background:var(--MemberUI-bg-2,#fff)!important;color:var(--MemberUI-muted,#64748b)!important;font-size:11px!important;line-height:1!important;cursor:pointer!important;box-shadow:none!important;transition:background .18s ease,color .18s ease!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle i{transition:transform .2s ease!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle:hover{background:var(--MemberUI-bg-3,#f4f7fb)!important;border-color:var(--MemberUI-line-2,#d9e0ea)!important;color:var(--MemberUI-text,#0f172a)!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle:focus-visible{outline:2px solid var(--MemberUI-brand-1,#FF9900)!important;outline-offset:2px!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle[aria-expanded="true"]{background:var(--MemberUI-brand-1,#FF9900)!important;border-color:transparent!important;color:#fff!important}' +
      'html body.am-logged-in[class] .MemberUI-ub-toggle[aria-expanded="true"] i{transform:rotate(180deg)!important}' +
      '.MemberUI-topbar-actions .MemberUI-top-avatar{display:none!important}' +
      '.MemberUI-topbar-actions{display:flex!important;align-items:center!important;gap:8px!important}' +
      '.MemberUI-logout-btn{display:inline-flex!important;align-items:center!important;justify-content:center!important;text-decoration:none!important;color:inherit;cursor:pointer;transition:color .18s ease,background .18s ease,border-color .18s ease}' +
      '.MemberUI-logout-btn:hover{color:#ef4444!important;background:rgba(239,68,68,.12)!important;border-color:rgba(239,68,68,.35)!important}' +
      '.MemberUI-logout-btn i{pointer-events:none}' +
      '.MemberUI-sidebar-toggle{width:36px;height:36px;border:2px solid #ccc;border-radius:12px;background:transparent;box-shadow:none;color:inherit;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .18s ease}' +
      '.MemberUI-sidebar-toggle:hover,.MemberUI-sidebar-toggle:active{background:transparent!important;box-shadow:none!important;transform:none!important}' +
      '.MemberUI-sidebar-toggle i{font-size:15px;transition:none}' +
      '.MemberUI-notif-panel{position:fixed;top:64px;right:16px;width:340px;max-width:calc(100vw - 24px);max-height:70vh;overflow:auto;z-index:99999;display:none;background:#fff;color:#0f172a;border:1px solid #e2e8f0;border-radius:14px;box-shadow:0 12px 40px rgba(0,0,0,.18)}' +
      '.MemberUI-notif-panel.show{display:block}' +
      '.MemberUI-notif-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid #e2e8f0}' +
      '.MemberUI-notif-clear{border:0;background:transparent;color:#6366f1;cursor:pointer;font-size:12px;font-weight:600}' +
      '.MemberUI-notif-item{display:flex;gap:10px;padding:12px 14px;text-decoration:none;color:inherit}' +
      '.MemberUI-notif-item .tx{display:flex;flex-direction:column;font-size:12.5px}' +
      '.MemberUI-notif-empty{padding:24px;text-align:center;font-size:13px;color:#94a3b8}' +
      '.MemberUI-toast-wrap{position:fixed;top:16px;right:16px;z-index:100000;display:flex;flex-direction:column;gap:8px}' +
      '.MemberUI-toast.warn i{color:#f59e0b}' +
      '.MemberUI-cart-btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:inherit;cursor:pointer;transition:color .18s ease}' +
      '.MemberUI-cart-btn:hover{color:#6366f1}' +
      '.MemberUI-btn i{margin:0 2px}';
    document.head.appendChild(s);
  }

  try { localStorage.removeItem('MemberUI-sub-state'); } catch (e) {}
  try { sessionStorage.removeItem('MemberUI-sub-state-v2'); } catch (e) {}
  try { sessionStorage.removeItem('MemberUI-welcomed'); } catch (e) {}

  var MemberUI_ICON_MAP = {
    'dashboard': 'fa-solid fa-house', 'home': 'fa-solid fa-house',
    'signup': 'fa-solid fa-user-plus', 'register': 'fa-solid fa-user-plus',
    'sign up': 'fa-solid fa-user-plus',
    'profile': 'fa-solid fa-user', 'account': 'fa-solid fa-user',
    'password': 'fa-solid fa-key', 'change password': 'fa-solid fa-key',
    'billing': 'fa-solid fa-credit-card', 'payment': 'fa-solid fa-receipt',
    'payments': 'fa-solid fa-receipt', 'payment history': 'fa-solid fa-receipt',
    'history': 'fa-solid fa-clock-rotate-left', 'resources': 'fa-solid fa-layer-group',
    'download': 'fa-solid fa-download', 'downloads': 'fa-solid fa-download',
    'extension': 'fa-solid fa-puzzle-piece',
    'affiliate': 'fa-solid fa-users',
    'help': 'fa-solid fa-circle-question', 'support': 'fa-solid fa-headset',
    'contact': 'fa-solid fa-envelope', 'whatsapp': 'fa-brands fa-whatsapp',
    'telegram': 'fa-brands fa-telegram', 'youtube': 'fa-brands fa-youtube',
    'settings': 'fa-solid fa-gear', 'logout': 'fa-solid fa-right-from-bracket',
    'terms': 'fa-solid fa-file-contract', 'privacy': 'fa-solid fa-shield-halved',
    'agreement': 'fa-solid fa-file-signature', 'user agreement': 'fa-solid fa-file-signature',
    'faq': 'fa-solid fa-circle-question', 'tutorial': 'fa-solid fa-graduation-cap',
    'video': 'fa-solid fa-video', 'invoice': 'fa-solid fa-file-invoice',
    'subscription': 'fa-solid fa-crown', 'license': 'fa-solid fa-certificate',
    'cart': 'fa-solid fa-cart-shopping', 'buy more': 'fa-solid fa-cart-shopping',
    'buy': 'fa-solid fa-cart-shopping', 'shop': 'fa-solid fa-bag-shopping',
    'store': 'fa-solid fa-store', 'checkout': 'fa-solid fa-cart-shopping',
    'order': 'fa-solid fa-box', 'upgrade': 'fa-solid fa-arrow-up-right-dots',
    'renew': 'fa-solid fa-rotate-right', 'explore': 'fa-solid fa-compass',
    'social': 'fa-solid fa-share-nodes',
    'social links': 'fa-solid fa-share-nodes',
    'social media': 'fa-solid fa-share-nodes',
    'our socials': 'fa-solid fa-share-nodes',
    'follow us': 'fa-solid fa-share-nodes',
    'facebook': 'fa-brands fa-facebook',
    'instagram': 'fa-brands fa-instagram',
    'twitter': 'fa-brands fa-x-twitter',
    'x': 'fa-brands fa-x-twitter',
    'tiktok': 'fa-brands fa-tiktok',
    'linkedin': 'fa-brands fa-linkedin',
    'pinterest': 'fa-brands fa-pinterest',
    'snapchat': 'fa-brands fa-snapchat',
    'discord': 'fa-brands fa-discord',
    'reddit': 'fa-brands fa-reddit',
    'threads': 'fa-brands fa-threads',
    'vimeo': 'fa-brands fa-vimeo'
  };
  var MemberUI_ICON_KEYS = Object.keys(MemberUI_ICON_MAP);

  function guessIconForItem(label, href) {
    if (href) {
      var h = href.replace(/\/+$/, '').toLowerCase();
      if (h === '/member' || h === '')              return MemberUI_ICON_MAP['dashboard'];
      if (/\/profile/.test(h))                     return MemberUI_ICON_MAP['profile'];
      if (/\/payment-history/.test(h))             return MemberUI_ICON_MAP['payments'];
      if (/signup|register/.test(h))               return MemberUI_ICON_MAP['signup'];
      if (/password/.test(h))                      return MemberUI_ICON_MAP['password'];
      if (/whatsapp/.test(h))                      return MemberUI_ICON_MAP['whatsapp'];
      if (/telegram/.test(h))                      return MemberUI_ICON_MAP['telegram'];
      if (/youtube/.test(h))                       return MemberUI_ICON_MAP['youtube'];
      if (/terms|policy|privacy/.test(h))          return MemberUI_ICON_MAP['terms'];
      if (/affiliate/.test(h))                     return MemberUI_ICON_MAP['affiliate'];
      if (/billing|invoice/.test(h))               return MemberUI_ICON_MAP['billing'];
      if (/facebook\.com|\/facebook/.test(h))      return MemberUI_ICON_MAP['facebook'];
      if (/instagram\.com|\/instagram/.test(h))    return MemberUI_ICON_MAP['instagram'];
      if (/twitter\.com|x\.com|\/twitter/.test(h)) return MemberUI_ICON_MAP['twitter'];
      if (/tiktok\.com|\/tiktok/.test(h))          return MemberUI_ICON_MAP['tiktok'];
      if (/linkedin\.com|\/linkedin/.test(h))      return MemberUI_ICON_MAP['linkedin'];
      if (/pinterest\.com|\/pinterest/.test(h))    return MemberUI_ICON_MAP['pinterest'];
      if (/snapchat\.com|\/snapchat/.test(h))      return MemberUI_ICON_MAP['snapchat'];
      if (/discord\.com|\/discord/.test(h))        return MemberUI_ICON_MAP['discord'];
      if (/reddit\.com|\/reddit/.test(h))          return MemberUI_ICON_MAP['reddit'];
      if (/threads\.net|\/threads/.test(h))        return MemberUI_ICON_MAP['threads'];
      if (/vimeo\.com|\/vimeo/.test(h))            return MemberUI_ICON_MAP['vimeo'];
      if (/cart|checkout|buy/.test(h))             return MemberUI_ICON_MAP['cart'];
      if (/shop|store/.test(h))                    return MemberUI_ICON_MAP['shop'];
      if (/social/.test(h))                        return MemberUI_ICON_MAP['social'];
    }
    return guessIcon(label);
  }

  function guessIcon(label) {
    var l = String(label || '').toLowerCase().trim();
    for (var i = 0; i < MemberUI_ICON_KEYS.length; i++) {
      if (l.indexOf(MemberUI_ICON_KEYS[i]) !== -1) return MemberUI_ICON_MAP[MemberUI_ICON_KEYS[i]];
    }
    return 'fa-solid fa-circle-dot';
  }

  function guessSection(label) {
    var l = String(label || '').toLowerCase().trim();
    if (/(dashboard|home|signup|sign up|register|resource|download|extension|tool|cart|buy|shop|store|explore|checkout|upgrade|renew)/.test(l)) return 'Main';
    if (/(profile|account|password|setting|billing|payment|history|invoice|subscription|license)/.test(l)) return 'Account';
    if (/(support|contact|help|whatsapp|telegram|faq|tutorial|video|youtube)/.test(l)) return 'Support';
    if (/(social|facebook|instagram|twitter|tiktok|linkedin|pinterest|snapchat|discord|reddit|threads|vimeo|follow|socials)/.test(l)) return 'Social';
    if (/(term|policy|privacy|legal|agreement|user agreement)/.test(l)) return 'Legal';
    return 'More';
  }

  var MemberUI_MENU_SELECTORS = [
    'ul.am-tabs > li > a',
    '.am-tabs-wrapper ul li a',
    '.am-tabs-narrow-wrapper ul li a',
    '.am-tabs-narrow-wrapper-tail ul li a',
    '.am-tabs-narrow ul li a',
    '.am-tabs-narrow-stuff ul li a',
    '.am-account-toolbar-items > ul > li > a',
    '.am-user-menu a', '.am-menu a',
    '.am-account-toolbar a', 'nav.am-tabs a'
  ];

  function readAMemberMenu() {
    var items = [], seen = Object.create(null);
    for (var s = 0; s < MemberUI_MENU_SELECTORS.length; s++) {
      var nodes;
      try { nodes = document.querySelectorAll(MemberUI_MENU_SELECTORS[s]); }
      catch (e) { continue; }
      for (var i = 0; i < nodes.length; i++) {
        var a = nodes[i];
        var href  = a.getAttribute('href');
        var label = (a.textContent || '').trim().replace(/\s+/g, ' ');
        if (!href || !label) continue;
        if (href === '#' || href === '' || href.indexOf('javascript:') === 0) continue;
        var ll = label.toLowerCase();
        if (ll === 'logout' || ll === 'sign out' || ll === 'signout') continue;
        if (ll.indexOf('language') !== -1 || ll.indexOf('print') === 0) continue;
        var key = href + '|' + label;
        if (seen[key]) continue;
        seen[key] = true;
        items.push({ section: guessSection(label), label: label, href: href, icon: guessIconForItem(label, href), target: a.getAttribute('target') || '' });
      }
    }
    return items;
  }

  function findLogoutHref() {
    var sels = [
      '.am-tabs a[href*="logout"]',
      '.am-account-toolbar a[href*="logout"]',
      '.am-user-menu a[href*="logout"]',
      '.am-menu a[href*="logout"]',
      'a[href$="/logout"]',
      'a[href*="logout"]'
    ];
    for (var i = 0; i < sels.length; i++) {
      var a;
      try { a = document.querySelector(sels[i]); } catch (e) { continue; }
      if (a) {
        var h = a.getAttribute('href');
        if (h && h !== '#' && h.indexOf('javascript:') !== 0) return h;
      }
    }
    return '/logout';
  }

  var docEl = document.documentElement;

  var ESC_MAP = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' };
  var ESC_RE  = /[&<>"']/g;
  function esc(s) { return String(s == null ? '' : s).replace(ESC_RE, function (c) { return ESC_MAP[c]; }); }

  function txt(sel, fallback) {
    var el = $1(sel);
    return (el && el.textContent.trim()) || fallback || '';
  }

  var _kind = null;
  function pageKind() {
    if (_kind) return _kind;
    var p   = window.location.pathname || '/';
    var cls = document.body.className  || '';
    if (/signup/.test(p) || cls.indexOf('am-page-signup') !== -1)                             _kind = 'signup';
    else if (/login|sendpass/.test(p) || cls.indexOf('am-page-login') !== -1)                 _kind = 'login';
    else if (/profile/.test(p) || cls.indexOf('am-page-profile') !== -1)                      _kind = 'profile';
    else if (/payment-history/.test(p) || cls.indexOf('am-page-payment-history') !== -1)      _kind = 'payments';
    else if (/terms|policy|policies/.test(p) || cls.indexOf('am-page-terms') !== -1 || $1('.MemberUI-agreement-root')) _kind = 'terms';
    else if (p === '/member' || p === '/member/')                                              _kind = 'dashboard';
    else                                                                                       _kind = 'other';
    return _kind;
  }

  function timeGreeting() {
    return 'Welcome Back';
  }

  function daysBetween(a, b) {
    return Math.round((new Date(b.getFullYear(), b.getMonth(), b.getDate()) -
                       new Date(a.getFullYear(), a.getMonth(), a.getDate())) / 86400000);
  }
  function endOfDay(d) {
    var e = new Date(d.getTime());
    e.setHours(23, 59, 59, 999);
    return e;
  }
  function isExpiredDate(d) { return d ? endOfDay(d).getTime() < Date.now() : false; }
  function formatDate(d) {
    try { return d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' }); }
    catch (e) { return String(d); }
  }
  function store(k, v) { try { localStorage.setItem(k, v); } catch (e) {} }
  function read(k)      { try { return localStorage.getItem(k); } catch (e) { return null; } }

  var toastWrap = null;
  var TOAST_ICONS = { ok: 'fa-circle-check', err: 'fa-circle-xmark', info: 'fa-circle-info', warn: 'fa-triangle-exclamation' };
  function toast(msg, type, ms) {
    if (!toastWrap || !toastWrap.parentNode) {
      toastWrap = document.createElement('div');
      toastWrap.className = 'MemberUI-toast-wrap';
      document.body.appendChild(toastWrap);
    }
    while (toastWrap.children.length >= 4) toastWrap.removeChild(toastWrap.firstChild);
    var t = document.createElement('div');
    t.className = 'MemberUI-toast ' + (type || 'info');
    t.innerHTML = '<i class="fa-solid ' + (TOAST_ICONS[type] || TOAST_ICONS.info) + '"></i>' +
                  '<span>' + esc(msg) + '</span>' +
                  '<button class="close" aria-label="Dismiss"><i class="fa-solid fa-xmark"></i></button>';
    function dismiss() {
      if (t.classList.contains('leaving')) return;
      t.classList.add('leaving');
      setTimeout(function () { if (t.parentNode) t.parentNode.removeChild(t); }, 260);
    }
    t.querySelector('.close').addEventListener('click', dismiss);
    toastWrap.appendChild(t);
    setTimeout(dismiss, ms || 3200);
  }

  function attachScrollProgress() {
    if ($1('.MemberUI-progress')) return;
    var bar = document.createElement('div');
    bar.className = 'MemberUI-progress';
    document.body.appendChild(bar);
    var ticking = false;
    function update() {
      var max = docEl.scrollHeight - docEl.clientHeight;
      var pct = max > 0 ? (docEl.scrollTop / max) * 100 : 0;
      bar.style.width = pct + '%';
      bar.classList.toggle('show', docEl.scrollTop > 40);
      ticking = false;
    }
    window.addEventListener('scroll', function () {
      if (!ticking) { ticking = true; window.requestAnimationFrame(update); }
    }, { passive: true });
    update();
  }

  function parseDateRobust(raw) {
    if (!raw) return null;
    raw = String(raw).trim();
    if (!raw) return null;
    var iso = raw.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/);
    if (iso) {
      var ld = new Date(+iso[1], +iso[2] - 1, +iso[3]);
      if (!isNaN(ld.getTime())) return ld;
    }
    var m = raw.match(/^(\d{4})[-\/](\d{1,2})[-\/](\d{1,2})/);
    if (m) {
      var d2 = new Date(+m[1], +m[2] - 1, +m[3]);
      if (!isNaN(d2.getTime())) return d2;
    }
    var d = new Date(raw);
    if (!isNaN(d.getTime()) && d.getFullYear() >= 2000 && d.getFullYear() <= 2100) return d;
    m = raw.match(/\b(\d{1,2})[\/\-\.](\d{1,2})[\/\-\.](\d{2,4})\b/);
    if (m) {
      var a = +m[1], b = +m[2], y = +m[3];
      if (y < 100) y += 2000;
      if (a > 12)      { d = new Date(y, b - 1, a); if (!isNaN(d.getTime())) return d; }
      else if (b > 12) { d = new Date(y, a - 1, b); if (!isNaN(d.getTime())) return d; }
      else             { d = new Date(y, b - 1, a); if (!isNaN(d.getTime())) return d; }
    }
    m = raw.match(/\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\.?\s+(\d{1,2}),?\s+(\d{4})\b/i);
    if (m) { d = new Date(m[1] + ' ' + m[2] + ', ' + m[3]); if (!isNaN(d.getTime())) return d; }
    m = raw.match(/\b(\d{1,2})\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*\.?,?\s+(\d{4})\b/i);
    if (m) { d = new Date(m[2] + ' ' + m[1] + ', ' + m[3]); if (!isNaN(d.getTime())) return d; }
    return null;
  }

  function hasNoSubDOMIndicator() {
    if (document.body.classList.contains('am-page-member-subscriptions-no')) return true;
    if ($1('.am-list-subscriptions-no')) return true;
    if ($1('[class*="subscriptions-no"]')) return true;
    return false;
  }

  var MemberUI_DATE_SELECTORS = [
    '.am-list-subscriptions-date_expires_date', '.am-list-subscriptions-date_expires',
    '.am-list-subscriptions-expires', '.am-list-subscriptions-expiry',
    '.am-list-subscriptions-date', 'time[datetime]', '[data-date]'
  ];

  function extractExpiryDate(li) {
    var el = null;
    for (var i = 0; i < MemberUI_DATE_SELECTORS.length; i++) {
      el = li.querySelector(MemberUI_DATE_SELECTORS[i]);
      if (el) break;
    }
    var raw = '';
    if (el) {
      raw = el.getAttribute('data-date') || el.getAttribute('datetime') ||
            el.getAttribute('title')     || el.textContent || '';
    }
    return parseDateRobust(raw) || parseDateRobust(li.textContent || '');
  }

  function rowHasExpiredIndicator(li) {
    var cls = ' ' + (li.className || '').toLowerCase() + ' ';
    if (/expired|inactive|suspended/.test(cls)) return true;
    if (li.querySelector('[class*="expired"],[class*="inactive"],[class*="suspended"]')) return true;
    var statusEl = li.querySelector('[class*="status"],[class*="state"]');
    if (statusEl) {
      var st = (statusEl.textContent || '').toLowerCase();
      if (/\b(expired|inactive|suspended)\b/.test(st)) return true;
      if (/\b(active|valid|paid)\b/.test(st)) return false;
    }
    var t = (li.textContent || '').toLowerCase();
    return /\b(expired|inactive|suspended)\b/.test(t);
  }

  function rowClassExpired(li) {
    var cls = ' ' + (li.className || '').toLowerCase() + ' ';
    if (/expired|inactive|suspended/.test(cls)) return true;
    if (li.querySelector('[class*="expired"],[class*="inactive"],[class*="suspended"]')) return true;
    var statusEl = li.querySelector('[class*="status"],[class*="state"]');
    if (statusEl && /\b(expired|inactive|suspended)\b/.test((statusEl.textContent || '').toLowerCase())) return true;
    return false;
  }

  function detectSubState(sublist) {
    if (hasNoSubDOMIndicator()) return { hasAny: false, hasActive: false, activeCount: 0, unknown: false };
    if (sublist === null || sublist === undefined) return { hasAny: false, hasActive: false, activeCount: 0, unknown: true };
    if (sublist.length > 0) {
      var state = { hasAny: true, hasActive: false, activeCount: 0, unknown: false };
      for (var i = 0; i < sublist.length; i++) {
        var li  = sublist[i];
        var exp = extractExpiryDate(li);
        if (!(exp ? (isExpiredDate(exp) || rowClassExpired(li)) : rowHasExpiredIndicator(li))) state.activeCount++;
      }
      state.hasActive = state.activeCount > 0;
      return state;
    }
    return { hasAny: false, hasActive: false, activeCount: 0, unknown: false };
  }

  function applySubStateClasses(state) {
    if (!document.body.classList.contains('am-logged-in')) return { isUnknown: true, isExpired: false, isNoSub: false, isActive: false };
    document.body.classList.remove('MemberUI-sub-active', 'MemberUI-sub-expired', 'MemberUI-sub-none');
    if (state.unknown) return { isUnknown: true, isExpired: false, isNoSub: false, isActive: false };
    var isNoSub   = !state.hasAny;
    var isExpired = !isNoSub && !state.hasActive;
    var isActive  = !!state.hasActive;
    if (isExpired)     document.body.classList.add('MemberUI-sub-expired');
    else if (isNoSub)  document.body.classList.add('MemberUI-sub-none');
    else if (isActive) document.body.classList.add('MemberUI-sub-active');
    return { isUnknown: false, isExpired: isExpired, isNoSub: isNoSub, isActive: isActive };
  }

  var __notif = { panel: null, btn: null, sig: '', cleared: false };
  var NOTIF_RANK = { danger: 0, warn: 1, info: 2, ok: 3 };

  function collectNotifItems() {
    invalidateQS();
    var cl = document.body.classList;
    var items = [];
    var unknown = false;

    var subContainer = document.querySelector('.am-list-subscriptions');
    var resContainer = document.querySelector('.am-list-resources');
    var subLis   = subContainer ? subContainer.querySelectorAll(':scope > li') : null;
    var resCount = resContainer ? resContainer.querySelectorAll(':scope > li').length : -1;
    var now = new Date();

    if (hasNoSubDOMIndicator() || cl.contains('MemberUI-sub-none')) {
      items.push({ type: 'danger', icon: 'fa-circle-info', title: 'No Active Subscription',
                   msg: 'You don\u2019t have an active subscription. Subscribe to unlock full access.', href: '/signup' });
    } else if (subLis) {
      if (subLis.length === 0) {
        items.push({ type: 'danger', icon: 'fa-circle-xmark', title: 'Subscription Expired',
                     msg: 'You have 0 active subscriptions. Renew now.', href: '/signup' });
      } else {
        var expired = [], soon = [];
        for (var i = 0; i < subLis.length; i++) {
          var li = subLis[i];
          var tEl = li.querySelector('.am-list-subscriptions-title');
          var title = tEl ? tEl.textContent.trim() : 'Subscription';
          var exp = extractExpiryDate(li);
          if (exp) {
            if (isExpiredDate(exp) || rowClassExpired(li)) expired.push({ title: title, date: exp });
            else {
              var dl = daysBetween(now, endOfDay(exp));
              
              if (dl <= 2) soon.push({ title: title, date: exp, days: dl });
            }
          } else if (rowHasExpiredIndicator(li)) {
            expired.push({ title: title, date: now });
          }
        }
        if (expired.length === 1) {
          items.push({ type: 'danger', icon: 'fa-circle-xmark', title: 'Subscription Expired',
                       msg: expired[0].title + ' expired on ' + formatDate(expired[0].date) + '. Renew now to restore access.', href: '/signup' });
        } else if (expired.length > 1) {
          var names = expired.length === 2
            ? expired[0].title + ' and ' + expired[1].title
            : expired[0].title + ', ' + expired[1].title + ' and ' + (expired.length - 2) + ' more';
          items.push({ type: 'danger', icon: 'fa-circle-xmark', title: expired.length + ' Subscriptions Expired',
                       msg: names + '. Renew now to restore full access.', href: '/signup' });
        }
        for (var j = 0; j < soon.length; j++) {
          var s = soon[j];
          
          items.push({ type: s.days === 0 ? 'warn' : 'info',
                       icon: s.days === 0 ? 'fa-triangle-exclamation' : 'fa-clock',
                       title: s.title,
                       msg: 'Expires ' + (s.days === 0 ? 'today' : 'in ' + s.days + ' day' + (s.days === 1 ? '' : 's')) + ' \u2014 ' + formatDate(s.date),
                       href: '/member' });
        }
      }
    } else {
      if (cl.contains('MemberUI-sub-expired')) {
        items.push({ type: 'danger', icon: 'fa-circle-xmark', title: 'Subscription Expired',
                     msg: 'Your subscription has expired. Renew now.', href: '/signup' });
      } else if (!cl.contains('MemberUI-sub-active')) {
        unknown = true;
      }
    }

    var hasDanger = items.some(function (n) { return n.type === 'danger'; });
    if (!hasDanger && resContainer && resCount === 0 && !cl.contains('MemberUI-sub-active')) {
      items.push({ type: 'danger', icon: 'fa-circle-xmark', title: 'Subscription Expired',
                   msg: 'You have 0 active resources. Renew to restore access.', href: '/signup' });
    }

    if (!items.length && !unknown) {
      items.push({ type: 'ok', icon: 'fa-circle-check', title: 'All good!',
                   msg: 'No urgent alerts. Your subscriptions are active.', href: '/member' });
    }

    items.sort(function (a, b) {
      var ra = NOTIF_RANK[a.type]; if (ra === undefined) ra = 9;
      var rb = NOTIF_RANK[b.type]; if (rb === undefined) rb = 9;
      return ra - rb;
    });
    return { items: items, unknown: unknown };
  }

  function renderNotifications(force) {
    var panel = __notif.panel, btn = __notif.btn;
    if (!panel || !btn) return;
    var res   = collectNotifItems();
    var items = res.items;
    var sig   = items.map(function (n) { return n.type + '|' + n.title + '|' + n.msg; }).join('~~');
    if (!force && sig === __notif.sig) return;
    __notif.sig = sig;
    __notif.cleared = false;

    var list = panel.querySelector('.MemberUI-notif-list');
    var dot  = btn.querySelector('.dot');
    if (!list) return;

    if (!items.length) {
      list.innerHTML = '<div class="MemberUI-notif-empty"><i class="fa-regular fa-bell-slash"></i> No notifications</div>';
      if (dot) dot.style.display = 'none';
      return;
    }

    var parts = [];
    for (var i = 0; i < items.length; i++) {
      var n = items[i];
      parts.push('<a class="MemberUI-notif-item ' + n.type + '" href="' + esc(n.href) + '">' +
                 '<span class="ic"><i class="fa-solid ' + n.icon + '"></i></span>' +
                 '<span class="tx"><b>' + esc(n.title) + '</b><span>' + esc(n.msg) + '</span></span></a>');
    }
    list.innerHTML = parts.join('');
    var urgent = items.some(function (n) { return n.type !== 'ok'; });
    if (dot) dot.style.display = urgent ? '' : 'none';
  }

  function createNotifPanel(topbar) {
    if (__notif.panel) return;
    var btn = topbar.querySelector('.MemberUI-notif-btn');
    if (!btn) return;

    var panel = document.createElement('div');
    panel.className = 'MemberUI-notif-panel';
    panel.innerHTML =
      '<div class="MemberUI-notif-head"><strong>Notifications</strong>' +
      '<button class="MemberUI-notif-clear" type="button">Clear</button></div>' +
      '<div class="MemberUI-notif-list"></div>';
    document.body.appendChild(panel);
    __notif.panel = panel;
    __notif.btn   = btn;

    function closePanel() { panel.classList.remove('show'); btn.classList.remove('active'); }

    btn.addEventListener('click', function (e) {
      e.preventDefault();
      e.stopPropagation();
      var open = panel.classList.toggle('show');
      btn.classList.toggle('active', open);
      if (open && !__notif.cleared) renderNotifications();
    });

    document.addEventListener('click', function (e) {
      if (panel.contains(e.target) || btn.contains(e.target)) return;
      closePanel();
    });
    document.addEventListener('keydown', function (e) {
      if (e.key === 'Escape') closePanel();
    });

    var clearBtn = panel.querySelector('.MemberUI-notif-clear');
    clearBtn.addEventListener('click', function (e) {
      e.preventDefault();
      e.stopPropagation();
      __notif.cleared = true;
      var list = panel.querySelector('.MemberUI-notif-list');
      if (list) list.innerHTML = '<div class="MemberUI-notif-empty"><i class="fa-regular fa-bell-slash"></i> You\u2019re all caught up</div>';
      var dot = btn.querySelector('.dot');
      if (dot) dot.style.display = 'none';
      toast('Notifications cleared', 'ok');
    });

    renderNotifications(true);
  }

  var __toastedKeys = Object.create(null);
  function toastSeen(key) {
    try {
      var s = JSON.parse(sessionStorage.getItem('memberui_toasted') || '{}');
      if (s[key]) return true;
      s[key] = 1;
      sessionStorage.setItem('memberui_toasted', JSON.stringify(s));
    } catch (e) {}
    return false;
  }
  var __toastTimer  = null;

  function showStateToast() {
    if (pageKind() !== 'dashboard') return;
    var cl = document.body.classList;
    if (!cl.contains('am-logged-in')) return;

    var res = collectNotifItems();
    if (res.unknown) return;

    var uname = txt('.am-user-identity-block_login', 'Member');
    var queue = [];

    for (var i = 0; i < res.items.length; i++) {
      var n = res.items[i];
      if (n.type === 'ok') continue;
      var tType, tMsg;
      if (n.type === 'danger') {
        tType = (n.title === 'No Active Subscription') ? 'info' : 'err';
        tMsg  = n.msg;
      } else {
        tType = 'warn';
        tMsg  = n.title + ': ' + n.msg;
      }
      queue.push({ key: 'n|' + n.type + '|' + n.title + '|' + n.msg, type: tType, msg: tMsg });
    }

    var hasDanger = res.items.some(function (n) { return n.type === 'danger'; });
    if (!hasDanger && cl.contains('MemberUI-sub-active')) {
      queue.unshift({ key: 'welcome', type: 'ok', msg: 'Welcome Back, ' + uname + '! \uD83C\uDF89' });
    }

    var delay = 0;
    queue.forEach(function (q) {
      if (__toastedKeys[q.key]) return;
      __toastedKeys[q.key] = true;
      if (toastSeen(q.key)) return;
      (function (item, d) {
        setTimeout(function () { toast(item.msg, item.type, 4500); }, d);
      })(q, delay);
      delay += 250;
    });
  }

  function scheduleStateToast() {
    if (__toastTimer) clearTimeout(__toastTimer);
    __toastTimer = setTimeout(showStateToast, 250);
  }

  function afterStateChange() {
    renderNotifications();
    scheduleStateToast();
  }

  function forceExpiredUI(reason, isNoSubState) {
    document.body.classList.remove('MemberUI-sub-active', 'MemberUI-sub-expired', 'MemberUI-sub-none');
    document.body.classList.add(isNoSubState ? 'MemberUI-sub-none' : 'MemberUI-sub-expired');
    var MSG       = isNoSubState
      ? 'You don\u2019t have an active subscription yet. Subscribe to unlock your tools and resources.'
      : 'Your subscription has expired. Renew to restore access to your tools and resources.';
    var RENEW_HREF = '/signup';
    var BADGE_TEXT = isNoSubState ? 'No Active Subscription' : 'Premium Access Expired';
    var BADGE_ICON = isNoSubState ? 'fa-circle-info' : 'fa-triangle-exclamation';
    var BTN_LABEL  = isNoSubState ? 'Subscribe Now' : 'Renew Subscription';
    var BTN_ICON   = isNoSubState ? 'fa-circle-plus' : 'fa-rotate-right';
    var STATUS_TXT = isNoSubState ? 'No Subscription' : 'Expired';
    var STATUS_ICO = isNoSubState ? 'fa-circle-info' : 'fa-circle-xmark';

    var heroBadge = document.querySelector('.MemberUI-hero .MemberUI-hero-badge');
    if (heroBadge) { heroBadge.className = 'MemberUI-hero-badge expired'; heroBadge.innerHTML = '<i class="fa-solid ' + BADGE_ICON + '"></i> ' + BADGE_TEXT; }

    var heroP = document.querySelector('.MemberUI-hero p');
    if (heroP) heroP.textContent = MSG;

    var heroPrimary = document.querySelector('.MemberUI-hero .MemberUI-hero-actions a:first-child');
    if (heroPrimary) {
      heroPrimary.href      = RENEW_HREF;
      heroPrimary.className = 'MemberUI-btn MemberUI-btn-primary MemberUI-btn-danger';
      heroPrimary.innerHTML = (isNoSubState ? '<i class="fa-solid fa-cart-shopping"></i> ' : '') + BTN_LABEL + ' <i class="fa-solid ' + BTN_ICON + '"></i>';
    }
    var bmOld = document.querySelector('.MemberUI-hero .MemberUI-buy-more');
    if (bmOld && bmOld.parentNode) bmOld.parentNode.removeChild(bmOld);

    var allStats = document.querySelectorAll('.MemberUI-hero-stats .MemberUI-stat');
    if (allStats.length >= 1) {
      var st0 = allStats[0], s0str = st0.querySelector('strong'), s0ico = st0.querySelector('.MemberUI-stat-ico i');
      if (s0str) s0str.textContent = STATUS_TXT;
      st0.className = 'MemberUI-stat expired';
      if (s0ico) s0ico.className = 'fa-solid ' + STATUS_ICO;
    }
    if (allStats.length >= 2) { var st1 = allStats[1], s1str = st1.querySelector('strong'); if (s1str) s1str.textContent = '0 Available'; st1.className = 'MemberUI-stat expired'; }
    if (allStats.length >= 3) { var st2 = allStats[2], s2str = st2.querySelector('strong'); if (s2str) s2str.textContent = '0 Active';     st2.className = 'MemberUI-stat expired'; }

    afterStateChange();
  }

  function scheduleSubRecheck() {
    if (!document.body.classList.contains('am-logged-in')) return;

    function doCheck() {
      invalidateQS();
      var subListContainer  = document.querySelector('.am-list-subscriptions');
      var resourceContainer = document.querySelector('.am-list-resources');

      if (hasNoSubDOMIndicator()) { forceExpiredUI('subs', true); return; }

      var subLis        = subListContainer  ? subListContainer.querySelectorAll(':scope > li')  : null;
      var resourceCount = resourceContainer ? resourceContainer.querySelectorAll(':scope > li').length : -1;
      var st            = detectSubState(subLis);
      var flags         = applySubStateClasses(st);

      var subExpired    = flags.isExpired || (!flags.isUnknown && !st.hasActive && st.hasAny);
      var zeroResources = !flags.isUnknown && !flags.isActive && resourceContainer && resourceCount === 0;
      var zeroSubs      = !flags.isUnknown && subListContainer && subLis && subLis.length === 0;
      var alertNow      = subExpired || flags.isNoSub || zeroResources || zeroSubs;

      if (alertNow) {
        forceExpiredUI(zeroResources ? 'resources' : (zeroSubs || flags.isNoSub) ? 'subs' : 'expired', flags.isNoSub);
        return;
      }
      if (flags.isUnknown) { afterStateChange(); return; }

      var heroBadge = document.querySelector('.MemberUI-hero .MemberUI-hero-badge');
      if (heroBadge) { heroBadge.className = 'MemberUI-hero-badge'; heroBadge.innerHTML = '<i class="fa-solid fa-bolt"></i> Premium Access Active'; }
      var heroP = document.querySelector('.MemberUI-hero p');
      if (heroP) heroP.textContent = 'We\u2019re glad you\u2019re here. I\u2019m your success partner \u2014 Member Portal.';
      var heroPrimary = document.querySelector('.MemberUI-hero .MemberUI-hero-actions a:first-child');
      if (heroPrimary) { heroPrimary.href = '/page/Explore-More'; heroPrimary.className = 'MemberUI-btn MemberUI-btn-primary'; heroPrimary.innerHTML = '<i class="fa-solid fa-compass"></i> Explore More Tools <i class="fa-solid fa-arrow-right"></i>'; }

      var allStats = document.querySelectorAll('.MemberUI-hero-stats .MemberUI-stat');
      if (allStats.length >= 1) { var as0 = allStats[0], as0s = as0.querySelector('strong'), as0i = as0.querySelector('.MemberUI-stat-ico i'); if (as0s) as0s.textContent = 'Active Member'; as0.className = 'MemberUI-stat'; if (as0i) as0i.className = 'fa-solid fa-circle-check'; }
      if (allStats.length >= 2) { var as1 = allStats[1], as1s = as1.querySelector('strong'); if (as1s) as1s.textContent = (resourceCount >= 0 ? resourceCount : st.activeCount || 0) + ' Available'; as1.className = 'MemberUI-stat'; }
      if (allStats.length >= 3) { var as2 = allStats[2], as2s = as2.querySelector('strong'); if (as2s) as2s.textContent = (st.activeCount || 0) + ' Active'; as2.className = 'MemberUI-stat'; }

      afterStateChange();
    }

    var delays = [150, 1000];
    for (var i = 0; i < delays.length; i++) {
      (function (d) { setTimeout(doCheck, d); })(delays[i]);
    }

    var subListContainerForObs = document.querySelector('.am-list-subscriptions');
    if (subListContainerForObs && typeof MutationObserver !== 'undefined') {
      var subObs = new MutationObserver(function () { doCheck(); subObs.disconnect(); });
      subObs.observe(subListContainerForObs, { childList: true, subtree: true, attributes: true });
    }
  }

  function isValidAvatarSrc(src) {
    if (!src || src === '#' || src.indexOf('blank') !== -1 || src.length < 10) return false;
    if (src === MemberUI_LOGO_URL) return false;
    if (src.indexOf('gravatar.com') !== -1) {
      if (/d=(mm|blank|identicon|monsterid|wavatar|retro|robohash)/.test(src)) return false;
    }
    return true;
  }

  function updateAvatarUI(src) {
    var uname = (document.querySelector('.am-user-identity-block_login') || { textContent: 'Member' }).textContent.trim().replace(/\s+/g, ' ') || 'Member';
    var safeSrc = isValidAvatarSrc(src) ? src : MemberUI_LOGO_URL;
    var profAv = $1('.MemberUI-profile-avatar');
    if (profAv) {
      var profImg = profAv.querySelector('img');
      if (profImg) profImg.src = safeSrc;
      else profAv.innerHTML = '<img src="' + esc(safeSrc) + '" alt="' + esc(uname) + '" onerror="this.onerror=null;this.src=\'' + MemberUI_LOGO_URL + '\'">';
    }
    invalidateQS();
  }

  function watchAvatar() {
    var existing = $1('.am-user-identity-block-avatar-pic img');
    if (existing && isValidAvatarSrc(existing.getAttribute('src') || '')) { updateAvatarUI(existing.getAttribute('src')); return; }

    var avatarObs = null;
    var avatarObsTimer = null;
    var foundValid = false;

    if (typeof MutationObserver !== 'undefined') {
      avatarObs = new MutationObserver(function () {
        var el = $1('.am-user-identity-block-avatar-pic img');
        var src = el ? (el.getAttribute('src') || '') : '';
        if (isValidAvatarSrc(src)) {
          avatarObs.disconnect();
          if (avatarObsTimer) clearTimeout(avatarObsTimer);
          updateAvatarUI(src);
          foundValid = true;
        }
      });
      avatarObs.observe($1('.am-user-identity-block-avatar-pic') || document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['src'] });
      avatarObsTimer = setTimeout(function () { if (avatarObs) avatarObs.disconnect(); }, 30000);
    }

    var TRIES = 0, MAX = 4, INTERVAL = 300;
    (function poll() {
      TRIES++;
      var el = $1('.am-user-identity-block-avatar-pic img');
      var src = el ? (el.getAttribute('src') || '') : '';
      if (isValidAvatarSrc(src)) {
        if (avatarObs) { avatarObs.disconnect(); if (avatarObsTimer) clearTimeout(avatarObsTimer); }
        updateAvatarUI(src);
        foundValid = true;
        return;
      }
      if (TRIES < MAX) {
        setTimeout(poll, INTERVAL);
      } else {
        if (!foundValid) updateAvatarUI(MemberUI_LOGO_URL);   
      }
    })();
  }

  function defer(fn) {
    if (typeof window.requestIdleCallback === 'function') {
      window.requestIdleCallback(fn, { timeout: 400 });
    } else {
      setTimeout(fn, 1);
    }
  }

  function deferLow(fn) {
    setTimeout(fn, 800);
  }

  function buildContentUI(content, kind, isLoggedIn, isNoSub, alertState, isUnknown, isActive,
                          effectiveResourceCount, effectiveSubCount, username, displayAvatar,
                          exploreHref, alertStateFlag) {
    if (!content) return;
    var inner = content.querySelector('.MemberUI-content-inner');
    if (!inner) {
      inner = document.createElement('div');
      inner.className = 'MemberUI-content-inner';
      var kids = Array.prototype.slice.call(content.childNodes);
      for (var k = 0; k < kids.length; k++) inner.appendChild(kids[k]);
      content.appendChild(inner);
    }

    if (isLoggedIn && kind === 'dashboard' && !inner.querySelector('.MemberUI-hero')) {
      var hbc = isNoSub ? 'MemberUI-hero-badge expired' : alertState ? 'MemberUI-hero-badge expired' : 'MemberUI-hero-badge';
      var hbi = isNoSub ? 'fa-circle-info' : alertState ? 'fa-triangle-exclamation' : 'fa-bolt';
      var hbt = isNoSub ? 'No Active Subscription' : alertState ? 'Premium Access Expired' : 'Premium Access Active';
      var heroMsg  = isNoSub ? 'You don\u2019t have an active subscription yet. Subscribe to unlock your tools and resources.'
                   : alertState ? 'Your subscription has expired. Renew to restore access to your tools and resources.'
                   : 'We\u2019re glad you\u2019re here. I\u2019m your success partner \u2014 Member Portal.';
      var hpHref   = alertState ? '/signup' : exploreHref;
      var hpClass  = alertState ? 'MemberUI-btn MemberUI-btn-primary MemberUI-btn-danger' : 'MemberUI-btn MemberUI-btn-primary';
      var hpLabel  = isNoSub ? 'Subscribe Now' : alertState ? 'Renew Subscription' : 'Explore More Tools';
      var hpLead   = isNoSub ? 'fa-cart-shopping' : alertState ? '' : 'fa-compass';
      var hpIcon   = isNoSub ? 'fa-circle-plus' : alertState ? 'fa-rotate-right' : 'fa-arrow-right';
      var statLbl  = isNoSub ? 'No Subscription' : alertState ? 'Expired' : isUnknown ? 'Check on Dashboard' : 'Active Member';
      var statIco  = isNoSub ? 'fa-circle-info' : alertState ? 'fa-circle-xmark' : isUnknown ? 'fa-spinner' : 'fa-circle-check';
      var statCls  = alertState ? 'MemberUI-stat expired' : 'MemberUI-stat';
      var hero = document.createElement('section');
      hero.className = 'MemberUI-hero';
      hero.innerHTML =
        '<span class="MemberUI-hero-glow g1"></span><span class="MemberUI-hero-glow g2"></span>' +
        '<div class="MemberUI-hero-inner">' +
          '<span class="' + hbc + '"><i class="fa-solid ' + hbi + '"></i> ' + hbt + '</span>' +
          '<h1>' + timeGreeting() + ', <span class="grad">' + esc(username) + '</span> \uD83D\uDC4B</h1>' +
          '<p>' + heroMsg + '</p>' +
          '<div class="MemberUI-hero-actions">' +
            '<a href="' + esc(hpHref) + '" class="' + hpClass + '">' + (hpLead ? '<i class="fa-solid ' + hpLead + '"></i> ' : '') + hpLabel + ' <i class="fa-solid ' + hpIcon + '"></i></a>' +
            '<a href="/member/payment-history" class="MemberUI-btn MemberUI-btn-ghost"><i class="fa-solid fa-receipt"></i> Billing History</a>' +
          '</div>' +
        '</div>' +
        '<div class="MemberUI-hero-stats">' +
          '<div class="' + statCls + '"><span class="MemberUI-stat-ico"><i class="fa-solid ' + statIco + '"></i></span><div><small>Account Status</small><strong>' + statLbl + '</strong></div></div>' +
          '<div class="' + statCls + '"><span class="MemberUI-stat-ico"><i class="fa-solid fa-layer-group"></i></span><div><small>Active Resources</small><strong>' + (alertState ? '0' : effectiveResourceCount) + ' Available</strong></div></div>' +
          '<div class="' + statCls + '"><span class="MemberUI-stat-ico"><i class="fa-solid fa-crown"></i></span><div><small>Subscriptions</small><strong>' + (alertState ? '0' : effectiveSubCount) + ' Active</strong></div></div>' +
        '</div>';
      inner.insertBefore(hero, inner.firstChild);
      invalidateQS();
    }

    if (isLoggedIn && kind === 'profile' && !inner.querySelector('.MemberUI-profile-head')) {
      var chipSt    = isNoSub ? '<span class="MemberUI-chip"><i class="fa-solid fa-circle-info"></i> No Subscription</span>'
                    : alertState ? '<span class="MemberUI-chip danger"><i class="fa-solid fa-circle-xmark"></i> Expired</span>'
                    : isUnknown ? '<span class="MemberUI-chip"><i class="fa-solid fa-house"></i> Check on Dashboard</span>'
                    : '<span class="MemberUI-chip ok"><i class="fa-solid fa-circle-check"></i> Active</span>';
      var chipPrem  = alertState
        ? '<span class="MemberUI-chip"><i class="fa-solid fa-crown"></i> Standard</span>'
        : '<span class="MemberUI-chip brand"><i class="fa-solid fa-crown"></i> Premium</span>';
      var profileHead = document.createElement('section');
      profileHead.className = 'MemberUI-profile-head';
      profileHead.innerHTML =
        '<div class="MemberUI-profile-avatar"><img src="' + esc(displayAvatar) + '" alt="' + esc(username) + '" onerror="this.onerror=null;this.src=\'' + MemberUI_LOGO_URL + '\'"></div>' +
        '<div class="MemberUI-profile-info"><h2>' + esc(username) + '</h2>' +
        '<p class="email">' + esc(txt('.am-profile-form input[name="email"],.am-profile-form input[type="email"]', 'Member account')) + '</p>' +
        chipSt + chipPrem +
        '<div class="MemberUI-completeness"><div class="lbl"><span>Profile completion</span><span class="pct">0%</span></div><div class="bar"><div class="fill"></div></div></div></div>';
      inner.insertBefore(profileHead, inner.firstChild);

      function calcCompletion() {
        var form = document.querySelector('.am-profile-form');
        if (!form) return false;
        var fields = form.querySelectorAll('input[type="text"],input[type="email"],select,textarea');
        if (!fields.length) return false;
        var filled = 0, countable = 0;
        for (var i = 0; i < fields.length; i++) {
          if (fields[i].type === 'password') continue;
          countable++;
          if (String(fields[i].value || '').trim()) filled++;
        }
        var pct    = countable ? Math.round((filled / countable) * 100) : 0;
        var fillEl = profileHead.querySelector('.MemberUI-completeness .fill');
        var pctEl  = profileHead.querySelector('.MemberUI-completeness .pct');
        if (fillEl) fillEl.style.width = pct + '%';
        if (pctEl)  pctEl.textContent  = pct + '%';
        return true;
      }
      if (!calcCompletion()) {
        var formObs = null;
        if (typeof MutationObserver !== 'undefined') {
          formObs = new MutationObserver(function () { if (calcCompletion()) { formObs.disconnect(); } });
          formObs.observe(document.body, { childList: true, subtree: true });
          setTimeout(function () { if (formObs) formObs.disconnect(); }, 10000);
        }
        setTimeout(function () { if (formObs) formObs.disconnect(); calcCompletion(); }, 1500);
      }
    }

    if (isLoggedIn && kind === 'payments') {
      var tbl = inner.querySelector('table');
      if (tbl && !tbl.parentNode.classList.contains('MemberUI-table-wrap')) {
        var wrap = document.createElement('div');
        wrap.className = 'MemberUI-table-wrap';
        var thead = document.createElement('div');
        thead.className = 'MemberUI-table-head';
        thead.innerHTML = '<i class="fa-solid fa-receipt"></i><strong>Payment Transactions</strong>';
        tbl.parentNode.insertBefore(wrap, tbl);
        wrap.appendChild(thead);
        wrap.appendChild(tbl);
        var headers = [], ths = tbl.querySelectorAll('thead th');
        for (var thi = 0; thi < ths.length; thi++) headers.push(ths[thi].textContent.trim());
        var trs = tbl.querySelectorAll('tbody tr');
        for (var tri = 0; tri < trs.length; tri++) {
          var tds = trs[tri].querySelectorAll('td');
          for (var tdi = 0; tdi < tds.length; tdi++) {
            if (!tds[tdi].getAttribute('data-label') && headers[tdi]) tds[tdi].setAttribute('data-label', headers[tdi]);
          }
        }
      }
    }

    if (!inner.querySelector('.MemberUI-footer')) {
      var f1 = document.createElement('footer');
      f1.className = 'MemberUI-footer';
      f1.innerHTML = '&copy; 2026 <span>&middot;</span> Member Portal <span>&middot;</span> All rights reserved <span>&middot;</span> <a href="https://Leoamztools.com/whatsapp" target="_blank" rel="noopener">Support</a>';
      inner.appendChild(f1);
    }
  }

  function build() {
    keepCSSLast();

    var body       = document.body;
    var isLoggedIn = body.classList.contains('am-logged-in');

    var _autoLogoEl  = document.querySelector('img.am-header-content-logo');
    var _autoLogoSrc = _autoLogoEl ? _autoLogoEl.getAttribute('src') : '';
    var kind       = pageKind();
    var username   = txt('.am-user-identity-block_login', 'Member');
    var avatarEl   = $1('.am-user-identity-block-avatar-pic img');
    var avatar     = avatarEl ? (avatarEl.getAttribute('src') || '') : '';
    if (!isValidAvatarSrc(avatar)) avatar = '';
    var displayAvatar = avatar || MemberUI_LOGO_URL;

    var resourceContainer  = $1('.am-list-resources');
    var hasPageResourceData = !!resourceContainer;
    var resourceCount      = hasPageResourceData ? resourceContainer.querySelectorAll(':scope > li').length : 0;

    var subListContainer = $1('.am-list-subscriptions');
    var hasPageSubData   = !!subListContainer;
    var subLis           = hasPageSubData ? subListContainer.querySelectorAll(':scope > li') : null;
    var subCount         = subLis ? subLis.length : 0;

    var subState, stateFlags;
    if (isLoggedIn) {
      subState   = hasNoSubDOMIndicator() ? { hasAny: false, hasActive: false, activeCount: 0, unknown: false } : detectSubState(hasPageSubData ? subLis : null);
      stateFlags = applySubStateClasses(subState);
    } else {
      subState   = { hasAny: false, hasActive: false, activeCount: 0, unknown: true };
      stateFlags = { isUnknown: true, isExpired: false, isNoSub: false, isActive: false };
    }
    var isUnknown = stateFlags.isUnknown, isExpired = stateFlags.isExpired;
    var isNoSub   = stateFlags.isNoSub,   isActive  = stateFlags.isActive;

    var zeroActiveResources = !isUnknown && hasPageResourceData && resourceCount === 0;
    var zeroActiveSubs      = !isUnknown && hasPageSubData && subCount === 0;
    var effectiveResourceCount = (isExpired || isNoSub || zeroActiveResources || zeroActiveSubs) ? 0 : resourceCount;
    var effectiveSubCount      = (isExpired || isNoSub || zeroActiveResources || zeroActiveSubs) ? 0 : subState.activeCount;
    var limitedAccess = zeroActiveResources && !isNoSub && !isActive;

    if (limitedAccess) {
      body.classList.remove('MemberUI-sub-active', 'MemberUI-sub-none');
      body.classList.add('MemberUI-sub-expired');
      isExpired = true; isActive = false; isNoSub = false;
    }

    var alertState  = isExpired || isNoSub || limitedAccess || (!isUnknown && !subState.hasActive && subState.hasAny);
    var exploreHref = ($1('.am-list-resources > li > a') || { getAttribute: function() { return '/member'; } }).getAttribute('href') || '/member';
    var sidebar     = $1('.am-body-content-top');
    var aMemberItems = isLoggedIn ? readAMemberMenu() : [];

    if (isLoggedIn) {
      if (sidebar && !sidebar.querySelector('.MemberUI-brand')) {
        var brand = document.createElement('div');
        brand.className = 'MemberUI-brand';
        brand.innerHTML =
          '<div class="MemberUI-brand-logo" style="text-align: center; padding: 10px 0;">' +
          '<img src="' + esc(_autoLogoSrc) + '" alt="Member Portal Logo" style="max-width: 100%; width: 270px; height: auto; vertical-align: middle;">' +
          '</div>';
        sidebar.insertBefore(brand, sidebar.firstChild);
      }
      var toolbar = sidebar ? sidebar.querySelector('.am-account-toolbar') : null;
      if (toolbar && !toolbar.querySelector('.MemberUI-nav-scroll')) {

        var currentPath = (window.location.pathname || '/').replace(/\/+$/, '') || '/';

        var isActiveLink = function (href) {
          if (!href || href === '#' || href.indexOf('javascript:') === 0) return false;
          try {
            var tmp = document.createElement('a');
            tmp.href = href;
            if (tmp.hostname && window.location.hostname &&
                tmp.hostname !== window.location.hostname) return false;
            var lp = (tmp.pathname || '/').replace(/\/+$/, '') || '/';
            var cp = currentPath;
            if (lp === '/member') return cp === '/member' || cp === '' || cp === '/';
            if (lp === '/') return cp === '/' || cp === '';
            return cp === lp || cp.indexOf(lp + '/') === 0;
          } catch (e) {}
          return false;
        };

        var sections = Object.create(null);
        for (var ai = 0; ai < aMemberItems.length; ai++) {
          var item = aMemberItems[ai];
          var sec  = item.section || 'More';
          if (!sections[sec]) sections[sec] = [];
          sections[sec].push(item);
        }

        var navParts = ['<div class="MemberUI-nav-search"><input type="text" placeholder="Search menu\u2026" aria-label="Search menu" autocomplete="off"></div>'];
        var preferredOrder = ['Main', 'Account', 'Support', 'Social', 'Legal', 'More'];
        var orderedSections = [];
        for (var pi = 0; pi < preferredOrder.length; pi++) { if (sections[preferredOrder[pi]]) orderedSections.push(preferredOrder[pi]); }
        for (var sk in sections) { if (orderedSections.indexOf(sk) === -1) orderedSections.push(sk); }

        if (!orderedSections.length) {
          orderedSections = ['Main'];
          sections['Main'] = [
            { label: 'Dashboard',        href: '/member',                 icon: MemberUI_ICON_MAP['dashboard'], target: '' },
            { label: 'Profile',          href: '/profile',                icon: MemberUI_ICON_MAP['profile'],   target: '' },
            { label: 'Payments History', href: '/member/payment-history', icon: MemberUI_ICON_MAP['payments'],  target: '' }
          ];
        }

        for (var oi = 0; oi < orderedSections.length; oi++) {
          var sn = orderedSections[oi];
          navParts.push('<span class="MemberUI-nav-label">' + esc(sn) + '</span>');
          var secItems = sections[sn];
          for (var si = 0; si < secItems.length; si++) {
            var it = secItems[si];
            var isActive_link = isActiveLink(it.href);
            navParts.push(
              '<a href="' + esc(it.href) + '" class="MemberUI-nav-item' + (isActive_link ? ' active' : '') + '"' +
              (it.target ? ' target="' + esc(it.target) + '" rel="noopener"' : '') + '>' +
              '<span class="ico"><i class="' + esc(it.icon) + '"></i></span>' +
              '<span class="lbl">' + esc(it.label) + '</span>' +
              '<i class="fa-solid fa-chevron-right chev"></i></a>'
            );
          }
        }
        navParts.push('<div class="MemberUI-nav-empty">No matches found</div>');

        var nav = document.createElement('div');
        nav.className = 'MemberUI-nav-scroll';
        nav.innerHTML = navParts.join('');
        toolbar.insertBefore(nav, toolbar.firstChild);

        var searchInput = nav.querySelector('.MemberUI-nav-search input');
        var navEmpty    = nav.querySelector('.MemberUI-nav-empty');
        if (searchInput) {
          var searchItems  = nav.querySelectorAll('.MemberUI-nav-item');
          var searchLabels = nav.querySelectorAll('.MemberUI-nav-label');
          searchInput.addEventListener('input', function () {
            var q = searchInput.value.trim().toLowerCase(), visible = 0;
            for (var i = 0; i < searchItems.length; i++) {
              var match = !q || searchItems[i].textContent.toLowerCase().indexOf(q) !== -1;
              searchItems[i].classList.toggle('hidden-by-search', !match);
              if (match) visible++;
            }
            for (var li2 = 0; li2 < searchLabels.length; li2++) {
              var lb = searchLabels[li2];
              if (!q) { lb.style.display = ''; continue; }
              var next = lb.nextElementSibling, anyVis = false;
              while (next && !next.classList.contains('MemberUI-nav-label')) {
                if (next.classList.contains('MemberUI-nav-item') && !next.classList.contains('hidden-by-search')) { anyVis = true; break; }
                next = next.nextElementSibling;
              }
              lb.style.display = anyVis ? '' : 'none';
            }
            navEmpty.classList.toggle('show', visible === 0);
          });
        }
      }

      if (subLis && subLis.length) {
        var now = new Date();
        for (var sli = 0; sli < subLis.length; sli++) {
          var li = subLis[sli];
          if (li.querySelector('.MemberUI-expiry-track')) continue;
          var expDate = extractExpiryDate(li);
          if (!expDate) continue;
          var isRowExp = isExpiredDate(expDate);
          var daysLeft = isRowExp ? 0 : daysBetween(now, endOfDay(expDate));
          if (isRowExp) li.classList.add('MemberUI-expired');
          else li.classList.remove('MemberUI-expired');
          var pct   = isRowExp ? 100 : Math.max(0, Math.min(100, (daysLeft / 30) * 100));
          var track = document.createElement('div');
          track.className = 'MemberUI-expiry-track';
          var fill  = document.createElement('div');
          
          fill.className = 'MemberUI-expiry-fill' + (isRowExp || daysLeft === 0 ? ' danger' : daysLeft <= 2 ? ' warn' : '');
          fill.style.width = pct + '%';
          track.appendChild(fill);
          li.appendChild(track);
          var daysTag = document.createElement('span');
          
          daysTag.className = 'MemberUI-days-left' + (isRowExp ? ' expired' : daysLeft === 0 ? ' urgent' : '');
          daysTag.innerHTML = '<i class="fa-regular fa-clock"></i> ' + (isRowExp ? 'Expired' : daysLeft === 0 ? 'Last day' : daysLeft + 'd left');
          var datePill = li.querySelector('.am-list-subscriptions-date');
          if (datePill) datePill.appendChild(daysTag);
        }
      }
    }

    var topbar = document.createElement('header');
    topbar.className = 'MemberUI-topbar';
    var pageTitle = { signup: 'Signup', login: 'Login', profile: 'Profile', payments: 'Payments History', terms: 'Terms & Conditions' }[kind] || 'Dashboard';

    var initCollapsed = read('MemberUI-collapsed') === '1' && window.innerWidth > 992;

    var left = isLoggedIn
      ? '<button class="MemberUI-sidebar-toggle" title="Toggle sidebar (Ctrl+B)"><i class="fa-solid ' + (initCollapsed ? 'fa-chevron-right' : 'fa-chevron-left') + '"></i></button>' +
        '<button class="MemberUI-burger" aria-label="Menu"><i class="fa-solid fa-bars"></i></button>'
      : '<a href="/login" class="MemberUI-brand" style="height:auto;min-height:auto;padding:0;border:none;background:transparent;box-shadow:none; display:flex; align-items:center;">' +
        '<img src="' + esc(_autoLogoSrc) + '" alt="Member Portal Logo" style="max-width: 100%; width: 270px; height: auto; vertical-align: middle;"></a>';

    var MemberUILogoutHref = isLoggedIn ? findLogoutHref() : '/logout';

    var actions = isLoggedIn
      ?
        '<button type="button" class="MemberUI-icon-btn MemberUI-notif-btn" title="Notifications" aria-label="Notifications"><i class="fa-regular fa-bell"></i><span class="dot"></span></button>' +
        '<a href="' + esc(MemberUILogoutHref) + '" class="MemberUI-icon-btn MemberUI-logout-btn" title="Logout" aria-label="Logout"><i class="fa-solid fa-right-from-bracket"></i></a>'
      : kind === 'login'
        ? '<a href="/signup" class="MemberUI-btn MemberUI-btn-primary" style="padding:10px 20px;font-size:13px;">Get Started <i class="fa-solid fa-arrow-right"></i></a>'
        : '';

    topbar.innerHTML = left +
      '<div class="MemberUI-page-head"><span class="MemberUI-page-title">' + pageTitle + '</span>' +
      '<span class="MemberUI-crumb"><a href="/member">Home</a> <i class="fa-solid fa-chevron-right"></i> ' + pageTitle + '</span></div>' +
      '<div class="MemberUI-topbar-actions">' + actions + '</div>';
    body.appendChild(topbar);
    try { if (isLoggedIn) ToolSearch.init(topbar); } catch (e) {}

    var content = $1('.am-body-content-content');
    buildContentUI(content, kind, isLoggedIn, isNoSub, alertState, isUnknown, isActive,
                   effectiveResourceCount, effectiveSubCount, username, displayAvatar, exploreHref);

    setTimeout(function () {
      invalidateQS();
      var ct = document.querySelector('.am-body-content-content');
      if (!ct) return;
      buildContentUI(ct, kind, isLoggedIn, isNoSub, alertState, isUnknown, isActive,
                     effectiveResourceCount, effectiveSubCount, username, displayAvatar, exploreHref);
    }, 900);

    function attachPasswordMeter(input) {
      if (!input || input.dataset.MemberUIMeter === '1') return;
      input.dataset.MemberUIMeter = '1';
      var meter = document.createElement('div');
      meter.className = 'MemberUI-pw-meter';
      meter.innerHTML = '<span></span><span></span><span></span><span></span>';
      var label = document.createElement('div');
      label.className = 'MemberUI-pw-label';
      label.textContent = 'Password strength';
      var caps = document.createElement('div');
      caps.className = 'MemberUI-caps';
      caps.textContent = 'Caps Lock is on';
      var parent = input.parentNode;
      if (parent) { parent.appendChild(meter); parent.appendChild(label); parent.appendChild(caps); }
      var LEVELS = ['', 'weak', 'fair', 'good', 'strong'];
      function score(v) {
        if (!v) return 0;
        var s = 0;
        if (v.length >= 6)  s++;
        if (v.length >= 10) s++;
        if (/[A-Z]/.test(v) && /[a-z]/.test(v)) s++;
        if (/\d/.test(v) && /[^A-Za-z0-9]/.test(v)) s++;
        return Math.min(s, 4);
      }
      function update() { var s = score(input.value); meter.className = 'MemberUI-pw-meter' + (input.value ? ' s' + s : ''); meter.setAttribute('data-level', LEVELS[s] || ''); label.textContent = input.value ? 'Password strength: ' + LEVELS[s] : 'Password strength'; }
      function checkCaps(e) { try { caps.classList.toggle('show', !!(e.getModifierState && e.getModifierState('CapsLock'))); } catch (err) {} }
      input.addEventListener('input', update);
      input.addEventListener('keydown', checkCaps);
      input.addEventListener('keyup',   checkCaps);
      input.addEventListener('blur', function () { caps.classList.remove('show'); });
      update();
    }
    defer(function () {
      var pw = document.querySelectorAll('input[type="password"]');
      for (var i = 0; i < pw.length; i++) attachPasswordMeter(pw[i]);
    });

    function refreshSignupTiles() {
      var container = $1('.am-signup-form #row-product_id_page-0-0 > .am-element');
      if (!container) return;
      if (!container.classList.contains('MemberUI-products-grid')) container.classList.add('MemberUI-products-grid');
      var checked = container.querySelector('input[type="radio"]:checked');
      if (checked) { var t0 = checked.closest('label'); if (t0) t0.classList.add('selected'); }
      var radios = container.querySelectorAll('input[type="radio"]');
      for (var ri = 0; ri < radios.length; ri++) {
        var radio = radios[ri];
        if (radio.dataset.MemberUIBound) continue;
        radio.dataset.MemberUIBound = '1';
        radio.addEventListener('change', function () {
          var labels = container.querySelectorAll('label');
          for (var li2 = 0; li2 < labels.length; li2++) labels[li2].classList.remove('selected');
          var tile = this.closest('label');
          if (tile) { tile.classList.add('selected'); var ti = tile.querySelector('.am-product-title'); if (ti) toast('Selected: ' + ti.textContent.trim(), 'ok'); }
        });
      }
      var brs = container.querySelectorAll(':scope > br');
      for (var bi = 0; bi < brs.length; bi++) brs[bi].remove();
    }
    refreshSignupTiles();
    setTimeout(refreshSignupTiles, 800);

    if (isLoggedIn) {
      var overlay = document.createElement('div');
      overlay.className = 'MemberUI-overlay';
      body.appendChild(overlay);
      var burger      = topbar.querySelector('.MemberUI-burger');
      var toggleBtn   = topbar.querySelector('.MemberUI-sidebar-toggle');
      if (burger && sidebar)  { burger.addEventListener('click', function () { sidebar.classList.toggle('MemberUI-open'); overlay.classList.toggle('show'); }); }
      if (toggleBtn)          { toggleBtn.addEventListener('click', function () { var c = body.classList.toggle('MemberUI-collapsed'); store('MemberUI-collapsed', c ? '1' : '0'); var ico = toggleBtn.querySelector('i'); if (ico) ico.className = 'fa-solid ' + (c ? 'fa-chevron-right' : 'fa-chevron-left'); }); }
      overlay.addEventListener('click', function () { if (sidebar) sidebar.classList.remove('MemberUI-open'); overlay.classList.remove('show'); });
      document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && sidebar) { sidebar.classList.remove('MemberUI-open'); overlay.classList.remove('show'); } });
      if (read('MemberUI-collapsed') === '1' && window.innerWidth > 992) body.classList.add('MemberUI-collapsed');

      createNotifPanel(topbar);
    }

    if (isLoggedIn) {
      deferLow(function () {
        if (window.__MemberUIKeys) return;
        window.__MemberUIKeys = true;
        var gPressed = false;
        var gTimer   = null;
        var NAV_MAP  = { d: '/member', s: '/signup', p: '/profile', b: '/member/payment-history' };
        document.addEventListener('keydown', function (e) {
          var tgt = e.target, tag = (tgt.tagName || '').toLowerCase();
          if (tag === 'input' || tag === 'textarea' || tag === 'select' || tgt.isContentEditable) return;
          if (e.metaKey || e.ctrlKey || e.altKey) {
            if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'b') { e.preventDefault(); var cb = body.classList.toggle('MemberUI-collapsed'); store('MemberUI-collapsed', cb ? '1' : '0'); var tIco = document.querySelector('.MemberUI-sidebar-toggle i'); if (tIco) tIco.className = 'fa-solid ' + (cb ? 'fa-chevron-right' : 'fa-chevron-left'); }
            return;
          }
          if (gPressed) { var dest = NAV_MAP[e.key.toLowerCase()]; if (dest) window.location.href = dest; gPressed = false; if (gTimer) { clearTimeout(gTimer); gTimer = null; } return; }
          if (e.key.toLowerCase() === 'g') {
            gPressed = true;
            gTimer = setTimeout(function () { gPressed = false; gTimer = null; }, 1200);
          }
        });
        window.addEventListener('blur', function () { gPressed = false; if (gTimer) { clearTimeout(gTimer); gTimer = null; } });
      });
    }

    defer(function () {
      if (typeof MutationObserver === 'undefined') return;
      var observer = new MutationObserver(function (muts) {
        for (var mi = 0; mi < muts.length; mi++) {
          var added = muts[mi].addedNodes;
          for (var ai = 0; ai < added.length; ai++) {
            var n = added[ai];
            if (n.nodeType === 1 && n.classList && n.classList.contains('am-error')) {
              n.classList.add('MemberUI-error');
              var inp = n.parentNode && n.parentNode.querySelector('input');
              if (inp) inp.classList.add('am-error');
            }
          }
        }
      });
      var forms = document.querySelectorAll('.am-signup-form,.am-profile-form,.am-login-form');
      for (var fi = 0; fi < forms.length; fi++) observer.observe(forms[fi], { childList: true, subtree: true });
      var formInputs = document.querySelectorAll('.am-signup-form input,.am-profile-form input,.am-login-form input');
      for (var fii = 0; fii < formInputs.length; fii++) {
        formInputs[fii].addEventListener('input', function () { this.classList.remove('am-error'); });
      }
    });

    if (isLoggedIn && kind === 'dashboard') {
      scheduleStateToast();
    }

    if (!IS_SLOW) {
      attachScrollProgress();
    } else {
      deferLow(attachScrollProgress);
    }

    wireForgotPassword();

    if (isLoggedIn) {
      defer(watchAvatar);
      scheduleSubRecheck();
    }
  }

  var __fpWired = false;
  function wireForgotPassword() {
    if (__fpWired) return;
    var loginWrap    = $1('.am-login-form-wrapper');
    var sendpassWrap = $1('.am-sendpass-form-wrapper');
    if (!loginWrap || !sendpassWrap) return;
    __fpWired = true;
    var forgotLinks = document.querySelectorAll('.am-form-login-switch[href*="sendpass"],.am-login-form-wrapper a[href*="sendpass"]');
    var backLinks   = document.querySelectorAll('.am-sendpass-form-wrapper a[href="/login"],.am-sendpass-form-wrapper .am-form-login-switch[href$="/login"]');
    function showSendpass(e) {
      if (e) { e.preventDefault(); e.stopPropagation(); }
      loginWrap.style.setProperty('display', 'none', 'important');
      loginWrap.classList.add('MemberUI-hidden');
      sendpassWrap.style.setProperty('display', 'block', 'important');
      sendpassWrap.classList.add('active');
      try { if (!/sendpass/.test(window.location.search)) history.pushState({}, '', '/login?sendpass'); } catch (err) {}
      var f = sendpassWrap.querySelector('input[type="text"],input[type="email"]');
      if (f) setTimeout(function () { f.focus(); }, 60);
    }
    function showLogin(e) {
      if (e) { e.preventDefault(); e.stopPropagation(); }
      sendpassWrap.style.setProperty('display', 'none', 'important');
      sendpassWrap.classList.remove('active');
      loginWrap.style.setProperty('display', 'block', 'important');
      loginWrap.classList.remove('MemberUI-hidden');
      try { if (/sendpass/.test(window.location.search)) history.pushState({}, '', '/login'); } catch (err) {}
      var f = loginWrap.querySelector('input[type="text"],input[type="email"]');
      if (f) setTimeout(function () { f.focus(); }, 60);
    }
    for (var i = 0; i < forgotLinks.length; i++) { if (!forgotLinks[i].dataset.MemberUIWired) { forgotLinks[i].dataset.MemberUIWired = '1'; forgotLinks[i].addEventListener('click', showSendpass, true); } }
    for (var j = 0; j < backLinks.length; j++)   { if (!backLinks[j].dataset.MemberUIWired)   { backLinks[j].dataset.MemberUIWired   = '1'; backLinks[j].addEventListener('click', showLogin, true); } }
    if (/sendpass/.test(window.location.search)) showSendpass();
  }

  var __headMo = null;
  function bootstrapHead() {
    if (!document.head) return false;
    injectPreconnects();
    injectCSSLink();
    injectStateCSS();
    startHeadObserver();

    if (!document.querySelector('link[href*="font-awesome"],link[href*="fontawesome"]')) {
      var FA_URL = 'https://use.fontawesome.com/releases/v6.5.1/css/all.css';
      var faPre = document.createElement('link');
      faPre.rel  = 'preload';
      faPre.as   = 'style';
      faPre.href = FA_URL;
      faPre.setAttribute('fetchpriority', IS_SLOW ? 'low' : 'high');
      document.head.appendChild(faPre);
      var fa = document.createElement('link');
      fa.rel  = 'stylesheet';
      fa.href = FA_URL;
      fa.media = 'print';
      fa.onload  = function () { fa.media = 'all'; };
      fa.onerror = function () { fa.media = 'all'; };
      document.head.appendChild(fa);
    }
    return true;
  }

  

  var DeviceKit = (function () {
    var API  = '/login-sessions';
    var DEMO = /[?&]memberuidemo=1/.test(location.search);
    var PING_KEY = 'MemberUI-device-ping';
    var MISSING_KEY = 'MemberUI-ls-missing-v2';   
    var MISSING_TTL = 12 * 60 * 60 * 1000;
    var LOCAL_PREFIX = 'MemberUI-local-sessions-v3:';
    var LOGIN_KEY = 'MemberUI-login-pending';
    var GUEST_KEY = 'MemberUI-was-guest';
    var CUR_KEY = 'MemberUI-local-cur';
    var DID_KEY = 'MemberUI-local-did';
    var SID_KEY = 'MemberUI-local-sid';
    var MAX_LOCAL = 30;
    var NEW_SESSION_GAP = 6 * 60 * 60 * 1000;   
    var started = false;

    var state = { email: '', rows: [], loading: false, error: '', fallback: false, tab: 'account', device: null, rules: null };
    var menu, ov, rowMenu, localId = null;

    function xhrHeaders() {
      return { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' };
    }
    function fmtDT(v) {
      if (!v) return '—';
      var d = new Date(v);
      if (isNaN(d.getTime())) return String(v);
      try { return d.toLocaleString(undefined, { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }); }
      catch (e) { return String(v); }
    }
    function userNameDK() {
      var el = document.querySelector('.am-user-identity-block_login');
      if (!el) return 'Member';
      var first = el.childNodes[0];
      return ((first && first.textContent) || el.textContent || 'Member').trim();
    }

    


    function detectClient() {
      var ua = navigator.userAgent || '';
      var b = 'Unknown';
      if (/Edg(e|A|iOS)?\//.test(ua)) b = 'Edge';
      else if (/OPR\/|Opera/.test(ua)) b = 'Opera';
      else if (/SamsungBrowser/.test(ua)) b = 'Samsung Internet';
      else if (/Firefox\/|FxiOS/.test(ua)) b = 'Firefox';
      else if (/Chrome\/|CriOS/.test(ua)) b = 'Chrome';
      else if (/Safari\//.test(ua)) b = 'Safari';
      if (navigator.brave && b === 'Chrome') b = 'Brave';

      var os = 'Unknown';
      if (/Windows/.test(ua)) os = 'Windows';
      else if (/Android/.test(ua)) os = 'Android';
      else if (/iPhone|iPad|iPod/.test(ua)) os = 'iOS';
      else if (/Mac OS X|Macintosh/.test(ua)) os = (navigator.maxTouchPoints > 1 ? 'iPadOS' : 'macOS');
      else if (/CrOS/.test(ua)) os = 'ChromeOS';
      else if (/Linux|X11/.test(ua)) os = 'Linux';

      var type = 'desktop';
      if (/iPad|Tablet/.test(ua) || (/Android/.test(ua) && !/Mobile/.test(ua)) || os === 'iPadOS') type = 'tablet';
      else if (/Mobi|iPhone|Android/.test(ua)) type = 'mobile';

      var tz = '';
      try { tz = (window.Intl && Intl.DateTimeFormat().resolvedOptions().timeZone) || ''; } catch (e) {}
      var city = '', region = '';
      if (tz && tz.indexOf('/') > -1) {
        var parts = tz.split('/');
        region = parts[0].replace(/_/g, ' ');
        city = parts[parts.length - 1].replace(/_/g, ' ');
      }
      return {
        browser: b, os: os, device_type: type,
        tz: tz, city: city, region: region, country: '',
        screen: screen.width + 'x' + screen.height,
        lang: navigator.language || ''
      };
    }

    


    function localKey() { return LOCAL_PREFIX + userNameDK(); }
    function readLocal() {
      try { var a = JSON.parse(localStorage.getItem(localKey()) || '[]'); return Array.isArray(a) ? a : []; }
      catch (e) { return []; }
    }
    function writeLocal(list) {
      try { localStorage.setItem(localKey(), JSON.stringify(list.slice(0, MAX_LOCAL))); } catch (e) {}
    }
    function localDid() {
      var d = null;
      try { d = localStorage.getItem(DID_KEY); } catch (e) {}
      if (!d) {
        d = 'd' + Date.now().toString(36) + Math.random().toString(36).slice(2, 8);
        try { localStorage.setItem(DID_KEY, d); } catch (e) {}
      }
      return d;
    }
    function lsGet(key) { try { return localStorage.getItem(key); } catch (e) { return null; } }
     
    var SET_OPEN_KEY = 'memberui_set_open';
    function rememberOpen(tab) { try { sessionStorage.setItem(SET_OPEN_KEY, tab || 'account'); } catch (e) {} }
    function forgetOpen() { try { sessionStorage.removeItem(SET_OPEN_KEY); } catch (e) {} }
    function savedOpen() { try { return sessionStorage.getItem(SET_OPEN_KEY); } catch (e) { return null; } }
    function lsSet(key, v) { try { if (v == null) localStorage.removeItem(key); else localStorage.setItem(key, v); } catch (e) {} }
    function newRow(c, now) {
      return {
        id: 's' + Date.now().toString(36) + Math.random().toString(36).slice(2, 7),
        browser: c.browser, os: c.os, device_type: c.device_type,
        city: c.city, region: c.region, country: '',
        screen: c.screen, tz: c.tz, lang: c.lang,
        created_at: now, last_seen: now, status: 'active'
      };
    }
    


    function touchLocal() {
      var list = readLocal(), now = new Date().toISOString(), c = detectClient();
      var curId = lsGet(CUR_KEY);
      var cameFromLogin = false;
      try {
        var nav = (performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) || {};
        
        if (nav.type !== 'reload' && nav.type !== 'back_forward') {
          cameFromLogin = /\/(login|signup)(\/|\?|$)/i.test(new URL(document.referrer).pathname + '?');
        }
      } catch (e) {}
      var isNewLogin = !!lsGet(LOGIN_KEY) || !!lsGet(GUEST_KEY) || cameFromLogin;
      var cur = null, i;
      for (i = 0; i < list.length; i++) { if (list[i].id === curId) { cur = list[i]; break; } }
      if (cur && Date.now() - new Date(cur.last_seen).getTime() > NEW_SESSION_GAP) isNewLogin = true;

      if (isNewLogin || !cur || cur.status !== 'active') {
        for (i = 0; i < list.length; i++) {
          if (list[i].status === 'active') list[i].status = 'ended';
        }
        cur = newRow(c, now);
        list.unshift(cur);
        lsSet(CUR_KEY, cur.id);
      } else {
        cur.last_seen = now;
      }
      lsSet(LOGIN_KEY, null);
      lsSet(GUEST_KEY, null);
      localId = cur.id;
      writeLocal(list);
    }
    function localRows() {
      var list = readLocal().slice();
      return list.map(function (r) {
        var o = {}; for (var k in r) o[k] = r[k];
        o.current = (r.id === localId);
        return o;
      }).sort(sessionOrder);
    }

    


    function backendMissing() {
      try { return Date.now() - (+localStorage.getItem(MISSING_KEY) || 0) < MISSING_TTL; } catch (e) { return false; }
    }
    function markMissing(v) {
      try { if (v) localStorage.setItem(MISSING_KEY, String(Date.now())); else localStorage.removeItem(MISSING_KEY); } catch (e) {}
    }
    function ping() {
      if (DEMO || backendMissing()) return;
      var last = 0;
      try { last = +sessionStorage.getItem(PING_KEY) || 0; } catch (e) {}
      if (Date.now() - last < 10 * 60 * 1000) return;
      try { sessionStorage.setItem(PING_KEY, String(Date.now())); } catch (e) {}
      var c = detectClient();
      var p = { tz: c.tz, screen: c.screen, lang: c.lang, hw: (window.MemberUIDeviceId && window.MemberUIDeviceId()) || '' };
      fetch(API + '/ping', { method: 'POST', credentials: 'same-origin', headers: xhrHeaders(), body: JSON.stringify(p) })
        .then(function (r) {
          var ct = r.headers.get('content-type') || '';
          markMissing(!(r.ok && ct.indexOf('json') > -1));
        })
        .catch(function () {});
    }

     
    function endLocal() {
      if (!DEMO && !backendMissing()) {
        try {
          if (navigator.sendBeacon) navigator.sendBeacon(API + '/end', new Blob(['{}'], { type: 'text/plain' }));
          else fetch(API + '/end', { method: 'POST', credentials: 'same-origin', keepalive: true }).catch(function () {});
        } catch (e) {}
      }
      var list = readLocal(), now = new Date().toISOString(), curId = lsGet(CUR_KEY);
      for (var i = 0; i < list.length; i++) {
        if (list[i].id === curId) { list[i].status = 'ended'; list[i].last_seen = now; break; }
      }
      writeLocal(list);
      lsSet(CUR_KEY, null);
      forgetOpen();
    }
     
    function guest() { lsSet(GUEST_KEY, '1'); forgetOpen(); }
    function idle(fn) {
      if (typeof window.requestIdleCallback === 'function') window.requestIdleCallback(fn, { timeout: 1500 });
      else setTimeout(fn, 200);
    }

    

    function cachedMe() {
      try {
        var c = JSON.parse(sessionStorage.getItem('memberui_me') || 'null');
        if (c && c.u === userNameDK()) return c;
      } catch (e) {}
      return null;
    }
    function cachedEmail() { var c = cachedMe(); return (c && c.e) || ''; }

    function domPlan() {
      var cl = document.body.classList;
      if (cl.contains('MemberUI-sub-active')) return 'pro';
      if (cl.contains('MemberUI-sub-expired') || cl.contains('MemberUI-sub-none')) return 'free';
      return '';                                   
    }
    function setPlan(p) {
      if (p !== 'pro' && p !== 'free') return;
      var cl = document.body.classList;
      if (!cl.contains('MemberUI-plan-' + p)) {
        cl.remove('MemberUI-plan-pro', 'MemberUI-plan-free');
        cl.add('MemberUI-plan-' + p);
      }
      try { sessionStorage.setItem('memberui_plan', JSON.stringify({ u: userNameDK(), p: p })); } catch (e) {}
    }
    function lastPlan() {
      try { var c = JSON.parse(sessionStorage.getItem('memberui_plan') || 'null'); if (c && c.u === userNameDK()) return c.p; } catch (e) {}
      return '';
    }
    function initPlan() {
      var d = domPlan();
      setPlan(d || lastPlan() || ((cachedMe() || {}).p === true ? 'pro' : (cachedMe() || {}).p === false ? 'free' : ''));
      
      if (window.MutationObserver) {
        var sig = d;
        new MutationObserver(function () {
          var now = domPlan();
          if (now && now !== sig) { sig = now; setPlan(now); }
        }).observe(document.body, { attributes: true, attributeFilter: ['class'] });
      }
    }

    function loadMe(cb) {
      var c = cachedMe();
      if (state.email || (c && c.e && typeof c.p === 'boolean')) {
        state.email = state.email || c.e;
        if (!domPlan() && c && typeof c.p === 'boolean') setPlan(c.p ? 'pro' : 'free');
        cb && cb(state.email);
        return;
      }
      if (DEMO) { state.email = 'demo@example.com'; cb && cb(state.email); return; }
      fetch(API + '/me', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) {
          var ct = r.headers.get('content-type') || '';
          if (!r.ok || ct.indexOf('json') === -1) throw new Error('no');
          return r.json();
        })
        .then(function (d) {
          if (!d || !d.email) return;
          markMissing(false);
          state.email = d.email;
          var pro = typeof d.pro === 'boolean' ? d.pro : null;
          try { sessionStorage.setItem('memberui_me', JSON.stringify({ u: userNameDK(), e: d.email, p: pro })); } catch (e) {}
          if (!domPlan() && pro !== null) setPlan(pro ? 'pro' : 'free');
          cb && cb(d.email);
        })
        .catch(function () {});
    }

     
    function openMenu(trigger) {
      var r = trigger.getBoundingClientRect();
      menu.innerHTML =
        '<div class="MemberUI-menu-email">' + esc(state.email || cachedEmail() || userNameDK()) + '</div>' +
        '<button type="button" data-act="settings"><i class="fa-solid fa-gear"></i> Settings</button>' +
        '<a class="out" href="' + esc(findLogoutHref()) + '"><i class="fa-solid fa-right-from-bracket"></i> Log out</a>';
      menu.style.left = Math.max(12, r.left) + 'px';
      menu.style.width = Math.min(Math.max(r.width, 230), window.innerWidth - 24) + 'px';
      menu.style.bottom = (window.innerHeight - r.top + 8) + 'px';
      menu.style.top = 'auto';
      menu.classList.add('show');
      trigger.classList.add('MemberUI-open');
      if (!state.email) loadMe(function (em) {
        var el = menu.querySelector('.MemberUI-menu-email');
        if (el) el.textContent = em;
      });
      var tg = document.querySelector('.MemberUI-ub-toggle');
      if (tg) tg.setAttribute('aria-expanded', 'true');
    }
    function closeMenu() {
      menu.classList.remove('show');
      var t = document.querySelector('.am-user-identity-block-avatar');
      if (t) t.classList.remove('MemberUI-open');
      var tg = document.querySelector('.MemberUI-ub-toggle');
      if (tg) tg.setAttribute('aria-expanded', 'false');
    }

     
    function navBtn(tab, icon, label, hint, visible) {
      return '<button type="button" class="MemberUI-set-nav' + (state.tab === tab ? ' active' : '') + '" data-tab="' + tab + '"' +
        (visible ? '' : ' style="display:none !important"') + '>' +
        '<span class="MemberUI-nav-ic"><i class="fa-solid ' + icon + '"></i></span>' +
        '<span class="MemberUI-nav-tx">' + label + '<small>' + hint + '</small></span></button>';
    }
    function openModal() {
      ov.innerHTML =
        '<div class="MemberUI-set" role="dialog" aria-modal="true" aria-label="Settings">' +
          '<button class="MemberUI-set-close" type="button" aria-label="Close"><i class="fa-solid fa-xmark"></i></button>' +
          '<aside class="MemberUI-set-side">' +
            '<div class="MemberUI-set-head"><strong>Settings</strong><small>Manage your account</small></div>' +
            '<nav class="MemberUI-set-navs" aria-label="Settings sections">' +
              navBtn('account', 'fa-circle-user', 'Account', 'Device & activity', true) +
              navBtn('team', 'fa-users', 'Team', 'Members & seats', teamVisible()) +
              navBtn('security', 'fa-shield-halved', 'Security', 'Sign-in protection', secEnabled()) +
            '</nav>' +
            '<div class="MemberUI-set-foot"><span class="MemberUI-set-av">' + esc((userNameDK().charAt(0) || 'M').toUpperCase()) + '</span>' +
              '<div><strong>' + esc(userNameDK()) + '</strong><small class="MemberUI-set-foot-mail">' + esc(state.email || cachedEmail() || '') + '</small></div></div>' +
          '</aside>' +
          '<section class="MemberUI-set-main"></section>' +
        '</div>';
      ov.classList.add('show');
      document.body.style.overflow = 'hidden';
      rememberOpen(state.tab);
      if (!state.email) loadMe(function (em) { var f = ov.querySelector('.MemberUI-set-foot-mail'); if (f) f.textContent = em; });
      if (state.tab === 'team' && !teamVisible()) state.tab = 'account';
      if (state.tab === 'security' && sec.loaded && !secEnabled()) state.tab = 'account';   
      load();
      loadTeam(function () {
        syncTeamNav();
        if (state.tab !== 'team') return;
        if (!teamVisible()) { state.tab = 'account'; markNav(); }
        render();
      });
      loadSec(function () {
        syncSecNav();
        if (state.tab !== 'security') return;
        if (!secEnabled()) { state.tab = 'account'; markNav(); }
        render();
      });
    }
    function markNav() {
      var navs = ov.querySelectorAll('[data-tab]');
      for (var i = 0; i < navs.length; i++) navs[i].classList.toggle('active', navs[i].getAttribute('data-tab') === state.tab);
    }
    function closeModal() {
      closeRowMenu();
      ov.classList.remove('show');
      document.body.style.overflow = '';
      forgetOpen();
    }
     
    function nudgeClose() {
      var x = ov.querySelector('.MemberUI-set-close');
      if (!x || typeof x.animate !== 'function') return;
      try { if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; } catch (er) {}
      var brand = '';
      try { brand = getComputedStyle(x).getPropertyValue('--MemberUI-brand-1').trim(); } catch (er) {}
      var to = { transform: 'scale(1.14)' };
      if (/^#[0-9a-f]{3,8}$|^rgb/i.test(brand)) { to.borderColor = brand; to.color = brand; }
      try { x.animate([{ transform: 'scale(1)' }, to, { transform: 'scale(1)' }], { duration: 480, easing: 'ease-out' }); } catch (er) {}
    }

    function devIcon(t) {
      return t === 'mobile' ? 'fa-mobile-screen' : t === 'tablet' ? 'fa-tablet-screen-button' : 'fa-laptop';
    }
    function deviceCell(r) {
      var ids = [];
      if (r.device_tag) ids.push('Device ' + esc(r.device_tag));
      if (r.browser_tag) ids.push('Browser ' + esc(r.browser_tag));
      return '<span class="MemberUI-act-dev"><i class="fa-solid ' + devIcon(r.device_type) + ' MemberUI-dev-ico"></i>' +
        '<span>' + esc(r.browser || 'Browser') + (r.os ? ' <em>on</em> ' + esc(r.os) : '') +
        (r.current ? '<span class="MemberUI-badge">This browser</span>' : '') +
        (ids.length ? '<small>' + ids.join(' &middot; ') + '</small>' : '') + '</span></span>';
    }
    function locCell(r) {
      var loc = [r.city, r.region, r.country].filter(Boolean).join(', ');
      return '<span class="MemberUI-cv">' + (loc ? esc(loc) : '<span class="MemberUI-act-unk">Unknown</span>') + (r.ip ? '<small>IP ' + esc(r.ip) + '</small>' : '') + '</span>';
    }
    function timeCell(r) {
      var t = r.login_at || r.created_at;
      var end = r.status !== 'active' && r.status !== 'pending' && r.ended_at ? r.ended_at : '';
      return '<span class="MemberUI-cv">' + esc(fmtWhen(t)) + (end ? '<small>until ' + esc(fmtTime(end, t)) + '</small>' : '') + '</span>';
    }
     
    function fmtWhen(v) {
      var d = new Date(v);
      if (!v || isNaN(d.getTime())) return '—';
      var o = { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' };
      if (d.getFullYear() !== new Date().getFullYear()) o.year = 'numeric';
      try { return d.toLocaleString(undefined, o); } catch (e) { return String(v); }
    }
    function fmtTime(v, from) {
      var d = new Date(v), f = new Date(from);
      if (isNaN(d.getTime())) return String(v);
      try {
        return d.toDateString() === f.toDateString()
          ? d.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' })
          : d.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' });
      } catch (e) { return String(v); }
    }
    var PILLS = {
      active: ['ok', 'Active now'], ended: ['mut', 'Signed out'], expired: ['mut', 'Session ended'],
      replaced: ['warn', 'Ended: new browser'], revoked: ['mut', 'Signed out remotely'], admin: ['mut', 'Ended by admin'],
      locked: ['bad', 'Account suspended'], pending: ['warn', 'Waiting for code'], failed: ['warn', 'Code not entered'],
      blocked: ['bad', 'Blocked: new device'], approved: ['ok', 'Allowed by support']
    };
    function statusPill(s) {
      var p = PILLS[s] || ['mut', 'Signed out'];
      return '<span class="MemberUI-pill ' + p[0] + '">' + p[1] + '</span>';
    }

    function table() {
      if (!state.rows.length) return '<div class="MemberUI-sess-msg">No activity recorded yet</div>';
      var canRevoke = !state.fallback;
      return '<table class="MemberUI-sess MemberUI-act"><thead><tr><th>Device</th><th>Location</th><th>Sign-in time</th><th>Status</th><th></th></tr></thead><tbody>' +
        state.rows.map(function (r) {
          return '<tr' + (r.current ? ' class="cur"' : '') + '>' +
            '<td data-label="Device">' + deviceCell(r) + '</td>' +
            '<td data-label="Location">' + locCell(r) + '</td>' +
            '<td data-label="Sign-in time">' + timeCell(r) + '</td>' +
            '<td data-label="Status">' + statusPill(r.status) + '</td>' +
            '<td class="MemberUI-dots-cell">' + (r.status === 'active' && (r.current || canRevoke)
              ? '<button type="button" class="MemberUI-dots" data-dots="' + esc(r.id) + '" data-current="' + (r.current ? '1' : '0') + '" aria-label="Actions"><i class="fa-solid fa-ellipsis-vertical"></i></button>'
              : '') + '</td>' +
          '</tr>';
        }).join('') + '</tbody></table>';
    }

    function render() {
      var main = ov.querySelector('.MemberUI-set-main');
      if (!main) return;
      if (ov.classList.contains('show')) rememberOpen(state.tab);
      main.classList.toggle('MemberUI-main-fixed', state.tab === 'account');   
      if (state.tab === 'team') { renderTeam(main); return; }
      if (state.tab === 'security') { renderSecurity(main); return; }
      var others = !state.fallback && state.rows.some(function (r) { return !r.current && r.status === 'active'; });
      var body = state.loading ? '<div class="MemberUI-sess-msg">Loading…</div>'
        : state.error ? '<div class="MemberUI-sess-msg">' + esc(state.error) + '</div>'
        : table();

      main.innerHTML =
        '<h3>Account</h3><p class="sub">' + esc(state.email || cachedEmail() || userNameDK()) + '</p>' + deviceCard() +
        '<div class="MemberUI-sess-head"><strong>Recent activity</strong>' +
          (others ? '<button class="MemberUI-sess-all" type="button">Sign out other sessions</button>' : '') +
        '</div><div class="MemberUI-act-scroll">' + body + '</div>';
    }
     
    function deviceCard() {
      var d = state.device, ru = state.rules || {};
      if (state.fallback || state.loading || !d) return '';
      var br = (d.browsers || []).map(function (b) { return esc(b.name) + (b.tag ? ' <span class="MemberUI-devcard-id">' + esc(b.tag) + '</span>' : ''); }).join(', ');
      var rules = [];
      if (ru.exempt) rules.push('Your account has no device limit.');
      else if (ru.device && ru.device !== 'off') {
        rules.push('Clearing cookies or browser data changes nothing.');
        rules.push(ru.browser === 'allow' ? 'Other browsers on this device are allowed.'
          : 'Another browser on this device needs a one-time code from your email.');
        if (ru.device === 'lock') rules.push((ru.devices > 1 ? 'Signing in on more than ' + ru.devices + ' devices' : 'Signing in on another device') + ' suspends the account.');
        else if (ru.device === 'code') rules.push('Another device needs a code from your email.');
      }
      return '<div class="MemberUI-devcard">' +
          '<span class="MemberUI-devcard-ic"><i class="fa-solid ' + devIcon(d.type) + '"></i></span>' +
          '<div class="MemberUI-devcard-tx"><small>Your registered device</small>' +
            '<strong>' + esc(d.label || d.os || 'Device') + '</strong>' +
            '<span>' + (d.tag ? 'Device ID <span class="MemberUI-devcard-id">' + esc(d.tag) + '</span>' : '') +
              (br ? ' &middot; Browser: ' + br : '') + (d.since ? ' &middot; since ' + esc(fmtDT(d.since)) : '') + '</span>' +
          '</div>' +
          '<span class="MemberUI-pill ok"><i class="fa-solid fa-shield-halved"></i> Protected</span>' +
        '</div>' +
        (rules.length ? '<p class="MemberUI-devnote"><i class="fa-solid fa-circle-info"></i>' + esc(rules.join(' ')) + '</p>' : '');
    }

     
    function demoData() {
      var now = new Date().toISOString();
      var t = Date.now(), iso = function (m) { return new Date(t - m * 60000).toISOString(); };
      return { email: 'demo@example.com',
        device: { label: 'Windows · 8 cores · 1920x1080', os: 'Windows', type: 'desktop', tag: 'a1b2c3', since: '2026-09-29T23:45:00+05:00', browsers: [{ name: 'Chrome', tag: '9f8e7d' }] },
        rules: { minutes: 15, device: 'lock', browser: 'code', devices: 1, browsers: 1 },
        rows: [
        { id: '6', browser: 'Chrome', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(4), last_seen: now, current: true, status: 'active', device_tag: 'a1b2c3', browser_tag: '9f8e7d' },
        { id: '5', browser: 'Chrome', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(95), ended_at: iso(80), status: 'expired', device_tag: 'a1b2c3', browser_tag: '9f8e7d' },
        { id: '4', browser: 'Firefox', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(300), ended_at: iso(296), status: 'replaced', device_tag: 'a1b2c3', browser_tag: '17c0de' },
        { id: '3', browser: 'Edge', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(1500), ended_at: iso(1490), status: 'failed', device_tag: 'a1b2c3' },
        { id: '2', browser: 'Chrome', os: 'Windows', device_type: 'desktop', city: 'Dubai', region: 'Dubai', country: 'AE', ip: '5.31.0.3', login_at: iso(2900), ended_at: iso(2900), status: 'blocked', device_tag: '77aa99' },
        { id: '1', browser: 'Chrome', os: 'Windows', device_type: 'desktop', city: 'Multan', region: 'Punjab', country: 'PK', ip: '39.40.1.2', login_at: iso(4400), ended_at: iso(4390), status: 'ended', device_tag: 'a1b2c3', browser_tag: '9f8e7d' }
      ] };
    }
    function sessionOrder(a, b) {
      if (!!a.current !== !!b.current) return a.current ? -1 : 1;           
      var la = Date.parse(a.login_at || a.created_at) || 0, lb = Date.parse(b.login_at || b.created_at) || 0;
      if (la !== lb) return lb - la;                                        
      return (+b.id || 0) - (+a.id || 0);
    }

    function useServer(d) {
      var seen = {}, rows = [];
      (d.history || []).concat(d.sessions || []).forEach(function (r) {
        if (seen[r.id]) return;
        seen[r.id] = 1; rows.push(r);
      });
      rows.sort(sessionOrder);
      state.fallback = false;
      state.email = d.email || state.email;
      state.rows = rows;
      state.device = d.device || null;
      state.rules = d.rules || null;
    }
    function useLocal() {
      state.fallback = true;
      state.rows = localRows();
    }
    function load() {
      state.loading = true; state.error = ''; render();
      if (DEMO) { var d = demoData(); state.fallback = false; state.email = d.email; state.rows = d.rows; state.device = d.device; state.rules = d.rules; state.loading = false; render(); return; }
      if (backendMissing()) { touchLocal(); useLocal(); state.loading = false; render(); return; }   
      fetch(API + '/list', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) {
          if (r.status === 401 || r.status === 403) { var e1 = new Error('signed-out'); e1.kind = 'auth'; throw e1; }
          var ct = r.headers.get('content-type') || '';
          if (r.status === 404 || ct.indexOf('json') === -1) { var e2 = new Error('no-plugin'); e2.kind = 'missing'; throw e2; }
          if (!r.ok) { var e3 = new Error('server'); e3.kind = 'temp'; throw e3; }
          return r.json();
        })
        .then(function (d) {
          if (!d || (!d.history && !d.sessions)) { var e4 = new Error('bad-shape'); e4.kind = 'temp'; throw e4; }
          markMissing(false);
          useServer(d); state.loading = false; render();
        })
        .catch(function (err) {
          var kind = (err && err.kind) || 'temp';
          if (kind === 'auth') { location.href = '/login'; return; }          
          if (kind === 'missing') {                                          
            markMissing(true);
            touchLocal(); useLocal(); state.loading = false; render();
            return;
          }
          
          state.loading = false; state.error = 'Could not load sessions right now. Please try again.'; render();
        });
    }
    function postDK(path, body) {
      return fetch(API + path, { method: 'POST', credentials: 'same-origin', headers: xhrHeaders(), body: JSON.stringify(body || {}) });
    }
    function revoke(id) {
      if (DEMO) {
        state.rows.forEach(function (r) { if (r.id === id) r.status = 'revoked'; });
        render(); return;
      }
      postDK('/revoke', { id: id }).then(function () { load(); }, function () { load(); });
    }
    

    var cfEl = null;
    function memberuiConfirm(o, onOk) {
      closeConfirm();
      var prevFocus = document.activeElement;
      cfEl = document.createElement('div');
      cfEl.className = 'MemberUI-cf';
      cfEl.innerHTML =
        '<div class="MemberUI-cf-box' + (o.danger ? ' danger' : '') + '" role="alertdialog" aria-modal="true" aria-labelledby="MemberUI-cf-t" aria-describedby="MemberUI-cf-d">' +
          '<div class="MemberUI-cf-ico"><i class="fa-solid ' + (o.icon || 'fa-circle-question') + '"></i></div>' +
          '<h3 id="MemberUI-cf-t">' + esc(o.title || 'Are you sure?') + '</h3>' +
          '<p id="MemberUI-cf-d">' + esc(o.text || '') + '</p>' +
          '<div class="MemberUI-cf-actions">' +
            '<button type="button" class="MemberUI-cf-btn MemberUI-cf-cancel">' + esc(o.cancel || 'Cancel') + '</button>' +
            '<button type="button" class="MemberUI-cf-btn MemberUI-cf-ok">' + esc(o.ok || 'Continue') + '</button>' +
          '</div>' +
        '</div>';
      document.body.appendChild(cfEl);
      var okBtn = cfEl.querySelector('.MemberUI-cf-ok'), noBtn = cfEl.querySelector('.MemberUI-cf-cancel');
      function done(yes) {
        closeConfirm();
        try { if (prevFocus && prevFocus.focus) prevFocus.focus(); } catch (e) {}
        if (yes && onOk) onOk();
      }
      okBtn.addEventListener('click', function () { done(true); });
      noBtn.addEventListener('click', function () { done(false); });
      cfEl.addEventListener('click', function (e) { if (e.target === cfEl) done(false); });
      cfEl.addEventListener('keydown', function (e) {
        if (e.key === 'Escape') { e.stopPropagation(); done(false); }
        if (e.key === 'Tab') {                                  
          var f = [noBtn, okBtn], i = f.indexOf(document.activeElement);
          e.preventDefault(); f[(i + 1) % 2].focus();
        }
      });
      setTimeout(function () { (o.danger ? noBtn : okBtn).focus(); }, 30);
    }
    function closeConfirm() {
      if (cfEl && cfEl.parentNode) cfEl.parentNode.removeChild(cfEl);
      cfEl = null;
    }

    function revokeOthers() {
      memberuiConfirm({
        title: 'Sign out other sessions?',
        text: 'Every other open session of your account is ended right away. You stay signed in here.',
        ok: 'Sign out', icon: 'fa-right-from-bracket', danger: true
      }, function () {
        if (DEMO) {
          state.rows.forEach(function (r) { if (!r.current && r.status === 'active') r.status = 'revoked'; });
          render(); return;
        }
        postDK('/revoke-others').then(function () { load(); }, function () { load(); });
      });
    }

    


    var team = { loaded: false, loading: false, data: null, msg: '', msgOk: false, editing: 0, busy: false, draft: null };

    function teamPost(path, body) {
      return fetch('/member-team/' + path, {
        method: 'POST', credentials: 'same-origin',
        headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' },
        body: JSON.stringify(body || {})
      }).then(function (r) { return r.json(); });
    }
    function teamDemo() {
      return { enabled: true, role: 'owner', can_invite: true, buy_url: '#',
        seats: { total: 3, used: 2, free: 1, default: 1, bought: 1, extra: 1, disabled: false },
        products: [{ id: 1, title: 'Keepa Tool' }, { id: 2, title: 'Helium 10' }, { id: 4, title: 'Jungle Scout' }],
        members: [
          { id: 11, email: 'ali@example.com', status: 'active', products: [1, 2], accepted_at: '2026-10-02T10:00:00+05:00' },
          { id: 12, email: 'sara@example.com', status: 'invited', products: [4], invited_at: '2026-10-10T18:00:00+05:00', expired: false }
        ] };
    }
    function loadTeam(cb) {
      if (DEMO) { team.data = teamDemo(); team.loaded = true; cb && cb(); return; }
      team.loading = true;
      fetch('/member-team/state', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) {
          var ct = r.headers.get('content-type') || '';
          if (ct.indexOf('json') === -1) { var err = new Error('missing'); err.http = r.status || 1; throw err; }   
          return r.json().then(function (d) {
            d = d || {};
            if (r.status === 401 || r.status === 403) d.code = 'login';
            else if (!r.ok && !d.code) { d.code = 'server'; d.http = r.status; }
            return d;
          });
        })
        .then(function (d) { team.data = d; team.loaded = true; team.loading = false; cb && cb(); })
        .catch(function (e) {
          var h = e && e.http;
          
          team.data = { enabled: false, http: h || 0, code: !h ? 'network' : (h === 404 || h === 200 || h === 1) ? 'missing' : 'server' };
          team.loaded = true; team.loading = false; cb && cb();
        });
    }
    function teamEnabled() { return !!(team.data && team.data.enabled); }
    var teamTimer = null;
    function teamWatch() {
      if (teamTimer) return;                       
      teamTimer = setTimeout(function () {
        teamTimer = null;
        var open = ov && ov.classList.contains('show') && state.tab === 'team';
        var waiting = team.data && (team.data.members || []).some(function (m) { return m.status === 'invited'; });
        var ae = document.activeElement;
        var typing = ov && ov.contains(ae) && /input|textarea/i.test(ae.tagName) && !!ae.value;   
        if (!open) return;
        if (!waiting || typing || team.editing || team.busy || document.hidden) { teamWatch(); return; }
        loadTeam(function () { if (state.tab === 'team') render(); teamWatch(); });
      }, 15000);
    }
     
    

    function teamVisible() { return !(team.data && team.data.hide_tab); }
    function showNav(b, on) {
      if (!b) return;
      if (on) b.style.removeProperty('display'); else b.style.setProperty('display', 'none', 'important');
    }
    function syncTeamNav() { showNav(ov && ov.querySelector('[data-tab="team"]'), teamVisible()); }
    function prodTitle(id) {
      var ps = (team.data && team.data.products) || [];
      for (var i = 0; i < ps.length; i++) if (+ps[i].id === +id) return ps[i].title;
      return 'Product #' + id;
    }
    function prodChecks(name, selected) {
      var ps = (team.data && team.data.products) || [];
      if (!ps.length) return '<div class="MemberUI-team-empty">You have no active products to share.</div>';
      var sel = {};
      (selected || []).forEach(function (p) { sel[+p] = 1; });
      return '<div class="MemberUI-prod-pick">' + ps.map(function (p) {
        return '<label class="MemberUI-chip-check"><input type="checkbox" name="' + name + '" value="' + esc(p.id) + '"' + (sel[+p.id] ? ' checked' : '') + '>' +
          '<span><i class="fa-solid fa-check"></i>' + esc(p.title) + '</span></label>';
      }).join('') + '</div>';
    }
    function teamDay(v) {
      if (!v) return '';
      var d = new Date(v);
      return isNaN(d) ? '' : d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });
    }
     
    var TM_TONES = ['#2563eb', '#0d9488', '#7c3aed', '#0891b2', '#4f46e5', '#475569'];
    function tmTone(email) {
      var h = 0, e = String(email || '');
      for (var i = 0; i < e.length; i++) h = (h * 31 + e.charCodeAt(i)) >>> 0;
      return TM_TONES[h % TM_TONES.length];
    }
    function tmInitials(email) {
      var local = String(email || '?').split('@')[0];
      var parts = local.split(/[._\-+0-9]+/).filter(Boolean);
      return (parts.length > 1 ? parts[0].charAt(0) + parts[1].charAt(0) : (parts[0] || local || '?').charAt(0)).toUpperCase();
    }
    function tmAvatar(email, cls, letters) {
      return '<span class="MemberUI-tm-av' + (cls ? ' ' + cls : '') + '" style="--tone:' + tmTone(email) + '" aria-hidden="true">' + esc(tmInitials(letters || email)) + '</span>';
    }
     
    function tmState(m) {
      var day;
      if (m.suspended) { day = teamDay(m.suspended_at); return { key: 'bad', seat: 'suspended', text: 'Suspended' + (day ? ' ' + day : '') + ' by the site' }; }
      if (m.status === 'active') { day = teamDay(m.accepted_at); return { key: 'ok', seat: 'taken', text: 'Accepted' + (day ? ' ' + day : '') }; }
      if (m.status === 'paused') return { key: 'off', seat: 'paused', text: 'Paused by you' };
      if (m.status === 'declined') { day = teamDay(m.declined_at); return { key: 'bad', seat: '', text: 'Declined' + (day ? ' ' + day : '') }; }
      if (m.expired) return { key: 'bad', seat: 'invited', text: 'Invite expired. Resend it from the menu' };
      day = teamDay(m.invited_at);
      return { key: 'wait', seat: 'invited', text: 'Invited' + (day ? ' ' + day : '') + ', waiting for an answer' };
    }
    function teamStatus(m) {          
      var st = tmState(m);
      return '<span class="MemberUI-tm-st ' + st.key + '">' + esc(st.text) + '</span>';
    }
     
    function tmSeats(d, s) {
      var MAX_TAKEN = 10, taken = [], order = { taken: 0, paused: 1, suspended: 2, invited: 3 };
      (d.members || []).forEach(function (m) { var st = tmState(m); if (st.seat) taken.push({ m: m, st: st }); });
      taken.sort(function (a, b) { return order[a.st.seat] - order[b.st.seat]; });
      var total = Math.max(s.total || 0, taken.length), free = Math.max(0, total - taken.length);
      var cells = [], shownTaken = 0;
      var canInvite = d.can_invite && (s.free || 0) > 0;
      var freeShown = total > 8 ? Math.min(free, 3) : free;           
      taken.forEach(function (t) {
        if (shownTaken >= MAX_TAKEN) return;
        shownTaken++;
        var label = t.m.email + ': ' + t.st.text;
        cells.push('<button type="button" class="MemberUI-tm-seat is-' + t.st.seat + '" style="--tone:' + tmTone(t.m.email) + '" data-team="seat-member" data-id="' + t.m.id + '" title="' + esc(label) + '" aria-label="' + esc(label) + '">' +
          esc(tmInitials(t.m.email)) + (t.st.seat === 'suspended' ? '<i class="fa-solid fa-lock" aria-hidden="true"></i>' : '') + '</button>');
      });
      if (taken.length > shownTaken) cells.push('<span class="MemberUI-tm-seat is-more" title="' + (taken.length - shownTaken) + ' more people">+' + (taken.length - shownTaken) + '</span>');
      for (var i = 0; i < freeShown; i++) {
        cells.push(canInvite
          ? '<button type="button" class="MemberUI-tm-seat is-free" data-team="focus-invite" title="Free seat: invite someone" aria-label="Free seat: invite someone"><i class="fa-solid fa-plus" aria-hidden="true"></i></button>'
          : '<span class="MemberUI-tm-seat is-free is-idle" title="Free seat"></span>');
      }
      if (free > freeShown) cells.push('<span class="MemberUI-tm-more">+' + (free - freeShown) + ' free</span>');
      return cells.length ? '<div class="MemberUI-tm-strip" role="group" aria-label="Your seats">' + cells.join('') + '</div>' : '';
    }

    function renderTeam(main) {
      var d = team.data;
      teamWatch();
      if (!team.loaded) { main.innerHTML = '<div class="MemberUI-tm"><h3>Team</h3><div class="MemberUI-sess-msg">Loading your team…</div></div>'; return; }
      if (!d || !d.enabled) {
        var why = 'Teams are not available.', retry = false;
        if (d && !d.v && !d.code && d.enabled === false) { why = 'Team is not ready yet: the team plugin on the server is an old version (upload the latest member-team.php).'; retry = true; }
        else if (d && d.code === 'off') { why = 'Teams are switched off on this site right now.'; }
        else if (d && d.code === 'not_loaded') { why = 'Team is not ready yet: the MemberUI Team plugin is not active on the server.'; retry = true; }
        else if (d && d.code === 'server') { why = (d.error || 'Team is temporarily unavailable. Please try again in a minute.') + (d.http ? ' (HTTP ' + d.http + ')' : ''); retry = true; }
        else if (d && d.code === 'missing') { why = 'Team is not set up on this site yet' + (d.http > 1 ? ' (HTTP ' + d.http + ' at /member-team/state)' : '') + '.'; retry = true; }
        else if (d && d.code === 'network') { why = 'Could not reach the server. Please check your internet connection.'; retry = true; }
        else if (d && d.code === 'login') { why = 'Your session has ended. Please <a href="/login">sign in again</a>.'; }
        main.innerHTML = '<div class="MemberUI-tm"><h3>Team</h3><div class="MemberUI-sess-msg">' + (d && d.code === 'login' ? why : esc(why)) +
          (d && d.debug ? '<br><small style="display:block;margin-top:8px;font-family:monospace;font-size:11px;color:#b83245;word-break:break-word">Admin info: ' + esc(d.debug) + '</small>' : '') +
          (retry ? '<br><button type="button" class="MemberUI-team-btn ghost" data-team="retry" style="margin-top:12px">Try again</button>' : '') +
          '</div></div>';
        return;
      }

      if (d.role === 'member') {
        var ownerName = d.owner ? d.owner.name : 'your team owner';
        var notice = d.suspended
          ? '<div class="MemberUI-tm-note warn"><i class="fa-solid fa-lock" aria-hidden="true"></i><span>The team owner’s account is suspended, so your team access is paused.</span></div>'
          : d.paused ? '<div class="MemberUI-tm-note warn"><i class="fa-solid fa-pause" aria-hidden="true"></i><span>Your access is paused by ' + esc(ownerName) + '. Ask them to resume it.</span></div>' : '';
        main.innerHTML = '<div class="MemberUI-tm"><h3>Team</h3><p class="sub">Your access is managed by your team owner.</p>' + notice +
          '<section class="MemberUI-tm-panel MemberUI-tm-ownerbox">' + tmAvatar(d.owner && d.owner.email ? d.owner.email : ownerName, 'is-lg', ownerName) +
            '<div class="MemberUI-tm-who"><strong>You are on ' + esc(ownerName) + '’s team</strong>' +
            (d.owner && d.owner.email ? '<span class="MemberUI-tm-meta">' + esc(d.owner.email) + '</span>' : '') + '</div></section>' +
          '<div class="MemberUI-tm-h">Your tools</div>' +
          ((d.products || []).length
            ? '<div class="MemberUI-tm-tools">' + d.products.map(function (p) { return '<span class="MemberUI-tm-tool">' + esc(p.title) + '</span>'; }).join('') + '</div>'
            : '<div class="MemberUI-tm-empty">No tools are shared with you right now.</div>') +
          '</div>';
        return;
      }

      var s = d.seats || { total: 0, used: 0, free: 0 };
      var parts = [];
      if (s.default) parts.push(s.default + ' included');
      if (s.bought) parts.push(s.bought + ' bought');
      if (s.extra) parts.push(s.extra + ' extra');
      var full = s.total > 0 && s.free < 1;
      var buy = d.buy_url
        ? '<a class="MemberUI-tm-buy' + (full || s.total < 1 ? ' is-primary' : '') + '" href="' + esc(d.buy_url) + '"><i class="fa-solid fa-plus" aria-hidden="true"></i> Buy more seats</a>'
        : '<span class="MemberUI-tm-buy is-quiet">Contact support for more seats</span>';

      var seatNote;
      if (!d.can_invite) seatNote = s.disabled ? 'Team features are turned off for this account. Please contact support.' : 'You need an active subscription to invite people.';
      else if (s.total < 1) seatNote = d.buy_url ? 'Buy seats to invite your team.' : 'Contact support to get team seats for your account.';
      else if (full) seatNote = 'All seats are taken. Buy more seats or remove someone to invite a new person.';
      else seatNote = s.free + (s.free === 1 ? ' seat is free.' : ' seats are free.') + ' Pick a free seat or use the form below.';
      if (parts.length && s.total > 0) seatNote = parts.join(', ') + '. ' + seatNote;

      var invite = '';
      if (d.can_invite && s.total > 0 && !full) {
        invite = '<section class="MemberUI-tm-invite"><label class="MemberUI-tm-h" for="memberui-tm-email">Invite someone</label>' +
          '<div class="MemberUI-tm-inv-row"><div class="MemberUI-tm-field"><i class="fa-regular fa-envelope" aria-hidden="true"></i>' +
          '<input id="memberui-tm-email" type="email" class="MemberUI-inv-email" placeholder="name@email.com" autocomplete="off" value="' + esc(team.draft ? team.draft.email : '') + '"></div>' +
          '<button type="button" class="MemberUI-team-btn MemberUI-tm-send" data-team="invite"' + (team.busy ? ' disabled' : '') + '><i class="fa-solid fa-paper-plane" aria-hidden="true"></i> Send invite</button></div>' +
          '<div class="MemberUI-tm-sub">Tools they can use</div>' +
          prodChecks('inv-prod', team.draft ? team.draft.prods : ((d.products || []).length === 1 ? [d.products[0].id] : [])) + '</section>';
      }

      var members = d.members || [];
      var known = {};
      (d.products || []).forEach(function (p) { known[+p.id] = 1; });
      var rows = members.map(function (m) {
        var st = tmState(m);
        var chips = (m.products || []).map(function (p) {
          return known[+p] ? '<span class="MemberUI-tm-tool">' + esc(prodTitle(p)) + '</span>'
                           : '<span class="MemberUI-tm-tool is-gone" title="This tool is not active on your account any more">' + esc(prodTitle(p)) + '</span>';
        }).join('');
        var actKey = m.suspended ? 'suspended' : m.status;
        var editor = team.editing === m.id
          ? '<li class="MemberUI-tm-edit"><div class="MemberUI-tm-sub">Tools ' + esc(m.email) + ' can use</div>' + prodChecks('edit-prod', m.products) +
            '<div class="MemberUI-team-edit-actions"><button type="button" class="MemberUI-team-btn MemberUI-tm-send" data-team="save" data-id="' + m.id + '">Save access</button>' +
            '<button type="button" class="MemberUI-team-btn ghost" data-team="cancel">Cancel</button></div></li>'
          : '';
        var avCls = st.seat === 'invited' ? 'is-invited' : (st.seat === 'paused' ? 'is-paused' : (st.seat === 'suspended' ? 'is-suspended' : (st.seat ? '' : 'is-gone')));
        return '<li class="MemberUI-tm-row is-' + st.key + (team.editing === m.id ? ' is-editing' : '') + '" data-member="' + m.id + '">' +
          tmAvatar(m.email, avCls) +
          '<div class="MemberUI-tm-who"><strong title="' + esc(m.email) + '">' + esc(m.email) + '</strong><span class="MemberUI-tm-st ' + st.key + '">' + esc(st.text) + '</span></div>' +
          '<div class="MemberUI-tm-tools">' + (chips || '<span class="MemberUI-tm-meta">No tools</span>') + '</div>' +
          (teamActions(actKey).length
            ? '<button type="button" class="MemberUI-dots" data-team-dots="' + m.id + '" data-status="' + esc(actKey) + '" aria-label="Actions for ' + esc(m.email) + '"><i class="fa-solid fa-ellipsis-vertical"></i></button>'
            : '<span class="MemberUI-tm-nodots"></span>') +
          '</li>' + editor;
      }).join('');

      main.innerHTML = '<div class="MemberUI-tm">' +
        '<h3>Team</h3><p class="sub">Give your team their own login. You decide what each person can use.</p>' +
        (d.notice ? '<div class="MemberUI-tm-note warn"><i class="fa-solid fa-triangle-exclamation" aria-hidden="true"></i><span>' + esc(d.notice) + '</span></div>' : '') +
        '<section class="MemberUI-tm-panel MemberUI-tm-seats' + (full ? ' is-full' : '') + '">' +
          '<div class="MemberUI-tm-seats-top"><div class="MemberUI-tm-count">' + (s.total > 0 ? '<b>' + s.used + '</b> of <b>' + s.total + '</b> seats used' : 'No team seats yet') + '</div>' + buy + '</div>' +
          tmSeats(d, s) +
          '<p class="MemberUI-tm-seatnote">' + esc(seatNote) + '</p>' +
        '</section>' +
        invite +
        '<div class="MemberUI-team-msg ' + (team.msgOk ? 'ok' : 'err') + '" aria-live="polite">' + esc(team.msg) + '</div>' +
        '<section class="MemberUI-tm-members"><div class="MemberUI-tm-h">Members' + (members.length ? ' <span class="MemberUI-tm-n">' + members.length + '</span>' : '') + '</div>' +
        (rows ? '<ul class="MemberUI-tm-list">' + rows + '</ul>'
              : '<div class="MemberUI-tm-empty">No one on your team yet. ' + (invite ? 'Invite someone above and they get their own login.' : 'Once you have a free seat, you can invite people here.') + '</div>') +
        '</section></div>';
    }

    function checked(name) {
      var out = [];
      var els = ov.querySelectorAll('input[name="' + name + '"]:checked');
      for (var i = 0; i < els.length; i++) out.push(+els[i].value);
      return out;
    }
    function keepDraft() {
      var em = ov.querySelector('.MemberUI-inv-email');
      if (em) team.draft = { email: em.value, prods: checked('inv-prod') };
    }
    function teamSay(msg, ok) {
      if (ok) team.draft = null; else keepDraft();
      team.msg = msg || ''; team.msgOk = !!ok; render();
    }
    function teamCall(path, body, okMsg) {
      if (DEMO) { teamSay(okMsg + ' (demo)', true); return; }
      keepDraft();
      team.busy = true;
      teamPost(path, body).then(function (r) {
        team.busy = false;
        if (r && r.ok) { team.editing = 0; loadTeam(function () { teamSay((r.warning || r.note || okMsg) + (r.debug ? ' [' + r.debug + ']' : ''), !r.warning); }); }
        else teamSay(((r && r.error) || 'Something went wrong. Please try again.') + (r && r.debug ? ' [' + r.debug + ']' : ''));
      }).catch(function () { team.busy = false; teamSay('Network error. Please try again.'); });
    }
    function teamClick(e) {
      var b = e.target.closest('[data-team]');
      if (!b) return false;
      var a = b.getAttribute('data-team');
      if (a === 'invite') {
        var email = (ov.querySelector('.MemberUI-inv-email') || {}).value || '';
        var prods = checked('inv-prod');
        if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim())) { teamSay('Please enter a valid email address.'); return true; }
        if (!prods.length) { teamSay('Choose at least one product to share.'); return true; }
        teamCall('invite', { email: email.trim(), products: prods }, 'Invitation sent to ' + email.trim() + '.');
      } else if (a === 'save') {
        var p2 = checked('edit-prod');
        if (!p2.length) { teamSay('Choose at least one product, or remove the member.'); return true; }
        teamCall('update', { id: +b.getAttribute('data-id'), products: p2 }, 'Access updated.');
      } else if (a === 'retry') {
        team.loaded = false; render();
        loadTeam(function () { syncTeamNav(); render(); });
      } else if (a === 'cancel') {
        team.editing = 0; render();
      } else if (a === 'focus-invite') {
        var fe = ov.querySelector('.MemberUI-tm .MemberUI-inv-email');
        if (fe) { try { fe.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); } catch (er) {} fe.focus(); }
      } else if (a === 'seat-member') {
        var row = ov.querySelector('.MemberUI-tm-row[data-member="' + (+b.getAttribute('data-id')) + '"]');
        if (row) {
          try { row.scrollIntoView({ block: 'nearest', behavior: 'smooth' }); } catch (er) {}
          row.classList.remove('is-flash'); void row.offsetWidth; row.classList.add('is-flash');
          setTimeout(function () { row.classList.remove('is-flash'); }, 1600);
        }
      }
      return true;
    }
     
    function teamActions(status) {
      var p = (team.data && team.data.perm) || { edit: true, pause: true, remove: true, resend: true }, a = [];
      if (status === 'declined' || status === 'suspended') { if (p.remove) a.push('remove'); return a; }   
      if (p.edit) a.push('edit');
      if (status === 'invited' && p.resend) a.push('resend');
      if (status === 'invited') a.push('copy');                       
      if (status === 'active' && p.pause) a.push('pause');
      if (status === 'paused' && p.pause) a.push('resume');
      if (p.remove) a.push('remove');
      return a;
    }
    function toggleTeamMenu(btn) {
      var id = btn.getAttribute('data-team-dots');
      if (rowMenu.classList.contains('show') && rowMenu.getAttribute('data-id') === 'team-' + id) { closeRowMenu(); return; }
      var r = btn.getBoundingClientRect();
      rowMenu.setAttribute('data-id', 'team-' + id);
      var st = btn.getAttribute('data-status'), acts = teamActions(st), mid = esc(id);
      var label = {
        edit: '<button type="button" data-do="team-edit" data-mid="' + mid + '"><i class="fa-solid fa-sliders"></i> Edit access</button>',
        resend: '<button type="button" data-do="team-resend" data-mid="' + mid + '"><i class="fa-solid fa-paper-plane"></i> Resend invite</button>',
        copy: '<button type="button" data-do="team-copy" data-mid="' + mid + '"><i class="fa-solid fa-link"></i> Copy invite link</button>',
        pause: '<button type="button" data-do="team-pause" data-mid="' + mid + '"><i class="fa-solid fa-pause"></i> Pause access</button>',
        resume: '<button type="button" data-do="team-resume" data-mid="' + mid + '"><i class="fa-solid fa-play"></i> Resume access</button>',
        remove: st === 'declined'
          ? '<button type="button" class="out" data-do="team-remove" data-mid="' + mid + '"><i class="fa-solid fa-xmark"></i> Remove from list</button>'
          : '<button type="button" class="out" data-do="team-remove" data-mid="' + mid + '"><i class="fa-solid fa-user-minus"></i> ' + (st === 'invited' ? 'Cancel invite' : 'Remove') + '</button>'
      };
      rowMenu.innerHTML = acts.map(function (a) { return label[a]; }).join('');
      rowMenu.style.top = (r.bottom + 6) + 'px';
      rowMenu.style.left = Math.max(12, r.right - 180) + 'px';
      rowMenu.classList.add('show');
    }
    function teamMenuAction(btn) {
      var act = btn.getAttribute('data-do'), id = +btn.getAttribute('data-mid');
      closeRowMenu();
      if (act === 'team-edit') { team.editing = id; team.msg = ''; render(); }
      else if (act === 'team-resend') teamCall('resend', { id: id }, 'Invitation sent again. The link stays the same.');
      else if (act === 'team-copy') {
        var mm = ((team.data && team.data.members) || []).filter(function (x) { return x.id === id; })[0];
        if (!mm || !mm.link) { teamSay('This invitation has no link any more. Use Resend invite.'); return; }
        var done = function () { teamSay('Invitation link copied. Send it to ' + mm.email + ' (WhatsApp, email). It works until the invitation expires.', true); };
        var fallback = function () {
          try {
            var ta = document.createElement('textarea');
            ta.value = mm.link; ta.setAttribute('readonly', ''); ta.style.cssText = 'position:fixed;top:-1000px;opacity:0';
            document.body.appendChild(ta); ta.select(); document.execCommand('copy'); ta.remove(); done();
          } catch (er) { teamSay('Copy this link: ' + mm.link, true); }
        };
        try { navigator.clipboard.writeText(mm.link).then(done, fallback); } catch (er) { fallback(); }
      }
      else if (act === 'team-pause') {
        memberuiConfirm({
          title: 'Pause this member?',
          text: 'They keep their seat, but cannot use any tools until you resume their access.',
          ok: 'Pause access', icon: 'fa-pause', danger: false
        }, function () { teamCall('pause', { id: id }, 'Member paused. Their access is stopped.'); });
      }
      else if (act === 'team-resume') teamCall('resume', { id: id }, 'Member resumed. Access restored.');
      else if (act === 'team-remove') {
        memberuiConfirm({
          title: 'Remove this member?',
          text: 'Their access ends right away and the seat becomes free for someone else.',
          ok: 'Remove member', icon: 'fa-user-minus', danger: true
        }, function () { teamCall('remove', { id: id }, 'Member removed.'); });
      }
    }

    


    var sec = { loaded: false, data: null, step: '', setup: null, codes: null, msg: '', msgOk: false, ask: '', busy: false };
    var QR_LIB = 'https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js';

    function secPost(path, body) {
      return fetch('/memberui-2fa/' + path, {
        method: 'POST', credentials: 'same-origin',
        headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' },
        body: JSON.stringify(body || {})
      }).then(function (r) { return r.json(); });
    }
    function loadSec(cb) {
      if (DEMO) { sec.data = { enabled: true, on: false, required: false, can_disable: false, backup_left: 0, trusted: 0, trust_days: 30 }; sec.loaded = true; cb && cb(); return; }
      fetch('/memberui-2fa/state', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) { var ct = r.headers.get('content-type') || ''; if (!r.ok || ct.indexOf('json') === -1) throw 0; return r.json(); })
        .then(function (d) { sec.data = d; sec.loaded = true; cb && cb(); })
        .catch(function () { sec.data = { enabled: false }; sec.loaded = true; cb && cb(); });
    }
    function secEnabled() { return !!(sec.data && sec.data.enabled); }
    function syncSecNav() { showNav(ov && ov.querySelector('[data-tab="security"]'), secEnabled()); }
    function secSay(m, ok) { sec.msg = m || ''; sec.msgOk = !!ok; render(); }
    function groupKey(k) { return String(k || '').replace(/(.{4})/g, '$1 ').trim(); }

    function drawQr() {
      var box = ov.querySelector('.MemberUI-qr');
      if (!box || !sec.setup) return;
      function paint() {
        try {
          box.innerHTML = '';
          new window.QRCode(box, { text: sec.setup.otpauth, width: 168, height: 168, correctLevel: window.QRCode.CorrectLevel.M });
        } catch (e) { box.innerHTML = '<span>Enter the key below in your app.</span>'; }
      }
      if (window.QRCode) { paint(); return; }
      var s = document.createElement('script');
      s.src = QR_LIB; s.async = true;
      s.onload = paint;
      s.onerror = function () { box.innerHTML = '<span>QR code could not load. Enter the key below in your app.</span>'; };
      document.head.appendChild(s);
    }

    function codesHtml(list) {
      return '<div class="MemberUI-codes">' + list.map(function (c) { return '<code>' + esc(c) + '</code>'; }).join('') + '</div>' +
        '<div class="MemberUI-2fa-row"><button type="button" class="MemberUI-team-btn ghost" data-sec="copy-codes"><i class="fa-solid fa-copy"></i> Copy</button>' +
        '<button type="button" class="MemberUI-team-btn ghost" data-sec="download-codes"><i class="fa-solid fa-download"></i> Download</button></div>';
    }
    function askHtml(label) {
      return '<div class="MemberUI-2fa-ask"><label>' + label + '</label><div class="MemberUI-inv-row">' +
        '<input class="MemberUI-inv-email MemberUI-sec-code" inputmode="numeric" autocomplete="one-time-code" placeholder="6-digit code or backup code" maxlength="12">' +
        '<button type="button" class="MemberUI-team-btn" data-sec="ask-go">Confirm</button>' +
        '<button type="button" class="MemberUI-team-btn ghost" data-sec="ask-cancel">Cancel</button></div></div>';
    }

    function renderSecurity(main) {
      var d = sec.data;
      if (!sec.loaded) { main.innerHTML = '<h3>Security</h3><div class="MemberUI-sess-msg">Loading…</div>'; return; }
      if (!d || !d.enabled) { main.innerHTML = '<h3>Security</h3><div class="MemberUI-sess-msg">Not available.</div>'; return; }
      var msg = '<div class="MemberUI-team-msg ' + (sec.msgOk ? 'ok' : 'err') + '" aria-live="polite">' + esc(sec.msg) + '</div>';
      var head = '<h3>Security</h3><p class="sub">Protect your account with a code from an authenticator app.</p>' +
        (d.required && !d.on ? '<div class="MemberUI-team-empty MemberUI-team-warn"><i class="fa-solid fa-shield-halved"></i> Your account requires two-factor authentication. Please turn it on to continue.</div>' : '');

      if (sec.step === 'codes' && sec.codes) {
        main.innerHTML = head + '<div class="MemberUI-team-card"><div class="MemberUI-team-title"><i class="fa-solid fa-key"></i> Save your backup codes</div>' +
          '<p class="MemberUI-2fa-p">If you lose your phone, each code lets you sign in once. Keep them somewhere safe; they will not be shown again.</p>' +
          codesHtml(sec.codes) +
          '<button type="button" class="MemberUI-team-btn MemberUI-2fa-done" data-sec="done">I saved my codes</button>' + msg + '</div>';
        return;
      }
      if (sec.step === 'qr' && sec.setup) {
        main.innerHTML = head + '<div class="MemberUI-team-card"><div class="MemberUI-team-title">Set up two-factor authentication</div>' +
          '<ol class="MemberUI-2fa-steps"><li>Install <b>Google Authenticator</b>, <b>Microsoft Authenticator</b> or <b>Authy</b> on your phone.</li>' +
          '<li>Scan this QR code with the app (or enter the key).</li><li>Type the 6-digit code the app shows.</li></ol>' +
          '<div class="MemberUI-2fa-setup"><div class="MemberUI-qr"><span>Loading QR code…</span></div>' +
          '<div class="MemberUI-2fa-key"><small>Key</small><code>' + esc(groupKey(sec.setup.secret)) + '</code>' +
          '<button type="button" class="MemberUI-team-btn ghost" data-sec="copy-key"><i class="fa-solid fa-copy"></i> Copy key</button>' +
          '<small>Account: ' + esc(sec.setup.account) + '</small></div></div>' +
          '<div class="MemberUI-inv-row MemberUI-2fa-confirm"><input class="MemberUI-inv-email MemberUI-sec-code" inputmode="numeric" autocomplete="one-time-code" maxlength="6" placeholder="123456" aria-label="6-digit code">' +
          '<button type="button" class="MemberUI-team-btn" data-sec="confirm"' + (sec.busy ? ' disabled' : '') + '>Turn on</button>' +
          '<button type="button" class="MemberUI-team-btn ghost" data-sec="cancel-setup">Cancel</button></div>' + msg + '</div>';
        drawQr();
        return;
      }
      if (!d.on) {
        main.innerHTML = head + '<div class="MemberUI-team-card MemberUI-2fa-status"><div class="MemberUI-2fa-ico off"><i class="fa-solid fa-shield-halved"></i></div>' +
          '<div class="MemberUI-2fa-txt"><strong>Two-factor authentication is off</strong><small>Add a second step to your sign-in so a stolen password is not enough.</small></div>' +
          '<button type="button" class="MemberUI-team-btn" data-sec="start"' + (sec.busy ? ' disabled' : '') + '>Turn on</button></div>' + msg;
        return;
      }
      main.innerHTML = head +
        '<div class="MemberUI-team-card MemberUI-2fa-status"><div class="MemberUI-2fa-ico on"><i class="fa-solid fa-shield-halved"></i></div>' +
          '<div class="MemberUI-2fa-txt"><strong>Two-factor authentication is on <span class="MemberUI-pill ok">On</span></strong>' +
          '<small>' + (d.since ? 'Since ' + esc(fmtDT(d.since)) + '. ' : '') + 'We ask for a code when you sign in on a new browser.</small></div></div>' +
        '<div class="MemberUI-team-card"><div class="MemberUI-2fa-line"><div><strong>Backup codes</strong><small>' + (+d.backup_left) + ' of 10 left' +
          (d.backup_left <= 3 ? ' — make new ones soon' : '') + '</small></div>' +
          '<button type="button" class="MemberUI-team-btn ghost" data-sec="ask" data-what="regen">New codes</button></div>' +
        (d.trust_days > 0 ? '<div class="MemberUI-2fa-line"><div><strong>Remembered browsers</strong><small>' + (+d.trusted) + ' browser(s) skip the code for ' + (+d.trust_days) + ' days</small></div>' +
          '<button type="button" class="MemberUI-team-btn ghost" data-sec="forget"' + (+d.trusted ? '' : ' disabled') + '>Forget all</button></div>' : '') +
        (d.can_disable ? '<div class="MemberUI-2fa-line"><div><strong>Turn off</strong><small>You will only need your password to sign in.</small></div>' +
          '<button type="button" class="MemberUI-team-btn ghost danger" data-sec="ask" data-what="disable">Turn off</button></div>' : '') +
        (sec.ask ? askHtml(sec.ask === 'disable' ? 'Enter a code to turn off two-factor authentication' : 'Enter a code to make new backup codes') : '') +
        (sec.codes ? '<div class="MemberUI-team-title" style="margin-top:14px">Your new backup codes</div>' + codesHtml(sec.codes) : '') +
        msg + '</div>';
    }

    function secCodeVal() { var i = ov.querySelector('.MemberUI-sec-code'); return i ? i.value.trim() : ''; }
    function secClick(e) {
      var b = e.target.closest('[data-sec]');
      if (!b) return false;
      var a = b.getAttribute('data-sec');
      if (a === 'start') {
        if (DEMO) { sec.setup = { secret: 'JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP', otpauth: 'otpauth://totp/Demo:demo@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Demo', account: 'demo@example.com' }; sec.step = 'qr'; secSay(''); return true; }
        sec.busy = true; render();
        secPost('setup-start').then(function (r) {
          sec.busy = false;
          if (r && r.ok) { sec.setup = r; sec.step = 'qr'; secSay(''); } else secSay((r && r.error) || 'Please try again.');
        }).catch(function () { sec.busy = false; secSay('Network error. Please try again.'); });
      } else if (a === 'confirm') {
        var code = secCodeVal().replace(/\D/g, '');
        if (code.length !== 6) { secSay('Enter the 6-digit code from the app.'); return true; }
        if (DEMO) { sec.codes = ['abcde-12345', 'fghij-67890']; sec.step = 'codes'; secSay(''); return true; }
        sec.busy = true;
        secPost('setup-confirm', { code: code }).then(function (r) {
          sec.busy = false;
          if (r && r.ok) { sec.codes = r.backup_codes; sec.step = 'codes'; sec.setup = null; secSay(''); }
          else secSay((r && r.error) || 'That code is not right.');
        }).catch(function () { sec.busy = false; secSay('Network error. Please try again.'); });
      } else if (a === 'cancel-setup') { sec.step = ''; sec.setup = null; secSay(''); }
      else if (a === 'done') { sec.step = ''; sec.codes = null; loadSec(function () { secSay('Two-factor authentication is on.', true); }); }
      else if (a === 'copy-key') { try { navigator.clipboard.writeText(sec.setup.secret); secSay('Key copied.', true); } catch (er) {} }
      else if (a === 'copy-codes') { try { navigator.clipboard.writeText(sec.codes.join('\n')); secSay('Codes copied.', true); } catch (er) {} }
      else if (a === 'download-codes') {
        var blob = new Blob(['Backup codes (each works once)\n\n' + sec.codes.join('\n') + '\n'], { type: 'text/plain' });
        var l = document.createElement('a'); l.href = URL.createObjectURL(blob); l.download = 'backup-codes.txt'; document.body.appendChild(l); l.click(); l.remove();
      }
      else if (a === 'ask') { sec.ask = b.getAttribute('data-what'); sec.codes = null; secSay(''); var i = ov.querySelector('.MemberUI-sec-code'); if (i) i.focus(); }
      else if (a === 'ask-cancel') { sec.ask = ''; secSay(''); }
      else if (a === 'ask-go') {
        var c2 = secCodeVal();
        if (!c2) { secSay('Enter a code.'); return true; }
        var what = sec.ask;
        secPost(what === 'disable' ? 'disable' : 'backup-regenerate', { code: c2 }).then(function (r) {
          if (!r || !r.ok) { secSay((r && r.error) || 'That code is not right.'); return; }
          sec.ask = '';
          if (what === 'regen') { sec.codes = r.backup_codes; loadSec(function () { secSay('New backup codes created. Old ones no longer work.', true); }); }
          else loadSec(function () { secSay('Two-factor authentication is off.', true); });
        }).catch(function () { secSay('Network error. Please try again.'); });
      } else if (a === 'forget') {
        secPost('forget-devices').then(function () { loadSec(function () { secSay('All remembered browsers will be asked for a code again.', true); }); });
      }
      return true;
    }

     
    function closeRowMenu() { if (rowMenu) rowMenu.classList.remove('show'); }
    function toggleRowMenu(btn) {
      if (rowMenu.classList.contains('show') && rowMenu.getAttribute('data-id') === btn.getAttribute('data-dots')) { closeRowMenu(); return; }
      var r = btn.getBoundingClientRect();
      rowMenu.setAttribute('data-id', btn.getAttribute('data-dots'));
      rowMenu.setAttribute('data-current', btn.getAttribute('data-current'));
      rowMenu.innerHTML = '<button type="button" class="out" data-do="logout"><i class="fa-solid fa-right-from-bracket"></i> Log out</button>';
      rowMenu.style.top = (r.bottom + 6) + 'px';
      rowMenu.style.left = Math.max(12, r.right - 160) + 'px';
      rowMenu.classList.add('show');
    }
    function rowLogout() {
      var id = rowMenu.getAttribute('data-id'), cur = rowMenu.getAttribute('data-current') === '1';
      closeRowMenu();
      if (cur) {
        if (DEMO) { state.rows.forEach(function (r) { if (r.current) r.status = 'ended'; }); render(); return; }
        endLocal();
        window.location.href = findLogoutHref();
      } else {
        revoke(id);
      }
    }

    

    function enhanceUserBlock() {
      var el = document.querySelector('.am-user-identity-block_login');
      if (!el || el.querySelector('.MemberUI-uname')) return;
      var first = el.firstChild;
      if (!first || first.nodeType !== 3) return;
      var name = document.createElement('span');
      name.className = 'MemberUI-uname';
      name.title = (first.textContent || '').trim();
      el.insertBefore(name, first);
      name.appendChild(first);
      var pro = document.createElement('span');
      pro.className = 'MemberUI-pro';
      pro.setAttribute('aria-label', 'Pro member');
      name.parentNode.insertBefore(pro, name.nextSibling);
    }

     
    function addToggle() {
      var block = document.querySelector('.am-user-identity-block-avatar');
      if (!block || block.querySelector('.MemberUI-ub-toggle')) return;
      var b = document.createElement('button');
      b.type = 'button';
      b.className = 'MemberUI-ub-toggle';
      b.setAttribute('aria-label', 'Account menu');
      b.setAttribute('aria-haspopup', 'menu');
      b.setAttribute('aria-expanded', 'false');
      b.innerHTML = '<i class="fa-solid fa-chevron-up"></i>';
      block.appendChild(b);
    }

     
    function init() {
      if (started) return;
      if (!document.body.classList.contains('am-logged-in')) return;
      started = true;
      try { enhanceUserBlock(); } catch (e) {}
      try { addToggle(); } catch (e) {}
      try { initPlan(); } catch (e) {}
      if (/[?&]setup2fa=1/.test(location.search) || /^\/member\/?$/.test(location.pathname)) {
        idle(function () {
          loadSec(function () {
            if (sec.data && sec.data.enabled && sec.data.required && !sec.data.on) { state.tab = 'security'; openModal(); }
          });
        });
      }
      idle(function () { touchLocal(); ping(); loadMe(); });

      menu = document.createElement('div');
      menu.className = 'MemberUI-menu';
      document.body.appendChild(menu);

      ov = document.createElement('div');
      ov.className = 'MemberUI-set-ov';
      document.body.appendChild(ov);
      var reopenTab = savedOpen();

      rowMenu = document.createElement('div');
      rowMenu.className = 'MemberUI-menu MemberUI-rowmenu';
      document.body.appendChild(rowMenu);
      rowMenu.addEventListener('click', function (e) {
        if (e.target.closest('[data-do="logout"]')) { rowLogout(); return; }
        var tb = e.target.closest('[data-do^="team-"]');
        if (tb) teamMenuAction(tb);
      });
      ov.addEventListener('scroll', closeRowMenu, true);
      if (reopenTab) {                     
        state.tab = /^(account|team|security)$/.test(reopenTab) ? reopenTab : 'account';
        try { openModal(); } catch (e) {}
      }

      document.addEventListener('click', function (e) {
        if (e.target.closest('a[href*="logout"]')) endLocal();
        var tog = e.target.closest('.MemberUI-ub-toggle');
        if (tog) {
          e.preventDefault();
          e.stopPropagation();
          if (menu.classList.contains('show')) closeMenu();
          else openMenu(tog.closest('.am-user-identity-block-avatar') || tog);
          return;
        }
        if (e.target.closest('.MemberUI-menu [data-act="settings"]')) { closeMenu(); openModal(); return; }
        if (!e.target.closest('.MemberUI-menu')) closeMenu();
      });

      ov.addEventListener('click', function (e) {
        if (e.target.closest('.MemberUI-set-close')) { closeModal(); return; }
        if (e.target === ov) { closeRowMenu(); nudgeClose(); return; }   
        var tabBtn = e.target.closest('[data-tab]');
        if (tabBtn) {
          state.tab = tabBtn.getAttribute('data-tab');
          var navs = ov.querySelectorAll('[data-tab]');
          for (var ni = 0; ni < navs.length; ni++) navs[ni].classList.toggle('active', navs[ni] === tabBtn);
          team.msg = ''; team.editing = 0; sec.msg = ''; sec.ask = ''; closeRowMenu();
          render();
          return;
        }
        var tdots = e.target.closest('[data-team-dots]');
        if (tdots) { toggleTeamMenu(tdots); return; }
        if (teamClick(e)) return;
        if (secClick(e)) return;
        var dots = e.target.closest('[data-dots]');
        if (dots) { toggleRowMenu(dots); return; }
        closeRowMenu();
        var out = e.target.closest('[data-revoke]');
        if (out) { revoke(out.getAttribute('data-revoke')); return; }
        if (e.target.closest('.MemberUI-sess-all')) revokeOthers();
      });

      ov.addEventListener('keydown', function (e) {
        if (e.key === 'Enter' && e.target.classList && e.target.classList.contains('MemberUI-inv-email')) {
          var ib = ov.querySelector('[data-team="invite"]'); if (ib) ib.click();
        }
        if (e.key === 'Enter' && e.target.classList && e.target.classList.contains('MemberUI-sec-code')) {
          var sb = ov.querySelector('[data-sec="confirm"]') || ov.querySelector('[data-sec="ask-go"]'); if (sb) sb.click();
        }
      });

      document.addEventListener('keydown', function (e) {
        
        if (e.key === 'Escape') { if (cfEl) { closeConfirm(); return; } closeRowMenu(); closeMenu(); }
      });
    }

    return { init: init, guest: guest };
  })();

  

  var ToolSearch = (function () {
    var KEY = 'memberui_tools_v1', TTL = 30 * 60 * 1000;
    var tools = null, loading = false, box, input, list, wrap, sel = -1, shown = [];

    function who() {
      var el = document.querySelector('.am-user-identity-block_login .MemberUI-uname') || document.querySelector('.am-user-identity-block_login');
      return el ? (el.textContent || '').trim() : '';
    }
    function clean(s) { return String(s || '').replace(/\s+/g, ' ').trim(); }

    function readList(root) {
      var out = [], seen = {};
      var lis = root.querySelectorAll('.am-list-resources > li');
      for (var i = 0; i < lis.length; i++) {
        var li = lis[i], a = li.querySelector('a[href]');
        if (!a) continue;
        var tEl = li.querySelector('[class*="title"],[class*="name"],h3,h4,strong');
        var img = a.querySelector('img');
        var title = clean((tEl && tEl.textContent) || a.getAttribute('title') || a.textContent || (img && img.getAttribute('alt')) || li.textContent);
        if (!title) continue;
        var dEl = li.querySelector('[class*="desc"]');
        var href = a.getAttribute('href');
        var key = title + '|' + href;
        if (seen[key]) continue;
        seen[key] = 1;
        out.push({ i: i, title: title.slice(0, 120), desc: clean(dEl && dEl.textContent).slice(0, 160),
          href: href, target: a.getAttribute('target') || '' });
      }
      return out;
    }
    function save(items) {
      try { localStorage.setItem(KEY, JSON.stringify({ u: who(), t: Date.now(), items: items })); } catch (e) {}
    }
    function cached() {
      try {
        var c = JSON.parse(localStorage.getItem(KEY) || 'null');
        if (c && c.u === who() && Date.now() - c.t < TTL) return c.items;
      } catch (e) {}
      return null;
    }
    function load(cb) {
      if (document.querySelector('.am-list-resources')) {          
        tools = readList(document); save(tools); cb && cb(); return;
      }
      var c = cached();
      if (c) { tools = c; cb && cb(); return; }
      if (loading) return;
      loading = true;
      fetch('/member', { credentials: 'same-origin' })
        .then(function (r) { return r.ok ? r.text() : ''; })
        .then(function (html) {
          var doc = new DOMParser().parseFromString(html || '', 'text/html');
          tools = readList(doc); save(tools);
        })
        .catch(function () { tools = tools || []; })
        .then(function () { loading = false; cb && cb(); });
    }

    function score(t, q) {
      var title = t.title.toLowerCase(), all = (t.title + ' ' + t.desc).toLowerCase();
      if (!q) return 1;
      var words = q.split(/\s+/), s = 0;
      for (var i = 0; i < words.length; i++) {
        var w = words[i];
        if (!w) continue;
        var p = all.indexOf(w);
        if (p < 0) return 0;
        s += title.indexOf(w) === 0 ? 30 : title.indexOf(' ' + w) > -1 ? 20 : title.indexOf(w) > -1 ? 12 : 4;
      }
      return s;
    }
    function mark(text, q) {
      var safe = esc(text);
      if (!q) return safe;
      q.split(/\s+/).forEach(function (w) {
        if (!w) return;
        var re = new RegExp('(' + w.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + ')', 'ig');
        safe = safe.replace(re, '<mark>$1</mark>');
      });
      return safe;
    }

    function render() {
      var q = clean(input.value).toLowerCase();
      if (!q) { list.innerHTML = ''; shown = []; close(); return; }        
      if (tools === null) { list.innerHTML = '<div class="MemberUI-ts-empty"><i class="fa-solid fa-spinner fa-spin"></i> Loading your tools…</div>'; open(); return; }
      if (!tools.length) {
        list.innerHTML = '<div class="MemberUI-ts-empty">You have no active tools right now.<a href="/signup">Get access <i class="fa-solid fa-arrow-right"></i></a></div>';
        open(); return;
      }
      shown = tools.map(function (t) { return { t: t, s: score(t, q) }; })
        .filter(function (x) { return x.s > 0; })
        .sort(function (a, b) { return b.s - a.s || a.t.title.localeCompare(b.t.title); })
        .slice(0, 8).map(function (x) { return x.t; });
      sel = shown.length ? 0 : -1;
      if (!shown.length) {
        list.innerHTML = '<div class="MemberUI-ts-empty">No tool matches “' + esc(input.value.trim()) + '”</div>';
      } else {
        list.innerHTML = '<div class="MemberUI-ts-head">Results<span>' + shown.length + (shown.length === 1 ? ' tool' : ' tools') + '</span></div>' +
          shown.map(function (t, i) {
            return '<button type="button" class="MemberUI-ts-item' + (i === sel ? ' on' : '') + '" data-ts="' + i + '" role="option">' +
              '<span class="MemberUI-ts-ic"><i class="fa-solid fa-toolbox"></i></span>' +
              '<span class="MemberUI-ts-tx"><strong>' + mark(t.title, q) + '</strong>' + (t.desc ? '<small>' + mark(t.desc, q) + '</small>' : '') + '</span>' +
              '<span class="MemberUI-ts-go">Open <i class="fa-solid fa-arrow-right"></i></span></button>';
          }).join('') +
          '<div class="MemberUI-ts-foot"><span><kbd>↑</kbd><kbd>↓</kbd> to move</span><span><kbd>Enter</kbd> to open</span></div>';
      }
      open();
    }
    function open() { wrap.classList.add('open'); input.setAttribute('aria-expanded', 'true'); }
    function close() { wrap.classList.remove('open'); input.setAttribute('aria-expanded', 'false'); sel = -1; }
    function move(d) {
      if (!shown.length) return;
      sel = (sel + d + shown.length) % shown.length;
      var items = list.querySelectorAll('.MemberUI-ts-item');
      for (var i = 0; i < items.length; i++) items[i].classList.toggle('on', i === sel);
      if (items[sel]) items[sel].scrollIntoView({ block: 'nearest' });
    }

     
    function run(t) {
      close(); input.blur();
      var live = null;
      var links = document.querySelectorAll('.am-list-resources > li a[href]');
      for (var i = 0; i < links.length; i++) {
        if (links[i].getAttribute('href') === t.href) { live = links[i]; break; }
      }
      if (live) { live.click(); return; }                         
      if (t.target && t.target !== '_self') window.open(t.href, t.target, 'noopener');
      else location.href = t.href;
    }

    function init(topbar) {
      if (!document.body.classList.contains('am-logged-in') || topbar.querySelector('.MemberUI-ts')) return;
      wrap = document.createElement('div');
      wrap.className = 'MemberUI-ts';
      wrap.innerHTML =
        '<button type="button" class="MemberUI-ts-mobile" aria-label="Search tools"><i class="fa-solid fa-magnifying-glass"></i></button>' +
        '<div class="MemberUI-ts-box"><i class="fa-solid fa-magnifying-glass MemberUI-ts-lens"></i>' +
        '<input type="search" class="MemberUI-ts-input" placeholder="Search your tools…" autocomplete="off" spellcheck="false" ' +
          'role="combobox" aria-expanded="false" aria-autocomplete="list" aria-label="Search your tools">' +
        '<div class="MemberUI-ts-list" role="listbox"></div>';
      var actions = topbar.querySelector('.MemberUI-topbar-actions');
      topbar.insertBefore(wrap, actions);
      box = wrap.querySelector('.MemberUI-ts-box'); input = wrap.querySelector('.MemberUI-ts-input'); list = wrap.querySelector('.MemberUI-ts-list');

      input.addEventListener('focus', function () { if (tools === null) load(render); if (input.value.trim()) render(); });
      input.addEventListener('input', render);
      input.addEventListener('keydown', function (e) {
        if (e.key === 'ArrowDown') { e.preventDefault(); move(1); }
        else if (e.key === 'ArrowUp') { e.preventDefault(); move(-1); }
        else if (e.key === 'Enter') { e.preventDefault(); if (sel > -1 && shown[sel]) run(shown[sel]); }
        else if (e.key === 'Escape') { close(); input.blur(); wrap.classList.remove('expanded'); }
      });
      list.addEventListener('mousedown', function (e) { e.preventDefault(); });   
      list.addEventListener('click', function (e) {
        var b = e.target.closest('[data-ts]');
        if (b) run(shown[+b.getAttribute('data-ts')]);
      });
      list.addEventListener('mousemove', function (e) {
        var b = e.target.closest('[data-ts]');
        if (!b) return;
        var i = +b.getAttribute('data-ts');
        if (i !== sel) { sel = i; move(0); }
      });
      wrap.querySelector('.MemberUI-ts-mobile').addEventListener('click', function () {
        wrap.classList.add('expanded'); setTimeout(function () { input.focus(); }, 30);
      });
      document.addEventListener('click', function (e) {
        if (!wrap.contains(e.target)) { close(); wrap.classList.remove('expanded'); }
      });
      document.addEventListener('keydown', function (e) {
        var tag = (e.target.tagName || '').toLowerCase();
        var typing = tag === 'input' || tag === 'textarea' || e.target.isContentEditable;
        if ((e.ctrlKey || e.metaKey) && !e.shiftKey && !e.altKey && (e.key === 'f' || e.key === 'F')) { e.preventDefault(); wrap.classList.add('expanded'); input.focus(); input.select(); }
        else if (e.key === '/' && !typing) { e.preventDefault(); wrap.classList.add('expanded'); input.focus(); }
      });
      
      setTimeout(function () { load(null); }, 1200);
    }
    return { init: init };
  })();

  

  var TeamInvite = (function () {
    var LATER = 'memberui_inv_later';
    function ck(n) { var m = document.cookie.match(new RegExp('(?:^|; )' + n + '=([^;]*)')); return m ? decodeURIComponent(m[1]) : ''; }
    function info() {
      var raw = ck('memberui_inv');
      if (!raw) return null;
      try { return JSON.parse(decodeURIComponent(escape(atob(raw.replace(/-/g, '+').replace(/_/g, '/'))))); } catch (e) { return null; }
    }
    function post(path, body) {
      return fetch('/member-team/' + path, { method: 'POST', credentials: 'same-origin',
        headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(body || {}) })
        .then(function (r) { return r.json(); });
    }

     
    function guest() {
      var i = info();
      if (!i || !i.e) return;
      var form = document.querySelector('form input[type="password"]');
      form = form && form.form;
      if (!form || document.getElementById('MemberUI-inv-note')) return;
      var isSignup = /signup/i.test(location.pathname) || !!form.querySelector('input[name="email"]') && !form.querySelector('input[name="amember_login"]');
      var note = document.createElement('div');
      note.id = 'MemberUI-inv-note';
      note.setAttribute('role', 'status');
      note.style.cssText = 'display:flex;gap:12px;align-items:flex-start;margin:0 0 18px;padding:14px 16px;border-radius:14px;border:1px solid var(--MemberUI-line,#e5e9f0);background:var(--MemberUI-bg-3,#f4f7fb);font:500 13.5px/1.55 Inter,sans-serif;color:var(--MemberUI-text-2,#4a5a6e);text-align:left';
      note.innerHTML = '<i class="fa-solid fa-users" style="margin-top:3px;color:var(--MemberUI-brand-1,#FF9900)"></i><div><b style="color:var(--MemberUI-text,#0f172a)">' + esc(i.o || 'A customer') +
        '</b> invited you to their team.<br>' + (isSignup ? 'Create your account with <b>' + esc(i.e) + '</b>' : 'Sign in with <b>' + esc(i.e) + '</b>') +
        ', then you can accept the invitation.</div>';
      form.parentNode.insertBefore(note, form);
      var f = form.querySelector(isSignup ? 'input[name="email"]' : 'input[name="amember_login"]') || form.querySelector('input[type="email"]');
      if (f && !f.value) f.value = i.e;
    }

     
    var pop = null;
    function close() { if (pop && pop.parentNode) pop.parentNode.removeChild(pop); pop = null; document.removeEventListener('keydown', onKey, true); }
    function onKey(e) { if (e.key === 'Escape' && pop) { e.stopPropagation(); later(); } }
    function later() { try { sessionStorage.setItem(LATER, '1'); } catch (e) {} close(); }

    function show(inv) {
      if (pop) return;
      pop = document.createElement('div');
      pop.className = 'MemberUI-cf';
      pop.id = 'MemberUI-inv-pop';
      var chips = (inv.products || []).map(function (t) { return '<span class="MemberUI-chip">' + esc(t) + '</span>'; }).join('');
      pop.innerHTML =
        '<div class="MemberUI-cf-box" role="dialog" aria-modal="true" aria-labelledby="MemberUI-inv-t" aria-describedby="MemberUI-inv-d">' +
          '<div class="MemberUI-cf-ico"><i class="fa-solid fa-users"></i></div>' +
          '<h3 id="MemberUI-inv-t">Team invitation</h3>' +
          '<p id="MemberUI-inv-d" style="margin-bottom:12px"><b>' + esc(inv.owner) + '</b>' + (inv.owner_email ? ' (' + esc(inv.owner_email) + ')' : '') +
            ' invited you to join their team. You will get access to:</p>' +
          '<div class="MemberUI-chips" style="display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin:0 0 20px">' + (chips || '<span class="MemberUI-chip">Shared tools</span>') + '</div>' +
          '<div class="MemberUI-inv-msg" aria-live="polite" style="min-height:18px;margin:-8px 0 10px;font:600 12.5px Inter,sans-serif;color:#dc2626"></div>' +
          '<div class="MemberUI-cf-actions">' +
            '<button type="button" class="MemberUI-cf-btn MemberUI-cf-cancel" data-inv="decline">Decline</button>' +
            '<button type="button" class="MemberUI-cf-btn MemberUI-cf-ok" data-inv="accept">Accept invitation</button>' +
          '</div>' +
          '<button type="button" data-inv="later" style="margin-top:12px;border:0;background:none;font:600 12.5px Inter,sans-serif;color:var(--MemberUI-soft,#94a3b8);cursor:pointer">Decide later</button>' +
        '</div>';
      document.body.appendChild(pop);
      document.addEventListener('keydown', onKey, true);
      var box = pop.querySelector('.MemberUI-cf-box'), msg = pop.querySelector('.MemberUI-inv-msg');
      var confirmDecline = false;
      function busy(on) { var b = pop.querySelectorAll('button'); for (var i = 0; i < b.length; i++) b[i].disabled = on; }
      function answer(yes) {
        busy(true); msg.textContent = '';
        post('respond', { id: inv.id, accept: yes }).then(function (d) {
          if (!d || !d.ok) { busy(false); msg.textContent = (d && d.error) || 'Something went wrong. Please try again.'; return; }
          if (yes) {
            box.querySelector('h3').textContent = 'Welcome to the team!';
            box.querySelector('#MemberUI-inv-d').textContent = 'Your new tools are ready. Refreshing access…';
            pop.querySelector('.MemberUI-cf-actions').style.display = 'none';
            pop.querySelector('[data-inv="later"]').style.display = 'none';
            setTimeout(function () { location.reload(); }, 350);
          } else {
            close();
          }
        }).catch(function () { busy(false); msg.textContent = 'Network error. Please try again.'; });
      }
      pop.addEventListener('click', function (e) {
        if (e.target === pop) { later(); return; }
        var b = e.target.closest('[data-inv]');
        if (!b) return;
        var a = b.getAttribute('data-inv');
        if (a === 'accept') answer(true);
        else if (a === 'later') later();
        else if (a === 'decline') {
          if (!confirmDecline) {                       
            confirmDecline = true;
            msg.style.color = 'var(--MemberUI-text-2,#4a5a6e)';
            msg.textContent = 'Decline? ' + (inv.owner || 'The owner') + ' would need to invite you again.';
            b.textContent = 'Yes, decline';
            return;
          }
          msg.style.color = '#dc2626';
          answer(false);
        }
      });
      setTimeout(function () { var ok = pop && pop.querySelector('[data-inv="accept"]'); if (ok) ok.focus(); }, 40);
    }

    function check() {
      if (!info()) return;
      try { if (sessionStorage.getItem(LATER) === '1') return; } catch (e) {}
      fetch('/member-team/pending', { credentials: 'same-origin', headers: { 'X-Requested-With': 'XMLHttpRequest' } })
        .then(function (r) { var ct = r.headers.get('content-type') || ''; if (!r.ok || ct.indexOf('json') === -1) throw 0; return r.json(); })
        .then(function (d) { if (d && d.invite) show(d.invite); })
        .catch(function () {});
    }
    return { guest: guest, check: check };
  })();

  function run() {
    try { build(); }
    catch (err) { if (window.console && console.warn) console.warn('[MemberUIPremium v9.9-fixed]', err); }
    try { DeviceKit.init(); }
    catch (err) { if (window.console && console.warn) console.warn('[MemberUIDeviceKit]', err); }
    try { if (!document.body.classList.contains('am-logged-in')) DeviceKit.guest(); } catch (err) {}
    try { if (document.body.classList.contains('am-logged-in')) setTimeout(TeamInvite.check, 400); else TeamInvite.guest(); } catch (err) {}
    
    var fpDelays = [300, 900];
    for (var i = 0; i < fpDelays.length; i++) {
      (function (d) { setTimeout(wireForgotPassword, d); })(fpDelays[i]);
    }
  }

  if (!bootstrapHead()) {
    __headMo = new MutationObserver(function () { if (bootstrapHead()) __headMo.disconnect(); });
    __headMo.observe(document.documentElement, { childList: true, subtree: true });
  }

  function scheduleRun() {
    if (document.readyState === 'interactive' || document.readyState === 'complete') { run(); return; }
    var done = false;
    function fire() {
      if (done) return;
      done = true;
      document.removeEventListener('readystatechange', onRS);
      document.removeEventListener('DOMContentLoaded', fire);
      run();
    }
    function onRS() { if (document.readyState === 'interactive' || document.readyState === 'complete') fire(); }
    document.addEventListener('readystatechange', onRS);
    document.addEventListener('DOMContentLoaded', fire);
  }
  scheduleRun();

  window.addEventListener('pageshow', function (e) {
    if (e.persisted) { try { scheduleSubRecheck(); } catch (err) {} }
  });

})();
</script>;
--am_header_path: 6acae3113baa7.png;
--am_link_color_a99: #3f7fb099;
--am_menu_dashboard_width: auto;

}
/* end: variables from theme configuration */

body, html {
    font-size: var(--am_font_size_px);
    background: none;
}

html {
    background: var(--am_bg);
    background-size: var(--am_bg_size);
    background-attachment: var(--am_bg_attachment);
}

body {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

.am-layout {
    flex: 1;
}

.am-footer {
    height: auto;
    background: var(--am_footer_bg);
}

.am-common {
    font-family: var(--am_font_family), san-serif;
    color: var(--am_text_color);
}

.am-common legend {
    color: var(--am_text_color);
}

.am-common a {
    color: var(--am_link_color);
    text-decoration-color: var(--am_link_color_a99);
}

.ajax-link, .local-link, .local {
    text-decoration-color: var(--am_link_color_a99);
}

.am-layout {
    min-height: initial;
    margin: 0;
    background: none;
}

.am-header {
    background: var(--am_header_bg);
    background-size: var(--am_header_bg_size);
}

.am-header .am-header-content-wrapper {
    border: none;
    background: none;
}

.am-header-line {
    border:none;
    background: none;
}

.am-footer .am-footer-content-wrapper {
    background: none;
    color: inherit;
    height: auto;
}

.am-footer-content-content {
    padding: 1em 0;
}

.am-footer-text {
    text-align: center;
}

.am-footer .am-footer-content .am-footer-sm a {
    color: var(--am_sm_color);
    font-size: var(--am_sm_size_px);
}

.am-body {
    background: none;
}

.am-body .am-body-content-wrapper {
    border: none;
    padding-bottom: 1em;
    margin-bottom: 50px;
    box-shadow: var(--am_content_shadow);
    border-radius: var(--am_border_radius_px);
    background: var(--am_page_bg);
}

.am-body-content {
    min-height: 300px;
}

.am-header-content-wrapper {
    padding: 0;
}

.am-header-content-content {
    display: none;
}

.am-header .am-header-content .am-header-content-logo {
    float: none;
    margin: 0;
}

.am-header .am-header-content .am-header-logo-wrapper {
    text-align: var(--am_logo_align);
}

.am-main {
    max-width: var(--am_max_width_px);
}

.am-header-content img {
    width: var(--am_logo_width);
}

.am-footer-actions {
    display:none;
}

.am-footer .am-footer-content-wrapper {
    color: var(--am_footer_text_color);
    font-size:.8rem;
}

.am-footer a,
.am-footer a:hover,
.am-footer a:visited,
.am-footer a:active {
    color: var(--am_footer_link_color)
}

.am-user-identity-block {
    float: var(--am_identity_align);
}

.am-page-login .am-header {
    display: var(--am_login_header_display);
}

.am-page-login .am-auth-form legend {
    background: var(--am_login_legend_bg);
    padding-top: var(--am_login_legend_padding_top);
}

.am-page-login .am-auth-form div.am-row {
    background: var(--am_login_form_bg_color);
}

.am-page-login .am-body-content-wrapper {
    background: var(--am_login_bg_color);
    box-shadow: var(--am_login_shadow);
}

.am-auth-form form {
    border: none;
    overflow: hidden;
    box-shadow: 0px 0px 5px #00000022;
}

.am-auth-form form legend {
    border: none;
    background: #f9f9f9;
    padding: 1em 1em 1.5em;
}

.am-auth-form div.am-row div.element,
.am-auth-form div.am-row div.am-element-title {
    padding-right: 2em;
    padding-left: 2em;
}

@media all and (min-width:500px) {

    .am-auth-form div.am-row div.am-element-title {
        padding-right: .5em;
    }
    .am-auth-form div.am-row div.am-element {
        padding-left: .5em;
    }
}

.am-popup {
    border-color: var(--am_color_d);
}

.am-popup .am-popup-header {
    background: var(--am_color);
    color: var(--am_color_c);
}

.am-popup .am-popup-close-icon:after {
    color: var(--am_color_c);
}

.am-fb-login-button-wrapper.am-fb-login-form-after:before,
.am-fb-login-button-wrapper.am-fb-login-form-before:after {
    background: var(--am_color);
}

.am-popup .am-fb-login-button-wrapper.am-fb-login-form-after::before,
.am-popup .am-fb-login-button-wrapper.am-fb-login-form-before::after {
    background: white;
}

.am-signup-link {
    color: var(--am_color_c);
}

.am-login-layout-with-sidebar {
    max-width: 800px;
    margin: 2em auto 0;
}

.am-login-layout-with-sidebar .am-login-form-wrapper,
.am-login-layout-with-sidebar .am-sendpass-form-wrapper {
    margin-top: 0;
}

.am-signup-link {
    max-width: 450px;
    margin: 1em auto 0;
}

@media all and (min-width: 800px) {
    .am-login-layout-with-sidebar .am-login-layout-with-sidebar_form {
        float: left;
        width: 65%;
    }
    .am-login-layout-with-sidebar .am-login-layout-with-sidebar_sidebar {
        display: block;
        width: 35%;
        float: right;
        padding-left: 20px;
        box-sizing: border-box;
    }
    .am-login-layout-with-sidebar .am-auth-form {
        margin: 0;
    }
    .am-login-layout-with-sidebar .am-signup-link {
        margin: 1em 0 0;
    }
}
.am-login-layout-with-sidebar .am-login-layout-with-sidebar_sidebar {
    border-radius: 3px;
    padding: 1em 2em;
    max-width: 450px;
    box-sizing: border-box;
    box-shadow: 0 0 5px #00000022;
    background: #f9f9f9;
    color: #555;
}
.am-login-layout-with-sidebar_clear {
    clear: both;
}

@media all and (max-width: 799px) {
    .am-login-layout-with-sidebar .am-login-layout-with-sidebar_sidebar {
        margin: 2em auto 0;
    }
}

ul.am-tabs li.active,
ul.am-tabs li.normal:hover {
    background: var(--am_menu_color);
}

ul.am-tabs li.active > a,
ul.am-tabs li.normal > a:hover {
    border-color: var(--am_menu_color);
}

.am-page-login-no-label .am-auth-form,
.am-page-login-no-label .am-signup-link,
.am-page-login-no-label .am-fb-login-button-wrapper {
    max-width:350px;
}

.am-page-login-no-label .am-auth-form div.am-row div.am-element-title {
    display: none;
}

.am-page-login-no-label .am-auth-form div.am-row div.am-element {
    margin:0;
    padding:.6em 2em;
}

.am-page-login-no-label .am-auth-form div.am-row div.am-element input[type=submit],
.am-page-login-no-label .am-auth-form div.am-row div.am-element input[type=submit]:active,
.am-page-login-no-label .am-auth-form div.am-row div.am-element input[type=submit]:hover,
.am-page-login-no-label .am-auth-form div.am-row div.am-element input[type=submit]:disabled {
    width: 100%;
}

.am-page-login-no-label .am-auth-form .am-form-login-switch-wrapper {
    text-align: center;
    display: block;
    padding: 1.2em 2em .6em;
}

.am-page-login-no-label .am-auth-form .am-form-login-switch-wrapper  .am-form-login-switch {
    margin:0;
}

@media all and (max-width: 799px) {
    .am-page-login-no-label .am-login-layout-with-sidebar .am-login-layout-with-sidebar_sidebar {
        max-width:350px;
        margin: 2em auto 0;
    }
}

.am-body-content input,
.am-body-content textarea,
.am-body-content select,
.am-body-content button,
.am-popup input,
.am-popup textarea,
.am-popup select,
.am-popup button {
    font-family: var(--am_font_family), san-serif;
}

.am-body-content a.button,
.am-body-content button,
.am-body-content input[type="button"],
.am-body-content input[type="submit"],
.am-popup a.button,
.am-popup button,
.am-popup input[type="button"],
.am-popup input[type="submit"],
.am-body-content a.button:hover,
.am-body-content button:hover,
.am-body-content input[type="button"]:hover,
.am-body-content input[type="submit"]:hover,
.am-popup a.button:hover,
.am-popup button:hover,
.am-popup input[type="button"]:hover,
.am-popup input[type="submit"]:hover {
    color: white;
    background: var(--am_btn_color);
    border-color: var(--am_btn_color);
}

.am-body-content input[type=submit]:disabled,
.am-body-content input[type=submit]:disabled:hover,
.am-body-content input[type=button]:disabled,
.am-body-content input[type=button]:disabled:hover,
.am-body-content button:disabled,
.am-body-content button:disabled:hover,
.am-popup input[type=submit]:disabled,
.am-popup input[type=submit]:disabled:hover,
.am-popup input[type=button]:disabled,
.am-popup input[type=button]:disabled:hover
.am-popup button:disabled,
.am-popup button:disabled:hover {
    background: #f1f1f1;
    color: #ccc;
    border-color: #ced4da;
}

.input-file .input-file-button,
.input-file.hover .input-file-button {
    color: white;
    background: var(--am_btn_color);
    border: none;
    text-shadow: none;
}
.input-file.hover {
    border-color: var(--am_btn_color);
}

.am-header-menu-wrapper a,
ul.am-header-menu-narrow a,
ul.am-header-menu a {
    color: var(--am_header_menu_link_color);
}

ul.am-header-menu ul a {
    color: var(--am_header_menu_link2_color);
}

ul.am-header-menu-narrow ul a {
    color: var(--am_header_menu_link_color);
}

ul.am-header-menu > li > a::after {
    background: var(--am_header_menu_link_color);
    opacity: .4;
}

ul.am-header-menu li ul {
    background: var(--am_header_menu_bg_color);
}

.am-grid-wrap .filter-button input[type=submit] {
    border-color: #ced4da;
}
