{"id":3871,"date":"2025-09-09T05:34:23","date_gmt":"2025-09-09T05:34:23","guid":{"rendered":"https:\/\/godsgalaxygame.com\/GGG\/?page_id=3871"},"modified":"2026-09-09T16:31:01","modified_gmt":"2026-09-09T16:31:01","slug":"astro","status":"publish","type":"page","link":"https:\/\/godsgalaxygame.com\/GGG\/astro\/","title":{"rendered":"Astro"},"content":{"rendered":"\r\n<!-- =============== ASTRO \u2014 FULL SCREEN STARFIELD + DESKTOP SHIFT UP + PHONE CENTERED (NO PANEL) =============== -->\r\n<div id=\"astroRoot\">\r\n\r\n  <!-- FULLSCREEN STARFIELD (behind everything) -->\r\n  <canvas id=\"starfield\" aria-hidden=\"true\"><\/canvas>\r\n\r\n  <!-- CONTENT -->\r\n  <section id=\"zodiacSelector\">\r\n    <h1 id=\"astroTitle\">ASTRO TRAVEL RECOMMENDATIONS<\/h1>\r\n\r\n    <div class=\"ring\" id=\"astroRing\">\r\n      <div class=\"signs\">\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Aries')\">      <div class=\"glyphBox\">\u2648\ufe0e<\/div><div class=\"label\">Aries<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Taurus')\">     <div class=\"glyphBox\">\u2649\ufe0e<\/div><div class=\"label\">Taurus<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Gemini')\">     <div class=\"glyphBox\">\u264a\ufe0e<\/div><div class=\"label\">Gemini<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Cancer')\">     <div class=\"glyphBox\">\u264b\ufe0e<\/div><div class=\"label\">Cancer<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Leo')\">        <div class=\"glyphBox\">\u264c\ufe0e<\/div><div class=\"label\">Leo<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Virgo')\">      <div class=\"glyphBox\">\u264d\ufe0e<\/div><div class=\"label\">Virgo<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Libra')\">      <div class=\"glyphBox\">\u264e\ufe0e<\/div><div class=\"label\">Libra<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Scorpio')\">    <div class=\"glyphBox\">\u264f\ufe0e<\/div><div class=\"label\">Scorpio<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Sagittarius')\"><div class=\"glyphBox\">\u2650\ufe0e<\/div><div class=\"label\">Sagittarius<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Capricorn')\">  <div class=\"glyphBox\">\u2651\ufe0e<\/div><div class=\"label\">Capricorn<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Aquarius')\">   <div class=\"glyphBox\">\u2652\ufe0e<\/div><div class=\"label\">Aquarius<\/div><\/div><\/div>\r\n        <div class=\"wrap\"><div class=\"card\" onclick=\"goToSign('Pisces')\">     <div class=\"glyphBox\">\u2653\ufe0e<\/div><div class=\"label\">Pisces<\/div><\/div><\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <style>\r\n    :root{\r\n      \/* KNOBS (unchanged) *\/\r\n      --desktop-shift: -160px;    \/* NEGATIVE pulls whole block UP on desktop *\/\r\n      --ring-max: 900px;          \/* big ring cap *\/\r\n      --mobile-top: 56px;         \/* phone top padding *\/\r\n      --phone-ring: 96vmin;       \/* phone ring size *\/\r\n    }\r\n\r\n    html,body{height:100%; margin:0; background:#000;}\r\n    \/* make the page container transparent so no panel can appear *\/\r\n    #astroRoot{position:relative; min-height:100dvh; background:transparent;}\r\n\r\n    \/* STARFIELD *\/\r\n    #starfield{\r\n      position:fixed; inset:0; width:100%; height:100%;\r\n      display:block; z-index:0; pointer-events:none;\r\n    }\r\n\r\n    \/* CONTENT LAYOUT *\/\r\n    #zodiacSelector{\r\n      position:relative; z-index:1;\r\n      min-height:100dvh; width:100%;\r\n      display:flex; flex-direction:column; align-items:center; justify-content:flex-start;\r\n      padding-top: clamp(10px, 3vmin, 24px); \/* phones\/tablets default *\/\r\n    }\r\n    \/* Desktop: remove padding and shift UP *\/\r\n    @media (min-width:1024px){\r\n      #zodiacSelector{\r\n        padding-top: 0;\r\n        transform: translateY(var(--desktop-shift));\r\n      }\r\n      \/* also nudge the ring itself UP 10px *\/\r\n      #astroRing{ transform: translateY(-10px); }\r\n    }\r\n    \/* Phone: nudge the ring UP 10px too *\/\r\n    @media (max-width:768px){\r\n      #astroRing{ transform: translateY(-10px); }\r\n    }\r\n\r\n    \/* Title (unchanged) *\/\r\n    #astroTitle{\r\n      margin:0 0 clamp(10px, 2.5vmin, 22px) 0;\r\n      text-align:center;\r\n      text-transform:uppercase; letter-spacing:.12em;\r\n      font: 900 clamp(22px, 5vw, 52px)\/1.1 system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;\r\n      color:#eaffff;\r\n      text-shadow:0 0 18px rgba(0,255,255,.85), 0 0 36px rgba(0,255,255,.35);\r\n      filter: drop-shadow(0 0 22px rgba(0,255,255,.45));\r\n    }\r\n\r\n    \/* Ring (JS sets --size; phone overrides below) *\/\r\n    #zodiacSelector .ring{\r\n      --size: 680px; \/* fallback *\/\r\n      --card-w: clamp(88px, calc(var(--size)*0.18), 136px);\r\n      --card-h: clamp(68px, calc(var(--size)*0.135), 100px);\r\n      --gap:    clamp(8px,  calc(var(--size)*0.025), 18px);\r\n      --R:      calc(var(--size)\/2 - max(var(--card-w), var(--card-h))\/2 - var(--gap));\r\n      position:relative; width:var(--size); height:var(--size); margin:0 auto;\r\n\r\n      \/* ensure no background around the ring itself *\/\r\n      background:transparent;\r\n      filter:none;\r\n      overflow: visible;\r\n    }\r\n    #zodiacSelector .ring::before{ content:none; }\r\n,000\r\n    \/* Cards (unchanged) *\/\r\n    #zodiacSelector .card{\r\n      width:var(--card-w); height:var(--card-h);\r\n      border-radius:20px; border:2px solid rgba(0,255,255,.95);\r\n      box-shadow:0 0 28px rgba(0,255,255,.75), inset 0 0 18px rgba(0,255,255,.28);\r\n      background:rgba(0,0,0,.35); backdrop-filter: blur(4px);\r\n      display:flex; flex-direction:column; align-items:center; justify-content:center;\r\n      color:#e4e9ff; text-shadow:0 0 12px #00eaff;\r\n      transition:transform .18s ease, box-shadow .18s ease; cursor:pointer;\r\n    }\r\n    #zodiacSelector .card:hover{ transform:scale(1.07); box-shadow:0 0 36px rgba(0,255,255,.95), inset 0 0 22px rgba(0,255,255,.34); }\r\n    #zodiacSelector .glyphBox{\r\n      width: clamp(26px, calc(var(--size)*0.05), 46px);\r\n      height: clamp(26px, calc(var(--size)*0.05), 46px);\r\n      border-radius:10px; display:grid; place-items:center;\r\n      background:#8c5cff; box-shadow:0 0 18px rgba(140,92,255,.95);\r\n      margin-bottom:8px; font-size: clamp(18px, calc(var(--size)*0.045), 28px); color:#fff;\r\n    }\r\n    #zodiacSelector .label{\r\n      font-size: clamp(12px, calc(var(--size)*0.032), 18px);\r\n      font-weight:800; letter-spacing:.35px;\r\n    }\r\n\r\n    \/* 12 positions (unchanged) *\/\r\n    #zodiacSelector .signs .wrap{ position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); }\r\n    #zodiacSelector .signs .wrap:nth-child(1)  { transform:translate(-50%,-50%) rotate(0deg)   translate(var(--R)) rotate(-0deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(2)  { transform:translate(-50%,-50%) rotate(30deg)  translate(var(--R)) rotate(-30deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(3)  { transform:translate(-50%,-50%) rotate(60deg)  translate(var(--R)) rotate(-60deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(4)  { transform:translate(-50%,-50%) rotate(90deg)  translate(var(--R)) rotate(-90deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(5)  { transform:translate(-50%,-50%) rotate(120deg) translate(var(--R)) rotate(-120deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(6)  { transform:translate(-50%,-50%) rotate(150deg) translate(var(--R)) rotate(-150deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(7)  { transform:translate(-50%,-50%) rotate(180deg) translate(var(--R)) rotate(-180deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(8)  { transform:translate(-50%,-50%) rotate(210deg) translate(var(--R)) rotate(-210deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(9)  { transform:translate(-50%,-50%) rotate(240deg) translate(var(--R)) rotate(-240deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(10) { transform:translate(-50%,-50%) rotate(270deg) translate(var(--R)) rotate(-270deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(11) { transform:translate(-50%,-50%) rotate(300deg) translate(var(--R)) rotate(-300deg); }\r\n    #zodiacSelector .signs .wrap:nth-child(12) { transform:translate(-50%,-50%) rotate(330deg) translate(var(--R)) rotate(-330deg); }\r\n\r\n    \/* PHONE *\/\r\n    @media (max-width:768px){\r\n      #zodiacSelector{ padding-top: var(--mobile-top); align-items:center; transform:none; }\r\n      #zodiacSelector .ring{\r\n        --size: min(var(--phone-ring), 540px);\r\n        margin-inline: auto;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <script>\r\n    \/* ROUTING *\/\r\n    const SIGN_ROUTES = {\r\n      Aries:'https:\/\/godsgalaxygame.com\/GGG\/aries\/',\r\n      Taurus:'https:\/\/godsgalaxygame.com\/GGG\/taurus\/',\r\n      Gemini:'https:\/\/godsgalaxygame.com\/GGG\/gemini\/',\r\n      Cancer:'https:\/\/godsgalaxygame.com\/GGG\/cancer\/',\r\n      Leo:'https:\/\/godsgalaxygame.com\/GGG\/leo\/',\r\n      Virgo:'https:\/\/godsgalaxygame.com\/GGG\/virgo\/',\r\n      Libra:'https:\/\/godsgalaxygame.com\/GGG\/libra\/',\r\n      Scorpio:'https:\/\/godsgalaxygame.com\/GGG\/scorpio\/',\r\n      Sagittarius:'https:\/\/godsgalaxygame.com\/GGG\/sagittarius\/',\r\n      Capricorn:'https:\/\/godsgalaxygame.com\/GGG\/capricorn\/',\r\n      Aquarius:'https:\/\/godsgalaxygame.com\/GGG\/aquarius\/',\r\n      Pisces:'https:\/\/godsgalaxygame.com\/GGG\/pisces\/'\r\n    };\r\n    function goToSign(sign){ const href=SIGN_ROUTES[sign]; if(href) location.href=href; }\r\n\r\n    \/* FIT RING (desktop\/tablet) *\/\r\n    (function(){\r\n      const ring = document.getElementById('astroRing');\r\n      const title = document.getElementById('astroTitle');\r\n      const MARGIN = 32;\r\n\r\n      function fit(){\r\n        const vw = window.innerWidth;\r\n        const vh = window.innerHeight;\r\n        const titleH = title ? title.offsetHeight + 18 : 0;\r\n        const maxCap = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--ring-max')) || 900;\r\n\r\n        const size = Math.min(\r\n          Math.max(300, vw - MARGIN*2),\r\n          Math.max(300, vh - titleH - MARGIN*2),\r\n          maxCap\r\n        );\r\n        ring && ring.style.setProperty('--size', size + 'px');\r\n      }\r\n      addEventListener('resize', fit, {passive:true});\r\n      addEventListener('orientationchange', fit, {passive:true});\r\n      if (document.fonts && document.fonts.ready) document.fonts.ready.then(fit);\r\n      fit();\r\n    })();\r\n\r\n    \/* STARFIELD *\/\r\n    (function(){\r\n      const c = document.getElementById('starfield');\r\n      const ctx = c.getContext('2d');\r\n      let W=0,H=0, dpr=1, stars=[], meteors=[];\r\n\r\n      function resize(){\r\n        dpr = Math.max(1, Math.min(2, window.devicePixelRatio||1));\r\n        W = c.width = Math.floor(innerWidth * dpr);\r\n        H = c.height = Math.floor(innerHeight * dpr);\r\n        c.style.width = innerWidth + 'px';\r\n        c.style.height = innerHeight + 'px';\r\n        buildStars();\r\n      }\r\n\r\n      function buildStars(){\r\n        const count = Math.floor((W*H) \/ (14000*dpr));\r\n        stars = Array.from({length:count}, () => ({\r\n          x: Math.random()*W,\r\n          y: Math.random()*H,\r\n          r: (Math.random()*1.2+0.4)*dpr,\r\n          a: Math.random()*1\r\n        }));\r\n      }\r\n\r\n      function spawnMeteor(){\r\n        const startX = Math.random()<0.5 ? -50*dpr : W+50*dpr;\r\n        const dir = startX<0 ? 1 : -1;\r\n        const startY = Math.random()*H*0.6 + H*0.1;\r\n        meteors.push({ x:startX, y:startY, vx: dir*(3.2*dpr), vy: 1.2*dpr, life: 0, max: 1600 });\r\n      }\r\n\r\n      let last=0, accum=0;\r\n      function tick(ts){\r\n        const dt = Math.min(33, ts-last || 16); last=ts; accum+=dt;\r\n        if (accum>900+Math.random()*900) { spawnMeteor(); accum=0; }\r\n\r\n        ctx.setTransform(1,0,0,1,0,0);\r\n        ctx.clearRect(0,0,W,H);\r\n\r\n        const g = ctx.createRadialGradient(W\/2,H*0.15,0, W\/2,H*0.4, Math.hypot(W,H)\/1.4);\r\n        g.addColorStop(0,'rgba(0,220,255,0.10)');\r\n        g.addColorStop(1,'rgba(0,0,0,0)');\r\n        ctx.fillStyle=g; ctx.fillRect(0,0,W,H);\r\n\r\n        for(const s of stars){\r\n          s.a += (Math.random()*0.06-0.03);\r\n          const a = 0.35+0.35*Math.sin(s.a);\r\n          ctx.fillStyle = `rgba(200,245,255,${a})`;\r\n          ctx.beginPath(); ctx.arc(s.x,s.y,s.r,0,Math.PI*2); ctx.fill();\r\n        }\r\n\r\n        for (let i=meteors.length-1;i>=0;i--){\r\n          const m = meteors[i];\r\n          m.x += m.vx; m.y += m.vy; m.life += dt;\r\n\r\n          const trailX = m.x - m.vx*6;\r\n          const trailY = m.y - m.vy*6;\r\n          const grad = ctx.createLinearGradient(m.x,m.y, trailX,trailY);\r\n          grad.addColorStop(0,'rgba(0,255,255,0.9)');\r\n          grad.addColorStop(1,'rgba(0,255,255,0)');\r\n          ctx.strokeStyle = grad; ctx.lineWidth = 2*dpr; ctx.lineCap='round';\r\n          ctx.beginPath(); ctx.moveTo(m.x,m.y); ctx.lineTo(trailX, trailY); ctx.stroke();\r\n\r\n          if (m.x<-200*dpr || m.x>W+200*dpr || m.y>H+200*dpr || m.life>m.max){\r\n            meteors.splice(i,1);\r\n          }\r\n        }\r\n\r\n        requestAnimationFrame(tick);\r\n      }\r\n\r\n      addEventListener('resize', resize, {passive:true});\r\n      resize(); requestAnimationFrame(tick);\r\n    })();\r\n  <\/script>\r\n<\/div>\r\n\r\n\r\n\r\n<!-- === GGG ASTRO SLIDES v4.1 \u2014 Text Over Image, Fixed Positions === -->\r\n<div id=\"gggSlidesRoot\" style=\"display:none\"><\/div>\r\n<script>\r\n(function(){\r\n  \/* ---- Gate ---- *\/\r\n  const q = new URLSearchParams(location.search);\r\n  if(!(q.get('ebook') === '1' && q.get('access') === 'MEDA2025')) return;\r\n\r\n  \/* ---- Global text Y offset (pixels) ---- *\/\r\n  const GLOBAL_Y_OFFSET = 0; \/\/ change this to move ALL text up\/down\r\n\r\n  \/* ---- Links ---- *\/\r\n  const PLAY_URL = \"\/GGG\/astro\/\";\r\n  const DEFAULT_HS = 30;\r\n\r\n  \/* Circles grid (for hotspots) *\/\r\n  const GRID = {\r\n    A:{x:34,y:61}, \/\/ Accommodations\r\n    R:{x:66,y:61}, \/\/ Restaurants\r\n    E:{x:34,y:82}, \/\/ Entertainment\r\n    V:{x:66,y:82}  \/\/ VIP\r\n  };\r\n\r\n  \/* ---- Slides (IMAGES + HOTSPOTS) ---- *\/\r\n  const SLIDES = [\r\n    \/* 0 \u2013 Cover *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251123_140837_YouCut-Video-Editor.jpg\",\r\n      hotspots:[]\r\n    },\r\n\r\n    \/* 1 \u2013 Introduction *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251123_121714_YouCut-Video-Editor-scaled.jpg\",\r\n      hotspots:[]\r\n    },\r\n\r\n    \/* 2 \u2013 Aries *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_010922_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Aries \u00b7 Accommodations \u2014 The Charlee Penthouse\", href:\"https:\/\/www.thecharlee.com\/room\/envy\/\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Aries \u00b7 Restaurants \u2014 Colosal\", href:\"https:\/\/www.colosalrestaurante.com\/\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Aries \u00b7 Entertainment \u2014 Envy Rooftop\", href:\"https:\/\/www.thecharlee.com\/en\/envy-roof-top\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Aries \u00b7 VIP \u2014 Bliss Club\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 3 \u2013 Taurus *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_011142_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Taurus \u00b7 Accommodations \u2014 Click Clack\", href:\"https:\/\/www.clickclackhotel.com\/es\/hoteles\/colombia\/medellin\/clickclackmedellin\/?utm_source=google&utm_medium=organic&utm_campaign=GoogleMyBusiness&utm_content=medellin&partner=8794\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Taurus \u00b7 Restaurants \u2014 San Carb\u00f3n\", href:\"https:\/\/www.sancarbon.com.co\/\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Taurus \u00b7 Entertainment \u2014 Fonda Caballo Loco\", href:\"https:\/\/caballoloco.co\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Taurus \u00b7 VIP \u2014 Driver to Bliss Glamping\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTM4bGJwYTNoYnY5dg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 4 \u2013 Gemini *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_011420_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Gemini \u00b7 Accommodations \u2014 Energy Living\", href:\"https:\/\/www.airbnb.com\/rooms\/38189683?source_impression_id=p3_1762366381_P3BqVCQFTW9iuRAI\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Gemini \u00b7 Restaurants \u2014 Alambique\", href:\"https:\/\/www.alambiquemedellin.com\/\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Gemini \u00b7 Entertainment \u2014 Parque Arv\u00ed\", href:\"https:\/\/parquearvi.org\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Gemini \u00b7 VIP \u2014 Helicopter & Horse Ride\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 5 \u2013 Cancer *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_011650_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Cancer \u00b7 Accommodations \u2014 Binn Hotel\", href:\"https:\/\/binnhotel.com\/\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Cancer \u00b7 Restaurants \u2014 Mamba Negra\", href:\"https:\/\/www.instagram.com\/mambanegra.22?igsh=MTM4bGJwYTNoYnY5dg==\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Cancer \u00b7 Entertainment \u2014 Envy Rooftop\", href:\"https:\/\/www.thecharlee.com\/en\/envy-roof-top\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Cancer \u00b7 VIP \u2014 Helicopter & Jetski\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 6 \u2013 Leo *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_012015_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Leo \u00b7 Accommodations \u2014 Marquee Hotel\", href:\"https:\/\/marqueemedellin.com\/\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Leo \u00b7 Restaurants \u2014 El Cielo\", href:\"https:\/\/elcielo.com.co\/medellin\/\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Leo \u00b7 Entertainment \u2014 Teatro Victoria\", href:\"https:\/\/www.instagram.com\/teatrovictoria.mde?igsh=MXVidnh2ZHFrcDZ5bA==\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Leo \u00b7 VIP \u2014 Fourtrac + Helicopter\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 7 \u2013 Virgo *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_012344_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Virgo \u00b7 Accommodations \u2014 Novotel El Tesoro\", href:\"https:\/\/all.accor.com\/hotel\/B465\/index.en.shtml\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Virgo \u00b7 Restaurants \u2014 Mamba Negra\", href:\"https:\/\/www.instagram.com\/mambanegra.22?igsh=MTM4bGJwYTNoYnY5dg==\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Virgo \u00b7 Entertainment \u2014 Monologos sin Propina\", href:\"https:\/\/monologossinpropina.com\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Virgo \u00b7 VIP \u2014 Driver to Bliss Glamping\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 8 \u2013 Libra *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_012827_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Libra \u00b7 Accommodations \u2014 The Charlee\", href:\"https:\/\/www.thecharlee.com\/room\/envy\/\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Libra \u00b7 Restaurants \u2014 Colosal\", href:\"https:\/\/www.colosalrestaurante.com\/inicio\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Libra \u00b7 Entertainment \u2014 Envy Rooftop\", href:\"https:\/\/www.thecharlee.com\/en\/envy-roof-top\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Libra \u00b7 VIP \u2014 Helicopter & Bliss Glamping\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 9 \u2013 Scorpio *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_013201_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Scorpio \u00b7 Accommodations \u2014 The Charlee Spice Room\", href:\"https:\/\/www.thecharlee.com\/en\/room\/spice-bedrooms\/\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Scorpio \u00b7 Restaurants \u2014 Mondongos\", href:\"https:\/\/mondongos.com.co\/\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Scorpio \u00b7 Entertainment \u2014 Clandestino\", href:\"https:\/\/clandestinorestaurante.com\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Scorpio \u00b7 VIP \u2014 Helicopter & Horse Ride\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 10 \u2013 Sagittarius *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_013543_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Sagittarius \u00b7 Accommodations \u2014 The Charlee Penthouse\", href:\"https:\/\/www.thecharlee.com\/room\/envy\/\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Sagittarius \u00b7 Restaurants \u2014 Vanguardia\", href:\"https:\/\/www.instagram.com\/vanguardia.mde?igsh=MTN2YjRnazBlZzQzaQ==\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Sagittarius \u00b7 Entertainment \u2014 Provenza\", href:\"https:\/\/www.barrioprovenza.co\/en\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Sagittarius \u00b7 VIP \u2014 Helicopter & Jetski\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 11 \u2013 Capricorn *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_014735_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Capricorn \u00b7 Accommodations \u2014 Binn Hotel\", href:\"https:\/\/binnhotel.com\/\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Capricorn \u00b7 Restaurants \u2014 Alambique\", href:\"https:\/\/www.alambiquemedellin.com\/\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Capricorn \u00b7 Entertainment \u2014 Envy Rooftop\", href:\"https:\/\/www.thecharlee.com\/en\/envy-roof-top\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Capricorn \u00b7 VIP \u2014 Helicopter & Bliss Glamping\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 12 \u2013 Aquarius *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_014955_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Aquarius \u00b7 Accommodations \u2014 The Charlee Spice Room\", href:\"https:\/\/www.thecharlee.com\/en\/room\/spice-bedrooms\/\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Aquarius \u00b7 Restaurants \u2014 Mamba Negra\", href:\"https:\/\/www.instagram.com\/mambanegra.22?igsh=MTM4bGJwYTNoYnY5dg==\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Aquarius \u00b7 Entertainment \u2014 Parapente San F\u00e9lix\", href:\"https:\/\/parapentesanfelix.com\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Aquarius \u00b7 VIP \u2014 Helicopter & Jetski\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 13 \u2013 Pisces *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/Screenshot_20251124_015151_PowerPoint.jpg\",\r\n      hotspots:[\r\n        {label:\"Pisces \u00b7 Accommodations \u2014 The Art Boutique Hotel\", href:\"https:\/\/bookings.simplotel.com\/?propertyId=8058\", x:GRID.A.x, y:GRID.A.y},\r\n        {label:\"Pisces \u00b7 Restaurants \u2014 Crepes & Waffles\", href:\"https:\/\/www.crepesywaffles.com\/\", x:GRID.R.x, y:GRID.R.y},\r\n        {label:\"Pisces \u00b7 Entertainment \u2014 Museo del Agua\", href:\"https:\/\/www.grupo-epm.com\/site\/museodelagua\/\", x:GRID.E.x, y:GRID.E.y},\r\n        {label:\"Pisces \u00b7 VIP \u2014 Jetski & Bliss Glamping\", href:\"https:\/\/www.instagram.com\/blisscluboficial?igsh=MTR6emJxazZiNWtqYg==\", x:GRID.V.x, y:GRID.V.y},\r\n      ]\r\n    },\r\n\r\n    \/* 14 \u2013 Final Page *\/\r\n    {\r\n      img:\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-Nov-23-2025-12_09_57-PM.png\",\r\n      hotspots:[]\r\n    }\r\n  ];\r\n\r\n  \/* ---- TEXT BLOCKS (transparent, over image) ----\r\n     x \/ y are percentages so you can move each block.\r\n     Change GLOBAL_Y_OFFSET at the top to move ALL of them up\/down.\r\n  -------------------------------------------------------*\/\r\n  const TEXT_LAYOUT = [\r\n    \/* 0 \u2013 Cover (only middle line, title\/price are in image) *\/\r\n    [\r\n      {\r\n        html:'Tap or swipe to explore Medell\u00edn through the stars.',\r\n        x:'50%',\r\n        y:'55%',\r\n        cls:'coverMiddle'\r\n      }\r\n    ],\r\n\r\n    \/* 1 \u2013 Introduction *\/\r\n    [\r\n      { html:'INTRODUCTION \u00b7 HOW THIS INTERACTIVE EBOOK WORKS', x:'50%', y:'30%', cls:'introTitle' },\r\n      { html:'This edition isn\u2019t just a book \u2014 it\u2019s an <b>interactive experience<\/b>. On each zodiac page, you\u2019ll see glowing icons you can click to open the host\u2019s website, view the location on the map, and connect with the Gods Galaxy Game. Whenever you see the PLAY symbol, tap it to feel how your sign unlocks different ways to explore Medell\u00edn.', x:'50%', y:'56%', cls:'introBody' }\r\n    ],\r\n\r\n    \/* 2 \u2013 Aries *\/\r\n    [\r\n      { html:'ARIES<span class=\"signSubtitle\">THE FIRE EXPLORER<\/span><span class=\"tagline\">Passion is your compass \u2014 let it guide you through Medell\u00edn.<\/span><span class=\"bodyText\">Bold and curious, you spark adventure and seek the extraordinary. In Medell\u00edn, your fiery spirit ignites unforgettable experiences, from penthouse views to electrifying nightlife.<\/span>', x:'50%', y:'34%', cls:'signMain' },\r\n          ],\r\n\r\n    \/* 3 \u2013 Taurus *\/\r\n    [\r\n      { html:'TAURUS<span class=\"signSubtitle\">THE EARTH EXPLORER<\/span><span class=\"tagline\">Comfort is your compass \u2014 let it guide you through Medell\u00edn.<\/span><span class=\"bodyText\">Grounded, patient, and indulgent, Taurus travelers savor comfort, style, and rich earthly pleasures. In Medell\u00edn, every view, flavor, and journey reflects your love for quality and calm.<\/span>', x:'50%', y:'34%', cls:'signMain' },\r\n     \r\n    ],\r\n\r\n    \/* 4 \u2013 Gemini *\/\r\n    [\r\n      { html:'GEMINI<span class=\"signSubtitle\">THE INQUISITIVE ADVENTURER<\/span><span class=\"tagline\">Curiosity is your compass \u2014 let it guide you through Medell\u00edn.<\/span><span class=\"bodyText\">Quick-witted, sociable, and versatile, Gemini explorers crave variety, experiences, and intellectual stimulation. In Medell\u00edn, every discovery, taste, and journey aligns with your zest for life.<\/span>', x:'50%', y:'36%', cls:'signMain' },\r\n    ],\r\n\r\n    \/* 5 \u2013 Cancer *\/\r\n    [\r\n      { html:'CANCER<span class=\"signSubtitle\">THE TRANQUIL SEEKER<\/span><span class=\"tagline\">Find comfort in serenity \u2014 let Medell\u00edn rejuvenate you.<\/span><span class=\"bodyText\">Nurturing, intuitive, and reflective, Cancer explorers treasure tranquility and emotional well-being. In Medell\u00edn, soft sunsets, soothing retreats, and gentle experiences bring you peace of mind.<\/span>', x:'50%', y:'36%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 6 \u2013 Leo *\/\r\n    [\r\n      { html:'LEO<span class=\"signSubtitle\">THE VIBRANT EXPLORER<\/span><span class=\"tagline\">Embrace Medell\u00edn\u2019s energy \u2014 ignite your passions.<\/span><span class=\"bodyText\">Dramatic, confident, and sociable, Leo adventurers seek gastronomic pleasures, untamed nature, and vibrant nightlife. Mystery and luxury add excitement to Medell\u00edn\u2019s offerings.<\/span>', x:'50%', y:'37%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 7 \u2013 Virgo *\/\r\n    [\r\n      { html:'VIRGO<span class=\"signSubtitle\">THE DISCERNING EXPLORER<\/span><span class=\"tagline\">Find elegance in simplicity \u2014 let Medell\u00edn refine your senses.<\/span><span class=\"bodyText\">Practical, attentive, and sophisticated, Virgos find polished places, natural beauty, and stylish experiences that enrich your mind.<\/span>',\r\n   x:'50%', y:'35%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 8 \u2013 Libra *\/\r\n    [\r\n      { html:'LIBRA<span class=\"signSubtitle\">THE BALANCE SEEKER<\/span><span class=\"tagline\">Harmony is your compass \u2014 let it guide you through Medell\u00edn.<\/span><span class=\"bodyText\">Peaceful, charming, and social, Libra travelers gravitate to beauty, balance, and harmony. In Medell\u00edn, you\u2019ll find scenic suites, intimate dinners, and chic rooftop parties to feed your soul.<\/span>',\r\n   x:'50%', y:'34%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 9 \u2013 Scorpio *\/\r\n    [\r\n      { html:'SCORPIO<span class=\"signSubtitle\">THE INTENSE EXPLORER<\/span><span class=\"tagline\">Passion is your compass \u2014 let it guide you through Medell\u00edn.<\/span><span class=\"bodyText\">Determined, powerful, and magnetic, Scorpios travel with purpose and fervor. As you explore Medell\u00edn, you\u2019ll discover culinary delights and secret spaces that match your depth and intensity.<\/span>',\r\n  x:'50%', y:'35%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 10 \u2013 Sagittarius *\/\r\n    [\r\n      { html:'SAGITTARIUS<span class=\"signSubtitle\">THE FREE SPIRIT<\/span><span class=\"tagline\">Adventure is your compass \u2014 let Medell\u00edn expand your horizons.<\/span><span class=\"bodyText\">Optimistic, bold, and always on the move, Sagittarians chase panoramic views, creative flavors, and neighborhoods that feel like pure exploration.<\/span>',\r\n  x:'50%', y:'34%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 11 \u2013 Capricorn *\/\r\n    [\r\n      { html:'CAPRICORN<span class=\"signSubtitle\">THE AMBITIOUS EXPLORER<\/span><span class=\"tagline\">Legacy is your compass \u2014 let Medell\u00edn reward your effort.<\/span><span class=\"bodyText\">Disciplined, strategic, and determined, Capricorns look for quality and experiences that feel earned. Medell\u00edn offers high-rise views, iconic restaurants, and escapes that recharge your ambition.<\/span>',\r\n  x:'50%', y:'35%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 12 \u2013 Aquarius *\/\r\n    [\r\n      { html:'AQUARIUS<span class=\"signSubtitle\">THE VISIONARY EXPLORER<\/span><span class=\"tagline\">Originality is your compass \u2014 let Medell\u00edn surprise you.<\/span><span class=\"bodyText\">Inventive, free-spirited, and future-minded, Aquarians love high views, unexpected experiences, and winds that feel different. Medell\u00edn invites you to float above the city and follow your own rhythm.<\/span>',\r\n   x:'50%', y:'35%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 13 \u2013 Pisces *\/\r\n    [\r\n      { html:'PISCES<span class=\"signSubtitle\">THE DREAMY EXPLORER<\/span><span class=\"tagline\">Imagination is your compass \u2014 let Medell\u00edn inspire your soul.<\/span><span class=\"bodyText\">Sensitive, artistic, and intuitive, Pisces travelers are moved by water, stories, and light. Medell\u00edn offers museums, comfort food, and shimmering nights where your dreams feel close.<\/span>',\r\n   x:'50%', y:'35%', cls:'signMain' },\r\n      \r\n    ],\r\n\r\n    \/* 14 \u2013 Final Page (exact text from your image) *\/\r\n    [\r\n      { html:'YOUR ADVENTURE<br>DOESN\u2019T END HERE \u2014<br>IT BEGINS', x:'50%', y:'27%', cls:'introTitle' },\r\n      { html:'YOUR ADVENTURE<br>DOESN\u2019T END HERE \u2014<br>IT BEGINS', x:'50%', y:'27%', cls:'introTitle' },\r\n\u00a0 \u00a0 \u00a0 { html:'You\u2019ve explored Medell\u00edn through the stars.<br><br>Now step into the full interactive version of Astro Travel Recommendations inside Gods Galaxy Game.<br><br>Experience every sign, every element, and every recommendation in a playful, game-style format \u2014 completely free. Just Press PLAY<br><br>Follow your constellation \u2014<br>your path continues online.', x:'50%', y:'58%', cls:'introBody' }\r\n    ]\r\n  ];\r\n\r\n  \/* ---- Styles ---- *\/\r\n  const css = `\r\n  html,body{height:100%;margin:0}\r\n  #gggOverlay{position:fixed;inset:0;z-index:9999;background:#05060a;display:flex;align-items:center;justify-content:center;overflow:hidden}\r\n  #gggStage{position:relative;width:100vw;height:100vh}\r\n  @supports(height:100svh){#gggStage{height:100svh}}\r\n  #vp{position:absolute;inset:0;transform-origin:center center;touch-action:none}\r\n  #slide{position:absolute;inset:0;background:#000;display:flex;align-items:center;justify-content:center}\r\n  #slide img{max-width:100%;max-height:100%;object-fit:contain;display:block}\r\n\r\n  .hs{\r\n    position:absolute;transform:translate(-50%,-50%);cursor:pointer;\r\n    width:18vw;height:18vw;background:transparent;border:none;box-shadow:none;border-radius:50%;outline:none;\r\n    z-index:40;\r\n  }\r\n\r\n  .sideNav{\r\n    position:fixed;top:50vh;transform:translateY(-50%);\r\n    width:52px;height:52px;border-radius:50%;\r\n    display:flex;align-items:center;justify-content:center;\r\n    color:#eaffff;background:radial-gradient(ellipse at center, rgba(0,255,255,.22), rgba(140,92,255,.20));\r\n    border:1px solid rgba(77,223,255,.55);box-shadow:0 0 14px rgba(0,255,255,.25), inset 0 0 18px rgba(0,255,255,.18);\r\n    z-index:45\r\n  }\r\n  #prev{left:max(12px, calc(env(safe-area-inset-left,0px)+10px))}\r\n  #next{right:max(12px, calc(env(safe-area-inset-right,0px)+10px))}\r\n\r\n  .tap{position:absolute;top:0;bottom:0;width:27%;z-index:5;background:transparent}\r\n  .tapL{left:0} .tapR{right:0}\r\n  @media (min-width:768px){ .tap{pointer-events:none !important;} }\r\n\r\n  #topBar{\r\n    position:absolute;left:max(10px, calc(env(safe-area-inset-left,0px)+10px));\r\n    top:calc(env(safe-area-inset-top,0px) + 14px);\r\n    display:flex;gap:10px;z-index:45;padding:8px 10px;border-radius:14px;\r\n    align-items:center;flex-wrap:wrap;\r\n    background:linear-gradient(135deg, rgba(5,12,24,.35), rgba(20,10,36,.35));\r\n    border:1px solid rgba(77,223,255,.35);box-shadow:0 0 18px rgba(0,255,255,.22), inset 0 0 18px rgba(0,255,255,.12);backdrop-filter:blur(6px)\r\n  }\r\n\r\n  .navBtn{\r\n    cursor:pointer;padding:8px 12px;border-radius:12px;min-width:44px;text-align:center;\r\n    border:1px solid rgba(77,223,255,.65);\r\n    background:linear-gradient(135deg, rgba(0,255,255,.16), rgba(140,92,255,.18));\r\n    color:#eaffff;font-weight:900;font-size:16px\r\n  }\r\n  .cta{\r\n    padding:7px 10px;border-radius:12px;font-size:11px;font-weight:800;color:#eaffff;\r\n    border:1px solid rgba(77,223,255,.6);\r\n    background:linear-gradient(135deg, rgba(0,255,255,.16), rgba(140,92,255,.20));\r\n    white-space:nowrap\r\n  }\r\n\r\n  \/* TEXT LAYER (transparent) *\/\r\n  #pageText{\r\n    position:absolute;\r\n    inset:0;\r\n    pointer-events:none;\r\n    z-index:42;\r\n  }\r\n  .txtBlock{\r\n    position:absolute;\r\n    transform:translate(-50%, -50%);\r\n    color:#ffffff;\r\n    text-align:center;\r\n    text-shadow:0 0 6px rgba(0,0,0,.85);\r\n    font-family: system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\r\n    max-width:min(90vw, 720px);\r\n  }\r\n  .coverMiddle{\r\n    font-size:clamp(14px,3.4vw,20px);\r\n    font-weight:500;\r\n  }\r\n  .coverTitle{\r\n    font-weight:800;\r\n    letter-spacing:.12em;\r\n    font-size:clamp(20px,5vw,34px);\r\n  }\r\n  .coverSub{\r\n    font-size:clamp(14px,3.6vw,20px);\r\n  }\r\n  .coverSubSmall{\r\n    font-size:clamp(12px,3vw,18px);\r\n    font-weight:600;\r\n  }\r\n\r\n  .introTitle{\r\n    font-weight:800;\r\n    font-size:clamp(18px,4.2vw,28px);\r\n    letter-spacing:.12em;\r\n  }\r\n  .introBody{\r\n    font-size:clamp(13px,3.4vw,18px);\r\n  }\r\n\r\n  .signMain{\r\n    font-size:clamp(16px,3.6vw,24px);\r\n    font-weight:700;\r\n    letter-spacing:.12em;\r\n  }\r\n  .signMain .signSubtitle{\r\n    display:block;\r\n    font-size:clamp(14px,3.2vw,20px);\r\n    font-weight:600;\r\n    letter-spacing:.18em;\r\n    margin-top:4px;\r\n  }\r\n  .signMain .tagline{\r\n    display:block;\r\n    font-weight:500;\r\n    font-style:italic;\r\n    letter-spacing:0;\r\n    margin-top:8px;\r\n    font-size:clamp(13px,3.1vw,18px);\r\n  }\r\n  .signMain .bodyText{\r\n    display:block;\r\n    margin-top:8px;\r\n    font-weight:400;\r\n    letter-spacing:0;\r\n    font-size:clamp(13px,3.1vw,18px);\r\n  }\r\n\r\n  .hostText{\r\n    font-size:clamp(11px,2.8vw,16px);\r\n    font-weight:500;\r\n  }\r\n  `;\r\n  const st = document.createElement('style'); st.textContent = css; document.head.appendChild(st);\r\n\r\n  \/* ---- DOM ---- *\/\r\n  const root = document.getElementById('gggSlidesRoot');\r\n  root.innerHTML = `\r\n    <div id=\"gggOverlay\">\r\n      <div id=\"gggStage\">\r\n        <div id=\"vp\">\r\n          <div id=\"slide\"><img id=\"img\" alt=\"GGG slide\"\/><\/div>\r\n          <div id=\"pageText\"><\/div>\r\n        <\/div>\r\n\r\n        <button id=\"prev\" class=\"sideNav\" aria-label=\"Prev\">\u25c0<\/button>\r\n        <button id=\"next\" class=\"sideNav\" aria-label=\"Next\">\u25b6<\/button>\r\n\r\n        <div id=\"tapPrev\" class=\"tap tapL\" aria-hidden=\"true\"><\/div>\r\n        <div id=\"tapNext\" class=\"tap tapR\" aria-hidden=\"true\"><\/div>\r\n\r\n        <div id=\"topBar\">\r\n          <button id=\"tbPrev\" class=\"navBtn\" title=\"Previous slide\">\u25c0<\/button>\r\n          <button id=\"tbNext\" class=\"navBtn\" title=\"Next slide\">\u25b6<\/button>\r\n          <button id=\"play\" class=\"cta\" title=\"Play\">Play<\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  `;\r\n  document.body.style.overflow = 'hidden';\r\n\r\n  \/* ---- Refs ---- *\/\r\n  const vp       = document.getElementById('vp');\r\n  const imgEl    = document.getElementById('img');\r\n  const prev     = document.getElementById('prev');\r\n  const next     = document.getElementById('next');\r\n  const tapPrev  = document.getElementById('tapPrev');\r\n  const tapNext  = document.getElementById('tapNext');\r\n  const play     = document.getElementById('play');\r\n  const tbPrev   = document.getElementById('tbPrev');\r\n  const tbNext   = document.getElementById('tbNext');\r\n  const pageText = document.getElementById('pageText');\r\n\r\n  \/* ---- Viewer ---- *\/\r\n  let i = 0;\r\n  const hsEls = [];\r\n  const txtEls = [];\r\n\r\n  function clearHotspots(){ hsEls.splice(0).forEach(el => el.remove()); }\r\n  function clearText(){ txtEls.splice(0).forEach(el => el.remove()); }\r\n\r\n  function addHotspot(h){\r\n    const el = document.createElement('a');\r\n    el.className = 'hs';\r\n    el.href = h.href;\r\n    el.rel = 'noopener';\r\n    const size = (h.size || DEFAULT_HS);\r\n    el.style.width  = size + 'vw';\r\n    el.style.height = size + 'vw';\r\n    el.style.left   = h.x + '%';\r\n    el.style.top    = h.y + '%';\r\n    el.title = h.label || 'Open';\r\n    document.getElementById('slide').appendChild(el);\r\n    hsEls.push(el);\r\n  }\r\n\r\n  function addTextBlock(b){\r\n    const el = document.createElement('div');\r\n    el.className = 'txtBlock ' + (b.cls || '');\r\n    el.innerHTML = b.html;\r\n    el.style.left = b.x;\r\n    el.style.top  = `calc(${b.y} + ${GLOBAL_Y_OFFSET}px)`;\r\n    pageText.appendChild(el);\r\n    txtEls.push(el);\r\n  }\r\n\r\n  function render(){\r\n    const s = SLIDES[i];\r\n    imgEl.src = s.img;\r\n    clearHotspots();\r\n    clearText();\r\n    (s.hotspots || []).forEach(addHotspot);\r\n    (TEXT_LAYOUT[i] || []).forEach(addTextBlock);\r\n  }\r\n\r\n  function go(n){\r\n    n = Math.max(0, Math.min(SLIDES.length - 1, n));\r\n    if(n === i) return;\r\n    i = n;\r\n    render();\r\n  }\r\n\r\n  \/* CLICK NAVIGATION *\/\r\n  let lastTap = 0;\r\n  vp.addEventListener('click', (e)=>{\r\n    if(e.target.closest('a.hs')) return;\r\n    const now = Date.now();\r\n    const leftHalf = e.clientX < innerWidth\/2;\r\n    if(now - lastTap < 300){ go(i + (leftHalf ? -3 : 3)); }\r\n    lastTap = now;\r\n  });\r\n\r\n  \/* Disable wheel zoom\/pan *\/\r\n  vp.addEventListener('pointerdown', ()=>{});\r\n  vp.addEventListener('pointermove', ()=>{});\r\n  vp.addEventListener('pointerup', ()=>{});\r\n  vp.addEventListener('wheel', e => e.preventDefault(), {passive:false});\r\n\r\n  const navPrev = () => go(i - 1);\r\n  const navNext = () => go(i + 1);\r\n\r\n  prev.onclick = navPrev;\r\n  next.onclick = navNext;\r\n  tbPrev.onclick = navPrev;\r\n  tbNext.onclick = navNext;\r\n  tapPrev.onclick = navPrev;\r\n  tapNext.onclick = navNext;\r\n\r\n  addEventListener('keydown', e=>{\r\n    if(e.key === 'ArrowLeft') navPrev();\r\n    if(e.key === 'ArrowRight') navNext;\r\n  });\r\n\r\n  play.onclick = () => location.href = PLAY_URL;\r\n\r\n  function preload(src){ const im = new Image(); im.src = src; }\r\n\r\n  function initial(){\r\n    render();\r\n    if(SLIDES[1]) preload(SLIDES[1].img);\r\n    document.getElementById('gggSlidesRoot').style.display = 'block';\r\n    history.replaceState(null,'',location.pathname + location.search + '#ebook');\r\n  }\r\n  initial();\r\n})();\r\n<\/script>\r\n<!-- === \/GGG ASTRO SLIDES v4.1 === -->\r\n\r\n\r\n\r\n<style>\r\n\/* =========================================================\r\n   GODS GALAXY GAME \u2014 LUXURY FRACTIONAL CLUB V4\r\n   Hidden page gate: ?fractional=1\r\n========================================================= *\/\r\n\r\nhtml.fc4-active,\r\nbody.fc4-active{\r\n  margin:0 !important;\r\n  padding:0 !important;\r\n  width:100% !important;\r\n  max-width:none !important;\r\n  overflow:hidden !important;\r\n  background:#02050d !important;\r\n}\r\nbody.fc4Hide * { visibility:hidden !important; }\r\nbody.fc4Hide #fc4Overlay,\r\nbody.fc4Hide #fc4Overlay *{visibility:visible !important;}\r\n\r\n#fc4Overlay{\r\n  --fc-bg:#02050d;\r\n  --fc-bg2:#071225;\r\n  --fc-bg3:#0a1730;\r\n\r\n  --fc-white:#f8fbff;\r\n  --fc-soft:rgba(248,251,255,.82);\r\n  --fc-soft2:rgba(248,251,255,.58);\r\n  --fc-line:rgba(255,255,255,.10);\r\n  --fc-line2:rgba(255,255,255,.06);\r\n\r\n  --fc-gold:#f4d27a;\r\n  --fc-gold2:#dca63a;\r\n  --fc-gold3:#fff0be;\r\n\r\n  --fc-cyan:#8deeff;\r\n  --fc-blue:#58dbff;\r\n  --fc-blue2:#2f93ff;\r\n\r\n  --fc-violet:#b88cff;\r\n  --fc-violet2:#8b74ff;\r\n  --fc-magenta:#dc7cff;\r\n\r\n  --fc-green:#89ffd8;\r\n  --fc-green2:#43f0ba;\r\n\r\n  --fc-red:#ff8be7;\r\n  --fc-red2:#ff4361;\r\n\r\n  --fc-shadow:0 24px 80px rgba(0,0,0,.52);\r\n\r\n  position:fixed !important;\r\n  inset:0 !important;\r\n  width:100vw !important;\r\n  height:100vh !important;\r\n  z-index:2147483647 !important;\r\n  overflow-y:auto !important;\r\n  overflow-x:hidden !important;\r\n  -webkit-overflow-scrolling:touch;\r\n  display:none;\r\n  background:\r\n    radial-gradient(circle at 18% 16%, rgba(88,219,255,.08), transparent 18%),\r\n    radial-gradient(circle at 84% 18%, rgba(220,124,255,.10), transparent 22%),\r\n    radial-gradient(circle at 50% 85%, rgba(244,210,122,.06), transparent 24%),\r\n    linear-gradient(180deg, #02050d 0%, #071225 45%, #02050d 100%) !important;\r\n  color:var(--fc-white);\r\n  font-family:Arial, Helvetica, sans-serif !important;\r\n  scroll-behavior:smooth;\r\n}\r\n#fc4Overlay *{box-sizing:border-box;}\r\n\r\n.fc4-wrap{\r\n  position:relative;\r\n  min-height:100%;\r\n}\r\n\r\n.fc4-page{\r\n  display:none;\r\n  min-height:100vh;\r\n  animation:fc4Fade .35s ease both;\r\n}\r\n.fc4-page.active{display:block;}\r\n\r\n.fc4-shell{\r\n  width:100%;\r\n  max-width:1500px;\r\n  margin:0 auto;\r\n  padding:22px 18px 84px;\r\n  position:relative;\r\n  z-index:4;\r\n}\r\n\r\n.fc4-topbar{\r\n  position:sticky;\r\n  top:0;\r\n  z-index:30;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  gap:12px;\r\n  padding:12px 18px;\r\n  backdrop-filter:blur(14px);\r\n  -webkit-backdrop-filter:blur(14px);\r\n  background:linear-gradient(180deg, rgba(3,7,18,.88), rgba(3,7,18,.38));\r\n  border-bottom:1px solid rgba(255,255,255,.06);\r\n}\r\n.fc4-left,\r\n.fc4-right{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:10px;\r\n}\r\n.fc4-icon{\r\n  width:48px;\r\n  height:48px;\r\n  border:none;\r\n  border-radius:50%;\r\n  cursor:pointer;\r\n  background:rgba(9,14,28,.82);\r\n  border:1px solid rgba(255,255,255,.12);\r\n  color:#fff;\r\n  font-size:1rem;\r\n  box-shadow:0 0 16px rgba(88,219,255,.08);\r\n}\r\n.fc4-pill{\r\n  min-height:44px;\r\n  padding:0 16px;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  border-radius:999px;\r\n  background:rgba(255,255,255,.04);\r\n  border:1px solid rgba(255,255,255,.10);\r\n  color:var(--fc-soft);\r\n  font-size:.74rem;\r\n  font-weight:800;\r\n  letter-spacing:.16em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.fc4-panel{\r\n  position:relative;\r\n  overflow:hidden;\r\n  border-radius:34px;\r\n  background:\r\n    radial-gradient(circle at top left, rgba(88,219,255,.06), transparent 24%),\r\n    radial-gradient(circle at bottom right, rgba(220,124,255,.08), transparent 24%),\r\n    linear-gradient(180deg, rgba(9,14,28,.92), rgba(4,7,18,.98));\r\n  border:1px solid rgba(255,255,255,.10);\r\n  box-shadow:var(--fc-shadow);\r\n  backdrop-filter:blur(22px);\r\n  -webkit-backdrop-filter:blur(22px);\r\n}\r\n.fc4-panel::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-1px;\r\n  border-radius:34px;\r\n  padding:1px;\r\n  background:linear-gradient(135deg, rgba(244,210,122,.55), rgba(88,219,255,.55), rgba(220,124,255,.55), rgba(255,255,255,.35));\r\n  -webkit-mask:linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);\r\n  -webkit-mask-composite:xor;\r\n          mask-composite:exclude;\r\n  opacity:.80;\r\n  pointer-events:none;\r\n}\r\n\r\n\/* =========================\r\n   HERO\r\n========================= *\/\r\n.fc4-hero{\r\n  position:relative;\r\n  min-height:235vh;\r\n}\r\n.fc4-hero-sticky{\r\n  position:sticky;\r\n  top:0;\r\n  min-height:100vh;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  overflow:hidden;\r\n}\r\n.fc4-hero-bg{\r\n  position:absolute;\r\n  inset:0;\r\n  background:\r\n    linear-gradient(180deg, rgba(0,0,0,.08), rgba(0,0,0,.65)),\r\n    url(\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Apr-21-2026-04_05_51-PM-1-scaled.png\")\r\n    center center \/ cover no-repeat;\r\n  transform:scale(var(--fc4BgScale,1)) translateY(var(--fc4BgShift,0px));\r\n  transform-origin:center center;\r\n  filter:brightness(var(--fc4BgBrightness,1));\r\n  will-change:transform, filter;\r\n}\r\n.fc4-stars,\r\n.fc4-streaks{\r\n  position:absolute;\r\n  inset:0;\r\n  pointer-events:none;\r\n  overflow:hidden;\r\n}\r\n.fc4-stars span{\r\n  position:absolute;\r\n  display:block;\r\n  border-radius:50%;\r\n  background:#fff;\r\n  opacity:.82;\r\n  animation:fc4Star linear infinite;\r\n}\r\n.fc4-streaks span{\r\n  position:absolute;\r\n  left:50%;\r\n  top:50%;\r\n  width:2px;\r\n  height:170px;\r\n  transform-origin:center bottom;\r\n  background:linear-gradient(180deg, rgba(255,255,255,0), rgba(255,255,255,.95), rgba(88,219,255,.72), rgba(255,255,255,0));\r\n  opacity:0;\r\n  animation:fc4Streak 2.8s linear infinite;\r\n}\r\n\r\n.fc4-hero-inner{\r\n  position:relative;\r\n  z-index:3;\r\n  width:100%;\r\n  max-width:1260px;\r\n  padding:20px;\r\n  text-align:center;\r\n}\r\n.fc4-logoWrap{\r\n  position:relative;\r\n  width:min(42vw,230px);\r\n  aspect-ratio:1\/1;\r\n  margin:0 auto 20px;\r\n  transform:scale(var(--fc4LogoScale,1));\r\n  transform-origin:center center;\r\n  opacity:var(--fc4LogoOpacity,1);\r\n  will-change:transform, opacity;\r\n}\r\n.fc4-logoAura {\r\n  position: absolute;\r\n  inset: -16px;\r\n  border-radius: 50%;\r\n\r\n  background: conic-gradient(\r\n    from 0deg,\r\n    rgba(82, 148, 255, 0.82),\r\n    rgba(106, 234, 255, 0.88),\r\n    rgba(146, 103, 255, 0.76),\r\n    rgba(66, 195, 255, 0.84),\r\n    rgba(82, 148, 255, 0.82)\r\n  );\r\n\r\n  filter: blur(19px);\r\n  opacity: 0.62;\r\n  animation: fc4LogoAuraFlow 9s linear infinite;\r\n}\r\n\r\n.fc4-logoGlass {\r\n  position: absolute;\r\n  inset: 0;\r\n  border-radius: 50%;\r\n\r\n  background:\r\n    radial-gradient(\r\n      circle at 32% 24%,\r\n      rgba(186, 244, 255, 0.20),\r\n      rgba(89, 173, 255, 0.04) 29%,\r\n      transparent 44%\r\n    ),\r\n    radial-gradient(\r\n      circle at 50% 50%,\r\n      rgba(8, 18, 40, 0.72),\r\n      rgba(2, 6, 18, 0.97)\r\n    );\r\n\r\n  border: 1.5px solid rgba(105, 225, 255, 0.52);\r\n\r\n  box-shadow:\r\n    inset 0 0 0 1px rgba(183, 241, 255, 0.06),\r\n    inset 0 0 24px rgba(79, 149, 255, 0.10),\r\n    0 0 22px rgba(94, 224, 255, 0.20),\r\n    0 0 48px rgba(87, 133, 255, 0.14),\r\n    0 0 72px rgba(146, 103, 255, 0.08);\r\n}\r\n\r\n@keyframes fc4LogoAuraFlow {\r\n  0% {\r\n    transform: rotate(0deg) scale(0.98);\r\n  }\r\n\r\n  50% {\r\n    transform: rotate(180deg) scale(1.04);\r\n  }\r\n\r\n  100% {\r\n    transform: rotate(360deg) scale(0.98);\r\n  }\r\n}\r\n.fc4-logo{\r\n  position:absolute;\r\n  inset:10px;\r\n  border-radius:50%;\r\n  overflow:hidden;\r\n}\r\n.fc4-logo img{\r\n  width:100%;\r\n  height:100%;\r\n  object-fit:cover;\r\n  display:block;\r\n}\r\n.fc4-backSolo{\r\n  position:fixed;\r\n  top:18px;\r\n  left:18px;\r\n  z-index:120;\r\n  width:48px;\r\n  height:48px;\r\n  border:none;\r\n  border-radius:50%;\r\n  cursor:pointer;\r\n  background:rgba(9,14,28,.82);\r\n  border:1px solid rgba(255,255,255,.12);\r\n  color:#fff;\r\n  font-size:1rem;\r\n  box-shadow:0 0 16px rgba(88,219,255,.08);\r\n}\r\n.fc4-menuBtn{\r\n  position:fixed;\r\n  top:18px;\r\n  right:18px;\r\n  z-index:120;\r\n  width:48px;\r\n  height:48px;\r\n  border:none;\r\n  border-radius:50%;\r\n  cursor:pointer;\r\n  background:rgba(9,14,28,.82);\r\n  border:1px solid rgba(255,255,255,.12);\r\n  color:#fff;\r\n  font-size:1.15rem;\r\n  box-shadow:0 0 16px rgba(88,219,255,.08);\r\n}\r\n\r\n.fc4-menuPanel{\r\n  position:fixed;\r\n  top:76px;\r\n  right:18px;\r\n  z-index:140;\r\n  width:min(92vw,420px);\r\n  max-height:80vh;\r\n  overflow:auto;\r\n  display:none;\r\n  border-radius:26px;\r\n  background:linear-gradient(180deg, rgba(10,15,30,.69), rgba(5,8,18,.99));\r\n  border:1px solid rgba(255,255,255,.10);\r\n  box-shadow:0 24px 80px rgba(0,0,0,.45);\r\n  padding:18px;\r\n}\r\n\r\n.fc4-menuPanel.open{\r\n  display:block;\r\n}\r\n\r\n.fc4-menuSection + .fc4-menuSection{\r\n  margin-top:18px;\r\n  padding-top:18px;\r\n  border-top:1px solid rgba(255,255,255,.08);\r\n}\r\n\r\n.fc4-menuTitle{\r\n  margin:0 0 10px;\r\n  font-size:1rem;\r\n  font-weight:900;\r\n  letter-spacing:.08em;\r\n  text-transform:uppercase;\r\n  color:#fff0c4;\r\n}\r\n\r\n.fc4-menuText{\r\n  margin:0;\r\n  color:var(--fc-soft);\r\n  line-height:1.75;\r\n  font-size:.92rem;\r\n}\r\n\r\n.fc4-menuList{\r\n  display:grid;\r\n  gap:10px;\r\n  margin-top:12px;\r\n}\r\n\r\n.fc4-menuLink{\r\n  width:100%;\r\n  text-align:left;\r\n  border:none;\r\n  border-radius:16px;\r\n  padding:12px 14px;\r\n  background:rgba(255,255,255,.04);\r\n  border:1px solid rgba(255,255,255,.08);\r\n  color:#fff;\r\n  cursor:pointer;\r\n  font-weight:800;\r\n  letter-spacing:.04em;\r\n}\r\n\r\n.fc4-legalBlock{\r\n  display:none;\r\n  margin-top:12px;\r\n  padding:14px;\r\n  border-radius:18px;\r\n  background:rgba(255,255,255,.04);\r\n  border:1px solid rgba(255,255,255,.08);\r\n}\r\n\r\n.fc4-legalBlock.open{\r\n  display:block;\r\n}\r\n\r\n.fc4-legalBlock h4{\r\n  margin:0 0 10px;\r\n  font-size:.95rem;\r\n  text-transform:uppercase;\r\n  color:#fff;\r\n}\r\n\r\n.fc4-legalBlock p{\r\n  margin:0;\r\n  color:var(--fc-soft);\r\n  line-height:1.75;\r\n  font-size:.9rem;\r\n}\r\n\r\n.fc4-legalBlock p + p{\r\n  margin-top:12px;\r\n}\r\n.fc4-copy{\r\n  transform:translateY(var(--fc4CopyY,0px)) scale(var(--fc4CopyScale,1));\r\n  transform-origin:center top;\r\n  opacity:var(--fc4CopyOpacity,1);\r\n  will-change:transform, opacity;\r\n}\r\n.fc4-kicker{\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  min-height:42px;\r\n  padding:0 16px;\r\n  border-radius:999px;\r\n  background:rgba(10,15,28,.56);\r\n  border:1px solid rgba(255,255,255,.12);\r\n  color:#fff0c4;\r\n  font-size:.74rem;\r\n  font-weight:800;\r\n  letter-spacing:.18em;\r\n  text-transform:uppercase;\r\n}\r\n.fc4-title{\r\n  margin:18px auto 10px;\r\n  max-width:1100px;\r\n  font-size:clamp(3rem,9vw,7rem);\r\n  line-height:.92;\r\n  font-weight:900;\r\n  letter-spacing:-.04em;\r\n  text-transform:uppercase;\r\n  text-shadow:0 14px 34px rgba(0,0,0,.42);\r\n}\r\n.fc4-title .glow{\r\n  color:#fff;\r\n  text-shadow:\r\n    0 0 18px rgba(255,255,255,.16),\r\n    0 0 40px rgba(88,219,255,.14),\r\n    0 0 64px rgba(220,124,255,.12);\r\n}\r\n\r\n\/* =========================================================\r\n   CENTERED PORTAL HERO TYPOGRAPHY\r\n========================================================= *\/\r\n\r\n.fc4-hero-inner {\r\n  width: 100%;\r\n  max-width: 1180px;\r\n  margin: 0 auto;\r\n  padding: 20px;\r\n  text-align: center;\r\n}\r\n\r\n.fc4-copy {\r\n  width: min(680px, calc(100vw - 40px));\r\n  margin: 0 auto;\r\n  text-align: center;\r\n\r\n  transform:\r\n    translateY(var(--fc4CopyY, 0px))\r\n    scale(var(--fc4CopyScale, 1));\r\n\r\n  transform-origin: center top;\r\n  opacity: var(--fc4CopyOpacity, 1);\r\n}\r\n\r\n.fc4-kicker {\r\n  display: inline-flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n\r\n  min-height: 32px;\r\n  padding: 0 17px;\r\n  margin: 0 auto;\r\n\r\n  border: 1px solid rgba(123, 231, 246, 0.18);\r\n  border-radius: 999px;\r\n\r\n  background: linear-gradient(\r\n    90deg,\r\n    rgba(8, 14, 30, 0.45),\r\n    rgba(20, 40, 68, 0.68),\r\n    rgba(8, 14, 30, 0.45)\r\n  );\r\n\r\n  color: rgba(160, 231, 244, 0.78);\r\n  font-size: clamp(0.56rem, 0.75vw, 0.68rem);\r\n  font-weight: 600;\r\n  line-height: 1;\r\n  letter-spacing: 0.22em;\r\n  text-align: center;\r\n  text-transform: uppercase;\r\n\r\n  box-shadow:\r\n    inset 0 0 18px rgba(123, 231, 246, 0.04),\r\n    0 0 20px rgba(48, 164, 221, 0.06);\r\n}\r\n\r\n.fc4-title {\r\n  width: 100%;\r\n  max-width: 680px;\r\n  margin: 15px auto 13px;\r\n\r\n  color: rgba(214, 231, 244, 0.78);\r\n  font-size: clamp(2.1rem, 4.2vw, 4.15rem);\r\n  font-weight: 500;\r\n  line-height: 0.98;\r\n  letter-spacing: -0.035em;\r\n  text-align: center;\r\n  text-transform: uppercase;\r\n\r\n  text-shadow:\r\n    0 0 12px rgba(123, 231, 246, 0.12),\r\n    0 8px 28px rgba(0, 0, 0, 0.7);\r\n}\r\n\r\n.fc4-title .glow {\r\n  display: inline-block;\r\n\r\n  background: linear-gradient(\r\n    90deg,\r\n    #79ddeb 0%,\r\n    #b0f0f5 45%,\r\n    #73d4e8 100%\r\n  );\r\n\r\n  -webkit-background-clip: text;\r\n  background-clip: text;\r\n  color: transparent;\r\n\r\n  font-weight: 600;\r\n\r\n  filter: drop-shadow(\r\n    0 0 9px rgba(90, 221, 241, 0.28)\r\n  );\r\n}\r\n\r\n.fc4-sub {\r\n  max-width: 440px;\r\n  margin: 0 auto;\r\n\r\n  color: rgba(206, 221, 235, 0.57);\r\n  font-size: clamp(0.76rem, 1vw, 0.91rem);\r\n  font-weight: 400;\r\n  line-height: 1.65;\r\n  letter-spacing: 0.045em;\r\n  text-align: center;\r\n}\r\n\r\n.fc4-scroll {\r\n  margin-top: 23px;\r\n  text-align: center;\r\n}\r\n\r\n@media (max-width: 767px) {\r\n\r\n  .fc4-hero-inner {\r\n    padding: 16px;\r\n  }\r\n\r\n  .fc4-copy {\r\n    width: min(88vw, 430px);\r\n  }\r\n\r\n  .fc4-kicker {\r\n    min-height: 29px;\r\n    padding: 0 13px;\r\n    font-size: 0.5rem;\r\n    letter-spacing: 0.16em;\r\n  }\r\n\r\n  .fc4-title {\r\n    max-width: 390px;\r\n    margin-top: 13px;\r\n    font-size: clamp(1.9rem, 8.3vw, 2.75rem);\r\n    line-height: 1.02;\r\n  }\r\n\r\n  .fc4-sub {\r\n    max-width: 320px;\r\n    font-size: 0.75rem;\r\n    line-height: 1.6;\r\n  }\r\n}\r\n  \r\n.fc4-wheel{\r\n  width:36px;\r\n  height:60px;\r\n  margin:0 auto 10px;\r\n  border-radius:999px;\r\n  border:1.5px solid rgba(244,210,122,.64);\r\n  background:rgba(8,13,28,.40);\r\n  position:relative;\r\n}\r\n.fc4-wheel::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  top:10px;\r\n  left:50%;\r\n  width:6px;\r\n  height:12px;\r\n  border-radius:999px;\r\n  background:var(--fc-gold);\r\n  transform:translateX(-50%);\r\n  animation:fc4Wheel 1.5s ease-in-out infinite;\r\n}\r\n\r\n\/* =========================\r\n   MAIN GATES\r\n========================= *\/\r\n.fc4-mainReveal{\r\n  position:relative;\r\n  margin-top:-16vh;\r\n  z-index:5;\r\n}\r\n.fc4-grid{\r\n  display:grid;\r\n  gap:18px;\r\n}\r\n.fc4-mainGrid{\r\n  grid-template-columns:1fr;\r\n}\r\n.fc4-gate{\r\n  position:relative;\r\n  overflow:hidden;\r\n  min-height:280px;\r\n  border:none;\r\n  border-radius:34px;\r\n  text-align:left;\r\n  color:#fff;\r\n  cursor:pointer;\r\n  background:linear-gradient(180deg, rgba(10,15,30,.95), rgba(5,8,18,.99));\r\n  transition:transform .22s ease, box-shadow .22s ease;\r\n}\r\n.fc4-gate:hover{transform:translateY(-5px);}\r\n.fc4-gate::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  border-radius:inherit;\r\n  pointer-events:none;\r\n}\r\n.fc4-gate.signature::after{box-shadow:inset 0 0 0 2px rgba(88,219,255,.38), 0 0 24px rgba(88,219,255,.10);}\r\n.fc4-gate.flexible::after{box-shadow:inset 0 0 0 2px rgba(67,240,186,.36), 0 0 24px rgba(67,240,186,.10);}\r\n.fc4-gate.vault::after{box-shadow:inset 0 0 0 2px rgba(244,210,122,.42), 0 0 24px rgba(244,210,122,.12);}\r\n.fc4-gateInner{\r\n  position:relative;\r\n  z-index:2;\r\n  min-height:280px;\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:26px 24px;\r\n}\r\n.fc4-gateOrb{\r\n  position:relative;\r\n  width:140px;\r\n  height:140px;\r\n  border-radius:50%;\r\n  margin-bottom:18px;\r\n  background:radial-gradient(circle at 50% 50%, #0b1530 0%, #050912 72%, #000 100%);\r\n  box-shadow:inset 0 0 0 1px rgba(255,255,255,.08), 0 0 28px rgba(88,219,255,.12);\r\n}\r\n.fc4-gateOrb::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-12px;\r\n  border-radius:50%;\r\n  background:conic-gradient(from 0deg, rgba(244,210,122,.86), rgba(88,219,255,.82), rgba(220,124,255,.80), rgba(244,210,122,.86));\r\n  filter:blur(18px);\r\n  opacity:.82;\r\n}\r\n.fc4-gateOrb::after{\r\n  content:\"\u2726\";\r\n  position:absolute;\r\n  inset:0;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  font-size:34px;\r\n  font-weight:900;\r\n  color:#fff;\r\n}\r\n.fc4-gateTitle{\r\n  font-size:clamp(2rem,6vw,3rem);\r\n  line-height:.96;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n  text-align:center;\r\n}\r\n.fc4-gateSub{\r\n  margin-top:12px;\r\n  color:var(--fc-soft);\r\n  text-align:center;\r\n  line-height:1.72;\r\n  max-width:350px;\r\n}\r\n\r\n\/* =========================\r\n   SHARED SECTION\r\n========================= *\/\r\n.fc4-section{\r\n  padding:24px 20px;\r\n}\r\n.fc4-sectionTitle{\r\n  margin:0;\r\n  font-size:clamp(2rem,6vw,3.8rem);\r\n  line-height:.94;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n  letter-spacing:-.03em;\r\n}\r\n.fc4-sectionTitle .glow{\r\n  color:#fff;\r\n  text-shadow:0 0 20px rgba(88,219,255,.12);\r\n}\r\n.fc4-sectionCopy{\r\n  margin-top:12px;\r\n  color:var(--fc-soft);\r\n  line-height:1.8;\r\n  font-size:1rem;\r\n}\r\n.fc4-backRow{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:center;\r\n  gap:12px;\r\n  flex-wrap:wrap;\r\n  margin-bottom:18px;\r\n}\r\n.fc4-backBtn{\r\n  border:none;\r\n  border-radius:999px;\r\n  padding:10px 16px;\r\n  background:rgba(255,255,255,.05);\r\n  color:#fff;\r\n  border:1px solid rgba(255,255,255,.12);\r\n  font-size:.74rem;\r\n  font-weight:800;\r\n  letter-spacing:.13em;\r\n  text-transform:uppercase;\r\n  cursor:pointer;\r\n}\r\n.fc4-chip{\r\n  min-height:38px;\r\n  padding:0 14px;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  border-radius:999px;\r\n  background:rgba(255,255,255,.05);\r\n  border:1px solid rgba(255,255,255,.10);\r\n  color:#eef7ff;\r\n  font-size:.72rem;\r\n  font-weight:800;\r\n  letter-spacing:.14em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.fc4-circleGrid{\r\n  display:grid;\r\n  gap:18px;\r\n  grid-template-columns:1fr;\r\n  margin-top:24px;\r\n}\r\n.fc4-circleWrap{\r\n  display:flex;\r\n  justify-content:center;\r\n}\r\n.fc4-circle{\r\n  --ringA:rgba(244,210,122,.90);\r\n  --ringB:rgba(88,219,255,.86);\r\n  --coreGlow:rgba(220,124,255,.18);\r\n\r\n  position:relative;\r\n  width:250px;\r\n  height:250px;\r\n  border:none;\r\n  border-radius:50%;\r\n  cursor:pointer;\r\n  overflow:hidden;\r\n  background:radial-gradient(circle at 50% 50%, #000 0%, #010205 58%, #0a1024 78%, #000 100%);\r\n  transition:transform .2s ease, box-shadow .2s ease;\r\n  box-shadow:\r\n    inset 0 0 0 1px rgba(255,255,255,.06),\r\n    0 0 0 10px rgba(255,255,255,.02),\r\n    0 0 36px rgba(88,219,255,.10);\r\n}\r\n.fc4-circle:hover{\r\n  transform:translateY(-3px) scale(1.03);\r\n}\r\n.fc4-circle::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-10%;\r\n  border-radius:50%;\r\n  background:linear-gradient(180deg, var(--ringA), var(--ringB));\r\n  filter:blur(14px);\r\n  opacity:.95;\r\n}\r\n.fc4-circle::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:13%;\r\n  border-radius:50%;\r\n  background:\r\n    radial-gradient(circle at 32% 22%, rgba(255,255,255,.16), rgba(255,255,255,.02) 28%, rgba(0,0,0,0) 42%),\r\n    radial-gradient(circle at 50% 50%, #000 0%, #000 66%, #0b1025 82%, #000 100%);\r\n  box-shadow:inset 0 0 0 1px rgba(255,255,255,.05);\r\n}\r\n.fc4-coreGlow{\r\n  position:absolute;\r\n  inset:30%;\r\n  z-index:1;\r\n  border-radius:50%;\r\n  background:radial-gradient(circle at 50% 50%, rgba(255,255,255,.28) 0%, var(--coreGlow) 42%, rgba(0,0,0,0) 80%);\r\n  filter:blur(10px);\r\n}\r\n.fc4-circleInner{\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:4;\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:18px;\r\n}\r\n.fc4-dot{\r\n  display:inline-flex;\r\n  width:54px;\r\n  height:54px;\r\n  border-radius:50%;\r\n  align-items:center;\r\n  justify-content:center;\r\n  margin-bottom:14px;\r\n  background:rgba(255,255,255,.07);\r\n  border:1px solid rgba(255,255,255,.12);\r\n  font-size:21px;\r\n}\r\n.fc4-labelGlass{\r\n  display:inline-block;\r\n  padding:12px 18px;\r\n  border-radius:18px;\r\n  background:rgba(0,0,0,.42);\r\n  border:1px solid rgba(255,255,255,.10);\r\n  max-width:84%;\r\n}\r\n.fc4-circleTitle{\r\n  font-size:clamp(22px, 2.3vw, 30px);\r\n  line-height:1.02;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n  color:#fff;\r\n}\r\n.fc4-circleSub{\r\n  margin-top:10px;\r\n  font-size:12px;\r\n  letter-spacing:.16em;\r\n  text-transform:uppercase;\r\n  color:rgba(255,255,255,.72);\r\n}\r\n\r\n.fc4-theme-air-1{--ringA:#ffffff;--ringB:#8deeff;--coreGlow:rgba(141,238,255,.18)}\r\n.fc4-theme-air-2{--ringA:#edf4ff;--ringB:#58dbff;--coreGlow:rgba(88,219,255,.18)}\r\n.fc4-theme-air-3{--ringA:#cfd9ea;--ringB:#2f93ff;--coreGlow:rgba(47,147,255,.18)}\r\n.fc4-theme-air-4{--ringA:#8b96aa;--ringB:#1b4ed8;--coreGlow:rgba(27,78,216,.18)}\r\n\r\n.fc4-theme-water-1{--ringA:#9af3ff;--ringB:#58dbff;--coreGlow:rgba(154,243,255,.18)}\r\n.fc4-theme-water-2{--ringA:#58dbff;--ringB:#2f93ff;--coreGlow:rgba(88,219,255,.18)}\r\n.fc4-theme-water-3{--ringA:#2f93ff;--ringB:#1b4ed8;--coreGlow:rgba(47,147,255,.18)}\r\n.fc4-theme-water-4{--ringA:#1b4ed8;--ringB:#7b7dff;--coreGlow:rgba(123,125,255,.18)}\r\n\r\n.fc4-theme-earth-1{--ringA:#89ffd8;--ringB:#43f0ba;--coreGlow:rgba(137,255,216,.18)}\r\n.fc4-theme-earth-2{--ringA:#43f0ba;--ringB:#16b67f;--coreGlow:rgba(67,240,186,.18)}\r\n.fc4-theme-earth-3{--ringA:#16b67f;--ringB:#0a6b4f;--coreGlow:rgba(22,182,127,.18)}\r\n.fc4-theme-earth-4{--ringA:#0a6b4f;--ringB:#89ffd8;--coreGlow:rgba(10,107,79,.18)}\r\n\r\n.fc4-theme-fire-1{--ringA:#ff8be7;--ringB:#ff51b6;--coreGlow:rgba(255,139,231,.18)}\r\n.fc4-theme-fire-2{--ringA:#ff51b6;--ringB:#ff4361;--coreGlow:rgba(255,81,182,.18)}\r\n.fc4-theme-fire-3{--ringA:#ff4361;--ringB:#b31838;--coreGlow:rgba(255,67,97,.18)}\r\n.fc4-theme-fire-4{--ringA:#b31838;--ringB:#ff8be7;--coreGlow:rgba(179,24,56,.18)}\r\n\r\n.fc4-theme-private-1{--ringA:#fff0be;--ringB:#f4d27a;--coreGlow:rgba(244,210,122,.18)}\r\n.fc4-theme-private-2{--ringA:#f4d27a;--ringB:#58dbff;--coreGlow:rgba(88,219,255,.18)}\r\n.fc4-theme-private-3{--ringA:#58dbff;--ringB:#dc7cff;--coreGlow:rgba(220,124,255,.18)}\r\n.fc4-theme-private-4{--ringA:#dc7cff;--ringB:#fff0be;--coreGlow:rgba(244,210,122,.18)}\r\n\r\n.fc4-detailCard{\r\n  padding:24px 20px;\r\n}\r\n.fc4-detailTitle{\r\n  margin:0;\r\n  font-size:clamp(2rem,6vw,3.5rem);\r\n  line-height:.94;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n}\r\n.fc4-detailKicker{\r\n  margin-top:10px;\r\n  color:var(--fc-soft2);\r\n  font-size:.75rem;\r\n  font-weight:800;\r\n  letter-spacing:.20em;\r\n  text-transform:uppercase;\r\n}\r\n.fc4-detailText{\r\n  margin-top:18px;\r\n  color:var(--fc-soft);\r\n  line-height:1.85;\r\n  font-size:1rem;\r\n}\r\n.fc4-btnRow{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  gap:10px;\r\n  margin-top:24px;\r\n}\r\n.fc4-btn{\r\n  min-height:50px;\r\n  padding:0 18px;\r\n  border:none;\r\n  border-radius:999px;\r\n  cursor:pointer;\r\n  font-size:.76rem;\r\n  font-weight:800;\r\n  letter-spacing:.15em;\r\n  text-transform:uppercase;\r\n}\r\n.fc4-btn-gold{\r\n  background:linear-gradient(135deg, var(--fc-gold), var(--fc-gold2));\r\n  color:#111;\r\n}\r\n.fc4-btn-cyan{\r\n  background:linear-gradient(135deg, var(--fc-cyan), var(--fc-blue));\r\n  color:#041119;\r\n}\r\n.fc4-btn-outline{\r\n  background:rgba(255,255,255,.04);\r\n  color:#fff;\r\n  border:1px solid rgba(255,255,255,.12);\r\n}\r\n.fc4-btn-violet{\r\n  background:linear-gradient(135deg, var(--fc-violet2), var(--fc-magenta));\r\n  color:#fff;\r\n}\r\n.fc4-btn-danger{\r\n  background:rgba(255,107,138,.12);\r\n  color:#fff;\r\n  border:1px solid rgba(255,107,138,.26);\r\n}\r\n\r\n\/* =========================\r\n   OWNERS VAULT\r\n========================= *\/\r\n.fc4-gateCard{\r\n  text-align:center;\r\n  padding:28px 20px;\r\n}\r\n.fc4-gateCard h3{\r\n  margin:0;\r\n  font-size:clamp(2rem,6vw,3.2rem);\r\n  text-transform:uppercase;\r\n}\r\n.fc4-gateCard p{\r\n  margin:14px auto 0;\r\n  max-width:720px;\r\n  color:var(--fc-soft);\r\n  line-height:1.8;\r\n}\r\n\r\n.fc4-vaultWrap{display:none;}\r\n.fc4-vaultWrap.open{display:block;}\r\n\r\n.fc4-vaultHero{\r\n  padding:24px 20px;\r\n}\r\n.fc4-vaultTop{\r\n  display:grid;\r\n  grid-template-columns:1.1fr .9fr;\r\n  gap:20px;\r\n}\r\n.fc4-vaultLead{\r\n  margin-top:14px;\r\n  color:var(--fc-soft);\r\n  line-height:1.82;\r\n  max-width:760px;\r\n}\r\n.fc4-miniPills{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  gap:10px;\r\n  margin-top:18px;\r\n}\r\n.fc4-miniPill{\r\n  min-height:38px;\r\n  padding:0 14px;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  border-radius:999px;\r\n  background:rgba(255,255,255,.05);\r\n  border:1px solid rgba(255,255,255,.10);\r\n  font-size:.72rem;\r\n  font-weight:800;\r\n  letter-spacing:.14em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.fc4-coinPanel{\r\n  padding:18px;\r\n  border-radius:30px;\r\n  background:\r\n    radial-gradient(circle at 22% 16%, rgba(244,210,122,.10), transparent 22%),\r\n    radial-gradient(circle at 82% 80%, rgba(220,124,255,.12), transparent 22%),\r\n    linear-gradient(180deg, rgba(10,15,28,.96), rgba(4,7,18,.995));\r\n  border:1px solid rgba(255,255,255,.10);\r\n  box-shadow:0 0 36px rgba(88,219,255,.08);\r\n}\r\n.fc4-coinTop{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  gap:14px;\r\n}\r\n.fc4-coinMeta{\r\n  display:flex;\r\n  flex-direction:column;\r\n  gap:8px;\r\n}\r\n.fc4-coinLabel{\r\n  font-size:.74rem;\r\n  font-weight:800;\r\n  letter-spacing:.18em;\r\n  text-transform:uppercase;\r\n  color:#fff0c4;\r\n}\r\n.fc4-coinAmount{\r\n  font-size:clamp(2rem,5vw,3rem);\r\n  line-height:.95;\r\n  font-weight:900;\r\n}\r\n.fc4-coinSub{\r\n  color:var(--fc-soft);\r\n  font-size:.92rem;\r\n}\r\n.fc4-coinIconWrap{\r\n  position:relative;\r\n  width:120px;\r\n  height:120px;\r\n  flex-shrink:0;\r\n  border-radius:50%;\r\n  overflow:hidden;\r\n  animation:fc4CoinFloat 4.8s ease-in-out infinite;\r\n}\r\n.fc4-coinIconWrap::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-10px;\r\n  border-radius:50%;\r\n  background:conic-gradient(from 0deg, rgba(244,210,122,.88), rgba(88,219,255,.78), rgba(220,124,255,.76), rgba(244,210,122,.88));\r\n  filter:blur(16px);\r\n  opacity:.76;\r\n}\r\n.fc4-coinIconWrap img{\r\n  position:relative;\r\n  z-index:2;\r\n  width:100%;\r\n  height:100%;\r\n  object-fit:cover;\r\n  display:block;\r\n}\r\n.fc4-coinBtns{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  gap:10px;\r\n  margin-top:18px;\r\n}\r\n\r\n.fc4-vaultStats{\r\n  margin-top:20px;\r\n  display:grid;\r\n  grid-template-columns:repeat(4,minmax(0,1fr));\r\n  gap:14px;\r\n}\r\n.fc4-stat{\r\n  padding:16px;\r\n  border-radius:22px;\r\n  background:rgba(255,255,255,.04);\r\n  border:1px solid rgba(255,255,255,.08);\r\n}\r\n.fc4-statNum{\r\n  font-size:clamp(22px,4vw,34px);\r\n  font-weight:900;\r\n}\r\n.fc4-statLabel{\r\n  margin-top:8px;\r\n  color:var(--fc-soft2);\r\n  font-size:.72rem;\r\n  letter-spacing:.14em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.fc4-vaultGrid{\r\n  margin-top:24px;\r\n  display:grid;\r\n  grid-template-columns:1.15fr .85fr;\r\n  gap:20px;\r\n}\r\n.fc4-vaultPanel{\r\n  padding:22px 18px;\r\n}\r\n.fc4-vaultHead{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:center;\r\n  gap:12px;\r\n  flex-wrap:wrap;\r\n  margin-bottom:14px;\r\n}\r\n.fc4-vaultTitle{\r\n  margin:0;\r\n  font-size:clamp(1.7rem,4vw,2.5rem);\r\n  text-transform:uppercase;\r\n  line-height:.94;\r\n}\r\n.fc4-vaultCopy{\r\n  color:var(--fc-soft);\r\n  line-height:1.78;\r\n  font-size:.95rem;\r\n}\r\n\r\n.fc4-ownGrid{\r\n  display:grid;\r\n  gap:14px;\r\n  margin-top:14px;\r\n}\r\n.fc4-ownCard{\r\n  position:relative;\r\n  overflow:hidden;\r\n  display:grid;\r\n  grid-template-columns:110px 1fr;\r\n  gap:14px;\r\n  padding:14px;\r\n  border-radius:24px;\r\n  background:linear-gradient(180deg, rgba(12,18,34,.94), rgba(5,8,18,.995));\r\n  border:1px solid rgba(255,255,255,.08);\r\n}\r\n.fc4-ownCard::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  border-radius:inherit;\r\n  pointer-events:none;\r\n}\r\n.fc4-ownCard.gold::after{box-shadow:inset 0 0 0 2px rgba(244,210,122,.28);}\r\n.fc4-ownCard.blue::after{box-shadow:inset 0 0 0 2px rgba(88,219,255,.26);}\r\n.fc4-ownCard.green::after{box-shadow:inset 0 0 0 2px rgba(67,240,186,.26);}\r\n.fc4-ownCard.purple::after{box-shadow:inset 0 0 0 2px rgba(220,124,255,.26);}\r\n.fc4-ownMedia{\r\n  height:100px;\r\n  border-radius:18px;\r\n  background:#111 center center \/ cover no-repeat;\r\n}\r\n.fc4-ownTitle{\r\n  margin:0;\r\n  font-size:1.15rem;\r\n  line-height:1.05;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n}\r\n.fc4-ownMeta{\r\n  margin-top:8px;\r\n  color:var(--fc-soft);\r\n  line-height:1.7;\r\n  font-size:.92rem;\r\n}\r\n.fc4-ownPills{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  gap:8px;\r\n  margin-top:10px;\r\n}\r\n.fc4-ownPill{\r\n  min-height:34px;\r\n  padding:0 12px;\r\n  border-radius:999px;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  background:rgba(255,255,255,.05);\r\n  border:1px solid rgba(255,255,255,.10);\r\n  font-size:.64rem;\r\n  font-weight:800;\r\n  letter-spacing:.12em;\r\n  text-transform:uppercase;\r\n}\r\n.fc4-ownActions{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  gap:10px;\r\n  margin-top:12px;\r\n}\r\n\r\n.fc4-rightStack{\r\n  display:grid;\r\n  gap:18px;\r\n}\r\n.fc4-rightChips{\r\n  display:flex;\r\n  gap:10px;\r\n  flex-wrap:wrap;\r\n  margin-top:14px;\r\n}\r\n.fc4-rightChip{\r\n  min-height:38px;\r\n  padding:0 14px;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  border-radius:999px;\r\n  background:rgba(255,255,255,.05);\r\n  border:1px solid rgba(255,255,255,.10);\r\n  font-size:.68rem;\r\n  font-weight:800;\r\n  letter-spacing:.14em;\r\n  text-transform:uppercase;\r\n  color:#eef7ff;\r\n}\r\n.fc4-actionsGrid{\r\n  display:grid;\r\n  grid-template-columns:repeat(2,minmax(0,1fr));\r\n  gap:12px;\r\n  margin-top:16px;\r\n}\r\n.fc4-action{\r\n  position:relative;\r\n  overflow:hidden;\r\n  min-height:130px;\r\n  padding:18px;\r\n  border:none;\r\n  border-radius:24px;\r\n  text-align:left;\r\n  cursor:pointer;\r\n  color:#fff;\r\n  background:linear-gradient(180deg, rgba(9,14,28,.96), rgba(4,7,18,.995));\r\n  border:1px solid rgba(255,255,255,.08);\r\n  transition:transform .2s ease, box-shadow .2s ease;\r\n}\r\n.fc4-action:hover{transform:translateY(-3px);}\r\n.fc4-action::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  border-radius:inherit;\r\n  pointer-events:none;\r\n}\r\n.fc4-action.use::after{box-shadow:inset 0 0 0 2px rgba(67,240,186,.28);}\r\n.fc4-action.exchange::after{box-shadow:inset 0 0 0 2px rgba(88,219,255,.28);}\r\n.fc4-action.trade::after{box-shadow:inset 0 0 0 2px rgba(220,124,255,.28);}\r\n.fc4-action.buy::after{box-shadow:inset 0 0 0 2px rgba(244,210,122,.28);}\r\n.fc4-actionTitle{\r\n  display:block;\r\n  font-size:1.08rem;\r\n  line-height:1.02;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n}\r\n.fc4-actionCopy{\r\n  display:block;\r\n  margin-top:10px;\r\n  color:var(--fc-soft);\r\n  line-height:1.7;\r\n  font-size:.86rem;\r\n}\r\n\r\n.fc4-buyPanel{\r\n  margin-top:18px;\r\n  padding:18px;\r\n  border-radius:26px;\r\n  background:\r\n    radial-gradient(circle at 18% 18%, rgba(244,210,122,.10), transparent 24%),\r\n    linear-gradient(180deg, rgba(12,18,34,.96), rgba(5,8,18,.995));\r\n  border:1px solid rgba(255,255,255,.08);\r\n}\r\n.fc4-buyRow{\r\n  display:grid;\r\n  grid-template-columns:repeat(3,minmax(0,1fr));\r\n  gap:12px;\r\n  margin-top:14px;\r\n}\r\n.fc4-buyTier{\r\n  position:relative;\r\n  overflow:hidden;\r\n  min-height:140px;\r\n  padding:16px;\r\n  border-radius:22px;\r\n  background:rgba(255,255,255,.04);\r\n  border:1px solid rgba(255,255,255,.10);\r\n}\r\n.fc4-buyTier::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  border-radius:inherit;\r\n  box-shadow:inset 0 0 0 2px rgba(244,210,122,.22);\r\n  pointer-events:none;\r\n}\r\n.fc4-buyTier strong{\r\n  display:block;\r\n  font-size:1.25rem;\r\n  text-transform:uppercase;\r\n}\r\n.fc4-buyTier span{\r\n  display:block;\r\n  margin-top:8px;\r\n  color:var(--fc-soft);\r\n  line-height:1.6;\r\n  font-size:.9rem;\r\n}\r\n.fc4-footerNote{\r\n  margin-top:18px;\r\n  color:var(--fc-soft2);\r\n  line-height:1.76;\r\n  font-size:.82rem;\r\n}\r\n\r\n\/* =========================\r\n   MODAL\r\n========================= *\/\r\n.fc4-modal{\r\n  position:fixed;\r\n  inset:0;\r\n  display:none;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:18px;\r\n  background:rgba(0,0,0,.62);\r\n  z-index:80;\r\n}\r\n.fc4-modal.open{display:flex;}\r\n.fc4-modalCard{\r\n  width:min(94vw,720px);\r\n  padding:22px;\r\n}\r\n.fc4-modalTop{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:center;\r\n  gap:12px;\r\n}\r\n.fc4-modalTitle{\r\n  margin:0;\r\n  font-size:clamp(1.8rem,5vw,2.7rem);\r\n  text-transform:uppercase;\r\n}\r\n.fc4-close{\r\n  width:44px;\r\n  height:44px;\r\n  border:none;\r\n  border-radius:50%;\r\n  cursor:pointer;\r\n  background:rgba(255,255,255,.06);\r\n  color:#fff;\r\n  font-size:1.1rem;\r\n}\r\n.fc4-modalCopy{\r\n  margin-top:12px;\r\n  color:var(--fc-soft);\r\n  line-height:1.8;\r\n}\r\n.fc4-form{\r\n  display:grid;\r\n  gap:12px;\r\n  grid-template-columns:repeat(2,minmax(0,1fr));\r\n  margin-top:18px;\r\n}\r\n.fc4-form .full{grid-column:1\/-1;}\r\n.fc4-input,\r\n.fc4-textarea{\r\n  width:100%;\r\n  min-height:52px;\r\n  padding:14px 16px;\r\n  border-radius:18px;\r\n  border:1px solid rgba(255,255,255,.10);\r\n  background:rgba(255,255,255,.05);\r\n  color:#fff;\r\n  outline:none;\r\n  font-size:.92rem;\r\n}\r\n.fc4-textarea{\r\n  min-height:120px;\r\n  resize:vertical;\r\n}\r\n.fc4-note{\r\n  margin-top:14px;\r\n  color:var(--fc-soft2);\r\n  line-height:1.72;\r\n  font-size:.82rem;\r\n}\r\n\r\n\/* =========================\r\n   RESPONSIVE\r\n========================= *\/\r\n@media (min-width: 980px){\r\n  .fc4-shell{padding:24px 28px 96px;}\r\n  .fc4-mainGrid{grid-template-columns:repeat(3,minmax(0,1fr));}\r\n  .fc4-circleGrid{grid-template-columns:repeat(2,minmax(0,1fr));}\r\n}\r\n@media (max-width: 1100px){\r\n  .fc4-vaultTop{grid-template-columns:1fr;}\r\n  .fc4-vaultGrid{grid-template-columns:1fr;}\r\n}\r\n@media (max-width: 760px){\r\n  .fc4-btnRow{flex-direction:column;}\r\n  .fc4-vaultStats{grid-template-columns:repeat(2,minmax(0,1fr));}\r\n  .fc4-actionsGrid{grid-template-columns:1fr;}\r\n  .fc4-buyRow{grid-template-columns:1fr;}\r\n  .fc4-ownCard{grid-template-columns:1fr;}\r\n  .fc4-ownMedia{height:180px;}\r\n  .fc4-form{grid-template-columns:1fr;}\r\n}\r\n\r\n\/* =========================\r\n   ANIMATIONS\r\n========================= *\/\r\n@keyframes fc4Fade{\r\n  from{opacity:0;transform:translateY(8px);}\r\n  to{opacity:1;transform:none;}\r\n}\r\n@keyframes fc4Wheel{\r\n  0%{opacity:0;transform:translate(-50%,0);}\r\n  30%{opacity:1;}\r\n  100%{opacity:0;transform:translate(-50%,14px);}\r\n}\r\n@keyframes fc4Star{\r\n  from{transform:translateY(0);opacity:.4;}\r\n  to{transform:translateY(-60px);opacity:1;}\r\n}\r\n@keyframes fc4Streak{\r\n  0%{opacity:0;transform:translate(-50%,-50%) rotate(var(--r,0deg)) translateY(-180px) scaleY(.1)}\r\n  12%{opacity:.8}\r\n  100%{opacity:0;transform:translate(-50%,-50%) rotate(var(--r,0deg)) translateY(-8px) scaleY(1)}\r\n}\r\n@keyframes fc4CoinFloat{\r\n  0%{transform:translateY(0px);}\r\n  50%{transform:translateY(-6px);}\r\n  100%{transform:translateY(0px);}\r\n}\r\n#fc4MenuBtn{\r\n  position:fixed !important;\r\n  top:18px !important;\r\n  right:18px !important;\r\n  z-index:2147483647 !important;\r\n  pointer-events:auto !important;\r\n}\r\n\r\n#fc4MenuPanel{\r\n  position:fixed !important;\r\n  top:76px !important;\r\n  right:18px !important;\r\n  z-index:2147483646 !important;\r\n  pointer-events:auto !important;\r\n}\r\n\r\n.fc4-hero-bg,\r\n.fc4-stars,\r\n.fc4-streaks{\r\n  pointer-events:none !important;\r\n}\r\n\r\n\/* =========================\r\n   THE CIRCLE WALLET EMBED FIX\r\n========================= *\/\r\n.fc4-circleWalletPage{\r\n  position:relative;\r\n  min-height:100vh;\r\n  overflow:hidden;\r\n}\r\n.fc4-circleExitBtn{\r\n  position:fixed !important;\r\n  top:18px !important;\r\n  left:76px !important;\r\n  z-index:2147483647 !important;\r\n  background:rgba(0,0,0,.62) !important;\r\n  border:1px solid rgba(244,210,122,.45) !important;\r\n  color:#fff0be !important;\r\n  box-shadow:0 0 22px rgba(244,210,122,.20) !important;\r\n}\r\n.fc4-circleCompatDummies{\r\n  display:none !important;\r\n  visibility:hidden !important;\r\n  width:0 !important;\r\n  height:0 !important;\r\n  overflow:hidden !important;\r\n}\r\n<\/style>\r\n\r\n<div id=\"fc4Overlay\" aria-hidden=\"true\">\r\n  <div class=\"fc4-wrap\">\r\n\r\n    <button id=\"fc4BackBtn\" class=\"fc4-backSolo\" type=\"button\">\u2190<\/button>\r\n\r\n<button id=\"fc4MenuBtn\" class=\"fc4-menuBtn\" type=\"button\">\u2630<\/button>\r\n\r\n<div id=\"fc4MenuPanel\" class=\"fc4-menuPanel\" aria-hidden=\"true\">\r\n\r\n  <div class=\"fc4-menuSection\">\r\n    <h3 class=\"fc4-menuTitle\">Luxury Fractional Club<\/h3>\r\n    <p class=\"fc4-menuText\">\r\n      Access, preview, and ownership pathways inside the Luxury Fractional Club.\r\n    <\/p>\r\n  <\/div>\r\n\r\n  <div class=\"fc4-menuSection\">\r\n    <div class=\"fc4-menuList\">\r\n      <button class=\"fc4-menuLink\" type=\"button\" data-fc4-legal=\"about\">About the Club<\/button>\r\n      <button class=\"fc4-menuLink\" type=\"button\" data-fc4-legal=\"ownership\">Access &#038; Ownership<\/button>\r\n      <button class=\"fc4-menuLink\" type=\"button\" data-fc4-legal=\"disclosures\">Legal &#038; Disclosures<\/button>\r\n      <button class=\"fc4-menuLink\" type=\"button\" data-fc4-legal=\"terms\">Terms of Use<\/button>\r\n      <button class=\"fc4-menuLink\" type=\"button\" data-fc4-legal=\"privacy\">Privacy Notice<\/button>\r\n      <button class=\"fc4-menuLink\" type=\"button\" data-fc4-legal=\"contact\">Contact<\/button>\r\n    <\/div>\r\n\r\n    <div id=\"fc4Legal-about\" class=\"fc4-legalBlock\">\r\n      <h4>About the Club<\/h4>\r\n      <p>\r\n        Luxury Fractional Club is a platform designed to present access pathways, preview options, ownership-related services, and internal usage systems connected to participating properties, experiences, and reservation routes.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div id=\"fc4Legal-ownership\" class=\"fc4-legalBlock\">\r\n      <h4>Access &#038; Ownership<\/h4>\r\n      <p>\r\n        Participation in the Luxury Fractional Club and associated services does not automatically constitute direct real estate ownership, equity interest, or securities investment unless explicitly stated in a separate legally binding agreement.\r\n      <\/p>\r\n      <p>\r\n        Bliss Coin is a digital representation of usage rights and access intervals within participating properties, services, or experiences. Bliss Coin does not represent a cryptocurrency, financial instrument, security, or ownership stake in real estate or any company unless expressly defined in a formal agreement.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div id=\"fc4Legal-disclosures\" class=\"fc4-legalBlock\">\r\n      <h4>Legal &#038; Disclosures<\/h4>\r\n      <p>\r\n        Copyright \u00a9 2026 Bliss Club VIP. All Rights Reserved.\r\n      <\/p>\r\n      <p>\r\n        This material is provided for informational and promotional purposes only and is intended for the solicitation of vacation access, fractional usage rights, and related services offered through the platform.\r\n      <\/p>\r\n      <p>\r\n        All experiences, accommodations, transportation, VIP services, and ownership-related offerings are subject to availability, third-party provider terms, internal platform rules, and applicable agreements.\r\n      <\/p>\r\n      <p>\r\n        Any references to investments, business opportunities, or participation in small and medium-sized enterprises are provided for informational purposes only. No guarantees of financial return, profit, or performance are expressed or implied.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div id=\"fc4Legal-terms\" class=\"fc4-legalBlock\">\r\n      <h4>Terms of Use<\/h4>\r\n      <p>\r\n        By accessing and using this platform, users agree to comply with all applicable terms, conditions, and policies governing usage, reservations, memberships, ownership-related services, and internal access systems.\r\n      <\/p>\r\n      <p>\r\n        The platform reserves the right to modify, suspend, or discontinue any part of the services at any time without prior notice.\r\n      <\/p>\r\n      <p>\r\n        All services, agreements, and interactions provided through this platform are governed by and interpreted in accordance with the laws of Medell\u00edn, Antioquia, Republic of Colombia.\r\n      <\/p>\r\n      <p>\r\n        Any disputes arising from the use of this platform shall be subject to the jurisdiction of the competent courts located in Medell\u00edn, Antioquia, Colombia.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div id=\"fc4Legal-privacy\" class=\"fc4-legalBlock\">\r\n      <h4>Privacy Notice<\/h4>\r\n      <p>\r\n        This platform may collect personal information including, but not limited to, names, contact details, and usage data for the purpose of providing services, improving user experience, facilitating reservations, and supporting transactions.\r\n      <\/p>\r\n      <p>\r\n        By using this platform, you consent to the collection and use of your information in accordance with applicable data protection laws and platform policies.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div id=\"fc4Legal-contact\" class=\"fc4-legalBlock\">\r\n      <h4>Contact<\/h4>\r\n      <p>\r\n        Bliss Club VIP<br>\r\n        Medell\u00edn, Antioquia, Colombia<br>\r\n        Email: Godsgalaxygame@gmail.com\r\n      <\/p>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n    \r\n    <!-- HOME -->\r\n    <section id=\"fc4HomePage\" class=\"fc4-page active\">\r\n      <section class=\"fc4-hero\">\r\n        <div class=\"fc4-hero-sticky\">\r\n          <div class=\"fc4-hero-bg\"><\/div>\r\n          <div id=\"fc4Stars\" class=\"fc4-stars\"><\/div>\r\n          <div id=\"fc4Streaks\" class=\"fc4-streaks\"><\/div>\r\n\r\n          <div class=\"fc4-hero-inner\">\r\n            <div class=\"fc4-logoWrap\">\r\n              <div class=\"fc4-logoAura\"><\/div>\r\n              <div class=\"fc4-logoGlass\"><\/div>\r\n              <div class=\"fc4-logo\">\r\n                <img decoding=\"async\" src=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/09\/27c6b457-5c8b-4700-bcd9-7e01a830827d.png\"\r\nalt=\"Bliss Private Access\"\r\n>\r\n              <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"fc4-copy\">\r\n\r\n  <div class=\"fc4-kicker\">\r\n    Bliss Private Access\r\n  <\/div>\r\n\r\n  <h1 class=\"fc4-title\">\r\n    Where Travel<br>\r\n    <span class=\"glow\">Becomes Ownership<\/span>\r\n  <\/h1>\r\n\r\n  <p class=\"fc4-sub\">\r\n    Reserve the journey.<br>\r\n    Experience the lifestyle.<br>\r\n    Enter The Circle.\r\n  <\/p>\r\n\r\n              <div class=\"fc4-scroll\">\r\n                <div class=\"fc4-wheel\"><\/div>\r\n                Scroll to Begin\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/section>\r\n\r\n      <div class=\"fc4-shell fc4-mainReveal\">\r\n        <div class=\"fc4-grid fc4-mainGrid\">\r\n          <button id=\"fc4SignatureBtn\" class=\"fc4-gate signature\" type=\"button\">\r\n            <div class=\"fc4-gateInner\">\r\n              <div class=\"fc4-gateOrb\"><\/div>\r\n              <div class=\"fc4-gateTitle\">Reservations<\/div>\r\n<div class=\"fc4-gateSub\">Reserve The Journey<\/div>\r\n            <\/div>\r\n          <\/button>\r\n\r\n          <button id=\"fc4FlexibleBtn\" class=\"fc4-gate flexible\" type=\"button\">\r\n            <div class=\"fc4-gateInner\">\r\n              <div class=\"fc4-gateOrb\"><\/div>\r\n              <div class=\"fc4-gateTitle\">Experiences<\/div>\r\n              <div class=\"fc4-gateSub\">Experience The Lifestyle.<\/div>\r\n            <\/div>\r\n          <\/button>\r\n\r\n          <button id=\"fc4OwnersBtn\" class=\"fc4-gate vault\" type=\"button\">\r\n            <div class=\"fc4-gateInner\">\r\n              <div class=\"fc4-gateOrb\"><\/div>\r\n              <div class=\"fc4-gateTitle\">The Circle<\/div>\r\n              <div class=\"fc4-gateSub\">Own The Circle<\/div>\r\n            <\/div>\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- BRANCH -->\r\n    <section id=\"fc4BranchPage\" class=\"fc4-page\">\r\n      <div class=\"fc4-shell\">\r\n        <div class=\"fc4-backRow\">\r\n          <button id=\"fc4BackFromBranch\" class=\"fc4-backBtn\" type=\"button\">\u2190 Back<\/button>\r\n          <div id=\"fc4BranchPill\" class=\"fc4-chip\">Selection<\/div>\r\n        <\/div>\r\n\r\n        <div class=\"fc4-panel fc4-section\">\r\n          <h2 id=\"fc4BranchTitle\" class=\"fc4-sectionTitle\">Selection <span class=\"glow\">Path<\/span><\/h2>\r\n          <p id=\"fc4BranchCopy\" class=\"fc4-sectionCopy\">Choose the next level.<\/p>\r\n          <div id=\"fc4BranchGrid\" class=\"fc4-circleGrid\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- NODE -->\r\n    <section id=\"fc4NodePage\" class=\"fc4-page\">\r\n      <div class=\"fc4-shell\">\r\n        <div class=\"fc4-backRow\">\r\n          <button id=\"fc4BackFromNode\" class=\"fc4-backBtn\" type=\"button\">\u2190 Back<\/button>\r\n          <div id=\"fc4NodePill\" class=\"fc4-chip\">Options<\/div>\r\n        <\/div>\r\n\r\n        <div class=\"fc4-panel fc4-section\">\r\n          <h2 id=\"fc4NodeTitle\" class=\"fc4-sectionTitle\">Inside <span class=\"glow\">Selection<\/span><\/h2>\r\n          <p id=\"fc4NodeCopy\" class=\"fc4-sectionCopy\">Choose one of the internal options.<\/p>\r\n          <div id=\"fc4NodeGrid\" class=\"fc4-circleGrid\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- DETAIL -->\r\n    <section id=\"fc4DetailPage\" class=\"fc4-page\">\r\n      <div class=\"fc4-shell\">\r\n        <div class=\"fc4-backRow\">\r\n          <button id=\"fc4BackFromDetail\" class=\"fc4-backBtn\" type=\"button\">\u2190 Back<\/button>\r\n          <div id=\"fc4DetailPill\" class=\"fc4-chip\">Selection<\/div>\r\n        <\/div>\r\n\r\n        <div class=\"fc4-panel fc4-detailCard\">\r\n          <h2 id=\"fc4DetailTitle\" class=\"fc4-detailTitle\">Selection<\/h2>\r\n          <div id=\"fc4DetailKicker\" class=\"fc4-detailKicker\">Access<\/div>\r\n          <div id=\"fc4DetailText\" class=\"fc4-detailText\"><\/div>\r\n\r\n          <div class=\"fc4-btnRow\">\r\n            <button id=\"fc4AddSelectionBtn\" class=\"fc4-btn fc4-btn-outline\" type=\"button\">Add to Selection<\/button>\r\n            <button id=\"fc4OpenRequestBtn\" class=\"fc4-btn fc4-btn-gold\" type=\"button\">Submit Request<\/button>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <!-- THE CIRCLE \/ NEW WALLET SYSTEM - REPLACES OLD OWNERS VAULT -->\r\n    <section id=\"fc4OwnersPage\" class=\"fc4-page fc4-circleWalletPage\">\r\n      <button id=\"fc4BackFromOwners\" class=\"fc4-backBtn fc4-circleExitBtn\" type=\"button\">\u2190 Back to Fractional Club<\/button>\r\n\r\n      <!-- Compatibility dummies for the old FC4 script. Do not remove. -->\r\n      <div class=\"fc4-circleCompatDummies\" aria-hidden=\"true\">\r\n        <div id=\"fc4GateCard\"><\/div>\r\n        <div id=\"fc4VaultWrap\"><\/div>\r\n        <div id=\"fc4OwnershipGrid\"><\/div>\r\n        <div id=\"fc4RightsWrap\"><\/div>\r\n        <button id=\"fc4BuyCoinBtn\" type=\"button\"><\/button>\r\n        <button id=\"fc4CoinHistoryBtn\" type=\"button\"><\/button>\r\n        <button id=\"fc4VaultUseBtn\" type=\"button\"><\/button>\r\n        <button id=\"fc4VaultExchangeBtn\" type=\"button\"><\/button>\r\n        <button id=\"fc4VaultTradeBtn\" type=\"button\"><\/button>\r\n        <button id=\"fc4VaultBuyBtn\" type=\"button\"><\/button>\r\n        <button id=\"fc4BuyStarterBtn\" type=\"button\"><\/button>\r\n        <button id=\"fc4BuyPremiumBtn\" type=\"button\"><\/button>\r\n        <button id=\"fc4BuyVaultBtn\" type=\"button\"><\/button>\r\n      <\/div>\r\n\r\n<style>\r\n\/* =========================================================\r\n   GODS GALAXY GAME \u2014 THE CIRCLE COMPLETE SYSTEM\r\n========================================================= *\/\r\n\r\nhtml, body{\r\n  margin:0 !important;\r\n  padding:0 !important;\r\n  overflow:hidden !important;\r\n  background:#000 !important;\r\n}\r\n\r\n\/* =========================\r\n   FRONT ENTRY SCREEN\r\n========================= *\/\r\n#circleEntryScreen,\r\n#joinCircleScreen,\r\n#enterCircleScreen{\r\n  position:fixed;\r\n  inset:0;\r\n  z-index:2147483647;\r\n  overflow:hidden;\r\n  background:transparent !important;\r\n  color:white;\r\n  font-family:Arial,sans-serif;\r\n}\r\n\r\n#joinCircleScreen,\r\n#enterCircleScreen{\r\n  display:none;\r\n}\r\n\r\n#circleBg,\r\n#joinCircleBg,\r\n#enterCircleBg{\r\n  position:absolute;\r\n  inset:0;\r\n  width:100%;\r\n  height:100%;\r\n  object-fit:cover;\r\n}\r\n\r\n#circleBg{\r\n  transition:transform 1.15s cubic-bezier(.16,.9,.2,1), filter 1.15s ease;\r\n}\r\n\r\n.circleZone{\r\n  position:absolute;\r\n  top:0;\r\n  width:50%;\r\n  height:100%;\r\n  z-index:5;\r\n  cursor:pointer;\r\n}\r\n\r\n#enterZone{left:0;}\r\n#joinZone{right:0;}\r\n\r\n#enterText{\r\n  left:7%;\r\n  color:#ffffff;\r\n\r\n  text-shadow:\r\n    0 0 6px #ffffff,\r\n    0 0 12px #ffffff,\r\n    0 0 20px #58dbff,   \/* cyan glow *\/\r\n    0 0 40px #58dbff,\r\n    0 4px 18px rgba(0,0,0,.95);\r\n}\r\n\r\n#joinText{\r\n  right:7%;\r\n  color:#ffffff;\r\n\r\n  text-shadow:\r\n    0 0 6px #ffffff,\r\n    0 0 12px #ffffff,\r\n    0 0 20px #f4d27a,   \/* gold glow *\/\r\n    0 0 40px #f4d27a,\r\n    0 4px 18px rgba(0,0,0,.95);\r\n}\r\n\r\n.circleText{\r\n  position:absolute;\r\n  z-index:6;\r\n  top:54%;\r\n  transform:translateY(-50%);\r\n  width:34%;\r\n  text-align:center;\r\n  pointer-events:none;\r\n  text-transform:uppercase;\r\n  font-weight:900;\r\n  letter-spacing:.12em;\r\n}\r\n\r\n.circleText h2{\r\n  margin:0;\r\n  font-size:clamp(1.6rem,4vw,4.2rem);\r\n  line-height:.92;\r\n}\r\n\r\n.circleText p{\r\n  margin:14px auto 0;\r\n  max-width:360px;\r\n  font-size:clamp(.72rem,1.1vw,.95rem);\r\n  line-height:1.6;\r\n  color:rgba(255,255,255,.75);\r\n}\r\n\r\n#centerCrownText{\r\n  position:absolute;\r\n  z-index:6;\r\n  left:50%;\r\n  top:69%;\r\n  transform:translateX(-50%);\r\n  text-align:center;\r\n  color:white;\r\n  text-transform:uppercase;\r\n  letter-spacing:.18em;\r\n  font-weight:900;\r\n  text-shadow:0 0 18px rgba(255,255,255,.55);\r\n  pointer-events:none;\r\n}\r\n\r\n#centerCrownText small{\r\n  display:block;\r\n  margin-top:8px;\r\n  color:rgba(255,255,255,.68);\r\n  font-size:.68rem;\r\n}\r\n\r\n.zoomEnter #circleBg{\r\n  transform:scale(2.65) translateX(22%) translateY(2%);\r\n  filter:blur(5px) brightness(1.25);\r\n}\r\n\r\n.zoomJoin #circleBg{\r\n  transform:scale(2.65) translateX(-22%) translateY(2%);\r\n  filter:blur(5px) brightness(1.25);\r\n}\r\n\r\n.circleFlash{\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:8;\r\n  background:radial-gradient(circle at center, rgba(255,255,255,.75), transparent 45%);\r\n  opacity:0;\r\n  pointer-events:none;\r\n  transition:opacity .55s ease;\r\n}\r\n\r\n.zoomEnter .circleFlash,\r\n.zoomJoin .circleFlash{\r\n  opacity:1;\r\n}\r\n\r\n\/* =========================\r\n   JOIN THE CIRCLE\r\n========================= *\/\r\n#joinCircleBg{\r\n  filter:brightness(.85);\r\n  transition:transform .8s ease;\r\n}\r\n\r\n.joinOverlay{\r\n  position:absolute;\r\n  inset:0;\r\n  background:\r\n    radial-gradient(circle at center, rgba(244,210,122,.12), transparent 40%),\r\n    linear-gradient(180deg, rgba(0,0,0,.08), rgba(0,0,0,.82));\r\n}\r\n\r\n.joinContent{\r\n  position:relative;\r\n  z-index:2;\r\n  height:100%;\r\n  display:flex;\r\n  flex-direction:column;\r\n  justify-content:center;\r\n  align-items:center;\r\n  text-align:center;\r\n  transition:.5s ease;\r\n  padding:24px;\r\n}\r\n\r\n.joinContent.hidden{\r\n  opacity:0;\r\n  transform:scale(.9);\r\n  pointer-events:none;\r\n}\r\n\r\n.joinTitle{\r\n  font-size:clamp(3rem,7vw,6rem);\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n  margin:0 0 30px;\r\n  text-shadow:0 0 34px rgba(244,210,122,.35);\r\n}\r\n\r\n.joinOrbSystem{\r\n  position:relative;\r\n  width:min(700px,90vw);\r\n  height:min(700px,90vw);\r\n}\r\n\r\n\/* SAME DNA AS ENTER ORBS *\/\r\n.joinOrb{\r\n  position:absolute;\r\n  width:180px;\r\n  height:180px;\r\n  border-radius:50%;\r\n  border:none;\r\n  cursor:pointer;\r\n  color:white;\r\n\r\n  overflow:hidden; \r\n\r\n  background:radial-gradient(circle at 35% 25%, rgba(255,255,255,.18), rgba(4,12,28,.96) 38%, #000 72%);\r\n  border:1px solid rgba(244,210,122,.4);\r\n\r\n  box-shadow:\r\n    inset 0 0 0 1px rgba(255,255,255,.06),\r\n    0 0 30px rgba(244,210,122,.25),\r\n    0 0 90px rgba(244,210,122,.12);\r\n\r\n  animation:joinOrbFloat 5s ease-in-out infinite;\r\n  transition:.3s;\r\n}\r\n.joinOrb::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  border-radius:50%;\r\n  pointer-events:none;\r\n\r\n  background:\r\n    linear-gradient(135deg,\r\n      transparent 36%,\r\n      rgba(255,255,255,.20) 45%,\r\n      rgba(255,255,255,.42) 50%,\r\n      rgba(255,255,255,.18) 55%,\r\n      transparent 64%\r\n    ),\r\n    linear-gradient(45deg,\r\n      transparent 38%,\r\n      rgba(244,210,122,.16) 48%,\r\n      rgba(255,255,255,.26) 52%,\r\n      transparent 62%\r\n    );\r\n\r\n  filter:blur(1.5px);\r\n  opacity:.55;\r\n  mix-blend-mode:screen;\r\n}\r\n.joinOrb::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  left:50%;\r\n  top:50%;\r\n  width:92px;\r\n  height:92px;\r\n  transform:translate(-50%,-50%) rotate(45deg);\r\n  background:rgba(255,255,255,.10);\r\n  border:1px solid rgba(255,255,255,.20);\r\n  filter:blur(2px);\r\n  opacity:.45;\r\n  pointer-events:none;\r\n}\r\n\r\n.joinOrb:hover{\r\n  transform:scale(1.08);\r\n  box-shadow:0 0 60px rgba(244,210,122,.6);\r\n}\r\n\r\n.orbCoins{\r\n  position:absolute;\r\n  top:40px;\r\n  left:50%;\r\n  margin-left:-90px; \/* half of orb width *\/\r\n}\r\n\r\n.orbWeeks{\r\n  position:absolute;\r\n  top:50%;\r\n  left:40px;\r\n  margin-top:-90px;\r\n}\r\n\r\n.orbClub{\r\n  position:absolute;\r\n  top:50%;\r\n  right:40px;\r\n  margin-top:-90px;\r\n}\r\n\r\n.orbCard{\r\n  position:absolute;\r\n  bottom:40px;\r\n  left:50%;\r\n  margin-left:-90px;\r\n}\r\n\r\n.weeksLayer{\r\n  background:\r\n    linear-gradient(180deg, rgba(0,0,0,.35), rgba(0,0,0,.88)),\r\n    url(\"\") center\/cover no-repeat;\r\n}\r\n\r\n.weeksPriceGrid{\r\n  display:none !important;\r\n}\r\n\r\n.weeksIntro{\r\n  text-align:center;\r\n  max-width:760px;\r\n  margin-bottom:28px;\r\n}\r\n\r\n.weeksIntro p{\r\n  color:rgba(255,255,255,.72);\r\n  margin-top:10px;\r\n  letter-spacing:.08em;\r\n  text-transform:uppercase;\r\n  font-size:12px;\r\n}\r\n\r\n.weeksPropertyGrid{\r\n  display:grid;\r\n  grid-template-columns:repeat(2, minmax(220px, 1fr));\r\n  gap:22px;\r\n  width:min(900px,92vw);\r\n}\r\n\r\n.weeksPropertyOrb{\r\n  min-height:120px;\r\n  border-radius:999px;\r\n  border:1px solid rgba(244,210,122,.35);\r\n  background:rgba(255,255,255,.07);\r\n  backdrop-filter:blur(14px);\r\n  color:#fff;\r\n  cursor:pointer;\r\n  box-shadow:0 0 28px rgba(244,210,122,.18);\r\n}\r\n\r\n.weeksPropertyOrb span{\r\n  display:block;\r\n  font-size:20px;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n  color:#fff0be;\r\n}\r\n\r\n.weeksPropertyOrb small{\r\n  display:block;\r\n  margin-top:8px;\r\n  color:rgba(255,255,255,.68);\r\n  text-transform:uppercase;\r\n  letter-spacing:.12em;\r\n  font-size:11px;\r\n}\r\n\r\n.weeksPropertyOrb:hover{\r\n  transform:scale(1.03);\r\n  box-shadow:0 0 44px rgba(244,210,122,.36);\r\n}\r\n\r\n.weeksPropertyOrb.disabled{\r\n  opacity:.45;\r\n  pointer-events:none;\r\n}\r\n\r\n.weeksPropertyDetail{\r\n  position:absolute;\r\n  inset:0;\r\n  display:none;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:24px;\r\n  text-align:center;\r\n  background:\r\n    linear-gradient(180deg, rgba(0,0,0,.25), rgba(0,0,0,.9)),\r\n    url(\"SELECTED_PROPERTY_BACKGROUND_URL_HERE\") center\/cover no-repeat;\r\n}\r\n\r\n.weeksPropertyDetail.active{\r\n  display:flex;\r\n}\r\n\r\n.weeksBackInside{\r\n  position:absolute;\r\n  top:22px;\r\n  left:22px;\r\n  border-radius:999px;\r\n  border:1px solid rgba(244,210,122,.4);\r\n  background:rgba(0,0,0,.55);\r\n  color:#fff0be;\r\n  padding:11px 16px;\r\n  cursor:pointer;\r\n}\r\n\r\n.weeksPropertyDetail h3{\r\n  font-size:clamp(2.4rem,7vw,5rem);\r\n  text-transform:uppercase;\r\n  margin:0;\r\n  color:#fff;\r\n  text-shadow:0 0 30px rgba(244,210,122,.35);\r\n}\r\n\r\n.weeksPropertyDetail p{\r\n  max-width:720px;\r\n  color:rgba(255,255,255,.74);\r\n  line-height:1.7;\r\n}\r\n.weeksPropertyDetail p{\r\n  display:none !important;\r\n}\r\n\r\n.weeksPriceGrid{\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n  justify-content:center;\r\n  gap:18px;\r\n  margin-top:26px;\r\n}\r\n\r\n.weeksBlissShowcase{\r\n  width:100vw !important;\r\n  max-width:none !important;\r\n  margin:0 !important;\r\n  padding:18px 10px 80px !important;\r\n  border-radius:0 !important;\r\n  background:\r\n    radial-gradient(circle at 20% 10%, rgba(244,210,122,.18), transparent 28%),\r\n    radial-gradient(circle at 80% 90%, rgba(88,219,255,.14), transparent 30%),\r\n    rgba(255,255,255,.045);\r\n  border-top:1px solid rgba(244,210,122,.24);\r\n  border-bottom:1px solid rgba(244,210,122,.24);\r\n}\r\n\r\n.weeksBlissImageGrid{\r\n  width:100% !important;\r\n  display:grid !important;\r\n  grid-template-columns:repeat(4, minmax(260px, 1fr)) !important;\r\n  gap:22px !important;\r\n}\r\n\r\n.weeksBlissSheet img{\r\n  width:100% !important;\r\n  height:auto !important;\r\n  object-fit:contain !important;\r\n  display:block !important;\r\n  border-radius:24px !important;\r\n}\r\n\r\n@media(max-width:900px){\r\n\r\n  .weeksBlissShowcase{\r\n  position:relative;\r\n  left:50%;\r\n  transform:translateX(-50%);\r\n  width:100vw !important;\r\n }\r\n\r\n  .weeksBlissImageGrid{\r\n    display:flex !important;\r\n    overflow-x:auto !important;\r\n    overflow-y:hidden !important;\r\n    scroll-snap-type:x mandatory !important;\r\n    -webkit-overflow-scrolling:touch !important;\r\n    touch-action:pan-x !important;\r\n    gap:16px !important;\r\n    padding:0 14px 20px !important;\r\n    width:100vw !important;\r\n  }\r\n\r\n  .weeksBlissSheet{\r\n    flex:0 0 88vw !important;\r\n    scroll-snap-align:center !important;\r\n    border-radius:26px !important;\r\n  }\r\n\r\n  .weeksBlissSheet img{\r\n    width:100% !important;\r\n    height:auto !important;\r\n    object-fit:contain !important;\r\n    display:block !important;\r\n  }\r\n}\r\n\r\n.weeksPriceOval{\r\n  min-width:220px;\r\n  min-height:92px;\r\n  border-radius:999px;\r\n  border:1px solid rgba(255,255,255,.20);\r\n  background:rgba(255,255,255,.08);\r\n  backdrop-filter:blur(16px);\r\n  color:#fff;\r\n  cursor:pointer;\r\n  box-shadow:0 0 26px rgba(88,219,255,.15);\r\n}\r\n\r\n.weeksPriceOval strong{\r\n  display:block;\r\n  font-size:17px;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.weeksPriceOval small{\r\n  display:block;\r\n  margin-top:7px;\r\n  color:rgba(255,255,255,.65);\r\n  font-size:11px;\r\n  text-transform:uppercase;\r\n  letter-spacing:.12em;\r\n}\r\n\r\n.coinsLayer{\r\n  overflow-y:auto !important;\r\n  padding:88px 18px 70px !important;\r\n}\r\n\r\n.coinsIntro{\r\n  text-align:center;\r\n  max-width:760px;\r\n  margin:0 auto 24px;\r\n}\r\n\r\n.coinsIntro h2{\r\n  font-size:clamp(2rem,8vw,4rem);\r\n  margin:0;\r\n  text-transform:uppercase;\r\n  color:#fff;\r\n  text-shadow:0 0 26px rgba(88,219,255,.35);\r\n}\r\n\r\n.coinsIntro p{\r\n  margin-top:10px;\r\n  color:rgba(255,255,255,.68);\r\n  font-size:12px;\r\n  letter-spacing:.12em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.coinsOrbGrid{\r\n  width:min(760px,92vw);\r\n  margin:0 auto;\r\n  display:grid;\r\n  grid-template-columns:repeat(2, minmax(180px,1fr));\r\n  gap:16px;\r\n}\r\n\r\n.coinsOrb{\r\n  min-height:112px !important;\r\n  border-radius:999px !important;\r\n  border:1px solid rgba(88,219,255,.35);\r\n  background:\r\n    radial-gradient(circle at 20% 20%, rgba(255,255,255,.16), transparent 24%),\r\n    linear-gradient(135deg, rgba(8,18,38,.92), rgba(0,0,0,.95));\r\n  color:#fff;\r\n  cursor:pointer;\r\n  box-shadow:\r\n    inset 0 0 0 1px rgba(255,255,255,.06),\r\n    0 0 26px rgba(88,219,255,.18);\r\n}\r\n\r\n.coinsOrb span{\r\n  display:block;\r\n  font-size:15px;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.coinsOrb small{\r\n  display:block;\r\n  margin-top:7px;\r\n  font-size:10px;\r\n  letter-spacing:.12em;\r\n  text-transform:uppercase;\r\n  color:rgba(255,255,255,.62);\r\n}\r\n\r\n@media(max-width:768px){\r\n  .coinsLayer{\r\n    justify-content:flex-start !important;\r\n  }\r\n\r\n  .coinsOrbGrid{\r\n    grid-template-columns:1fr !important;\r\n    gap:12px !important;\r\n  }\r\n\r\n  .coinsOrb{\r\n    width:100% !important;\r\n    min-height:88px !important;\r\n  }\r\n}\r\n\r\n.coinPanelBox{\r\n  display:none;\r\n  width:min(760px,92vw);\r\n  margin:18px auto 0;\r\n  padding:18px;\r\n  border-radius:24px;\r\n  background:rgba(255,255,255,.06);\r\n  border:1px solid rgba(88,219,255,.25);\r\n  color:#fff;\r\n  text-align:center;\r\n}\r\n\r\n.coinPanelBox input{\r\n  width:100%;\r\n  margin-top:10px;\r\n  padding:13px;\r\n  border-radius:999px;\r\n  border:1px solid rgba(255,255,255,.18);\r\n  background:rgba(0,0,0,.45);\r\n  color:#fff;\r\n}\r\n\r\n.coinPanelBox button{\r\n  margin-top:12px;\r\n  padding:12px 20px;\r\n  border-radius:999px;\r\n  border:0;\r\n  cursor:pointer;\r\n}\r\n\r\n@media(max-width:700px){\r\n  .weeksPropertyGrid{\r\n    grid-template-columns:1fr;\r\n  }\r\n\r\n  .weeksPropertyOrb{\r\n    min-height:96px;\r\n  }\r\n}\r\n\r\n@media (max-width: 700px){\r\n\r\n  .orbCoins{\r\n    top:14px;\r\n    left:73%;\r\n    margin-left:-90px;\r\n  }\r\n\r\n  .orbWeeks{\r\n    top:175px;\r\n    left:3px;\r\n    margin-top:0;\r\n  }\r\n\r\n  .orbClub{\r\n    top:175px;\r\n    right:0px;\r\n    margin-top:0;\r\n  }\r\n\r\n  .orbCard{\r\n    bottom:153px;\r\n    left:25%;\r\n    margin-left:-90px;\r\n  }\r\n\r\n}\r\n\r\n\/* TEXT *\/\r\n.joinOrb span{\r\n  display:block;\r\n  font-size:20px;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n  letter-spacing:.12em;\r\n  color:#f4d27a;\r\n}\r\n\r\n.joinOrb small{\r\n  display:block;\r\n  margin-top:10px;\r\n  font-size:11px;\r\n  color:rgba(255,255,255,.7);\r\n}\r\n\r\n\/* FLOAT *\/\r\n@keyframes joinOrbFloat{\r\n  0%{transform:translateY(0);}\r\n  50%{transform:translateY(-10px);}\r\n  100%{transform:translateY(0);}\r\n}\r\n\r\n.joinLayer{\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:3;\r\n  display:flex;\r\n  flex-direction:column;\r\n  justify-content:center;\r\n  align-items:center;\r\n  background:rgba(0,0,0,.86);\r\n  backdrop-filter:blur(14px);\r\n  opacity:0;\r\n  pointer-events:none;\r\n  transform:translateY(40px);\r\n  transition:.5s ease;\r\n  padding:24px;\r\n}\r\n\r\n.joinLayer.active{\r\n  opacity:1;\r\n  pointer-events:auto;\r\n  transform:translateY(0);\r\n}\r\n\r\n.joinBack,\r\n.circleBack{\r\n  position:absolute;\r\n  top:20px;\r\n  left:20px;\r\n  z-index:20;\r\n  cursor:pointer;\r\n  width:46px;\r\n  height:46px;\r\n  border-radius:50%;\r\n  border:1px solid rgba(244,210,122,.45);\r\n  background:rgba(0,0,0,.55);\r\n  color:#f4d27a;\r\n  font-size:20px;\r\n}\r\n\r\n.joinLayer h2{\r\n  font-size:clamp(2.5rem,7vw,5.4rem);\r\n  text-transform:uppercase;\r\n  margin:0 0 28px;\r\n  text-shadow:0 0 28px rgba(244,210,122,.35);\r\n}\r\n\r\n.layerGrid{\r\n  display:grid;\r\n  grid-template-columns:repeat(2,1fr);\r\n  gap:20px;\r\n  width:80%;\r\n  max-width:760px;\r\n}\r\n\r\n.layerCard{\r\n  padding:25px;\r\n  border-radius:20px;\r\n  background:rgba(255,255,255,.06);\r\n  border:1px solid rgba(255,255,255,.2);\r\n  cursor:pointer;\r\n  transition:.3s;\r\n  color:white;\r\n  text-align:center;\r\n}\r\n\r\n.layerCard:hover{\r\n  transform:scale(1.05);\r\n  box-shadow:0 0 25px rgba(244,210,122,.35);\r\n}\r\n\r\n.weeksPriceGrid{\r\n  display:none !important;\r\n}\r\n\r\n.weeksBlissSheet{\r\n  position:relative !important;\r\n}\r\n\r\n.weeksBlissActionLayer{\r\n  position:absolute;\r\n  left:0;\r\n  right:0;\r\n  bottom:14px;\r\n  z-index:6;\r\n  display:flex;\r\n  justify-content:center;\r\n  gap:10px;\r\n  padding:0 12px;\r\n}\r\n\r\n.weeksBlissActionLayer a{\r\n  flex:1;\r\n  max-width:190px;\r\n  min-height:44px;\r\n  border-radius:999px;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  text-decoration:none;\r\n  color:#111;\r\n  font-size:11px;\r\n  font-weight:900;\r\n  letter-spacing:.10em;\r\n  text-transform:uppercase;\r\n  background:linear-gradient(135deg,#fff0be,#f4d27a);\r\n  border:1px solid rgba(255,255,255,.45);\r\n  box-shadow:0 0 22px rgba(244,210,122,.35);\r\n}\r\n\r\n.weeksBlissActionLayer a.live{\r\n  color:#fff;\r\n  background:rgba(0,0,0,.62);\r\n  border:1px solid rgba(255,255,255,.35);\r\n}\r\n\r\n.weeksBackInside{\r\n  display:none !important;\r\n}\r\n\r\n\/* =========================\r\n   ENTER THE CIRCLE\r\n========================= *\/\r\n#enterCircleBg{\r\n  filter:brightness(.82) contrast(1.08);\r\n}\r\n\r\n.enterOverlay{\r\n  position:absolute;\r\n  inset:0;\r\n  background:\r\n    radial-gradient(circle at center, rgba(88,219,255,.12), transparent 38%),\r\n    linear-gradient(180deg, rgba(0,0,0,.15), rgba(0,0,0,.85));\r\n}\r\n\r\n.enterContent{\r\n  position:relative;\r\n  z-index:2;\r\n  min-height:100vh;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  text-align:center;\r\n  padding:30px;\r\n}\r\n\r\n.enterSystem{\r\n  position:relative;\r\n  width:min(760px,92vw);\r\n  height:min(760px,92vw);\r\n}\r\n.enterSystem{\r\n  opacity:1;\r\n  pointer-events:auto;\r\n  transition:.4s ease;\r\n}\r\n\r\n.enterCore{\r\n  position:absolute;\r\n  left:50%;\r\n  top:50%;\r\n  width:150px;\r\n  height:150px;\r\n  transform:translate(-50%,-50%);\r\n  border-radius:50%;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  background:radial-gradient(circle,#071225,#000);\r\n  box-shadow:0 0 35px rgba(141,238,255,.5),0 0 90px rgba(123,125,255,.25);\r\n  z-index:3;\r\n}\r\n\r\n.enterCoreRing{\r\n  position:absolute;\r\n  inset:-18px;\r\n  border-radius:50%;\r\n  border:1px solid rgba(141,238,255,.45);\r\n  box-shadow:0 0 35px rgba(141,238,255,.35);\r\n  animation:coreSpin 8s linear infinite;\r\n}\r\n\r\n.enterCoreText{\r\n  position:relative;\r\n  z-index:2;\r\n  font-weight:1000;\r\n  font-size:18px;\r\n  letter-spacing:.16em;\r\n  text-transform:uppercase;\r\n  text-align:center;\r\n  text-shadow:0 0 18px rgba(141,238,255,.8);\r\n}\r\n\r\n.systemOrb{\r\n  position:absolute;\r\n  width:190px;\r\n  height:190px;\r\n  border:none;\r\n  border-radius:50%;\r\n  cursor:pointer;\r\n  color:white;\r\n  background:radial-gradient(circle at 35% 25%, rgba(255,255,255,.18), rgba(4,12,28,.96) 38%, #000 72%);\r\n  border:1px solid rgba(141,238,255,.35);\r\n  box-shadow:inset 0 0 0 1px rgba(255,255,255,.06),0 0 28px rgba(88,219,255,.24),0 0 80px rgba(47,147,255,.12);\r\n  z-index:4;\r\n  overflow:hidden;\r\n  animation:orbFloat 5s ease-in-out infinite;\r\n}\r\n\r\n.systemOrb::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-22px;\r\n  border-radius:50%;\r\n  background:conic-gradient(rgba(141,238,255,.95),rgba(47,147,255,.65),rgba(123,125,255,.75),rgba(141,238,255,.95));\r\n  filter:blur(18px);\r\n  opacity:.55;\r\n  animation:coreSpin 6s linear infinite;\r\n}\r\n\r\n.systemOrb::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:15%;\r\n  border-radius:50%;\r\n  background:radial-gradient(circle,#06172f,#000 72%);\r\n  z-index:1;\r\n}\r\n\r\n.systemOrb span,\r\n.systemOrb small{\r\n  position:relative;\r\n  z-index:2;\r\n  display:block;\r\n}\r\n\r\n.systemOrb span{\r\n  font-size:22px;\r\n  font-weight:1000;\r\n  text-transform:uppercase;\r\n  letter-spacing:.12em;\r\n  color:#8deeff;\r\n}\r\n\r\n.systemOrb small{\r\n  margin-top:10px;\r\n  font-size:11px;\r\n  color:rgba(255,255,255,.72);\r\n  letter-spacing:.08em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.systemOrb:hover{\r\n  box-shadow:0 0 45px rgba(141,238,255,.65),0 0 130px rgba(47,147,255,.35);\r\n}\r\n\r\n.orbUse{left:50%;top:0;transform:translateX(-50%);}\r\n.orbExchange{left:0;top:50%;transform:translateY(-50%);}\r\n.orbTrade{right:0;top:50%;transform:translateY(-50%);}\r\n.orbBuy{left:50%;bottom:0;transform:translateX(-50%);}\r\n\r\n.energyLine{\r\n  position:absolute;\r\n  background:linear-gradient(90deg, transparent, rgba(141,238,255,.75), transparent);\r\n  box-shadow:0 0 20px rgba(141,238,255,.45);\r\n  z-index:1;\r\n  opacity:.8;\r\n  overflow:hidden;\r\n}\r\n\r\n.energyLine::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  width:40%;\r\n  height:100%;\r\n  background:linear-gradient(90deg, transparent, white, transparent);\r\n  animation:lineFlow 2.4s linear infinite;\r\n}\r\n\r\n.lineTop{width:2px;height:190px;left:50%;top:185px;transform:translateX(-50%);}\r\n.lineBottom{width:2px;height:190px;left:50%;bottom:185px;transform:translateX(-50%);}\r\n.lineLeft{width:190px;height:2px;left:185px;top:50%;transform:translateY(-50%);}\r\n.lineRight{width:190px;height:2px;right:185px;top:50%;transform:translateY(-50%);}\r\n\r\n.enterLayer{\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:10;\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:34px 18px;\r\n  background:rgba(0,0,0,.86);\r\n  backdrop-filter:blur(14px);\r\n  opacity:0;\r\n  pointer-events:none;\r\n  transform:scale(.96);\r\n  transition:.45s ease;\r\n}\r\n\r\n.enterLayer.active{\r\n  opacity:1;\r\n  pointer-events:auto;\r\n  transform:scale(1);\r\n}\r\n\r\n.enterLayerBack{\r\n  position:absolute;\r\n  top:18px;\r\n  left:18px;\r\n  width:46px;\r\n  height:46px;\r\n  border-radius:50%;\r\n  border:1px solid rgba(141,238,255,.45);\r\n  background:rgba(0,0,0,.55);\r\n  color:#8deeff;\r\n  cursor:pointer;\r\n  font-size:20px;\r\n}\r\n\r\n.enterLayer h2{\r\n  margin:0 0 12px;\r\n  font-size:clamp(2.5rem,7vw,5.5rem);\r\n  text-transform:uppercase;\r\n  color:white;\r\n  text-shadow:0 0 35px rgba(88,219,255,.45);\r\n}\r\n\r\n.enterLayer p{\r\n  max-width:720px;\r\n  margin:0 auto 28px;\r\n  color:rgba(255,255,255,.74);\r\n  line-height:1.7;\r\n  text-align:center;\r\n}\r\n\r\n.enterLayerGrid{\r\n  width:min(980px,100%);\r\n  display:grid;\r\n  grid-template-columns:repeat(4,1fr);\r\n  gap:16px;\r\n}\r\n\r\n.enterLayerCard{\r\n  min-height:210px;\r\n  border-radius:26px;\r\n  padding:22px 16px;\r\n  background:radial-gradient(circle at top, rgba(88,219,255,.12), transparent 34%),rgba(0,0,0,.62);\r\n  border:1px solid rgba(141,238,255,.26);\r\n  color:white;\r\n  cursor:pointer;\r\n  box-shadow:0 0 28px rgba(88,219,255,.12);\r\n  transition:.25s ease;\r\n}\r\n\r\n.enterLayerCard:hover{\r\n  transform:translateY(-6px) scale(1.03);\r\n  box-shadow:0 0 35px rgba(88,219,255,.38);\r\n}\r\n\r\n.enterLayerCard strong{\r\n  display:block;\r\n  color:#8deeff;\r\n  font-size:1rem;\r\n  text-transform:uppercase;\r\n  letter-spacing:.12em;\r\n}\r\n\r\n.enterLayerCard span{\r\n  display:block;\r\n  margin-top:12px;\r\n  color:rgba(255,255,255,.72);\r\n  line-height:1.55;\r\n  font-size:.88rem;\r\n}\r\n\r\n@keyframes coreSpin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}\r\n@keyframes orbFloat{0%,100%{margin-top:0;}50%{margin-top:-10px;}}\r\n@keyframes lineFlow{from{transform:translateX(-120%);}to{transform:translateX(260%);}}\r\n\r\n@media(max-width:850px){\r\n  .joinGrid{grid-template-columns:repeat(2,1fr);}\r\n  .enterLayerGrid{grid-template-columns:repeat(2,1fr);}\r\n}\r\n\r\n@media(max-width:650px){\r\n  .circleText{top:62%;width:44%;}\r\n  #enterText{left:2%;}\r\n  #joinText{right:2%;}\r\n  .circleText h2{font-size:clamp(1.1rem,6vw,2rem);}\r\n  .circleText p{display:none;}\r\n  #centerCrownText{top:74%;font-size:.72rem;}\r\n  .enterSystem{height:680px;}\r\n  .systemOrb{width:145px;height:145px;}\r\n  .enterCore{width:115px;height:115px;}\r\n  .systemOrb span{font-size:15px;}\r\n  .systemOrb small{display:none;}\r\n}\r\n\r\n@media(max-width:520px){\r\n  .joinGrid,\r\n  .layerGrid,\r\n  .enterLayerGrid{grid-template-columns:1fr;}\r\n}\r\n@media(min-width:901px){\r\n  .weeksPropertyDetail h3{\r\n    margin-top:80px !important;\r\n  }\r\n}\r\n<style>\r\n@media(max-width:650px){\r\n\r\n  #circleEntryScreen{\r\n    height:100dvh !important;\r\n    min-height:100dvh !important;\r\n  }\r\n\r\n#enterText,\r\n#joinText{\r\n  background:rgba(0,0,0,.42);\r\n  padding:14px 18px;\r\n  border-radius:20px;\r\n\r\n  backdrop-filter:blur(8px);\r\n  -webkit-backdrop-filter:blur(8px);\r\n\r\n  border:1px solid rgba(255,255,255,.08);\r\n}\r\n\r\n  #circleBg{\r\n    width:100% !important;\r\n    height:100% !important;\r\n    object-fit:cover !important;\r\n    object-position:50% 42% !important; \/* adjust if needed *\/\r\n    transform:none !important;\r\n  }\r\n\r\n  #enterText{\r\n    top:20% !important;\r\n    left:50% !important;\r\n    right:auto !important;\r\n    width:90% !important;\r\n    transform:translateX(-50%) !important;\r\n  }\r\n\r\n  #joinText{\r\n    top:73% !important;\r\n    left:50% !important;\r\n    right:auto !important;\r\n    width:90% !important;\r\n    transform:translateX(-50%) !important;\r\n  }\r\n\r\n  #centerCrownText{\r\n    top:58% !important;\r\n    width:90% !important;\r\n  }\r\n\r\n  \/* TEXT VISIBILITY *\/\r\n  #enterText,\r\n  #joinText{\r\n    z-index:20 !important;\r\n    padding:14px 18px !important;\r\n    border-radius:22px !important;\r\n    background:rgba(0,0,0,.42) !important;\r\n    backdrop-filter:blur(8px) !important;\r\n    -webkit-backdrop-filter:blur(8px) !important;\r\n  }\r\n\r\n  #enterText h2,\r\n  #joinText h2{\r\n    font-size:34px !important;\r\n    line-height:.92 !important;\r\n    font-weight:1000 !important;\r\n    letter-spacing:.04em !important;\r\n  }\r\n\r\n  #enterText h2{\r\n    color:#63e6ff !important;\r\n    text-shadow:\r\n      0 0 8px rgba(99,230,255,.95),\r\n      0 0 18px rgba(99,230,255,.75),\r\n      0 3px 14px rgba(0,0,0,.9) !important;\r\n  }\r\n\r\n  #joinText h2{\r\n    color:#ffe08a !important;\r\n    text-shadow:\r\n      0 0 8px rgba(255,224,138,.95),\r\n      0 0 18px rgba(255,224,138,.75),\r\n      0 3px 14px rgba(0,0,0,.9) !important;\r\n  }\r\n\r\n}\r\n.ggg-circle-auth-gate{\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:30;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  background:rgba(0,0,0,.72);\r\n  backdrop-filter:blur(14px);\r\n  -webkit-backdrop-filter:blur(14px);\r\n}\r\n\r\n.ggg-circle-auth-card{\r\n  width:min(92vw,380px);\r\n  padding:28px;\r\n  border-radius:28px;\r\n  text-align:center;\r\n  background:rgba(255,255,255,.06);\r\n  border:1px solid rgba(255,255,255,.14);\r\n  box-shadow:0 0 45px rgba(88,219,255,.25);\r\n}\r\n\r\n.ggg-circle-auth-card h2{\r\n  margin:0 0 12px;\r\n  color:#fff;\r\n  text-transform:uppercase;\r\n  letter-spacing:.12em;\r\n}\r\n\r\n.ggg-circle-auth-card p{\r\n  color:rgba(255,255,255,.74);\r\n  font-size:13px;\r\n  line-height:1.6;\r\n}\r\n\r\n.ggg-circle-input{\r\n  width:100%;\r\n  margin:8px 0;\r\n  padding:13px 14px;\r\n  border-radius:16px;\r\n  border:1px solid rgba(255,255,255,.16);\r\n  background:rgba(0,0,0,.45);\r\n  color:#fff;\r\n}\r\n\r\n.ggg-circle-main-btn,\r\n.ggg-circle-secondary-btn{\r\n  width:100%;\r\n  margin-top:10px;\r\n  padding:13px 16px;\r\n  border-radius:999px;\r\n  border:none;\r\n  cursor:pointer;\r\n  font-weight:900;\r\n  letter-spacing:.12em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.ggg-circle-main-btn{\r\n  background:linear-gradient(135deg,#8deeff,#58dbff);\r\n  color:#041119;\r\n}\r\n\r\n.ggg-circle-secondary-btn{\r\n  background:rgba(255,255,255,.08);\r\n  color:#fff;\r\n  border:1px solid rgba(255,255,255,.16);\r\n}\r\n\r\n.ggg-circle-msg{\r\n  margin-top:12px;\r\n  font-size:12px;\r\n  color:#fff0be;\r\n}\r\n@media(max-width:700px){\r\n  .weeksBlissShowcase{\r\n    width:100%;\r\n    padding:14px 0;\r\n    overflow:hidden;\r\n  }\r\n\r\n  .weeksBlissImageGrid{\r\n    display:flex !important;\r\n    grid-template-columns:none !important;\r\n    gap:18px;\r\n    width:100%;\r\n    overflow-x:auto;\r\n    overflow-y:hidden;\r\n    padding:12px 18px 22px;\r\n    scroll-snap-type:x mandatory;\r\n    -webkit-overflow-scrolling:touch;\r\n  }\r\n\r\n  .weeksBlissSheet{\r\n    flex:0 0 86%;\r\n    scroll-snap-align:center;\r\n    border-radius:30px;\r\n  }\r\n\r\n  .weeksBlissSheet img{\r\n    width:100%;\r\n    height:auto !important;\r\n    object-fit:contain !important;\r\n  }\r\n\r\n  .weeksBlissImageGrid::-webkit-scrollbar{\r\n    height:6px;\r\n  }\r\n\r\n  .weeksBlissImageGrid::-webkit-scrollbar-thumb{\r\n    background:rgba(244,210,122,.45);\r\n    border-radius:999px;\r\n  }\r\n}\r\n#layer-weeks.weeksLayer{\r\n  background:\r\n    linear-gradient(180deg, rgba(0,0,0,.35), rgba(0,0,0,.88)),\r\n    url(\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ae69d409-ac51-48c5-8936-09d75acf117f.png\") center\/cover no-repeat !important;\r\n}\r\n\r\n@media (max-width: 768px){\r\n  #layer-weeks.weeksLayer{\r\n    background-size: 160% !important; \/* \ud83d\udd25 zoom IN *\/\r\n    background-position: center 40% !important;\r\n  }\r\n}\r\n#layer-coins.coinsLayer{\r\n  background:\r\n    linear-gradient(180deg, rgba(0,0,0,.35), rgba(0,0,0,.88)),\r\n    url(\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/7cc46ac1-6fa1-47d2-afb3-987236096c33.png\") center\/cover no-repeat !important;\r\n}\r\n\r\n#fc4BackFromOwners{\r\n  display: none !important;\r\n}\r\n\r\n<style>\r\n.enterSystem{\r\n  position:relative;\r\n  width:100%;\r\n  height:100vh;\r\n  display:none;\r\n  opacity:0;\r\n  visibility:hidden;\r\n  pointer-events:none;\r\n  z-index:5;\r\n}\r\n\r\n.enterTitle{\r\n  position:absolute;\r\n  top:8%;\r\n  width:100%;\r\n  text-align:center;\r\n  color:white;\r\n  font-size:clamp(2rem,6vw,5rem);\r\n  text-transform:uppercase;\r\n  letter-spacing:.12em;\r\n  z-index:4;\r\n}\r\n\r\n.enterOrbSystem{\r\n  position:absolute;\r\n  inset:0;\r\n  display:grid;\r\n  place-items:center;\r\n}\r\n\r\n.enterCore{\r\n  width:230px;\r\n  height:230px;\r\n  border-radius:50%;\r\n  display:grid;\r\n  place-items:center;\r\n  text-align:center;\r\n  color:white;\r\n  background:radial-gradient(circle, rgba(255,255,255,.16), rgba(0,0,0,.75));\r\n  border:1px solid rgba(255,255,255,.22);\r\n  box-shadow:0 0 70px rgba(88,219,255,.35);\r\n}\r\n\r\n.enterOrb{\r\n  position:absolute;\r\n  width:190px;\r\n  height:190px;\r\n  border-radius:50%;\r\n  border:1px solid var(--orb);\r\n  background:\r\n    radial-gradient(circle at 35% 25%, rgba(255,255,255,.25), transparent 24%),\r\n    radial-gradient(circle, var(--orbGlow), rgba(0,0,0,.82) 70%);\r\n  color:white;\r\n  cursor:pointer;\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  text-align:center;\r\n  box-shadow:0 0 35px var(--orbGlow);\r\n  transition:.3s ease;\r\n}\r\n\r\n.enterOrb:hover{transform:scale(1.08);}\r\n\r\n.enterOrb span{\r\n  font-size:28px;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.enterOrb small{\r\n  max-width:130px;\r\n  margin-top:8px;\r\n  opacity:.75;\r\n}\r\n\r\n.enterUse{--orb:#ffffff;--orbGlow:rgba(255,255,255,.35);top:40%;left:50%;transform:translateX(-50%);}\r\n.enterTrade{--orb:#00ff88;--orbGlow:rgba(0,255,136,.35);top:46%;left:10%;}\r\n.enterExchange{--orb:#008cff;--orbGlow:rgba(0,140,255,.38);top:46%;right:10%;}\r\n.enterBuy{--orb:#ff234a;--orbGlow:rgba(255,35,74,.38);bottom:9%;left:50%;transform:translateX(-50%);}\r\n\r\n.enterUse:hover,\r\n.enterBuy:hover{transform:translateX(-50%) scale(1.08);}\r\n\r\n.enterBack{\r\n  position:absolute;\r\n  top:22px;\r\n  left:22px;\r\n  border:none;\r\n  border-radius:999px;\r\n  padding:12px 18px;\r\n  background:rgba(255,255,255,.08);\r\n  color:white;\r\n  border:1px solid rgba(255,255,255,.18);\r\n  cursor:pointer;\r\n}\r\n\r\n.enterLayer h2{\r\n  text-align:center;\r\n  color:white;\r\n  font-size:clamp(2rem,6vw,4rem);\r\n  text-transform:uppercase;\r\n}\r\n\r\n@media(max-width:760px){\r\n  .enterOrb{width:125px;height:125px;}\r\n  .enterOrb span{font-size:18px;}\r\n  .enterOrb small{display:none;}\r\n  .enterCore{width:150px;height:150px;}\r\n  .enterTrade{left:4%;}\r\n  .enterExchange{right:4%;}\r\n}\r\n\/* FORCE MOVE USE ORB UP ON DESKTOP *\/\r\n@media (min-width:761px){\r\n\r\n  .enterUse{\r\n    top:14% !important;\r\n    left:50% !important;\r\n    transform:translateX(-50%) !important;\r\n    z-index:20 !important;\r\n  }\r\n\r\n}\r\n.enterTitle{\r\n  margin-top:-40px !important;\r\n}\r\n@media(max-width:760px){\r\n\r\n  .enterOrb{\r\n    width:105px !important;\r\n    height:105px !important;\r\n  }\r\n\r\n  .enterUse{\r\n    top:21% !important;\r\n    left:50% !important;\r\n    transform:translateX(-50%) !important;\r\n  }\r\n\r\n  .enterTrade{\r\n    top:43% !important;\r\n    left:4% !important;\r\n  }\r\n\r\n  .enterExchange{\r\n    top:43% !important;\r\n    right:4% !important;\r\n  }\r\n\r\n  .enterBuy{\r\n    bottom:23% !important;\r\n    left:50% !important;\r\n    transform:translateX(-50%) !important;\r\n  }\r\n\r\n}\r\n\r\n#gggExchangeMapPanel{\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:140;\r\n  display:none;\r\n  background:\r\n    radial-gradient(circle at top, rgba(88,219,255,.16), transparent 32%),\r\n    linear-gradient(180deg, rgba(2,8,20,.96), rgba(2,8,20,.99));\r\n  color:white;\r\n  overflow:hidden;\r\n}\r\n\r\n#gggExchangeMapPanel.active{\r\n  display:block;\r\n}\r\n\r\n#gggCloseExchangeMap{\r\n  position:absolute;\r\n  top:18px;\r\n  left:18px;\r\n  z-index:5;\r\n  width:48px;\r\n  height:48px;\r\n  border-radius:50%;\r\n  border:1px solid rgba(141,238,255,.45);\r\n  background:rgba(0,0,0,.62);\r\n  color:#8deeff;\r\n  font-size:20px;\r\n  cursor:pointer;\r\n}\r\n\r\n.gggExchangeMapHeader{\r\n  position:absolute;\r\n  top:20px;\r\n  left:84px;\r\n  right:20px;\r\n  z-index:4;\r\n  padding:16px 18px;\r\n  border-radius:22px;\r\n  background:rgba(0,0,0,.52);\r\n  border:1px solid rgba(141,238,255,.22);\r\n  backdrop-filter:blur(12px);\r\n}\r\n\r\n.gggExchangeMapHeader h2{\r\n  margin:0;\r\n  font-size:clamp(1.5rem,4vw,3rem);\r\n  text-transform:uppercase;\r\n}\r\n\r\n.gggExchangeMapHeader p{\r\n  margin:6px 0 0;\r\n  color:rgba(255,255,255,.74);\r\n}\r\n\r\n#gggExchangeGoogleMap{\r\n  position:absolute;\r\n  inset:0;\r\n  width:100%;\r\n  height:100%;\r\n  background:#071225;\r\n}\r\n\r\n#gggExchangePinCard{\r\n  position:absolute;\r\n  right:20px;\r\n  bottom:20px;\r\n  z-index:6;\r\n  width:min(92vw,390px);\r\n  display:none;\r\n  padding:18px;\r\n  border-radius:26px;\r\n  background:rgba(2,8,20,.88);\r\n  border:1px solid rgba(141,238,255,.26);\r\n  box-shadow:0 0 40px rgba(88,219,255,.20);\r\n  backdrop-filter:blur(16px);\r\n}\r\n\r\n#gggExchangePinCard.active{\r\n  display:block;\r\n}\r\n\r\n#gggCloseExchangeCard{\r\n  position:absolute;\r\n  top:12px;\r\n  right:12px;\r\n  width:34px;\r\n  height:34px;\r\n  border-radius:50%;\r\n  border:1px solid rgba(255,255,255,.18);\r\n  background:rgba(0,0,0,.55);\r\n  color:white;\r\n  cursor:pointer;\r\n}\r\n\r\n.gggExchangeAvatar{\r\n  width:76px;\r\n  height:76px;\r\n  border-radius:50%;\r\n  background:#111 center\/cover no-repeat;\r\n  box-shadow:0 0 24px rgba(141,238,255,.38);\r\n  margin-bottom:12px;\r\n}\r\n\r\n#gggExchangePinCard h3{\r\n  margin:0 0 10px;\r\n  color:#8deeff;\r\n  text-transform:uppercase;\r\n}\r\n\r\n#gggExchangePinCard p{\r\n  color:rgba(255,255,255,.78);\r\n  line-height:1.6;\r\n}\r\n\r\n.gggRequestExchangeNow{\r\n  width:100%;\r\n  min-height:48px;\r\n  border:none;\r\n  border-radius:999px;\r\n  background:linear-gradient(135deg,#8deeff,#2f93ff);\r\n  color:#031018;\r\n  font-weight:900;\r\n  text-transform:uppercase;\r\n  cursor:pointer;\r\n}\r\n\r\n@media(max-width:700px){\r\n  .gggExchangeMapHeader{\r\n    left:16px;\r\n    right:16px;\r\n    top:76px;\r\n  }\r\n\r\n  #gggExchangePinCard{\r\n    left:12px;\r\n    right:12px;\r\n    bottom:12px;\r\n    width:auto;\r\n  }\r\n}\r\n@media(max-width:900px){\r\n\r\n  #enterLayer-exchange .enterInnerOrb[data-exchange-action=\"ownership\"]{\r\n    bottom:160px !important;\r\n    top:auto !important;\r\n    left:50% !important;\r\n    right:auto !important;\r\n    transform:translateX(-50%) !important;\r\n    margin-left:0 !important;\r\n  }\r\n\r\n}\r\n@media(max-width:760px){\r\n  #enterLayer-buy .enterInnerOrb[data-join-section=\"citycard\"]{\r\n    bottom:160px !important;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<!-- FRONT ENTRY -->\r\n<div id=\"circleEntryScreen\">\r\n  <img decoding=\"async\" id=\"circleBg\"\r\n    src=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/f8f4f3a5-7a3b-4a42-a4ad-0b75003690bc.png\"\r\n    alt=\"The Circle\">\r\n\r\n  <div id=\"enterZone\" class=\"circleZone\"><\/div>\r\n  <div id=\"joinZone\" class=\"circleZone\"><\/div>\r\n\r\n  <div id=\"enterText\" class=\"circleText\">\r\n    <h2>Enter<br>Your Circle<\/h2>\r\n    <p>Manage everything You own.<\/p>\r\n  <\/div>\r\n\r\n  <div id=\"joinText\" class=\"circleText\">\r\n    <h2>Build<br>Your Circle<\/h2>\r\n    <p>Purchase City Card products or GGG Levels Access<\/p>\r\n  <\/div>\r\n\r\n  <div id=\"centerCrownText\">\r\n    One Circle\r\n    <small>One Destination<\/small>\r\n  <\/div>\r\n\r\n  <div class=\"circleFlash\"><\/div>\r\n<\/div>\r\n\r\n<section id=\"joinCircleScreen\">\r\n<button class=\"circleBack\" onclick=\"backToEntry()\">\u2190<\/button>\r\n  <img decoding=\"async\" id=\"joinCircleBg\"\r\n    src=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Apr-26-2026-09_47_48-PM.png\"\r\n    alt=\"Build Your Circle\">\r\n\r\n  <div class=\"joinOverlay\"><\/div>\r\n  <button class=\"circleBack\" onclick=\"backToEntry()\">\u2190<\/button>\r\n\r\n  <div id=\"mainJoin\" class=\"joinContent\">\r\n\r\n  <!-- JOIN AUTH GATE -->\r\n  <div id=\"joinAuthGate\" class=\"ggg-circle-auth-gate join-mode\">\r\n    <div class=\"ggg-circle-auth-card\">\r\n      <h2>Build Your Circle<\/h2>\r\n      <p>Use your Gods Galaxy Game account or create one.<\/p>\r\n\r\n      <button id=\"gggJoinShowLogin\" class=\"ggg-circle-main-btn\" type=\"button\">Sign In<\/button>\r\n      <button id=\"gggJoinShowRegister\" class=\"ggg-circle-secondary-btn\" type=\"button\">Sign Up<\/button>\r\n\r\n      <div id=\"gggJoinLoginBox\" style=\"display:none;\">\r\n        <input id=\"gggJoinLoginUser\" class=\"ggg-circle-input\" type=\"text\" placeholder=\"Email or username\">\r\n        <input id=\"gggJoinLoginPass\" class=\"ggg-circle-input\" type=\"password\" placeholder=\"Password\">\r\n        <button id=\"gggJoinLoginBtn\" class=\"ggg-circle-main-btn\" type=\"button\">Enter Account<\/button>\r\n      <\/div>\r\n\r\n      <div id=\"gggJoinRegisterBox\" style=\"display:none;\">\r\n        <input id=\"gggJoinRegUser\" class=\"ggg-circle-input\" type=\"text\" placeholder=\"Username\">\r\n        <input id=\"gggJoinRegEmail\" class=\"ggg-circle-input\" type=\"email\" placeholder=\"Email\">\r\n        <input id=\"gggJoinRegPass\" class=\"ggg-circle-input\" type=\"password\" placeholder=\"Password\">\r\n        <button id=\"gggJoinRegisterBtn\" class=\"ggg-circle-main-btn\" type=\"button\">Create Account<\/button>\r\n      <\/div>\r\n\r\n      <div id=\"gggJoinAuthMsg\" class=\"ggg-circle-msg\"><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <h1 class=\"joinTitle\">Build Your Circle<\/h1>\r\n\r\n  <div class=\"joinOrbSystem\">\r\n\r\n  <button class=\"joinOrb orbCoins\" type=\"button\">\r\n    <span>Bliss Coin<\/span>\r\n    <small>Purchase Credits<\/small>\r\n  <\/button>\r\n\r\n  <button class=\"joinOrb orbWeeks\" type=\"button\">\r\n    <span>Build City Card<\/span>\r\n    <small>Air \u00b7 Aqua \u00b7 Gastro \u00b7 Land<\/small>\r\n  <\/button>\r\n\r\n  <button class=\"joinOrb orbClub\" type=\"button\">\r\n    <span>GGG Access<\/span>\r\n    <small>Explore The Levels<\/small>\r\n  <\/button>\r\n\r\n  <button class=\"joinOrb orbCard\" type=\"button\">\r\n    <span>City Card<\/span>\r\n    <small>View Your Balances<\/small>\r\n  <\/button>\r\n\r\n<\/div>\r\n\r\n  <div id=\"layer-coins\" class=\"joinLayer coinsLayer\">\r\n  <button class=\"joinBack\" onclick=\"closeLayer()\">\u2190<\/button>\r\n\r\n  <div class=\"coinsIntro\">\r\n    <h2>Bliss Coin Wallet<\/h2>\r\n    <p>System-wide travel credits for Gods Galaxy Game.<\/p>\r\n  <\/div>\r\n\r\n  <div class=\"coinsOrbGrid\">\r\n    <button class=\"coinsOrb buy\" onclick=\"openCoinPanel('buy')\">\r\n  <span>Buy Bliss Coins<\/span>\r\n  <small>Add travel credits<\/small>\r\n<\/button>\r\n\r\n<button class=\"coinsOrb balance\" onclick=\"openCoinPanel('balance')\">\r\n  <span>View Balance<\/span>\r\n  <small>Your wallet center<\/small>\r\n<\/button>\r\n\r\n<button class=\"coinsOrb send\" onclick=\"openCoinPanel('send')\">\r\n  <span>Send to Host<\/span>\r\n  <small>Wallet-to-wallet payment<\/small>\r\n<\/button>\r\n\r\n<button class=\"coinsOrb history\" onclick=\"openCoinPanel('history')\">\r\n  <span>History<\/span>\r\n  <small>Track every movement<\/small>\r\n<\/button>\r\n<div id=\"coinPanel\" class=\"coinPanelBox\"><\/div>\r\n<div id=\"coinsDetail\" class=\"coinsDetail\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n <div id=\"layer-weeks\" class=\"joinLayer weeksLayer\">\r\n  <button class=\"joinBack\" onclick=\"closeLayer()\">\u2190<\/button>\r\n\r\n  <div class=\"weeksIntro\">\r\n    <h2><\/h2>\r\n    <p><\/p>\r\n  <\/div>\r\n\r\n  <div class=\"weeksPropertyGrid\">\r\n    <button class=\"weeksPropertyOrb\" onclick=\"openWeeksProperty('bliss')\">\r\n      <span>Aparthotel Bliss<\/span>\r\n      <small>View week options<\/small>\r\n    <\/button>\r\n\r\n    <button class=\"weeksPropertyOrb\" onclick=\"openWeeksProperty('sanmiguel')\">\r\n      <span>Mansion San Miguel<\/span>\r\n      <small>Coming portfolio<\/small>\r\n    <\/button>\r\n\r\n    <button class=\"weeksPropertyOrb\" onclick=\"openWeeksProperty('james')\">\r\n      <span>Mansion James Rodriguez<\/span>\r\n      <small>Private mansion access<\/small>\r\n    <\/button>\r\n\r\n    <button class=\"weeksPropertyOrb disabled\">\r\n      <span>Coming Soon<\/span>\r\n      <small>More hosts<\/small>\r\n    <\/button>\r\n  <\/div>\r\n\r\n  <div id=\"weeksPropertyDetail\" class=\"weeksPropertyDetail\">\r\n    <button class=\"weeksBackInside\" onclick=\"closeWeeksProperty()\">\u2190 Properties<\/button>\r\n\r\n    <h3 id=\"weeksPropertyTitle\">Aparthotel Bliss<\/h3>\r\n    <p id=\"weeksPropertyCopy\"><\/p>\r\n\r\n<div class=\"weeksBlissShowcase\">\r\n  <div class=\"weeksBlissShowcaseTitle\">\r\n    <span>Bliss Ownership Price Sheets<\/span>\r\n    <small><\/small>\r\n  <\/div>\r\n\r\n  <div class=\"weeksBlissImageGrid\">\r\n    <button class=\"weeksBlissSheet\" type=\"button\" onclick=\"sendBlissSheet('Silver', '$10,200')\">\r\n  <img decoding=\"async\" src=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Jan-27-2026-01_08_47-AM.png\" alt=\"Silver Bliss option\">\r\n<\/button>\r\n\r\n<button class=\"weeksBlissSheet\" type=\"button\" onclick=\"sendBlissSheet('Gold', '$21,300')\">\r\n  <img decoding=\"async\" src=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Jan-27-2026-01_11_19-AM.png\" alt=\"Gold Bliss option\">\r\n<\/button>\r\n\r\n<button class=\"weeksBlissSheet\" type=\"button\" onclick=\"sendBlissSheet('Black', '$33,900')\">\r\n  <img decoding=\"async\" src=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Jan-27-2026-01_27_00-AM.png\" alt=\"Black Bliss option\">\r\n<\/button>\r\n\r\n<button class=\"weeksBlissSheet\" type=\"button\" onclick=\"sendBlissSheet('Platinum', '$33,900')\">\r\n  <img decoding=\"async\" src=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Jan-27-2026-01_24_09-AM.png\" alt=\"Platinum Bliss option\">\r\n<\/button>\r\n  <\/div>\r\n<\/div>\r\n\r\n    <div class=\"weeksPriceGrid\">\r\n      <button class=\"weeksPriceOval\">\r\n        <strong>Option 1<\/strong>\r\n        <small>Stripe URL placeholder<\/small>\r\n      <\/button>\r\n\r\n      <button class=\"weeksPriceOval\">\r\n        <strong>Option 2<\/strong>\r\n        <small>Stripe URL placeholder<\/small>\r\n      <\/button>\r\n\r\n      <button class=\"weeksPriceOval\">\r\n        <strong>Live Presentation<\/strong>\r\n        <small>Appointment <\/small>\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ENTER THE CIRCLE -->\r\n<section id=\"enterCircleScreen\">\r\n  <img decoding=\"async\" id=\"enterCircleBg\"\r\n    src=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Apr-26-2026-09_49_23-PM.png\"\r\n    alt=\"Enter Your Circle\">\r\n\r\n  <div class=\"enterOverlay\"><\/div>\r\n  <button class=\"circleBack\" type=\"button\">\u2190<\/button>\r\n\r\n  <div class=\"enterContent\">\r\n  <div id=\"enterSignGate\" style=\"\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:20;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  background:rgba(0,0,0,.85);\r\n  backdrop-filter:blur(12px);\r\n\">\r\n\r\n  <div style=\"\r\n  text-align:center;\r\n  max-width:320px;\r\n  padding:30px;\r\n  border-radius:25px;\r\n  background:rgba(255,255,255,.05);\r\n  border:1px solid rgba(255,255,255,.12);\r\n  box-shadow:0 0 40px rgba(88,219,255,.2);\r\n\">\r\n\r\n  <h2 style=\"\r\n    margin:0 0 15px;\r\n    font-size:22px;\r\n    letter-spacing:.15em;\r\n    text-transform:uppercase;\r\n  \">\r\n    Enter Your Circle\r\n  <\/h2>\r\n\r\n  <p style=\"\r\n    font-size:12px;\r\n    opacity:.7;\r\n    margin-bottom:20px;\r\n    line-height:1.6;\r\n  \">\r\n    Sign in with your Gods Galaxy Game account\r\n  <\/p>\r\n\r\n  <input id=\"gggEnterLoginUser\" type=\"text\" placeholder=\"Email or Username\" style=\"\r\n    width:100%;\r\n    margin-bottom:10px;\r\n    padding:12px;\r\n    border-radius:12px;\r\n    border:1px solid rgba(255,255,255,.15);\r\n    background:rgba(0,0,0,.4);\r\n    color:#fff;\r\n  \">\r\n\r\n  <input id=\"gggEnterLoginPass\" type=\"password\" placeholder=\"Password\" style=\"\r\n    width:100%;\r\n    margin-bottom:15px;\r\n    padding:12px;\r\n    border-radius:12px;\r\n    border:1px solid rgba(255,255,255,.15);\r\n    background:rgba(0,0,0,.4);\r\n    color:#fff;\r\n  \">\r\n\r\n  <button id=\"gggEnterLoginBtn\" style=\"\r\n    padding:12px 20px;\r\n    border-radius:20px;\r\n    border:none;\r\n    background:linear-gradient(135deg,#8deeff,#58dbff);\r\n    color:#041119;\r\n    font-weight:900;\r\n    letter-spacing:.12em;\r\n    cursor:pointer;\r\n  \">\r\n    Sign In\r\n  <\/button>\r\n\r\n  <div id=\"gggEnterLoginMsg\" style=\"margin-top:10px;font-size:12px;\"><\/div>\r\n<\/div>\r\n<\/div>\r\n<style>\r\n\/* =========================================================\r\n   ENTER THE CIRCLE \u2014 OWNER ECONOMY ORBS\r\n   Small orbs. Transparent background. No cards.\r\n========================================================= *\/\r\n\r\n.enterSystem{\r\n  position:relative;\r\n  width:100%;\r\n  height:100vh;\r\n  display:none;\r\n  opacity:0;\r\n  visibility:hidden;\r\n  pointer-events:none;\r\n  overflow:hidden;\r\n  color:#fff;\r\n  font-family:Arial,sans-serif;\r\n  background:transparent !important;\r\n}\r\n\r\n.enterSystem *{box-sizing:border-box;}\r\n\r\n.enterTitle{\r\n  position:absolute;\r\n  top:6%;\r\n  width:100%;\r\n  text-align:center;\r\n  z-index:5;\r\n}\r\n\r\n.enterTitle h1{\r\n  margin:0;\r\n  font-size:clamp(28px,5vw,64px);\r\n  letter-spacing:.12em;\r\n  text-transform:uppercase;\r\n  text-shadow:0 0 28px rgba(88,219,255,.45);\r\n}\r\n\r\n.enterTitle p{\r\n  margin:10px auto 0;\r\n  max-width:760px;\r\n  color:rgba(255,255,255,.72);\r\n  font-size:13px;\r\n  letter-spacing:.08em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.enterUniverse{\r\n  position:absolute;\r\n  inset:0;\r\n  display:grid;\r\n  place-items:center;\r\n}\r\n\r\n.enterCore{\r\n  width:180px;\r\n  height:180px;\r\n  border-radius:50%;\r\n  display:grid;\r\n  place-items:center;\r\n  text-align:center;\r\n  z-index:2;\r\n  background:\r\n    radial-gradient(circle at 35% 25%, rgba(255,255,255,.20), transparent 24%),\r\n    radial-gradient(circle, rgba(88,219,255,.18), rgba(0,0,0,.70) 70%);\r\n  border:1px solid rgba(255,255,255,.22);\r\n  box-shadow:0 0 45px rgba(88,219,255,.25);\r\n}\r\n\r\n.enterCore b{\r\n  font-size:19px;\r\n  letter-spacing:.14em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n\/* MAIN ORBS *\/\r\n.enterOrb{\r\n  position:absolute;\r\n  width:140px;\r\n  height:140px;\r\n  border-radius:50%;\r\n  border:1px solid var(--orb);\r\n  color:#fff;\r\n  cursor:pointer;\r\n  z-index:4;\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  text-align:center;\r\n  padding:14px;\r\n  background:\r\n    radial-gradient(circle at 32% 24%, rgba(255,255,255,.26), transparent 22%),\r\n    radial-gradient(circle, var(--orbGlow), rgba(0,0,0,.78) 72%);\r\n  box-shadow:0 0 28px var(--orbGlow), inset 0 0 25px rgba(255,255,255,.08);\r\n  transition:.28s ease;\r\n}\r\n\r\n.enterOrb:hover{\r\n  transform:scale(1.07);\r\n  box-shadow:0 0 46px var(--orbGlow), 0 0 90px var(--orbGlow);\r\n}\r\n\r\n.enterOrb span{\r\n  font-size:17px;\r\n  font-weight:900;\r\n  letter-spacing:.08em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.enterOrb small{\r\n  margin-top:7px;\r\n  color:rgba(255,255,255,.72);\r\n  font-size:10px;\r\n  line-height:1.25;\r\n}\r\n\r\n.enterUse{\r\n  --orb:#ffffff;\r\n  --orbGlow:rgba(255,255,255,.32);\r\n  top:23%;\r\n  left:50%;\r\n  transform:translateX(-50%);\r\n}\r\n\r\n.enterTrade{\r\n  --orb:#00ff88;\r\n  --orbGlow:rgba(0,255,136,.34);\r\n  left:13%;\r\n  top:44%;\r\n}\r\n\r\n.enterExchange{\r\n  --orb:#008cff;\r\n  --orbGlow:rgba(0,140,255,.36);\r\n  right:13%;\r\n  top:44%;\r\n}\r\n\r\n.enterBuy{\r\n  --orb:#ff234a;\r\n  --orbGlow:rgba(255,35,74,.34);\r\n  left:50%;\r\n  bottom:9%;\r\n  transform:translateX(-50%);\r\n}\r\n\r\n.enterUse:hover,\r\n.enterBuy:hover{\r\n  transform:translateX(-50%) scale(1.07);\r\n}\r\n\r\n\/* LAYERS *\/\r\n.enterLayer{\r\n  display:none;\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:20;\r\n  overflow:hidden;\r\n  background:rgba(0,0,0,.50);\r\n  backdrop-filter:blur(8px);\r\n}\r\n\r\n.enterLayer.active{\r\n  display:block;\r\n}\r\n\r\n.enterBack{\r\n  position:absolute;\r\n  top:22px;\r\n  left:22px;\r\n  z-index:30;\r\n  border:1px solid rgba(255,255,255,.24);\r\n  background:rgba(0,0,0,.45);\r\n  color:#fff;\r\n  border-radius:999px;\r\n  padding:11px 16px;\r\n  cursor:pointer;\r\n  font-weight:900;\r\n}\r\n\r\n.enterLayerTitle{\r\n  position:absolute;\r\n  top:7%;\r\n  width:100%;\r\n  text-align:center;\r\n  z-index:25;\r\n}\r\n\r\n.enterLayerTitle h2{\r\n  margin:0;\r\n  font-size:clamp(30px,5vw,64px);\r\n  letter-spacing:.12em;\r\n  text-transform:uppercase;\r\n  color:var(--layerColor);\r\n  text-shadow:0 0 24px var(--layerColor);\r\n}\r\n\r\n.enterLayerTitle p{\r\n  margin:10px auto 0;\r\n  max-width:760px;\r\n  color:rgba(255,255,255,.72);\r\n  font-size:12px;\r\n  letter-spacing:.08em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n\/* INNER ORBS *\/\r\n.enterInnerUniverse{\r\n  position:absolute;\r\n  inset:0;\r\n  display:grid;\r\n  place-items:center;\r\n}\r\n\r\n.enterInnerCore{\r\n  width:145px;\r\n  height:145px;\r\n  border-radius:50%;\r\n  display:grid;\r\n  place-items:center;\r\n  text-align:center;\r\n  z-index:2;\r\n  background:\r\n    radial-gradient(circle at 34% 24%, rgba(255,255,255,.16), transparent 24%),\r\n    radial-gradient(circle, var(--layerGlow), rgba(0,0,0,.78) 72%);\r\n  border:1px solid rgba(255,255,255,.18);\r\n  box-shadow:0 0 42px var(--layerGlow);\r\n}\r\n\r\n.enterInnerCore b{\r\n  font-size:16px;\r\n  letter-spacing:.12em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.enterInnerOrb{\r\n  position:absolute;\r\n  width:125px;\r\n  height:125px;\r\n  border-radius:50%;\r\n  border:1px solid var(--innerColor);\r\n  color:#fff;\r\n  cursor:pointer;\r\n  padding:12px;\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  text-align:center;\r\n  background:\r\n    radial-gradient(circle at 33% 24%, rgba(255,255,255,.24), transparent 22%),\r\n    radial-gradient(circle, var(--innerGlow), rgba(0,0,0,.80) 72%);\r\n  box-shadow:0 0 24px var(--innerGlow), inset 0 0 22px rgba(255,255,255,.08);\r\n  transition:.25s ease;\r\n}\r\n\r\n.enterInnerOrb:hover{\r\n  transform:scale(1.07);\r\n  box-shadow:0 0 45px var(--innerGlow), 0 0 80px var(--innerGlow);\r\n}\r\n\r\n.enterInnerOrb h3{\r\n  margin:0;\r\n  font-size:15px;\r\n  text-transform:uppercase;\r\n  letter-spacing:.07em;\r\n}\r\n\r\n.enterInnerOrb p{\r\n  margin:7px 0 0;\r\n  color:rgba(255,255,255,.72);\r\n  font-size:10px;\r\n  line-height:1.25;\r\n}\r\n\r\n.orbTop{top:24%;left:50%;transform:translateX(-50%);}\r\n.orbLeft{left:15%;top:46%;}\r\n.orbRight{right:15%;top:46%;}\r\n.orbBottom{left:50%;bottom:10%;transform:translateX(-50%);}\r\n\r\n.orbTop:hover,\r\n.orbBottom:hover{\r\n  transform:translateX(-50%) scale(1.07);\r\n}\r\n\r\n\/* THEMES *\/\r\n.enterLayer.use{--layerColor:#ffffff;--layerGlow:rgba(255,255,255,.18);}\r\n.enterLayer.trade{--layerColor:#00ff88;--layerGlow:rgba(0,255,136,.20);}\r\n.enterLayer.exchange{--layerColor:#008cff;--layerGlow:rgba(0,140,255,.22);}\r\n.enterLayer.buy{--layerColor:#ff234a;--layerGlow:rgba(255,35,74,.20);}\r\n\r\n.whiteOrb{--innerColor:#ffffff;--innerGlow:rgba(255,255,255,.30);}\r\n.greenOrb{--innerColor:#00ff88;--innerGlow:rgba(0,255,136,.32);}\r\n.blueOrb{--innerColor:#008cff;--innerGlow:rgba(0,140,255,.34);}\r\n.redOrb{--innerColor:#ff234a;--innerGlow:rgba(255,35,74,.32);}\r\n.goldOrb{--innerColor:#f4d27a;--innerGlow:rgba(244,210,122,.32);}\r\n.purpleOrb{--innerColor:#b88cff;--innerGlow:rgba(184,140,255,.32);}\r\n\r\n@media(max-width:760px){\r\n  .enterTitle p,\r\n  .enterLayerTitle p,\r\n  .enterOrb small,\r\n  .enterInnerOrb p{display:none;}\r\n\r\n  .enterCore{\r\n  width:135px;\r\n  height:135px;\r\n\r\n  background:rgba(0,0,0,.12); \/* more transparent *\/\r\n  border:1px solid rgba(255,255,255,.08);\r\n\r\n  box-shadow:\r\n    0 0 20px rgba(88,219,255,.08),\r\n    inset 0 0 10px rgba(255,255,255,.04);\r\n\r\n  backdrop-filter:blur(10px);\r\n  -webkit-backdrop-filter:blur(10px);\r\n}\r\n\r\n.enterCore b{\r\n  font-size:15px;\r\n  opacity:.35; \/* THIS makes \"Owner Economy\" more transparent *\/\r\n  letter-spacing:.08em;\r\n}\r\n\r\n  .enterOrb{width:98px;height:98px;padding:9px;}\r\n  .enterOrb span{font-size:13px;}\r\n\r\n  .enterInnerCore{width:105px;height:105px;}\r\n  .enterInnerCore b{font-size:12px;}\r\n\r\n  .enterInnerOrb{width:88px;height:88px;padding:8px;}\r\n  .enterInnerOrb h3{font-size:11px;}\r\n\r\n  .enterTrade{left:4%;}\r\n  .enterExchange{right:4%;}\r\n  .orbLeft{left:4%;}\r\n  .orbRight{right:4%;}\r\n}\r\n\r\n\/* HIDE OWNER ECONOMY COMPLETELY *\/\r\n.enterCore{\r\n  display:none !important;\r\n}\r\n<\/style>\r\n\r\n<div class=\"enterSystem\">\r\n\r\n  <div class=\"enterTitle\">\r\n    <h1>Enter Your Circle<\/h1>\r\n  <\/div>\r\n\r\n  <div class=\"enterUniverse\">\r\n    <div class=\"enterCore\">\r\n      <b>Owner<br>Economy<\/b>\r\n    <\/div>\r\n\r\n    <button class=\"enterOrb enterTrade\" type=\"button\" data-enter-open=\"trade\">\r\n      <span>Trade<\/span>\r\n      <small>Marketplace<\/small>\r\n    <\/button>\r\n\r\n    <button class=\"enterOrb enterBuy\" type=\"button\" data-enter-open=\"buy\">\r\n      <span>Buy<\/span>\r\n      <small>Expansion<\/small>\r\n    <\/button>\r\n\r\n    <button class=\"enterOrb enterExchange\" type=\"button\" data-enter-open=\"exchange\">\r\n      <span>Exchange<\/span>\r\n      <small>Negotiation<\/small>\r\n    <\/button>\r\n\r\n    <button class=\"enterOrb enterUse\" type=\"button\" onclick=\"openEnterPath('use')\">\r\n  <span>Use<\/span>\r\n  <small>Consumption<\/small>\r\n<\/button>\r\n  <\/div>\r\n\r\n  <!-- TRADE -->\r\n  <section id=\"enterLayer-trade\" class=\"enterLayer trade\">\r\n    <button class=\"enterBack\" type=\"button\">\u2190<\/button>\r\n    <div class=\"enterLayerTitle\">\r\n      <h2>Marketplace<\/h2>\r\n      <p>Post unused ownership or search trades from other owners and hosts.<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"enterInnerUniverse\">\r\n      <div class=\"enterInnerCore\"><b>Trade<br>Market<\/b><\/div>\r\n\r\n      <button class=\"enterInnerOrb greenOrb orbLeft\" type=\"button\" data-trade-action=\"post\">\r\n        <h3>Post Trade<\/h3>\r\n        <p>Asset type, property, dates, wants, and notes.<\/p>\r\n      <\/button>\r\n\r\n      <button class=\"enterInnerOrb goldOrb orbRight\" type=\"button\" data-trade-action=\"search\">\r\n        <h3>Search Trades<\/h3>\r\n        <p>Browse trade posts and open Avatar Chat.<\/p>\r\n      <\/button>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- BUY -->\r\n  <section id=\"enterLayer-buy\" class=\"enterLayer buy\">\r\n    <button class=\"enterBack\" type=\"button\">\u2190<\/button>\r\n    <div class=\"enterLayerTitle\">\r\n      <h2>Expansion<\/h2>\r\n      <p>Buy more access through Build Your Circle or future direct checkout.<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"enterInnerUniverse\">\r\n      <div class=\"enterInnerCore\"><b>Buy<br>Assets<\/b><\/div>\r\n\r\n      <button class=\"enterInnerOrb goldOrb orbTop\" type=\"button\" data-join-section=\"blisscoin\">\r\n        <h3>Bliss Coin<\/h3>\r\n        <p>Add balance.<\/p>\r\n      <\/button>\r\n\r\n      <button class=\"enterInnerOrb blueOrb orbLeft\" type=\"button\" data-join-section=\"travelclub\">\r\n        <h3>Travel Club<\/h3>\r\n        <p>Expand access.<\/p>\r\n      <\/button>\r\n\r\n      <button class=\"enterInnerOrb whiteOrb orbRight\" type=\"button\" data-join-section=\"weeks\">\r\n        <h3>Weeks<\/h3>\r\n        <p>Buy ownership weeks.<\/p>\r\n      <\/button>\r\n\r\n      <button class=\"enterInnerOrb redOrb orbBottom\" type=\"button\" data-join-section=\"citycard\">\r\n        <h3>City Card<\/h3>\r\n        <p>Air, Aqua, Gastro, Land.<\/p>\r\n      <\/button>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- EXCHANGE -->\r\n  <section id=\"enterLayer-exchange\" class=\"enterLayer exchange\">\r\n    <button class=\"enterBack\" type=\"button\">\u2190<\/button>\r\n    <div class=\"enterLayerTitle\">\r\n      <h2>Negotiation System<\/h2>\r\n      <p>Avatar-based owner-to-owner exchanges by host, asset, and time.<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"enterInnerUniverse\">\r\n      <div class=\"enterInnerCore\"><b>Avatar<br>Exchange<\/b><\/div>\r\n\r\n      <button class=\"enterInnerOrb blueOrb orbLeft\" type=\"button\" data-exchange-action=\"internal\">\r\n  <h3>Internal<\/h3>\r\n  <p>Same host owner exchanges.<\/p>\r\n<\/button>\r\n\r\n<button class=\"enterInnerOrb greenOrb orbRight\" type=\"button\" data-exchange-action=\"community\">\r\n  <h3>Community<\/h3>\r\n  <p>Owners offering services or access in the network.<\/p>\r\n<\/button>\r\n\r\n<button class=\"enterInnerOrb goldOrb orbBottom\" type=\"button\" data-exchange-action=\"ownership\">\r\n  <h3>Ownership<\/h3>\r\n  <p>Owners exchanging ownership access or positions.<\/p>\r\n<\/button>\r\n\r\n<button class=\"enterInnerOrb purpleOrb orbTop\" type=\"button\" data-exchange-action=\"year\">\r\n  <h3>Year<\/h3>\r\n  <p>Move or exchange weeks by year or season.<\/p>\r\n<\/button>\r\n    <\/div>\r\n  <\/section>\r\n\r\n<\/div>\r\n\r\n<script>\r\ndocument.querySelectorAll(\"[data-join-section]\").forEach(btn=>{\r\n  btn.addEventListener(\"click\", function(){\r\n    const section = this.getAttribute(\"data-join-section\");\r\n    window.location.href = \"\/GGG\/fractional-ownership\/?fractional=1&join=1&section=\" + encodeURIComponent(section);\r\n  });\r\n});\r\n<\/script>\r\n    <div class=\"enterSystem\">\r\n\r\n      <div class=\"enterCore\">\r\n        <div class=\"enterCoreRing\"><\/div>\r\n        <div class=\"enterCoreText\">The<br>Circle<\/div>\r\n      <\/div>\r\n\r\n      <button class=\"systemOrb orbUse\" onclick=\"openEnterPath('use')\">\r\n        <span>Use<\/span>\r\n        <small>Activate ownership<\/small>\r\n      <\/button>\r\n\r\n      <button class=\"systemOrb orbExchange\" onclick=\"openEnterPath('exchange')\">\r\n        <span>Exchange<\/span>\r\n        <small>Owner network<\/small>\r\n      <\/button>\r\n\r\n      <button class=\"systemOrb orbTrade\" onclick=\"openEnterPath('trade')\">\r\n        <span>Trade<\/span>\r\n        <small>Time into value<\/small>\r\n      <\/button>\r\n\r\n      <button class=\"systemOrb orbBuy\" onclick=\"goEnterBuyToJoinCoins()\">\r\n        <span>Buy<\/span>\r\n        <small>Expand access<\/small>\r\n      <\/button>\r\n\r\n      <div class=\"energyLine lineTop\"><\/div>\r\n      <div class=\"energyLine lineLeft\"><\/div>\r\n      <div class=\"energyLine lineRight\"><\/div>\r\n      <div class=\"energyLine lineBottom\"><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div id=\"enterLayer\" class=\"enterLayer\">\r\n    <button class=\"enterLayerBack\" type=\"button\">\u2190<\/button>\r\n    <h2 id=\"enterLayerTitle\"><\/h2>\r\n    <p id=\"enterLayerCopy\"><\/p>\r\n    <div id=\"enterLayerGrid\" class=\"enterLayerGrid\"><\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<script>\r\nconst THE_CIRCLE_LINKS = {\r\n  travelCoins:\"#\",\r\n  blissCoin:\"#\",\r\n  blissProperties:\"#\",\r\n  mansionProperties:\"#\",\r\n  futureProperties:\"#\",\r\n  travelBasic:\"#\",\r\n  travelPremium:\"#\",\r\n  travelAllAccess:\"#\",\r\n  airHours:\"#\",\r\n  aquaHours:\"#\",\r\n  gastroCredits:\"#\",\r\n  landIntervals:\"#\"\r\n};\r\n\r\nconst circleEntry = document.getElementById(\"circleEntryScreen\");\r\nconst joinScreen = document.getElementById(\"joinCircleScreen\");\r\nconst enterScreen = document.getElementById(\"enterCircleScreen\");\r\n\r\nconst enterOrbs = enterScreen\r\n  ? enterScreen.querySelector(\".enterSystem\")\r\n  : null;\r\n\r\ndocument.getElementById(\"enterZone\").addEventListener(\"click\", function(){\r\n  circleEntry.classList.add(\"zoomEnter\");\r\n\r\n  circleEntry.style.display = \"none\";\r\n  enterScreen.style.display = \"block\";\r\n\r\n  setTimeout(function(){\r\n    circleEntry.style.display = \"none\";\r\n    enterScreen.style.display = \"block\";\r\n\r\n    const enterGate = document.getElementById(\"enterSignGate\");\r\n\r\n    if(window.GGGCircleAuth && window.GGGCircleAuth.loggedIn){\r\n      if(enterGate){\r\n        enterGate.style.display = \"none\";\r\n      }\r\n\r\n      if(typeof window.gggUnlockEnter === \"function\"){\r\n        window.gggUnlockEnter();\r\n      } else if(enterOrbs){\r\n        enterOrbs.style.display = \"block\";\r\n        enterOrbs.style.opacity = \"1\";\r\n        enterOrbs.style.visibility = \"visible\";\r\n        enterOrbs.style.pointerEvents = \"auto\";\r\n      }\r\n    } else {\r\n      if(enterGate){\r\n        enterGate.style.display = \"flex\";\r\n      }\r\n\r\n      if(enterOrbs){\r\n        enterOrbs.style.display = \"none\";\r\n        enterOrbs.style.opacity = \"0\";\r\n        enterOrbs.style.visibility = \"hidden\";\r\n        enterOrbs.style.pointerEvents = \"none\";\r\n      }\r\n    }\r\n  }, 900);\r\n});\r\n\r\ndocument.getElementById(\"joinZone\").addEventListener(\"click\", function(){\r\n  circleEntry.classList.add(\"zoomJoin\");\r\n  setTimeout(function(){\r\n    circleEntry.style.display = \"none\";\r\n    joinScreen.style.display = \"block\";\r\n\r\nconst joinGate = document.getElementById(\"joinAuthGate\");\r\nconst mainJoin = document.getElementById(\"mainJoin\");\r\n\r\nif(joinGate) joinGate.style.display = \"flex\";\r\nif(mainJoin) mainJoin.classList.remove(\"hidden\");\r\n  }, 900);\r\n});\r\n\r\nfunction backToEntry(){\r\n  closeLayer();\r\n  closeEnterLayer();\r\n  joinScreen.style.display = \"none\";\r\n  enterScreen.style.display = \"none\";\r\n  circleEntry.style.display = \"block\";\r\n  circleEntry.classList.remove(\"zoomEnter\",\"zoomJoin\");\r\n}\r\n\r\nfunction openLayer(type){\r\n  document.getElementById(\"mainJoin\").classList.add(\"hidden\");\r\n  document.getElementById(\"joinCircleBg\").style.transform = \"scale(1.2)\";\r\n  document.getElementById(\"layer-\"+type).classList.add(\"active\");\r\n}\r\n\r\nfunction closeLayer(){\r\n  document.querySelectorAll('.joinLayer').forEach(l=>{\r\n    l.classList.remove('active');\r\n  });\r\n\r\n  document.querySelector('.joinTitle').style.display = '';\r\n  document.querySelector('.joinOrbSystem').style.display = '';\r\n}\r\n\r\nconst enterLayers = {\r\n  use:{\r\n    title:\"Use\",\r\n    copy:\"Activate what you own. Use your full week, split it, rent it online, or use a premium unit value.\",\r\n    items:[\r\n      [\"Use Week\",\"Use your full ownership week.\"],\r\n      [\"Use Short Stay\",\"Divide your week into weekend or weekdays.\"],\r\n      [\"Use Online\",\"Put your week online to rent it yourself.\"],\r\n      [\"Use Penthouse\",\"Use one premium room\/category value if available.\"]\r\n    ]\r\n  },\r\n  exchange:{\r\n    title:\"Exchange\",\r\n    copy:\"Swap ownership access with other owners through The Circle.\",\r\n    items:[\r\n      [\"Internally\",\"Exchange your Bliss week with another Bliss owner.\"],\r\n      [\"Community\",\"Avatar-to-avatar exchange with owners from other properties.\"],\r\n      [\"Year\",\"Move or exchange your week into another year.\"],\r\n      [\"Ownership\",\"Exchange an entire ownership position or property access.\"]\r\n    ]\r\n  },\r\n  trade:{\r\n    title:\"Trade\",\r\n    copy:\"Break your ownership into tradable units of time and value.\",\r\n    items:[\r\n      [\"Rooms\",\"Trade room-level access.\"],\r\n      [\"Day\",\"Trade one full day in the full accommodation.\"],\r\n      [\"Weekend\",\"Trade one short-stay weekend unit.\"],\r\n      [\"Week\",\"Trade the full ownership week.\"]\r\n    ]\r\n  },\r\n  buy:{\r\n    title:\"Buy\",\r\n    copy:\"Expand what you already have inside The Circle.\",\r\n    items:[\r\n      [\"Weeks\",\"Buy more ownership weeks.\"],\r\n      [\"Bliss Coin\",\"Buy more property-backed Bliss Coin value.\"],\r\n      [\"Travel Club\",\"Activate all Gods Galaxy Game levels.\"],\r\n      [\"City Card\",\"Buy Air Hours, Aqua Hours, Gastro Credits, and Land Intervals.\"]\r\n    ]\r\n  }\r\n};\r\n\r\nfunction openEnterPath(type){\r\n  const data = enterLayers[type];\r\n  if(!data) return;\r\n\r\n  document.getElementById(\"enterLayerTitle\").textContent = data.title;\r\n  document.getElementById(\"enterLayerCopy\").textContent = data.copy;\r\n\r\n  document.getElementById(\"enterLayerGrid\").innerHTML = data.items.map(item => `\r\n    <div class=\"enterLayerCard\">\r\n      <strong>${item[0]}<\/strong>\r\n      <span>${item[1]}<\/span>\r\n    <\/div>\r\n  `).join(\"\");\r\n\r\n  document.getElementById(\"enterLayer\").classList.add(\"active\");\r\n}\r\n\r\nfunction closeEnterLayer(){\r\n  const layer = document.getElementById(\"enterLayer\");\r\n  if(layer) layer.classList.remove(\"active\");\r\n}\r\n\/* =========================\r\n   GGG CIRCLE AUTH + MASTER CODE\r\n========================= *\/\r\n\r\nconst GGG_MASTER_CODE = \"galaxy2026\";\r\n\r\nfunction gggUnlockEnter(){\r\n  const gate = document.getElementById(\"enterSignGate\");\r\n  const system = document.querySelector(\".enterSystem\");\r\n\r\n  if(gate) gate.style.display = \"flex\";\r\n  if(system){\r\n    system.style.opacity = \"1\";\r\n    system.style.pointerEvents = \"auto\";\r\n  }\r\n\r\n  window.GGGVaultUser = window.GGGVaultUser || {};\r\n  window.GGGVaultUser.logged_in = true;\r\n  window.GGGVaultUser.master_demo_owner = true;\r\n}\r\n\r\nfunction gggUnlockJoin(){\r\n  const gate = document.getElementById(\"joinAuthGate\");\r\n  if(gate) gate.style.display = \"none\";\r\n\r\n  window.GGGVaultUser = window.GGGVaultUser || {};\r\n  window.GGGVaultUser.logged_in = true;\r\n  window.GGGVaultUser.master_demo_owner = true;\r\n}\r\n\r\nfunction gggCircleLogin(username, password, msgId, afterSuccess){\r\n  const msg = document.getElementById(msgId);\r\n  if(msg) msg.textContent = \"Signing in...\";\r\n\r\n  if(password === GGG_MASTER_CODE){\r\n    if(msg) msg.textContent = \"Master access unlocked.\";\r\n    if(typeof afterSuccess === \"function\") afterSuccess();\r\n    return;\r\n  }\r\n\r\n  if(!window.GGGCircleAuth){\r\n    if(msg) msg.textContent = \"Login system is not connected yet.\";\r\n    return;\r\n  }\r\n\r\n  const form = new FormData();\r\n  form.append(\"action\", \"ggg_circle_login\");\r\n  form.append(\"nonce\", window.GGGCircleAuth.nonce);\r\n  form.append(\"username\", username);\r\n  form.append(\"password\", password);\r\n\r\n  fetch(window.GGGCircleAuth.ajaxUrl, {\r\n    method: \"POST\",\r\n    credentials: \"same-origin\",\r\n    body: form\r\n  })\r\n  .then(r => r.json())\r\n  .then(data => {\r\n    if(!data.success){\r\n      if(msg) msg.textContent = data.data?.message || \"Login failed.\";\r\n      return;\r\n    }\r\n\r\n    if(msg) msg.textContent = \"Welcome back.\";\r\n    window.GGGCircleAuth.loggedIn = true;\r\n\r\n    if(typeof afterSuccess === \"function\") afterSuccess();\r\n  })\r\n  .catch(() => {\r\n    if(msg) msg.textContent = \"Connection error.\";\r\n  });\r\n}\r\n\r\nfunction gggCircleRegister(username, email, password, msgId){\r\n  const msg = document.getElementById(msgId);\r\n  if(msg) msg.textContent = \"Creating account...\";\r\n\r\n  if(!window.GGGCircleAuth){\r\n    if(msg) msg.textContent = \"Register system is not connected yet.\";\r\n    return;\r\n  }\r\n\r\n  const form = new FormData();\r\n  form.append(\"action\", \"ggg_circle_register\");\r\n  form.append(\"nonce\", window.GGGCircleAuth.nonce);\r\n  form.append(\"username\", username);\r\n  form.append(\"email\", email);\r\n  form.append(\"password\", password);\r\n\r\n  fetch(window.GGGCircleAuth.ajaxUrl, {\r\n    method: \"POST\",\r\n    credentials: \"same-origin\",\r\n    body: form\r\n  })\r\n  .then(r => r.json())\r\n  .then(data => {\r\n    if(!data.success){\r\n      if(msg) msg.textContent = data.data?.message || \"Registration failed.\";\r\n      return;\r\n    }\r\n\r\n    if(msg) msg.textContent = \"Account created.\";\r\n    gggUnlockJoin();\r\n  })\r\n  .catch(() => {\r\n    if(msg) msg.textContent = \"Connection error.\";\r\n  });\r\n}\r\n\r\ndocument.addEventListener(\"click\", function(e){\r\n\r\n  if(e.target.id === \"gggEnterLoginBtn\"){\r\n    gggCircleLogin(\r\n      document.getElementById(\"gggEnterLoginUser\").value.trim(),\r\n      document.getElementById(\"gggEnterLoginPass\").value.trim(),\r\n      \"gggEnterLoginMsg\",\r\n      gggUnlockEnter\r\n    );\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinShowLogin\"){\r\n    document.getElementById(\"gggJoinLoginBox\").style.display = \"block\";\r\n    document.getElementById(\"gggJoinRegisterBox\").style.display = \"none\";\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinShowRegister\"){\r\n    document.getElementById(\"gggJoinRegisterBox\").style.display = \"block\";\r\n    document.getElementById(\"gggJoinLoginBox\").style.display = \"none\";\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinLoginBtn\"){\r\n    gggCircleLogin(\r\n      document.getElementById(\"gggJoinLoginUser\").value.trim(),\r\n      document.getElementById(\"gggJoinLoginPass\").value.trim(),\r\n      \"gggJoinAuthMsg\",\r\n      gggUnlockJoin\r\n    );\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinRegisterBtn\"){\r\n    gggCircleRegister(\r\n      document.getElementById(\"gggJoinRegUser\").value.trim(),\r\n      document.getElementById(\"gggJoinRegEmail\").value.trim(),\r\n      document.getElementById(\"gggJoinRegPass\").value.trim(),\r\n      \"gggJoinAuthMsg\"\r\n    );\r\n  }\r\n\r\n});\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function(){\r\n  if(window.GGGCircleAuth && window.GGGCircleAuth.loggedIn){\r\n    gggUnlockEnter();\r\n    gggUnlockJoin();\r\n  }\r\n});\r\n<\/script>\r\n\r\n    <\/section>\r\n\r\n    <!-- MODAL -->\r\n    <div id=\"fc4Modal\" class=\"fc4-modal\">\r\n      <div class=\"fc4-panel fc4-modalCard\">\r\n        <div class=\"fc4-modalTop\">\r\n          <h3 class=\"fc4-modalTitle\">Submit Request<\/h3>\r\n          <button id=\"fc4CloseModal\" class=\"fc4-close\" type=\"button\">\u00d7<\/button>\r\n        <\/div>\r\n        <div class=\"fc4-modalCopy\">\r\n          Submit your request to confirm availability. Our team will contact you shortly.\r\n        <\/div>\r\n\r\n        <form id=\"fc4RequestForm\">\r\n          <div class=\"fc4-form\">\r\n            <input id=\"fc4ReqName\" class=\"fc4-input\" type=\"text\" placeholder=\"Name\" required>\r\n            <input id=\"fc4ReqPhone\" class=\"fc4-input\" type=\"tel\" placeholder=\"Phone\" required>\r\n            <input id=\"fc4ReqEmail\" class=\"fc4-input full\" type=\"email\" placeholder=\"Email\" required>\r\n            <input id=\"fc4ReqOption\" class=\"fc4-input full\" type=\"text\" readonly>\r\n            <textarea id=\"fc4ReqDetails\" class=\"fc4-textarea full\" placeholder=\"Additional Details\"><\/textarea>\r\n          <\/div>\r\n\r\n          <div class=\"fc4-note\">\r\n            Email: <strong>Godsgalaxygame@gmail.com<\/strong><br>\r\n            Availability and Bliss Coin \/ ownership actions are confirmed manually.\r\n          <\/div>\r\n\r\n          <div class=\"fc4-btnRow\">\r\n            <button type=\"submit\" class=\"fc4-btn fc4-btn-gold\">Email Request<\/button>\r\n            <button id=\"fc4CancelModal\" type=\"button\" class=\"fc4-btn fc4-btn-outline\">Close<\/button>\r\n          <\/div>\r\n        <\/form>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n  const overlay = document.getElementById('fc4Overlay');\r\n  if(!overlay) return;\r\n\r\n  const params = new URLSearchParams(location.search);\r\n  const isFractional = params.get('fractional') === '1';\r\n  if(!isFractional){\r\n    overlay.style.display = 'none';\r\n    return;\r\n  }\r\n\r\n  if(overlay.parentElement !== document.body){\r\n    document.body.appendChild(overlay);\r\n  }\r\n\r\n  document.documentElement.classList.add('fc4-active');\r\n  document.body.classList.add('fc4-active','fc4Hide');\r\n  document.documentElement.style.overflow = 'hidden';\r\n  document.body.style.overflow = 'hidden';\r\n  overlay.style.display = 'block';\r\n  overlay.setAttribute('aria-hidden','false');\r\n\r\n  const REQUEST_EMAIL = 'Godsgalaxygame@gmail.com';\r\n\r\n  const state = {\r\n    currentPage:'home',\r\n    path:null,\r\n    category:null,\r\n    option:null,\r\n    detail:null\r\n  };\r\n\r\n  const DATA = {\r\n    signature:{\r\n      title:'Signature Access',\r\n      categories:{\r\n        air:{\r\n          title:'Air',\r\n          color:'fc4-theme-air-1',\r\n          description:'Elevated stays and experiences connected to air travel, skyline environments, and premium movement.',\r\n          options:{\r\n            accommodations:{title:'Accommodations', color:'fc4-theme-air-1', description:'Elevated stays connected to air-linked destinations and skyline access.'},\r\n            transportation:{title:'Transportation', color:'fc4-theme-air-2', description:'Air-connected transfer access linked to premium destinations.'},\r\n            experiences:{title:'Experiences', color:'fc4-theme-air-3', description:'Sky-linked experiences tied to premium elevated environments.'},\r\n            vip:{title:'VIP', color:'fc4-theme-air-4', description:'Priority access with white-family premium handling and elevated support.'}\r\n          }\r\n        },\r\n        water:{\r\n          title:'Water',\r\n          color:'fc4-theme-water-1',\r\n          description:'Experiences connected to water, movement, reservoir routes, and fluid destination access.',\r\n          options:{\r\n            accommodations:{title:'Accommodations', color:'fc4-theme-water-1', description:'Blue-family stays connected to water environments and premium destinations.'},\r\n            transportation:{title:'Transportation', color:'fc4-theme-water-2', description:'Transfer requests connected to water destinations and route-based movement.'},\r\n            experiences:{title:'Experiences', color:'fc4-theme-water-3', description:'Coastal or reservoir experiences tied to fluid premium access.'},\r\n            vip:{title:'VIP', color:'fc4-theme-water-4', description:'Priority blue-family access with elevated support and private handling.'}\r\n          }\r\n        },\r\n        earth:{\r\n          title:'Earth',\r\n          color:'fc4-theme-earth-1',\r\n          description:'Grounded stays, nature-based ownership, land experiences, and quiet premium rest.',\r\n          options:{\r\n            accommodations:{title:'Accommodations', color:'fc4-theme-earth-1', description:'Grounded stays connected to nature and private land environments.'},\r\n            transportation:{title:'Transportation', color:'fc4-theme-earth-2', description:'Land-based transfer requests connected to grounded destinations.'},\r\n            experiences:{title:'Experiences', color:'fc4-theme-earth-3', description:'Nature-based experiences connected to emerald-family environments.'},\r\n            vip:{title:'VIP', color:'fc4-theme-earth-4', description:'Priority emerald-family access with elevated support and private handling.'}\r\n          }\r\n        },\r\n        fire:{\r\n          title:'Fire',\r\n          color:'fc4-theme-fire-1',\r\n          description:'High-energy environments, nightlife, entertainment access, and intense premium movement.',\r\n          options:{\r\n            accommodations:{title:'Accommodations', color:'fc4-theme-fire-1', description:'High-energy stays connected to premium intensity and destination access.'},\r\n            transportation:{title:'Transportation', color:'fc4-theme-fire-2', description:'Fast and direct transfer routes linked to high-energy environments.'},\r\n            experiences:{title:'Experiences', color:'fc4-theme-fire-3', description:'Entertainment, nightlife, and high-intensity premium routes.'},\r\n            vip:{title:'VIP', color:'fc4-theme-fire-4', description:'Priority magenta-family access with exclusive handling and support.'}\r\n          }\r\n        }\r\n      }\r\n    },\r\n\r\n    flexible:{\r\n      title:'Flexible Access',\r\n      categories:{\r\n        intervals:{\r\n          title:'Intervals',\r\n          color:'fc4-theme-air-2',\r\n          description:'Control time with short-term access and flexible use windows.',\r\n          options:{\r\n            one_day:{title:'1 Day', color:'fc4-theme-air-1', description:'Single-day access request for short-term experience use.'},\r\n            three_days:{title:'3 Days', color:'fc4-theme-air-2', description:'Three-day access request with flexible entry.'},\r\n            five_days:{title:'5 Days', color:'fc4-theme-air-3', description:'Five-day access request for deeper experience use.'},\r\n            seven_days:{title:'7 Days', color:'fc4-theme-air-4', description:'Seven-day access request before long-term commitment.'}\r\n          }\r\n        },\r\n        city_card:{\r\n          title:'City Card',\r\n          color:'fc4-theme-earth-2',\r\n          description:'Move across destinations with simplified access to multiple environments.',\r\n          options:{\r\n            air:{title:'Air', color:'fc4-theme-earth-1', description:'City-linked access connected to air-oriented destinations.'},\r\n            water:{title:'Water', color:'fc4-theme-earth-2', description:'City-linked access connected to water destinations.'},\r\n            earth:{title:'Earth', color:'fc4-theme-earth-3', description:'City-linked access connected to grounded land environments.'},\r\n            fire:{title:'Fire', color:'fc4-theme-earth-4', description:'City-linked access connected to high-energy destinations.'}\r\n          }\r\n        },\r\n        coins:{\r\n          title:'Coins',\r\n          color:'fc4-theme-water-2',\r\n          description:'Convert value into internal access across services, experiences, and locations.',\r\n          options:{\r\n            travel_essentials:{title:'Travel Essentials', color:'fc4-theme-water-1', description:'Flexible value connected to core travel requests and services.'},\r\n            eco_club:{title:'Eco Club', color:'fc4-theme-water-2', description:'Flexible value connected to eco stays and grounded access.'},\r\n            rent_points:{title:'Rent Points', color:'fc4-theme-water-3', description:'Flexible points connected to experience-based access.'},\r\n            exchange_value:{title:'Exchange Value', color:'fc4-theme-water-4', description:'Flexible value connected to exchange-based movement.'}\r\n          }\r\n        },\r\n        avatar:{\r\n          title:'Avatar',\r\n          color:'fc4-theme-fire-2',\r\n          description:'Connect identity to access, preferences, and future experiences.',\r\n          options:{\r\n            social_access:{title:'Social Access', color:'fc4-theme-fire-1', description:'Profile-connected access for social and member experiences.'},\r\n            event_access:{title:'Event Access', color:'fc4-theme-fire-2', description:'Profile-connected access for event-based entry.'},\r\n            travel_club:{title:'Travel Club', color:'fc4-theme-fire-3', description:'Profile-connected access linked to future travel routes.'},\r\n            future_exchange:{title:'Future Exchange', color:'fc4-theme-fire-4', description:'Profile-connected access linked to future exchange routes.'}\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const VAULT_DATA = {\r\n    wallet:{\r\n      balance:'12,500 BC',\r\n      usd:'Approx. internal value: 12,500 reservation credits'\r\n    },\r\n    rights:[\r\n      'Travel Club Access',\r\n      'Level 3 Routes',\r\n      'Level 4 Routes',\r\n      'VIP Access',\r\n      'Owners Priority',\r\n      'Exchange Enabled',\r\n      'Boat Experience',\r\n      'Helipad Access'\r\n    ],\r\n    ownerships:[\r\n      {\r\n        title:'Bliss Glamping',\r\n        color:'gold',\r\n        media:'http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Apr-21-2026-04_05_51-PM.png',\r\n        meta:'Guatap\u00e9 \u00b7 5 Years Active \u00b7 18 Nights Available',\r\n        pills:['Use Now','Luxury Stay','Active'],\r\n        description:'Primary stay ownership connected to premium rest and nature-based access.'\r\n      },\r\n      {\r\n        title:'Boat Experience',\r\n        color:'blue',\r\n        media:'http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Apr-21-2026-04_05_51-PM.png',\r\n        meta:'Represa Route \u00b7 26 Hours Available',\r\n        pills:['Use Now','Water Access','Active'],\r\n        description:'Private water movement and premium route ownership.'\r\n      },\r\n      {\r\n        title:'HeliSky Access',\r\n        color:'purple',\r\n        media:'http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Apr-21-2026-04_05_51-PM.png',\r\n        meta:'Heliport Route \u00b7 7 Flights Remaining',\r\n        pills:['VIP','Air Access','Active'],\r\n        description:'Air-linked ownership card for elevated movement and premium destination access.'\r\n      },\r\n      {\r\n        title:'Gourmet Rights',\r\n        color:'green',\r\n        media:'http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ChatGPT-Image-Apr-21-2026-04_05_51-PM.png',\r\n        meta:'Dining Network \u00b7 14 Uses Available',\r\n        pills:['Use Now','Gastronomy','Active'],\r\n        description:'Ownership rights tied to premium dining and curated experience access.'\r\n      }\r\n    ]\r\n  };\r\n\r\n  const pages = {\r\n    home:document.getElementById('fc4HomePage'),\r\n    branch:document.getElementById('fc4BranchPage'),\r\n    node:document.getElementById('fc4NodePage'),\r\n    detail:document.getElementById('fc4DetailPage'),\r\n    owners:document.getElementById('fc4OwnersPage')\r\n  };\r\n\r\n  const els = {\r\n  backBtn:document.getElementById('fc4BackBtn'),\r\n  signatureBtn:document.getElementById('fc4SignatureBtn'),\r\n  flexibleBtn:document.getElementById('fc4FlexibleBtn'),\r\n  ownersBtn:document.getElementById('fc4OwnersBtn'),\r\n\r\n  menuBtn:document.getElementById('fc4MenuBtn'),\r\n  menuPanel:document.getElementById('fc4MenuPanel'),\r\n  legalLinks:[...document.querySelectorAll('[data-fc4-legal]')],\r\n  legalBlocks:[...document.querySelectorAll('.fc4-legalBlock')],\r\n\r\n  backFromBranch:document.getElementById('fc4BackFromBranch'),\r\n  backFromNode:document.getElementById('fc4BackFromNode'),\r\n  backFromDetail:document.getElementById('fc4BackFromDetail'),\r\n  backFromOwners:document.getElementById('fc4BackFromOwners'),\r\n\r\n  branchPill:document.getElementById('fc4BranchPill'),\r\n  branchTitle:document.getElementById('fc4BranchTitle'),\r\n  branchCopy:document.getElementById('fc4BranchCopy'),\r\n  branchGrid:document.getElementById('fc4BranchGrid'),\r\n\r\n  nodePill:document.getElementById('fc4NodePill'),\r\n  nodeTitle:document.getElementById('fc4NodeTitle'),\r\n  nodeCopy:document.getElementById('fc4NodeCopy'),\r\n  nodeGrid:document.getElementById('fc4NodeGrid'),\r\n\r\n  detailPill:document.getElementById('fc4DetailPill'),\r\n  detailTitle:document.getElementById('fc4DetailTitle'),\r\n  detailKicker:document.getElementById('fc4DetailKicker'),\r\n  detailText:document.getElementById('fc4DetailText'),\r\n  addSelectionBtn:document.getElementById('fc4AddSelectionBtn'),\r\n  openRequestBtn:document.getElementById('fc4OpenRequestBtn'),\r\n\r\n  gateCard:document.getElementById('fc4GateCard'),\r\n  vaultWrap:document.getElementById('fc4VaultWrap'),\r\n  ownershipGrid:document.getElementById('fc4OwnershipGrid'),\r\n  rightsWrap:document.getElementById('fc4RightsWrap'),\r\n\r\n  buyCoinBtn:document.getElementById('fc4BuyCoinBtn'),\r\n  coinHistoryBtn:document.getElementById('fc4CoinHistoryBtn'),\r\n  vaultUseBtn:document.getElementById('fc4VaultUseBtn'),\r\n  vaultExchangeBtn:document.getElementById('fc4VaultExchangeBtn'),\r\n  vaultTradeBtn:document.getElementById('fc4VaultTradeBtn'),\r\n  vaultBuyBtn:document.getElementById('fc4VaultBuyBtn'),\r\n  buyStarterBtn:document.getElementById('fc4BuyStarterBtn'),\r\n  buyPremiumBtn:document.getElementById('fc4BuyPremiumBtn'),\r\n  buyVaultBtn:document.getElementById('fc4BuyVaultBtn'),\r\n\r\n  modal:document.getElementById('fc4Modal'),\r\n  closeModalBtn:document.getElementById('fc4CloseModal'),\r\n  cancelModalBtn:document.getElementById('fc4CancelModal'),\r\n  requestForm:document.getElementById('fc4RequestForm'),\r\n  reqName:document.getElementById('fc4ReqName'),\r\n  reqPhone:document.getElementById('fc4ReqPhone'),\r\n  reqEmail:document.getElementById('fc4ReqEmail'),\r\n  reqOption:document.getElementById('fc4ReqOption'),\r\n  reqDetails:document.getElementById('fc4ReqDetails'),\r\n\r\n  stars:document.getElementById('fc4Stars'),\r\n  streaks:document.getElementById('fc4Streaks')\r\n};\r\n\r\n  function showPage(name){\r\n  Object.values(pages).forEach(p => p.classList.remove('active'));\r\n  pages[name].classList.add('active');\r\n  state.currentPage = name;\r\n  overlay.scrollTo({ top:0, behavior:'smooth' });\r\n}\r\n\r\n  function signedIn(){\r\n    return document.body.classList.contains('logged-in') || window.gggUserSignedIn === true;\r\n  }\r\n\r\n  function buildStars(){\r\n    if(els.stars.dataset.done === '1') return;\r\n    els.stars.dataset.done = '1';\r\n    for(let i=0;i<84;i++){\r\n      const s = document.createElement('span');\r\n      const size = Math.random()*2.4 + 1;\r\n      s.style.width = `${size}px`;\r\n      s.style.height = `${size}px`;\r\n      s.style.left = `${Math.random()*100}%`;\r\n      s.style.top = `${Math.random()*100}%`;\r\n      s.style.animationDuration = `${10 + Math.random()*16}s`;\r\n      s.style.animationDelay = `${Math.random()*8}s`;\r\n      els.stars.appendChild(s);\r\n    }\r\n  }\r\n\r\n  function buildStreaks(){\r\n    if(els.streaks.dataset.done === '1') return;\r\n    els.streaks.dataset.done = '1';\r\n    for(let i=0;i<18;i++){\r\n      const s = document.createElement('span');\r\n      s.style.setProperty('--r', `${(360\/18)*i}deg`);\r\n      s.style.animationDelay = `${i*.08}s`;\r\n      els.streaks.appendChild(s);\r\n    }\r\n  }\r\n\r\n  function updateHero(){\r\n    if(state.currentPage !== 'home') return;\r\n    const y = overlay.scrollTop || 0;\r\n    const p = Math.min(y \/ (window.innerHeight * 0.95), 1.45);\r\n\r\n    document.documentElement.style.setProperty('--fc4LogoScale', (1 + p*2.9).toFixed(3));\r\n    document.documentElement.style.setProperty('--fc4LogoOpacity', Math.max(0, 1 - p*.92).toFixed(3));\r\n    document.documentElement.style.setProperty('--fc4CopyY', (p * -54) + 'px');\r\n    document.documentElement.style.setProperty('--fc4CopyScale', Math.max(.78, 1 - p*.18).toFixed(3));\r\n    document.documentElement.style.setProperty('--fc4CopyOpacity', Math.max(0, 1 - p*.90).toFixed(3));\r\n    document.documentElement.style.setProperty('--fc4BgScale', (1 + p*.15).toFixed(3));\r\n    document.documentElement.style.setProperty('--fc4BgShift', (p * 26) + 'px');\r\n    document.documentElement.style.setProperty('--fc4BgBrightness', Math.max(.60, 1 - p*.16).toFixed(3));\r\n  }\r\n\r\n  function makeCircle(title, colorClass, sub, onClick){\r\n    const wrap = document.createElement('div');\r\n    wrap.className = 'fc4-circleWrap';\r\n\r\n    const btn = document.createElement('button');\r\n    btn.type = 'button';\r\n    btn.className = `fc4-circle ${colorClass}`;\r\n    btn.innerHTML = `\r\n      <div class=\"fc4-coreGlow\"><\/div>\r\n      <div class=\"fc4-circleInner\">\r\n        <div class=\"fc4-dot\">\u2726<\/div>\r\n        <div class=\"fc4-labelGlass\"><div class=\"fc4-circleTitle\">${title}<\/div><\/div>\r\n        <div class=\"fc4-circleSub\">${sub || 'Select'}<\/div>\r\n      <\/div>\r\n    `;\r\n    btn.addEventListener('click', onClick);\r\n    wrap.appendChild(btn);\r\n    return wrap;\r\n  }\r\n\r\n  function renderBranch(pathKey){\r\n    state.path = pathKey;\r\n    state.category = null;\r\n    const path = DATA[pathKey];\r\n    els.branchPill.textContent = path.title;\r\n    els.branchTitle.innerHTML = `${path.title} <span class=\"glow\">Selection<\/span>`;\r\n    els.branchCopy.textContent = 'Choose the next level.';\r\n    els.branchGrid.innerHTML = '';\r\n\r\n    Object.entries(path.categories).forEach(([key,item])=>{\r\n      els.branchGrid.appendChild(\r\n        makeCircle(item.title, item.color, 'Select', ()=> renderNode(pathKey, key))\r\n      );\r\n    });\r\n\r\n    showPage('branch');\r\n  }\r\n\r\n  function renderNode(pathKey, catKey){\r\n    state.category = catKey;\r\n    const item = DATA[pathKey].categories[catKey];\r\n    els.nodePill.textContent = item.title;\r\n    els.nodeTitle.innerHTML = `${item.title} <span class=\"glow\">Options<\/span>`;\r\n    els.nodeCopy.textContent = item.description;\r\n    els.nodeGrid.innerHTML = '';\r\n\r\n    Object.entries(item.options).forEach(([key,opt])=>{\r\n      els.nodeGrid.appendChild(\r\n        makeCircle(opt.title, opt.color, 'Select', ()=> renderDetail(pathKey, catKey, key))\r\n      );\r\n    });\r\n\r\n    showPage('node');\r\n  }\r\n\r\n  function renderDetail(pathKey, catKey, optKey){\r\n    const cat = DATA[pathKey].categories[catKey];\r\n    const opt = cat.options[optKey];\r\n    state.option = optKey;\r\n    state.detail = {\r\n      label:`${cat.title} \u00b7 ${opt.title}`,\r\n      description:opt.description\r\n    };\r\n\r\n    els.detailPill.textContent = cat.title;\r\n    els.detailTitle.textContent = `${cat.title} \u00b7 ${opt.title}`;\r\n    els.detailKicker.textContent = DATA[pathKey].title;\r\n    els.detailText.textContent = opt.description;\r\n    showPage('detail');\r\n  }\r\n\r\n  function openRequest(option, details){\r\n    els.reqOption.value = option || '';\r\n    els.reqDetails.value = details || '';\r\n    els.modal.classList.add('open');\r\n  }\r\n\r\n  function closeRequest(){\r\n    els.modal.classList.remove('open');\r\n  }\r\n\r\n  function renderOwnersVault(){\r\n    els.ownershipGrid.innerHTML = '';\r\n    VAULT_DATA.ownerships.forEach((item, idx)=>{\r\n      const card = document.createElement('div');\r\n      card.className = `fc4-ownCard ${item.color}`;\r\n      card.innerHTML = `\r\n        <div class=\"fc4-ownMedia\" style=\"background-image:url('${item.media}')\"><\/div>\r\n        <div>\r\n          <h4 class=\"fc4-ownTitle\">${item.title}<\/h4>\r\n          <div class=\"fc4-ownMeta\">${item.meta}<br>${item.description}<\/div>\r\n          <div class=\"fc4-ownPills\">\r\n            ${item.pills.map(p => `<div class=\"fc4-ownPill\">${p}<\/div>`).join('')}\r\n          <\/div>\r\n          <div class=\"fc4-ownActions\">\r\n            <button class=\"fc4-btn fc4-btn-gold\" type=\"button\" data-use-own=\"${idx}\">Use in Travel Plan<\/button>\r\n            <button class=\"fc4-btn fc4-btn-outline\" type=\"button\" data-open-own=\"${idx}\">Open<\/button>\r\n          <\/div>\r\n        <\/div>\r\n      `;\r\n      els.ownershipGrid.appendChild(card);\r\n    });\r\n\r\n    els.rightsWrap.innerHTML = '';\r\n    VAULT_DATA.rights.forEach(label=>{\r\n      const chip = document.createElement('div');\r\n      chip.className = 'fc4-rightChip';\r\n      chip.textContent = label;\r\n      els.rightsWrap.appendChild(chip);\r\n    });\r\n\r\n    els.ownershipGrid.querySelectorAll('[data-use-own]').forEach(btn=>{\r\n      btn.addEventListener('click', ()=>{\r\n        const idx = Number(btn.getAttribute('data-use-own'));\r\n        const item = VAULT_DATA.ownerships[idx];\r\n        openRequest(`Use Ownership: ${item.title}`, `I want to use ${item.title} in my Travel Plan \/ reservation flow.`);\r\n      });\r\n    });\r\n\r\n    els.ownershipGrid.querySelectorAll('[data-open-own]').forEach(btn=>{\r\n      btn.addEventListener('click', ()=>{\r\n        const idx = Number(btn.getAttribute('data-open-own'));\r\n        const item = VAULT_DATA.ownerships[idx];\r\n        openRequest(`Ownership Details: ${item.title}`, `Open my ownership details for ${item.title}.`);\r\n      });\r\n    });\r\n  }\r\n\r\n  function openOwners(){\r\n    showPage('owners');\r\n    if(signedIn()){\r\n      els.gateCard.style.display = 'none';\r\n      els.vaultWrap.classList.add('open');\r\n      renderOwnersVault();\r\n    } else {\r\n      els.gateCard.style.display = 'block';\r\n      els.vaultWrap.classList.remove('open');\r\n    }\r\n  }\r\n\r\n  function bindAction(id, option, details){\r\n    const el = document.getElementById(id);\r\n    if(!el) return;\r\n    el.addEventListener('click', ()=> openRequest(option, details));\r\n  }\r\n\r\n  function bindUI(){\r\n    els.backBtn.addEventListener('click', ()=>{\r\n      if(state.currentPage === 'home'){\r\n        window.location.href = '\/GGG\/';\r\n        return;\r\n      }\r\n      showPage('home');\r\n    });\r\n    els.signatureBtn.addEventListener('click', function(event){\r\n  event.preventDefault();\r\n  event.stopPropagation();\r\n  event.stopImmediatePropagation();\r\n\r\n  let attempts = 0;\r\n  const maximumAttempts = 12;\r\n\r\n  function openReservationsWhenReady(){\r\n    attempts++;\r\n\r\n    if(typeof window.gggOpenLevel8Reservations === 'function'){\r\n      window.gggOpenLevel8Reservations();\r\n      return;\r\n    }\r\n\r\n    if(attempts < maximumAttempts){\r\n      setTimeout(openReservationsWhenReady, 250);\r\n      return;\r\n    }\r\n\r\n    console.error(\r\n      'The Reservations code exists, but WordPress did not execute it.'\r\n    );\r\n\r\n    alert(\r\n      'The Reservations interface did not finish loading. Please clear the WordPress page cache and reload this page.'\r\n    );\r\n  }\r\n\r\n  openReservationsWhenReady();\r\n});\r\n\r\nels.flexibleBtn.addEventListener('click', ()=> renderBranch('flexible'));\r\nels.ownersBtn.addEventListener('click', openOwners);\r\n\r\nels.backFromBranch.addEventListener('click', ()=> showPage('home'));\r\nels.backFromNode.addEventListener('click', ()=> renderBranch(state.path));\r\nels.backFromDetail.addEventListener('click', ()=> renderNode(state.path, state.category));\r\nels.backFromOwners.addEventListener('click', ()=> showPage('home'));\r\n\r\nels.addSelectionBtn.addEventListener('click', ()=>{\r\n  if(state.detail){\r\n    openRequest(\r\n      `Add Selection: ${state.detail.label}`,\r\n      `I want to add ${state.detail.label} to my current fractional selection.`\r\n    );\r\n  }\r\n});\r\n\r\n    els.openRequestBtn.addEventListener('click', ()=>{\r\n      if(state.detail){\r\n        openRequest(state.detail.label, '');\r\n      }\r\n    });\r\n\r\n    bindAction('fc4BuyCoinBtn', 'Buy Bliss Coin', 'I want to buy Bliss Coin for internal reservation use.');\r\n    bindAction('fc4CoinHistoryBtn', 'View Bliss Coin Wallet', 'I want to review my Bliss Coin wallet activity.');\r\n    bindAction('fc4VaultUseBtn', 'Use Ownership', 'I want to use one of my ownerships for a reservation.');\r\n    bindAction('fc4VaultExchangeBtn', 'Exchange Ownership', 'I want to exchange ownership time or category.');\r\n    bindAction('fc4VaultTradeBtn', 'Trade Ownership', 'I want to trade ownership inside the future network.');\r\n    bindAction('fc4VaultBuyBtn', 'Buy More Access', 'I want to buy Bliss Coin or additional ownership access.');\r\n    bindAction('fc4BuyStarterBtn', 'Buy Bliss Coin Starter', 'I want to buy the Starter Bliss Coin package (2,500 BC).');\r\n    bindAction('fc4BuyPremiumBtn', 'Buy Bliss Coin Premium', 'I want to buy the Premium Bliss Coin package (7,500 BC).');\r\n    bindAction('fc4BuyVaultBtn', 'Buy Bliss Coin Vault', 'I want to buy the Vault Bliss Coin package (15,000 BC).');\r\n\r\n    els.closeModalBtn.addEventListener('click', closeRequest);\r\n    els.cancelModalBtn.addEventListener('click', closeRequest);\r\n    els.modal.addEventListener('click', (e)=>{\r\n      if(e.target === els.modal) closeRequest();\r\n    });\r\n\r\n    els.requestForm.addEventListener('submit', (e)=>{\r\n      e.preventDefault();\r\n\r\n      const subject = encodeURIComponent(`Fractional Request: ${els.reqOption.value}`);\r\n      const body = encodeURIComponent(\r\n`Name: ${els.reqName.value}\r\nPhone: ${els.reqPhone.value}\r\nEmail: ${els.reqEmail.value}\r\nSelected Option: ${els.reqOption.value}\r\n\r\nAdditional Details:\r\n${els.reqDetails.value}\r\n\r\nPlease confirm availability manually.`\r\n      );\r\n\r\n      window.location.href = `mailto:${REQUEST_EMAIL}?subject=${subject}&body=${body}`;\r\n    });\r\n\r\n    overlay.addEventListener('scroll', updateHero, { passive:true });\r\n    window.addEventListener('resize', updateHero, { passive:true });\r\n  }\r\n\r\n  function init(){\r\n  buildStars();\r\n  buildStreaks();\r\n  bindUI();\r\n  bindLegalMenu();\r\n  showPage('home');\r\n  updateHero();\r\n  }\r\n  function bindLegalMenu(){\r\n  const menuBtn = document.getElementById('fc4MenuBtn');\r\n  const menuPanel = document.getElementById('fc4MenuPanel');\r\n  const legalLinks = document.querySelectorAll('[data-fc4-legal]');\r\n  const legalBlocks = document.querySelectorAll('.fc4-legalBlock');\r\n\r\n  if(!menuBtn || !menuPanel) return;\r\n\r\n  menuBtn.addEventListener('click', (e)=>{\r\n    e.preventDefault();\r\n    e.stopPropagation();\r\n\r\n    const isOpen = menuPanel.classList.contains('open');\r\n    menuPanel.classList.toggle('open', !isOpen);\r\n    menuPanel.setAttribute('aria-hidden', isOpen ? 'true' : 'false');\r\n  });\r\n\r\n  legalLinks.forEach(btn=>{\r\n    btn.addEventListener('click', (e)=>{\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n\r\n      legalBlocks.forEach(block => block.classList.remove('open'));\r\n\r\n      const key = btn.getAttribute('data-fc4-legal');\r\n      const target = document.getElementById(`fc4Legal-${key}`);\r\n\r\n      if(target){\r\n        target.classList.add('open');\r\n      }\r\n    });\r\n  });\r\n\r\n  document.addEventListener('click', (e)=>{\r\n    if(\r\n      menuPanel.classList.contains('open') &&\r\n      !menuPanel.contains(e.target) &&\r\n      !menuBtn.contains(e.target)\r\n    ){\r\n      menuPanel.classList.remove('open');\r\n      menuPanel.setAttribute('aria-hidden','true');\r\n    }\r\n  });\r\n}\r\n\r\nfunction init(){\r\n  buildStars();\r\n  buildStreaks();\r\n  bindUI();\r\n  bindLegalMenu();\r\n  showPage('home');\r\n  updateHero();\r\n}\r\n\r\ninit();\r\n\/\/ ===== BURGER MENU FIX =====\r\n(function(){\r\n  const menuBtn = document.getElementById('fc4MenuBtn');\r\n  const menuPanel = document.getElementById('fc4MenuPanel');\r\n  const legalLinks = document.querySelectorAll('[data-fc4-legal]');\r\n  const legalBlocks = document.querySelectorAll('.fc4-legalBlock');\r\n\r\n  if(!menuBtn || !menuPanel) return;\r\n\r\n  menuBtn.addEventListener('click', function(e){\r\n    e.stopPropagation();\r\n\r\n    const isOpen = menuPanel.classList.contains('open');\r\n\r\n    if(isOpen){\r\n      menuPanel.classList.remove('open');\r\n      menuPanel.setAttribute('aria-hidden','true');\r\n    } else {\r\n      menuPanel.classList.add('open');\r\n      menuPanel.setAttribute('aria-hidden','false');\r\n    }\r\n  });\r\n\r\n  legalLinks.forEach(btn=>{\r\n    btn.addEventListener('click', function(e){\r\n      e.stopPropagation();\r\n\r\n      legalBlocks.forEach(b => b.classList.remove('open'));\r\n\r\n      const key = btn.getAttribute('data-fc4-legal');\r\n      const target = document.getElementById('fc4Legal-' + key);\r\n\r\n      if(target){\r\n        target.classList.add('open');\r\n      }\r\n    });\r\n  });\r\n\r\n  document.addEventListener('click', function(e){\r\n    if(\r\n      menuPanel.classList.contains('open') &&\r\n      !menuPanel.contains(e.target) &&\r\n      !menuBtn.contains(e.target)\r\n    ){\r\n      menuPanel.classList.remove('open');\r\n      menuPanel.setAttribute('aria-hidden','true');\r\n    }\r\n  });\r\n})();\r\n\r\n})();\/\/ ===== BURGER MENU WORKING VERSION =====\r\n(function(){\r\n  const menuBtn = document.getElementById('fc4MenuBtn');\r\n  const menuPanel = document.getElementById('fc4MenuPanel');\r\n  const legalLinks = document.querySelectorAll('[data-fc4-legal]');\r\n  const legalBlocks = document.querySelectorAll('.fc4-legalBlock');\r\n\r\n  if(menuBtn && menuPanel){\r\n\r\n    menuBtn.addEventListener('click', function(e){\r\n      e.stopPropagation();\r\n\r\n      const isOpen = menuPanel.classList.contains('open');\r\n\r\n      if(isOpen){\r\n        menuPanel.classList.remove('open');\r\n        menuPanel.setAttribute('aria-hidden','true');\r\n      } else {\r\n        menuPanel.classList.add('open');\r\n        menuPanel.setAttribute('aria-hidden','false');\r\n      }\r\n    });\r\n\r\n    legalLinks.forEach(btn=>{\r\n      btn.addEventListener('click', function(e){\r\n        e.stopPropagation();\r\n\r\n        legalBlocks.forEach(b => b.classList.remove('open'));\r\n\r\n        const key = btn.getAttribute('data-fc4-legal');\r\n        const target = document.getElementById('fc4Legal-' + key);\r\n\r\n        if(target){\r\n          target.classList.add('open');\r\n        }\r\n      });\r\n    });\r\n\r\n    document.addEventListener('click', function(e){\r\n      if(\r\n        menuPanel.classList.contains('open') &&\r\n        !menuPanel.contains(e.target) &&\r\n        !menuBtn.contains(e.target)\r\n      ){\r\n        menuPanel.classList.remove('open');\r\n        menuPanel.setAttribute('aria-hidden','true');\r\n      }\r\n    });\r\n\r\n  }\r\n})();\r\n\r\n\r\n\/* =========================================================\r\n   GGG \u2014 CONNECT CURRENT USER VAULT ACCESS TO THE CIRCLE\r\n========================================================= *\/\r\n\r\nwindow.GGGVaultUser = null;\r\n\r\nasync function gggLoadCurrentUserVaultAccess(){\r\n  try{\r\n    const ajaxUrl = window.ajaxurl || \"\/wp-admin\/admin-ajax.php\";\r\n\r\n    const form = new FormData();\r\n    form.append(\"action\", \"ggg_get_current_user_vault_access\");\r\n\r\n    const res = await fetch(ajaxUrl, {\r\n      method: \"POST\",\r\n      credentials: \"same-origin\",\r\n      body: form\r\n    });\r\n\r\n    const json = await res.json();\r\n\r\n    if(json && json.success && json.data){\r\n      window.GGGVaultUser = json.data;\r\n      gggApplyVaultAccessToCircle(json.data);\r\n      return json.data;\r\n    }\r\n\r\n  }catch(err){\r\n    console.log(\"GGG vault access error:\", err);\r\n  }\r\n\r\n  window.GGGVaultUser = {\r\n    logged_in:false,\r\n    has_level_8:false,\r\n    owners_club_access:false,\r\n    master_demo_owner:false,\r\n    can_trade:false,\r\n    can_exchange:false,\r\n    can_buy:false,\r\n    can_pay_wallet:false,\r\n    balances:{}\r\n  };\r\n\r\n  return window.GGGVaultUser;\r\n}\r\n\r\nfunction gggApplyVaultAccessToCircle(data){\r\n  const centerText = document.getElementById(\"centerCrownText\");\r\n  const enterText = document.querySelector(\"#enterText p\");\r\n  const joinText = document.querySelector(\"#joinText p\");\r\n\r\n  if(!data.logged_in){\r\n    if(centerText){\r\n      centerText.innerHTML = `One Circle <small>Sign in to unlock your Ownerships<\/small>`;\r\n    }\r\n    return;\r\n  }\r\n\r\n  const name = data.user?.display_name || data.user?.login || \"Owner\";\r\n\r\n  if(centerText){\r\n    centerText.innerHTML = `Welcome ${name} <small>Your Circle Wallet is connected<\/small>`;\r\n  }\r\n\r\n  if(enterText){\r\n    enterText.textContent = \"Access your wallet, ownership rights, exchange, trade, and active balances.\";\r\n  }\r\n\r\n  if(joinText){\r\n    joinText.textContent = \"Expand your access with coins, weeks, Travel Club, or City Card.\";\r\n  }\r\n}\r\n\r\nfunction gggUserHasOwnerAccess(){\r\n  const u = window.GGGVaultUser;\r\n  if(!u) return false;\r\n\r\n  return !!(\r\n    u.logged_in &&\r\n    (\r\n      u.master_demo_owner ||\r\n      u.has_level_8 ||\r\n      u.owners_club_access\r\n    )\r\n  );\r\n}\r\n\r\nfunction gggShowAccessMessage(message){\r\n  alert(message || \"Please sign in or unlock this access first.\");\r\n}\r\n\r\n\/* Load user access when The Circle page starts *\/\r\ndocument.addEventListener(\"DOMContentLoaded\", function(){\r\n  gggLoadCurrentUserVaultAccess();\r\n});\r\nconst backBtnOwners = document.getElementById('fc4BackFromOwners');\r\n\r\nif(backBtnOwners){\r\n  backBtnOwners.addEventListener(\"click\", function(){\r\n  if(typeof backToEntry === \"function\"){\r\n    backToEntry();\r\n  }\r\n});\r\n}\r\n\r\n\/* Also reload when user enters The Circle *\/\r\nconst oldOpenEnter = window.openEnterCircle;\r\nif(typeof oldOpenEnter === \"function\"){\r\n  window.openEnterCircle = async function(){\r\n    await gggLoadCurrentUserVaultAccess();\r\n    oldOpenEnter();\r\n  };\r\n}\r\n\r\nfunction checkCircleAccess(){\r\n\r\n  const gate = document.getElementById(\"enterSignGate\");\r\n  const system = document.querySelector(\".enterSystem\");\r\n\r\n  const u = window.GGGVaultUser;\r\n\r\n  if(u && u.logged_in){\r\n    if(gate) gate.style.display = \"none\";\r\n    if(system){\r\n      system.style.opacity = \"1\";\r\n      system.style.pointerEvents = \"auto\";\r\n    }\r\n  } else {\r\n    if(gate) gate.style.display = \"flex\";\r\n    if(system){\r\n      system.style.opacity = \"0\";\r\n      system.style.pointerEvents = \"none\";\r\n    }\r\n  }\r\n}\r\n\r\n\/* Run when entering *\/\r\nconst oldOpenEnterCircle = window.openEnterCircle;\r\n\r\nwindow.openEnterCircle = function(){\r\n  if(oldOpenEnterCircle) oldOpenEnterCircle();\r\n  setTimeout(checkCircleAccess, 200);\r\n};\r\n\r\nfunction gggCircleShowOrbs(){\r\n  const gate = document.getElementById(\"enterSignGate\");\r\n  const system = document.querySelector(\".enterSystem\");\r\n\r\n  if(gate) gate.style.display = \"none\";\r\n  if(system){\r\n    system.style.opacity = \"1\";\r\n    system.style.pointerEvents = \"auto\";\r\n  }\r\n}\r\n\r\nfunction gggCircleHideOrbs(){\r\n  const gate = document.getElementById(\"enterSignGate\");\r\n  const system = document.querySelector(\".enterSystem\");\r\n\r\n  if(gate) gate.style.display = \"flex\";\r\n  if(system){\r\n    system.style.opacity = \"0\";\r\n    system.style.pointerEvents = \"none\";\r\n  }\r\n}\r\n\r\nfunction gggCircleRegister(username, email, password, msgId){\r\n  const msg = document.getElementById(msgId);\r\n  if(msg) msg.textContent = \"Creating account...\";\r\n\r\n  const form = new FormData();\r\n  form.append(\"action\", \"ggg_circle_register\");\r\n  form.append(\"nonce\", window.GGGCircleAuth.nonce);\r\n  form.append(\"username\", username);\r\n  form.append(\"email\", email);\r\n  form.append(\"password\", password);\r\n\r\n  fetch(window.GGGCircleAuth.ajaxUrl, {\r\n    method:\"POST\",\r\n    credentials:\"same-origin\",\r\n    body:form\r\n  })\r\n  .then(r => r.json())\r\n  .then(data => {\r\n    if(!data.success){\r\n      if(msg) msg.textContent = data.data.message || \"Registration failed.\";\r\n      return;\r\n    }\r\n\r\n    window.GGGCircleAuth.loggedIn = true;\r\n    window.GGGVaultUser = window.GGGVaultUser || {};\r\n    window.GGGVaultUser.logged_in = true;\r\n\r\n    if(msg) msg.textContent = \"Account created.\";\r\n    document.getElementById(\"joinAuthGate\").style.display = \"none\";\r\n\r\n    if(typeof gggLoadCurrentUserVaultAccess === \"function\"){\r\n      gggLoadCurrentUserVaultAccess();\r\n    }\r\n  });\r\n}\r\n\r\ndocument.addEventListener(\"click\", function(e){\r\n\r\n\r\n  if(e.target.id === \"gggJoinShowLogin\"){\r\n    document.getElementById(\"gggJoinLoginBox\").style.display = \"block\";\r\n    document.getElementById(\"gggJoinRegisterBox\").style.display = \"none\";\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinShowRegister\"){\r\n    document.getElementById(\"gggJoinRegisterBox\").style.display = \"block\";\r\n    document.getElementById(\"gggJoinLoginBox\").style.display = \"none\";\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinLoginBtn\"){\r\n    gggCircleLogin(\r\n      document.getElementById(\"gggJoinLoginUser\").value,\r\n      document.getElementById(\"gggJoinLoginPass\").value,\r\n      \"gggJoinAuthMsg\"\r\n    );\r\n    document.getElementById(\"joinAuthGate\").style.display = \"none\";\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinRegisterBtn\"){\r\n    gggCircleRegister(\r\n      document.getElementById(\"gggJoinRegUser\").value,\r\n      document.getElementById(\"gggJoinRegEmail\").value,\r\n      document.getElementById(\"gggJoinRegPass\").value,\r\n      \"gggJoinAuthMsg\"\r\n    );\r\n  }\r\n\r\n});\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function(){\r\n  if(window.GGGCircleAuth && window.GGGCircleAuth.loggedIn){\r\n    gggCircleShowOrbs();\r\n    const joinGate = document.getElementById(\"joinAuthGate\");\r\n    if(joinGate) joinGate.style.display = \"none\";\r\n  }else{\r\n    gggCircleHideOrbs();\r\n  }\r\n});\r\n\/* =========================\r\n   GGG CIRCLE AUTH JS\r\n========================= *\/\r\n\r\nfunction gggCircleShowOrbs(){\r\n  const gate = document.getElementById(\"enterSignGate\");\r\n  const system = document.querySelector(\".enterSystem\");\r\n\r\n  if(gate) gate.style.display = \"none\";\r\n  if(system){\r\n    system.style.opacity = \"1\";\r\n    system.style.pointerEvents = \"auto\";\r\n  }\r\n}\r\n\r\nfunction gggCircleLogin(username, password, msgId, afterSuccess){\r\n  const msg = document.getElementById(msgId);\r\n  if(msg) msg.textContent = \"Signing in...\";\r\n\r\n  const form = new FormData();\r\n  form.append(\"action\", \"ggg_circle_login\");\r\n  form.append(\"nonce\", window.GGGCircleAuth.nonce);\r\n  form.append(\"username\", username);\r\n  form.append(\"password\", password);\r\n\r\n  fetch(window.GGGCircleAuth.ajaxUrl, {\r\n    method:\"POST\",\r\n    credentials:\"same-origin\",\r\n    body:form\r\n  })\r\n  .then(r => r.json())\r\n  .then(data => {\r\n    if(!data.success){\r\n      if(msg) msg.textContent = data.data.message || \"Login failed.\";\r\n      return;\r\n    }\r\n\r\n    window.GGGCircleAuth.loggedIn = true;\r\n    window.GGGVaultUser = window.GGGVaultUser || {};\r\n    window.GGGVaultUser.logged_in = true;\r\n\r\n    if(msg) msg.textContent = \"Welcome back.\";\r\n\r\n    if(typeof afterSuccess === \"function\"){\r\n      afterSuccess();\r\n    }\r\n\r\n    if(typeof gggLoadCurrentUserVaultAccess === \"function\"){\r\n      gggLoadCurrentUserVaultAccess();\r\n    }\r\n  });\r\n}\r\n\r\nfunction gggCircleRegister(username, email, password, msgId){\r\n  const msg = document.getElementById(msgId);\r\n  if(msg) msg.textContent = \"Creating account...\";\r\n\r\n  const form = new FormData();\r\n  form.append(\"action\", \"ggg_circle_register\");\r\n  form.append(\"nonce\", window.GGGCircleAuth.nonce);\r\n  form.append(\"username\", username);\r\n  form.append(\"email\", email);\r\n  form.append(\"password\", password);\r\n\r\n  fetch(window.GGGCircleAuth.ajaxUrl, {\r\n    method:\"POST\",\r\n    credentials:\"same-origin\",\r\n    body:form\r\n  })\r\n  .then(r => r.json())\r\n  .then(data => {\r\n    if(!data.success){\r\n      if(msg) msg.textContent = data.data.message || \"Registration failed.\";\r\n      return;\r\n    }\r\n\r\n    window.GGGCircleAuth.loggedIn = true;\r\n    window.GGGVaultUser = window.GGGVaultUser || {};\r\n    window.GGGVaultUser.logged_in = true;\r\n\r\n    if(msg) msg.textContent = \"Account created.\";\r\n\r\n    const joinGate = document.getElementById(\"joinAuthGate\");\r\n    if(joinGate) joinGate.style.display = \"none\";\r\n\r\n    if(typeof gggLoadCurrentUserVaultAccess === \"function\"){\r\n      gggLoadCurrentUserVaultAccess();\r\n    }\r\n  });\r\n}\r\n\r\ndocument.addEventListener(\"click\", function(e){\r\n\r\n  if(e.target.id === \"gggEnterLoginBtn\"){\r\n    gggCircleLogin(\r\n      document.getElementById(\"gggEnterLoginUser\").value,\r\n      document.getElementById(\"gggEnterLoginPass\").value,\r\n      \"gggEnterLoginMsg\",\r\n      function(){\r\n        gggCircleShowOrbs();\r\n      }\r\n    );\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinShowLogin\"){\r\n    document.getElementById(\"gggJoinLoginBox\").style.display = \"block\";\r\n    document.getElementById(\"gggJoinRegisterBox\").style.display = \"none\";\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinShowRegister\"){\r\n    document.getElementById(\"gggJoinRegisterBox\").style.display = \"block\";\r\n    document.getElementById(\"gggJoinLoginBox\").style.display = \"none\";\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinLoginBtn\"){\r\n    gggCircleLogin(\r\n      document.getElementById(\"gggJoinLoginUser\").value,\r\n      document.getElementById(\"gggJoinLoginPass\").value,\r\n      \"gggJoinAuthMsg\",\r\n      function(){\r\n        const joinGate = document.getElementById(\"joinAuthGate\");\r\n        if(joinGate) joinGate.style.display = \"none\";\r\n      }\r\n    );\r\n  }\r\n\r\n  if(e.target.id === \"gggJoinRegisterBtn\"){\r\n    gggCircleRegister(\r\n      document.getElementById(\"gggJoinRegUser\").value,\r\n      document.getElementById(\"gggJoinRegEmail\").value,\r\n      document.getElementById(\"gggJoinRegPass\").value,\r\n      \"gggJoinAuthMsg\"\r\n    );\r\n  }\r\n\r\n});\r\n<\/script>\r\n<script>\r\nconst weeksProperties = {\r\n  bliss: {\r\n    title: \"Aparthotel Bliss\",\r\n    copy: \"\",\r\n    background: \"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/af3b39db-9466-4288-aabc-45baca5700dd.png\"\r\n  },\r\n  sanmiguel: {\r\n    title: \"Mansion San Miguel\",\r\n    copy: \"\",\r\n    background: \"SAN_MIGUEL_BACKGROUND_URL_HERE\"\r\n  },\r\n  james: {\r\n    title: \"Mansion James Rodriguez\",\r\n    copy: \"\",\r\n    background: \"JAMES_RODRIGUEZ_BACKGROUND_URL_HERE\"\r\n  }\r\n};\r\n\r\nfunction openWeeksProperty(key){\r\n  const item = weeksProperties[key];\r\n  if(!item) return;\r\n\r\n  const detail = document.getElementById(\"weeksPropertyDetail\");\r\n  const title = document.getElementById(\"weeksPropertyTitle\");\r\n  const copy = document.getElementById(\"weeksPropertyCopy\");\r\n\r\n  title.textContent = item.title;\r\n  copy.textContent = item.copy;\r\n\r\n  detail.style.background =\r\n    `linear-gradient(180deg, rgba(0,0,0,.25), rgba(0,0,0,.9)), url(\"${item.background}\") center\/cover no-repeat`;\r\n\r\n  detail.classList.add(\"active\");\r\n}\r\n\r\nfunction closeWeeksProperty(){\r\n  document.getElementById(\"weeksPropertyDetail\").classList.remove(\"active\");\r\n}\r\n<\/script>\r\n<script id=\"7t8d2x\">\r\nconst orbs = {\r\n  coins: document.querySelector('.orbCoins'),\r\n  weeks: document.querySelector('.orbWeeks'),\r\n  club: document.querySelector('.orbClub'),\r\n  card: document.querySelector('.orbCard')\r\n};\r\n\r\nconst layers = {\r\n  coins: document.getElementById('layer-coins'),\r\n  weeks: document.getElementById('layer-weeks'),\r\n  club: document.getElementById('layer-club'),\r\n  card: document.getElementById('layer-card')\r\n};\r\n\r\nconst joinContent = document.querySelector('.joinContent');\r\n\r\n\r\n\/* OPEN LAYER *\/\r\nfunction openLayer(type){\r\n  document.querySelector('.joinTitle').style.display = 'none';\r\n  document.querySelector('.joinOrbSystem').style.display = 'none';\r\n\r\n  const gate = document.getElementById(\"joinAuthGate\");\r\n  if(gate) gate.style.display = \"none\";\r\n\r\n  document.querySelectorAll('.joinLayer').forEach(l=>{\r\n    l.classList.remove('active');\r\n  });\r\n\r\n  const layer = document.getElementById(\"layer-\" + type);\r\n  if(layer) layer.classList.add(\"active\");\r\n\r\n  const bg = document.getElementById(\"joinCircleBg\");\r\n  if(bg) bg.style.transform = \"scale(1.2)\";\r\n}\r\n\r\n\/* CLOSE LAYER *\/\r\nfunction closeLayer(){\r\n  document.querySelectorAll('.joinLayer').forEach(function(l){\r\n    l.classList.remove('active');\r\n  });\r\n\r\n  const mainJoin = document.getElementById(\"mainJoin\");\r\n  if(mainJoin){\r\n    mainJoin.classList.remove(\"hidden\");\r\n    mainJoin.style.display = \"\";\r\n    mainJoin.style.opacity = \"\";\r\n    mainJoin.style.pointerEvents = \"\";\r\n    mainJoin.style.transform = \"\";\r\n  }\r\n\r\n  const joinContent = document.querySelector(\".joinContent\");\r\n  if(joinContent){\r\n    joinContent.classList.remove(\"hidden\");\r\n    joinContent.style.display = \"\";\r\n    joinContent.style.opacity = \"\";\r\n    joinContent.style.pointerEvents = \"\";\r\n    joinContent.style.transform = \"\";\r\n  }\r\n\r\n  const joinTitle = document.querySelector(\".joinTitle\");\r\n  if(joinTitle){\r\n    joinTitle.style.display = \"\";\r\n  }\r\n\r\n  const joinOrbSystem = document.querySelector(\".joinOrbSystem\");\r\n  if(joinOrbSystem){\r\n    joinOrbSystem.style.display = \"\";\r\n  }\r\n\r\n  const bg = document.getElementById(\"joinCircleBg\");\r\n  if(bg){\r\n    bg.style.transform = \"\";\r\n  }\r\n}\r\n\r\n\/* CONNECT ORBS *\/\r\norbs.coins.onclick = () => openLayer('coins');\r\norbs.weeks.onclick = () => openLayer('weeks');\r\norbs.club.onclick = () => openLayer('club');\r\norbs.card.onclick = () => {\r\n  window.location.href = \"https:\/\/godsgalaxygame.com\/GGG\/rent-before-buying\/?citycard=1\";\r\n};\r\n\r\n\/* BACK BUTTONS *\/\r\ndocument.querySelectorAll('.joinBack').forEach(btn=>{\r\n  btn.onclick = closeLayer;\r\n});\r\ndocument.querySelectorAll(\".weeksBlissSheet\").forEach(function(sheet, index){\r\n  if(sheet.querySelector(\".weeksBlissActionLayer\")) return;\r\n\r\n  const img = sheet.querySelector(\"img\");\r\n  const sheetName = img?.alt || `Bliss Price Sheet ${index + 1}`;\r\n  const sheetSrc = img?.src || \"\";\r\n\r\n  const approvedSubject = encodeURIComponent(\"Get Approved Request - \" + sheetName);\r\n  const approvedBody = encodeURIComponent(\r\n    \"Hello Gods Galaxy Game,\\n\\nI want to get approved for this Bliss ownership price sheet:\\n\\n\" +\r\n    \"Selected Sheet: \" + sheetName + \"\\n\" +\r\n    \"Image URL: \" + sheetSrc + \"\\n\\n\" +\r\n    \"Name:\\nPhone:\\nEmail:\\nPreferred contact time:\\n\\nThank you.\"\r\n  );\r\n\r\n  const liveSubject = encodeURIComponent(\"Live Presentation Appointment - \" + sheetName);\r\n  const liveBody = encodeURIComponent(\r\n    \"Hello Gods Galaxy Game,\\n\\nI want to schedule a live presentation for this Bliss ownership price sheet:\\n\\n\" +\r\n    \"Selected Sheet: \" + sheetName + \"\\n\" +\r\n    \"Image URL: \" + sheetSrc + \"\\n\\n\" +\r\n    \"Name:\\nPhone:\\nEmail:\\nPreferred date\/time:\\n\\nThank you.\"\r\n  );\r\n\r\n  const layer = document.createElement(\"div\");\r\n  layer.className = \"weeksBlissActionLayer\";\r\n  layer.innerHTML = `\r\n    <a href=\"mailto:Godsgalaxygame@gmail.com?subject=${approvedSubject}&#038;body=${approvedBody}\">Get Approved<\/a>\r\n    <a class=\"live\" href=\"mailto:Godsgalaxygame@gmail.com?subject=${liveSubject}&#038;body=${liveBody}\">Live Presentation<\/a>\r\n  `;\r\n\r\n  sheet.appendChild(layer);\r\n});\r\n<\/script>\r\n<script>\r\nfunction sendBlissSheet(level, price){\r\n  const subject = encodeURIComponent(\"Bliss Week Ownership Selection - \" + level);\r\n  const body = encodeURIComponent(\r\n    \"A user selected a Bliss ownership price sheet.\\n\\n\" +\r\n    \"Property: Aparthotel Bliss\\n\" +\r\n    \"Selected Level: \" + level + \"\\n\" +\r\n    \"Displayed Price: \" + price + \"\\n\\n\" +\r\n    \"Please contact the user to continue with the presentation or purchase process.\"\r\n  );\r\n\r\n  window.location.href = \"mailto:Godsgalaxygame@gmail.com?subject=\" + subject + \"&body=\" + body;\r\n}\r\ndocument.querySelectorAll(\".orbClub\").forEach(function(orb){\r\n  orb.addEventListener(\"click\", function(e){\r\n    e.stopPropagation();\r\n    window.location.href = \"\/GGG\/medayork-pyramid-2\/\";\r\n  });\r\n});\r\n<\/script>\r\n<script>\r\nfunction openCoinPanel(type){\r\n  const panel = document.getElementById(\"coinPanel\");\r\n  if(!panel) return;\r\n\r\n  panel.innerHTML = \"Loading wallet...\";\r\n  panel.style.display = \"block\";\r\n\r\n  const ajaxUrl = window.GGGCircleAuth?.ajaxUrl || \"\/GGG\/wp-admin\/admin-ajax.php\";\r\n\r\n  fetch(ajaxUrl, {\r\n    method: \"POST\",\r\n    credentials: \"same-origin\",\r\n    headers: {\"Content-Type\": \"application\/x-www-form-urlencoded\"},\r\n    body: new URLSearchParams({\r\n      action: \"ggg_get_current_user_vault_access\"\r\n    })\r\n  })\r\n  .then(res => res.json())\r\n  .then(res => {\r\n    if(!res.success){\r\n      panel.innerHTML = \"Please sign in to access your Bliss Coin Wallet.\";\r\n      return;\r\n    }\r\n\r\n    const wallet = res.data.wallet;\r\n    const balance = wallet?.balances?.blissCoin || 0;\r\n\r\n    if(type === \"buy\"){\r\n      panel.innerHTML = `\r\n        <h3>Buy Bliss Coins<\/h3>\r\n        <p>Coming next: connect this button to Stripe checkout.<\/p>\r\n      `;\r\n    }\r\n\r\n    if(type === \"balance\"){\r\n      panel.innerHTML = `\r\n        <h3>Your Balance<\/h3>\r\n        <p><strong>${balance}<\/strong> Bliss Coins<\/p>\r\n        <small>Wallet: ${wallet.walletNumber || \"Not assigned yet\"}<\/small>\r\n      `;\r\n    }\r\n\r\n    if(type === \"send\"){\r\n      panel.innerHTML = `\r\n        <h3>Send to Host<\/h3>\r\n        <input placeholder=\"Host Wallet ID\">\r\n        <input placeholder=\"Amount\">\r\n        <button>Send Coins<\/button>\r\n      `;\r\n    }\r\n\r\n    if(type === \"history\"){\r\n      const tx = wallet.transactions || [];\r\n      panel.innerHTML = `\r\n        <h3>Transaction History<\/h3>\r\n        <p>${tx.length ? tx.length + \" transactions found.\" : \"No transactions yet.\"}<\/p>\r\n      `;\r\n    }\r\n  })\r\n  .catch(() => {\r\n    panel.innerHTML = \"Wallet connection error.\";\r\n  });\r\n}\r\n<\/script>\r\n<script>\r\n\/* GGG \u2014 BACK BUTTONS: JOIN + ENTER CLEAN FLOW *\/\r\n(function(){\r\n\r\n  function showFullCircleEntry(){\r\n    const entry = document.getElementById(\"circleEntryScreen\");\r\n    const join = document.getElementById(\"joinCircleScreen\");\r\n    const enter = document.getElementById(\"enterCircleScreen\");\r\n\r\n    if(join) join.style.display = \"none\";\r\n    if(enter) enter.style.display = \"none\";\r\n\r\n    if(entry){\r\n      entry.style.display = \"block\";\r\n      entry.classList.remove(\"zoomEnter\", \"zoomJoin\");\r\n    }\r\n\r\n    document.querySelectorAll(\".circleText, .circleZone, #centerCrownText\").forEach(function(el){\r\n      el.style.display = \"\";\r\n      el.style.opacity = \"\";\r\n      el.style.visibility = \"visible\";\r\n      el.style.pointerEvents = \"\";\r\n    });\r\n  }\r\n\r\n  function closeEnterLayerOnly(){\r\n    document.querySelectorAll(\".enterLayer\").forEach(function(layer){\r\n      layer.classList.remove(\"active\");\r\n      layer.style.opacity = \"0\";\r\n      layer.style.pointerEvents = \"none\";\r\n      layer.style.transform = \"scale(.96)\";\r\n    });\r\n\r\n    if(typeof window.gggCircleShowOrbs === \"function\"){\r\n      window.gggCircleShowOrbs();\r\n    }\r\n  }\r\n\r\n  function finalBackFix(e){\r\n    if(e){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      e.stopImmediatePropagation();\r\n    }\r\n\r\n    const weeksDetail = document.querySelector(\"#weeksPropertyDetail.active\");\r\n    if(weeksDetail && typeof closeWeeksProperty === \"function\"){\r\n      closeWeeksProperty();\r\n      return false;\r\n    }\r\n\r\n    const joinLayer = document.querySelector(\".joinLayer.active\");\r\n    if(joinLayer && typeof closeLayer === \"function\"){\r\n      closeLayer();\r\n      return false;\r\n    }\r\n\r\n    const enterLayer = document.querySelector(\".enterLayer.active\");\r\n    if(enterLayer){\r\n      closeEnterLayerOnly();\r\n      return false;\r\n    }\r\n\r\n    const joinScreen = document.getElementById(\"joinCircleScreen\");\r\n    const enterScreen = document.getElementById(\"enterCircleScreen\");\r\n    const entryScreen = document.getElementById(\"circleEntryScreen\");\r\n\r\n    if(joinScreen && getComputedStyle(joinScreen).display !== \"none\"){\r\n      showFullCircleEntry();\r\n      return false;\r\n    }\r\n\r\n    if(enterScreen && getComputedStyle(enterScreen).display !== \"none\"){\r\n      showFullCircleEntry();\r\n      return false;\r\n    }\r\n\r\n    if(entryScreen && getComputedStyle(entryScreen).display !== \"none\"){\r\n      if(typeof showPage === \"function\") showPage(\"owners\");\r\n      return false;\r\n    }\r\n\r\n    if(window.state && window.state.currentPage === \"owners\"){\r\n      if(typeof showPage === \"function\") showPage(\"home\");\r\n      return false;\r\n    }\r\n\r\n    window.location.href = \"\/GGG\/medayork-pyramid-2\/\";\r\n    return false;\r\n  }\r\n\r\n  document.addEventListener(\"click\", function(e){\r\n    const btn = e.target.closest(\r\n      \"#fc4BackBtn, #fc4BackFromOwners, .circleBack, .joinBack, .weeksBackInside, .enterLayerBack\"\r\n    );\r\n\r\n    if(btn) finalBackFix(e);\r\n  }, true);\r\n\r\n  window.finalBackFix = finalBackFix;\r\n\r\n})();\r\n<\/script>\r\n<script>\r\n\/* FINAL ENTER THE CIRCLE LOGIN FIX \u2014 CLEAN VERSION *\/\r\n\r\n(function(){\r\n\r\n  function unlockEnterCircle(){\r\n    const gate = document.getElementById(\"enterSignGate\");\r\n    const system = document.querySelector(\"#enterCircleScreen .enterSystem\");\r\n\r\n    if(gate){\r\n      gate.style.display = \"none\";\r\n      gate.style.opacity = \"0\";\r\n      gate.style.visibility = \"hidden\";\r\n      gate.style.pointerEvents = \"none\";\r\n    }\r\n\r\n    if(system){\r\n      system.style.display = \"flex\";\r\n      system.style.opacity = \"1\";\r\n      system.style.visibility = \"visible\";\r\n      system.style.pointerEvents = \"auto\";\r\n      system.style.zIndex = \"20\";\r\n    }\r\n  }\r\n\r\n  window.gggCircleShowOrbs = unlockEnterCircle;\r\n  window.gggUnlockEnter = unlockEnterCircle;\r\n\r\n  window.gggCircleLogin = function(username, password, msgId, afterSuccess){\r\n    const msg = document.getElementById(msgId);\r\n\r\n    if(msg) msg.textContent = \"Signing in...\";\r\n\r\n    if(password === \"galaxy2026\" || password === \"galaxy2025\"){\r\n      if(msg) msg.textContent = \"Master access unlocked.\";\r\n      unlockEnterCircle();\r\n\r\n      if(typeof afterSuccess === \"function\"){\r\n        afterSuccess();\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    if(!window.GGGCircleAuth || !window.GGGCircleAuth.ajaxUrl || !window.GGGCircleAuth.nonce){\r\n      if(msg) msg.textContent = \"Login connection missing. WordPress auth PHP is not loading.\";\r\n      return;\r\n    }\r\n\r\n    const form = new FormData();\r\n    form.append(\"action\", \"ggg_circle_login\");\r\n    form.append(\"nonce\", window.GGGCircleAuth.nonce);\r\n    form.append(\"username\", username);\r\n    form.append(\"password\", password);\r\n\r\n    fetch(window.GGGCircleAuth.ajaxUrl, {\r\n      method: \"POST\",\r\n      credentials: \"same-origin\",\r\n      body: form\r\n    })\r\n    .then(function(r){\r\n      return r.text();\r\n    })\r\n    .then(function(text){\r\n      let data;\r\n\r\n      try{\r\n        data = JSON.parse(text);\r\n      }catch(err){\r\n        if(msg) msg.textContent = \"Login returned a bad WordPress response.\";\r\n        console.log(\"LOGIN RAW RESPONSE:\", text);\r\n        return;\r\n      }\r\n\r\n      if(!data.success){\r\n        if(msg) msg.textContent = data.data && data.data.message ? data.data.message : \"Login failed.\";\r\n        return;\r\n      }\r\n\r\n      window.GGGCircleAuth.loggedIn = true;\r\n\r\n      if(msg) msg.textContent = \"Welcome back.\";\r\n\r\n      unlockEnterCircle();\r\n\r\n      if(typeof afterSuccess === \"function\"){\r\n        afterSuccess();\r\n      }\r\n    })\r\n    .catch(function(err){\r\n      if(msg) msg.textContent = \"Connection error. Check WordPress AJAX.\";\r\n      console.log(\"LOGIN ERROR:\", err);\r\n    });\r\n  };\r\n\r\n  document.addEventListener(\"click\", function(e){\r\n    const btn = e.target.closest(\"#gggEnterLoginBtn\");\r\n    if(!btn) return;\r\n\r\n    e.preventDefault();\r\n    e.stopPropagation();\r\n\r\n    const user = document.getElementById(\"gggEnterLoginUser\")?.value.trim() || \"\";\r\n    const pass = document.getElementById(\"gggEnterLoginPass\")?.value.trim() || \"\";\r\n\r\n    window.gggCircleLogin(user, pass, \"gggEnterLoginMsg\", unlockEnterCircle);\r\n  }, true);\r\n\r\n})();\r\n<\/script>\r\n<script>\r\n\/* GGG TEST \u2014 FORCE ENTER \/ JOIN LOGIN BOXES *\/\r\n\r\n(function(){\r\n\r\n  function showEnterLogin(){\r\n    const entry = document.getElementById(\"circleEntryScreen\");\r\n    const enter = document.getElementById(\"enterCircleScreen\");\r\n    const join = document.getElementById(\"joinCircleScreen\");\r\n    const gate = document.getElementById(\"enterSignGate\");\r\n    const system = document.querySelector(\"#enterCircleScreen .enterSystem\");\r\n\r\n    if(entry) entry.style.display = \"none\";\r\n    if(join) join.style.display = \"none\";\r\n\r\n    if(enter){\r\n      enter.style.display = \"block\";\r\n      enter.style.visibility = \"visible\";\r\n      enter.style.opacity = \"1\";\r\n      enter.style.pointerEvents = \"auto\";\r\n    }\r\n\r\n    if(gate){\r\n      gate.style.display = \"flex\";\r\n      gate.style.visibility = \"visible\";\r\n      gate.style.opacity = \"1\";\r\n      gate.style.pointerEvents = \"auto\";\r\n      gate.style.zIndex = \"99999999\";\r\n    }\r\n\r\n    if(system){\r\n      system.style.display = \"none\";\r\n      system.style.opacity = \"0\";\r\n      system.style.pointerEvents = \"none\";\r\n    }\r\n\r\n    console.log(\"ENTER LOGIN TEST: enterSignGate should be visible now.\");\r\n  }\r\n\r\n  function showJoinLogin(){\r\n    const entry = document.getElementById(\"circleEntryScreen\");\r\n    const enter = document.getElementById(\"enterCircleScreen\");\r\n    const join = document.getElementById(\"joinCircleScreen\");\r\n    const gate = document.getElementById(\"joinAuthGate\");\r\n    const loginBox = document.getElementById(\"gggJoinLoginBox\");\r\n    const registerBox = document.getElementById(\"gggJoinRegisterBox\");\r\n    const mainJoin = document.getElementById(\"mainJoin\");\r\n\r\n    if(entry) entry.style.display = \"none\";\r\n    if(enter) enter.style.display = \"none\";\r\n\r\n    if(join){\r\n      join.style.display = \"block\";\r\n      join.style.visibility = \"visible\";\r\n      join.style.opacity = \"1\";\r\n      join.style.pointerEvents = \"auto\";\r\n    }\r\n\r\n    if(mainJoin) mainJoin.classList.remove(\"hidden\");\r\n\r\n    if(gate){\r\n      gate.style.display = \"flex\";\r\n      gate.style.visibility = \"visible\";\r\n      gate.style.opacity = \"1\";\r\n      gate.style.pointerEvents = \"auto\";\r\n      gate.style.zIndex = \"99999999\";\r\n    }\r\n\r\n    if(loginBox) loginBox.style.display = \"block\";\r\n    if(registerBox) registerBox.style.display = \"none\";\r\n\r\n    console.log(\"JOIN LOGIN TEST: joinAuthGate should be visible now.\");\r\n  }\r\n\r\n  document.addEventListener(\"click\", function(e){\r\n    if(e.target.closest(\"#enterZone\")){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      e.stopImmediatePropagation();\r\n      showEnterLogin();\r\n    }\r\n\r\n    if(e.target.closest(\"#joinZone\")){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      e.stopImmediatePropagation();\r\n      showJoinLogin();\r\n    }\r\n  }, true);\r\n\r\n})();\r\n<\/script>\r\n<style>\r\n\/* =========================================================\r\n   GGG \u2014 ENTER THE CIRCLE \/ USE PORTAL\r\n   Midnight Blue Glass Professional Version\r\n========================================================= *\/\r\n\r\n#enterLayer{\r\n  --use-bg:url(\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ca772889-debf-4120-aab7-5dedeaf8a427.png\");\r\n\r\n  position:absolute !important;\r\n  inset:0 !important;\r\n  z-index:99999999 !important;\r\n\r\n  display:flex !important;\r\n  flex-direction:column;\r\n\r\n  opacity:0;\r\n  pointer-events:none;\r\n  transform:scale(.98);\r\n  transition:.35s ease;\r\n\r\n  overflow-y:auto;\r\n  overflow-x:hidden;\r\n\r\n  padding:92px 26px 70px;\r\n\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(2,8,20,.34),\r\n      rgba(2,8,20,.68)\r\n    ),\r\n    var(--use-bg) center\/cover no-repeat;\r\n\r\n  color:#fff;\r\n  font-family:Arial, Helvetica, sans-serif;\r\n}\r\n\r\n#enterLayer.active{\r\n  opacity:1 !important;\r\n  pointer-events:auto !important;\r\n  transform:scale(1) !important;\r\n}\r\n\r\n.enterLayerBack{\r\n  position:fixed !important;\r\n  top:20px !important;\r\n  left:20px !important;\r\n  z-index:20 !important;\r\n\r\n  width:52px;\r\n  height:52px;\r\n\r\n  border-radius:50%;\r\n  border:1px solid rgba(141,238,255,.28);\r\n\r\n  background:rgba(5,12,28,.42);\r\n  color:#c8eeff;\r\n\r\n  backdrop-filter:blur(14px);\r\n  -webkit-backdrop-filter:blur(14px);\r\n\r\n  box-shadow:\r\n    0 0 22px rgba(88,219,255,.12),\r\n    inset 0 0 10px rgba(255,255,255,.05);\r\n\r\n  cursor:pointer;\r\n}\r\n\r\n#enterLayerTitle{\r\n  margin:0 auto 10px;\r\n  text-align:center;\r\n\r\n  font-size:clamp(2.1rem,6vw,5rem);\r\n  line-height:1;\r\n  text-transform:uppercase;\r\n  letter-spacing:.08em;\r\n\r\n  color:#f8fbff;\r\n\r\n  text-shadow:\r\n    0 0 16px rgba(255,255,255,.28),\r\n    0 0 34px rgba(88,219,255,.38);\r\n}\r\n\r\n#enterLayerCopy{\r\n  max-width:850px;\r\n  margin:0 auto 24px;\r\n\r\n  text-align:center;\r\n  color:rgba(255,255,255,.78);\r\n\r\n  line-height:1.65;\r\n  font-size:1rem;\r\n}\r\n\r\n\/* Customer information panel *\/\r\n.gggUseCustomerPanel{\r\n  width:min(1050px,94vw);\r\n  margin:0 auto 28px;\r\n\r\n  display:grid;\r\n  grid-template-columns:repeat(4,1fr);\r\n  gap:12px;\r\n\r\n  padding:15px;\r\n\r\n  border-radius:26px;\r\n\r\n  background:rgba(4,10,24,.24);\r\n\r\n  border:1px solid rgba(141,238,255,.14);\r\n\r\n  backdrop-filter:blur(16px);\r\n  -webkit-backdrop-filter:blur(16px);\r\n\r\n  box-shadow:\r\n    inset 0 0 0 1px rgba(255,255,255,.03),\r\n    0 0 34px rgba(88,219,255,.08);\r\n}\r\n\r\n.gggUseInfo{\r\n  padding:12px;\r\n\r\n  border-radius:18px;\r\n\r\n  background:rgba(255,255,255,.035);\r\n\r\n  border:1px solid rgba(255,255,255,.07);\r\n}\r\n\r\n.gggUseInfo small{\r\n  display:block;\r\n\r\n  color:rgba(200,238,255,.58);\r\n\r\n  text-transform:uppercase;\r\n  letter-spacing:.14em;\r\n  font-size:.65rem;\r\n}\r\n\r\n.gggUseInfo strong{\r\n  display:block;\r\n  margin-top:6px;\r\n\r\n  color:#f8fbff;\r\n  font-size:.94rem;\r\n\r\n  word-break:break-word;\r\n}\r\n\r\n\/* Cards grid *\/\r\n.enterLayerGrid{\r\n  width:min(1080px,94vw);\r\n  margin:0 auto;\r\n\r\n  display:grid !important;\r\n  grid-template-columns:repeat(4,1fr);\r\n  gap:18px;\r\n\r\n  height:auto !important;\r\n}\r\n\r\n.enterLayerCard{\r\n  position:relative !important;\r\n  inset:auto !important;\r\n  transform:none !important;\r\n\r\n  width:auto !important;\r\n  min-height:235px;\r\n\r\n  border-radius:34px;\r\n  padding:24px 20px;\r\n\r\n  display:flex;\r\n  flex-direction:column;\r\n  justify-content:space-between;\r\n  text-align:left;\r\n\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(8,18,38,.22),\r\n      rgba(4,10,24,.10)\r\n    );\r\n\r\n  backdrop-filter:blur(18px);\r\n  -webkit-backdrop-filter:blur(18px);\r\n\r\n  border:1px solid rgba(141,238,255,.18);\r\n\r\n  box-shadow:\r\n    inset 0 0 0 1px rgba(255,255,255,.04),\r\n    0 0 18px rgba(88,219,255,.10),\r\n    0 0 60px rgba(0,80,255,.08);\r\n\r\n  overflow:hidden;\r\n  color:#fff;\r\n\r\n  cursor:pointer;\r\n  transition:.28s ease;\r\n}\r\n\r\n.enterLayerCard::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n\r\n  border-radius:inherit;\r\n\r\n  background:\r\n    linear-gradient(\r\n      135deg,\r\n      rgba(255,255,255,.14),\r\n      transparent 20%,\r\n      transparent 60%,\r\n      rgba(88,219,255,.08)\r\n    );\r\n\r\n  pointer-events:none;\r\n}\r\n\r\n.enterLayerCard:hover{\r\n  transform:translateY(-6px) scale(1.02) !important;\r\n\r\n  border-color:rgba(141,238,255,.38);\r\n\r\n  box-shadow:\r\n    inset 0 0 0 1px rgba(255,255,255,.08),\r\n    0 0 28px rgba(88,219,255,.20),\r\n    0 0 90px rgba(88,219,255,.12);\r\n}\r\n\r\n.enterLayerCard strong{\r\n  position:relative;\r\n  z-index:2;\r\n\r\n  display:block;\r\n\r\n  color:#8deeff;\r\n\r\n  font-size:1.1rem;\r\n  letter-spacing:.16em;\r\n  text-transform:uppercase;\r\n\r\n  text-shadow:0 0 14px rgba(88,219,255,.35);\r\n}\r\n\r\n.enterLayerCard span{\r\n  position:relative;\r\n  z-index:2;\r\n\r\n  display:block;\r\n  margin-top:14px;\r\n\r\n  color:rgba(255,255,255,.78);\r\n\r\n  line-height:1.55;\r\n  font-size:.95rem;\r\n}\r\n\r\n.gggUseAction{\r\n  position:relative;\r\n  z-index:2;\r\n\r\n  margin-top:18px;\r\n  min-height:48px;\r\n\r\n  border-radius:999px;\r\n\r\n  border:1px solid rgba(141,238,255,.24);\r\n\r\n  background:\r\n    linear-gradient(\r\n      135deg,\r\n      rgba(15,35,75,.82),\r\n      rgba(10,18,40,.92)\r\n    );\r\n\r\n  color:#c8eeff;\r\n\r\n  font-weight:900;\r\n  letter-spacing:.16em;\r\n  text-transform:uppercase;\r\n\r\n  backdrop-filter:blur(12px);\r\n  -webkit-backdrop-filter:blur(12px);\r\n\r\n  box-shadow:\r\n    0 0 20px rgba(88,219,255,.12),\r\n    inset 0 0 12px rgba(255,255,255,.04);\r\n\r\n  cursor:pointer;\r\n\r\n  transition:.25s ease;\r\n}\r\n\r\n.gggUseAction:hover{\r\n  transform:scale(1.03);\r\n\r\n  border-color:rgba(141,238,255,.45);\r\n\r\n  box-shadow:\r\n    0 0 30px rgba(88,219,255,.24),\r\n    0 0 60px rgba(88,219,255,.14);\r\n}\r\n\r\n\/* Mobile *\/\r\n@media(max-width:900px){\r\n  #enterLayer{\r\n    padding:145px 16px 120px;\r\n  }\r\n\r\n  #enterLayerTitle{\r\n    font-size:clamp(1.9rem,9vw,3.2rem);\r\n  }\r\n\r\n  #enterLayerCopy{\r\n    font-size:.95rem;\r\n    margin-bottom:20px;\r\n  }\r\n\r\n  .gggUseCustomerPanel{\r\n    grid-template-columns:1fr 1fr;\r\n    margin-bottom:22px;\r\n  }\r\n\r\n  .enterLayerGrid{\r\n    grid-template-columns:1fr;\r\n    gap:18px;\r\n  }\r\n\r\n  .enterLayerCard{\r\n    min-height:205px;\r\n    border-radius:30px;\r\n  }\r\n}\r\n\r\n@media(max-width:480px){\r\n  .gggUseCustomerPanel{\r\n    grid-template-columns:1fr;\r\n  }\r\n}\r\n\r\n\/* MOBILE OWNER INFO \u2014 HORIZONTAL SWIPE *\/\r\n@media(max-width:900px){\r\n\r\n  .gggUseCustomerPanel{\r\n    display:flex !important;\r\n    flex-direction:row !important;\r\n    gap:12px !important;\r\n\r\n    width:100vw !important;\r\n    max-width:100vw !important;\r\n\r\n    margin-left:50% !important;\r\n    transform:translateX(-50%) !important;\r\n\r\n    padding:12px 72px !important;\r\n\r\n    overflow-x:auto !important;\r\n    overflow-y:hidden !important;\r\n\r\n    scroll-snap-type:x mandatory !important;\r\n    -webkit-overflow-scrolling:touch !important;\r\n\r\n    border-radius:0 !important;\r\n  }\r\n\r\n  .gggUseInfo{\r\n    flex:0 0 72vw !important;\r\n    min-width:72vw !important;\r\n\r\n    scroll-snap-align:center !important;\r\n  }\r\n}\r\n\/* USE PORTAL \u2014 BACKGROUND IMAGE FLOAT + ZOOMED OUT *\/\r\n#enterLayer{\r\n  --use-bg:url(\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ca772889-debf-4120-aab7-5dedeaf8a427.png\") !important;\r\n\r\n  background:\r\n    linear-gradient(\r\n      180deg,\r\n      rgba(2,8,20,.34),\r\n      rgba(2,8,20,.68)\r\n    ),\r\n    var(--use-bg) center center \/ 72% auto no-repeat !important;\r\n\r\n  background-attachment:scroll !important;\r\n  animation:gggUseBgFloat 9s ease-in-out infinite !important;\r\n}\r\n\r\n\/* Mobile: zoom it out even more *\/\r\n@media(max-width:900px){\r\n  #enterLayer{\r\n    background:\r\n      linear-gradient(\r\n        180deg,\r\n        rgba(2,8,20,.32),\r\n        rgba(2,8,20,.64)\r\n      ),\r\n      var(--use-bg) center 42% \/ 88% auto no-repeat !important;\r\n\r\n    animation:gggUseBgFloatMobile 9s ease-in-out infinite !important;\r\n  }\r\n}\r\n\r\n@keyframes gggUseBgFloat{\r\n  0%,100%{\r\n    background-position:center 50%, center 50%;\r\n  }\r\n  50%{\r\n    background-position:center 50%, center 46%;\r\n  }\r\n}\r\n\r\n@keyframes gggUseBgFloatMobile{\r\n  0%,100%{\r\n    background-position:center 50%, center 42%;\r\n  }\r\n  50%{\r\n    background-position:center 50%, center 38%;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n\/* =========================================================\r\n   GGG \u2014 ENTER THE CIRCLE \/ USE PORTAL LOGIC\r\n========================================================= *\/\r\n\r\nfunction gggUseSafeText(value, fallback){\r\n  if(value === undefined || value === null || value === \"\") return fallback;\r\n  return String(value);\r\n}\r\n\r\nfunction gggGetUseUser(){\r\n  const auth = window.GGGCircleAuth || {};\r\n  const vault = window.GGGVaultUser || {};\r\n\r\n  return {\r\n    name:\r\n      auth.displayName ||\r\n      vault.display_name ||\r\n      vault.user_login ||\r\n      \"Signed-in Member\",\r\n\r\n    email:\r\n      vault.user_email ||\r\n      auth.userEmail ||\r\n      auth.email ||\r\n      \"Email on account\",\r\n\r\n    level:\r\n      Array.isArray(vault.owned_levels)\r\n        ? vault.owned_levels.join(\", \")\r\n        : (vault.owned_levels || \"The Circle\"),\r\n\r\n    balance:\r\n      vault.bliss_coin ||\r\n      vault.stay_nights ||\r\n      vault.balance ||\r\n      \"Account balance\"\r\n  };\r\n}\r\n\r\nfunction gggSendUseEmail(type){\r\n  const user = gggGetUseUser();\r\n\r\n  let subject = \"GGG Use Request - \" + type;\r\n\r\n  let body =\r\n`Hello Gods Galaxy Game,\r\n\r\nA member is requesting to use their ownership access.\r\n\r\nRequest Type: ${type}\r\nMember Name: ${user.name}\r\nMember Email: ${user.email}\r\nAccess Level: ${user.level}\r\nBalance \/ Ownership Info: ${user.balance}\r\n\r\nPlease confirm availability and next steps.\r\n\r\nThank you.`;\r\n\r\n  if(type === \"Week\"){\r\n    body += `\r\n\r\nWeek Request:\r\nPlease confirm which ownership week the member wants to activate and whether the requested stay is available.`;\r\n  }\r\n\r\n  if(type === \"Short Stay\"){\r\n    body += `\r\n\r\nShort Stay Request:\r\nPlease confirm whether this request is for a Weekday stay or Weekend stay.`;\r\n  }\r\n\r\n  if(type === \"Online\"){\r\n    body += `\r\n\r\nOnline Request:\r\nPlease confirm whether the member wants a live property tour, chef session, wellness session, course, ownership presentation, or concierge help.`;\r\n  }\r\n\r\n  if(type === \"Penthouse\"){\r\n    body += `\r\n\r\nPenthouse Request:\r\nPlease confirm premium unit availability and next steps for unit-level use.`;\r\n  }\r\n\r\n  window.location.href =\r\n    \"mailto:Godsgalaxygame@gmail.com?subject=\" +\r\n    encodeURIComponent(subject) +\r\n    \"&body=\" +\r\n    encodeURIComponent(body);\r\n}\r\n\r\n\/* SAFE USE ONLY \u2014 DOES NOT BLOCK OTHER ENTER ORBS *\/\r\n(function(){\r\n\r\n  function openUsePortalOnly(){\r\n    const layer = document.getElementById(\"enterLayer\");\r\n    const title = document.getElementById(\"enterLayerTitle\");\r\n    const copy = document.getElementById(\"enterLayerCopy\");\r\n    const grid = document.getElementById(\"enterLayerGrid\");\r\n\r\n    if(!layer) return;\r\n\r\n    if(title) title.textContent = \"Use Portal\";\r\n    if(copy) copy.textContent = \"Choose how you want to activate your ownership access.\";\r\n\r\n    if(grid){\r\n      grid.innerHTML = `\r\n        <button class=\"enterLayerCard\" type=\"button\" onclick=\"gggSendUseEmail('Week')\">\r\n          <strong>Use Your Week<\/strong>\r\n          <span>Request to use your full ownership week and confirm availability.<\/span>\r\n          <span class=\"gggUseAction\">Confirm Week<\/span>\r\n        <\/button>\r\n\r\n        <button class=\"enterLayerCard\" type=\"button\" onclick=\"gggSendUseEmail('Short Stay')\">\r\n          <strong>Short Stay<\/strong>\r\n          <span>Request weekday or weekend usage from your available ownership access.<\/span>\r\n          <span class=\"gggUseAction\">Confirm Stay<\/span>\r\n        <\/button>\r\n\r\n        <button class=\"enterLayerCard\" type=\"button\" onclick=\"gggSendUseEmail('Online')\">\r\n          <strong>Online<\/strong>\r\n          <span>Request live tours, chef, wellness, courses, ownership presentation, or concierge help.<\/span>\r\n          <span class=\"gggUseAction\">Request Online<\/span>\r\n        <\/button>\r\n\r\n        <button class=\"enterLayerCard\" type=\"button\" onclick=\"gggSendUseEmail('Penthouse')\">\r\n          <strong>Penthouse<\/strong>\r\n          <span>Request premium unit-level use for high-end ownership access.<\/span>\r\n          <span class=\"gggUseAction\">Request Penthouse<\/span>\r\n        <\/button>\r\n      `;\r\n    }\r\n\r\n    layer.classList.add(\"active\");\r\n    layer.style.opacity = \"1\";\r\n    layer.style.pointerEvents = \"auto\";\r\n    layer.style.transform = \"scale(1)\";\r\n    layer.style.display = \"flex\";\r\n  }\r\n\r\n    document.querySelectorAll(\".enterUse\").forEach(function(btn){\r\n    btn.onclick = function(e){\r\n      e.preventDefault();\r\n      openUsePortalOnly();\r\n    };\r\n  });\r\n\r\n})();\r\n<\/script>\r\n<script>\r\n\/* RESTORE TRADE \/ EXCHANGE \/ BUY ONLY *\/\r\n(function(){\r\n\r\n  function openOldEnterLayer(type){\r\n    document.querySelectorAll(\".enterLayer\").forEach(function(layer){\r\n      layer.classList.remove(\"active\");\r\n    });\r\n\r\n    const layer = document.getElementById(\"enterLayer-\" + type);\r\n    if(layer){\r\n      layer.classList.add(\"active\");\r\n      layer.style.display = \"flex\";\r\n      layer.style.opacity = \"1\";\r\n      layer.style.pointerEvents = \"auto\";\r\n      layer.style.transform = \"scale(1)\";\r\n    }\r\n  }\r\n\r\n  document.querySelectorAll(\"[data-enter-open]\").forEach(function(btn){\r\n    btn.onclick = function(e){\r\n      e.preventDefault();\r\n\r\n      const type = btn.getAttribute(\"data-enter-open\");\r\n\r\n      if(type === \"use\"){\r\n        return;\r\n      }\r\n\r\n      openOldEnterLayer(type);\r\n    };\r\n  });\r\n\r\n})();\r\n<\/script>\r\n<script>\r\n\/* =========================================================\r\n   <script>\r\n\/* ENTER LAYER BACK \u2014 FINAL *\/\r\ndocument.addEventListener(\"click\", function(e){\r\n  const btn = e.target.closest(\".enterLayerBack\");\r\n  if(!btn) return;\r\n\r\n  e.preventDefault();\r\n  e.stopPropagation();\r\n  e.stopImmediatePropagation();\r\n\r\n  document.querySelectorAll(\".enterLayer\").forEach(function(layer){\r\n    layer.classList.remove(\"active\");\r\n    layer.style.opacity = \"0\";\r\n    layer.style.pointerEvents = \"none\";\r\n    layer.style.transform = \"scale(.96)\";\r\n  });\r\n\r\n  const enterScreen = document.getElementById(\"enterCircleScreen\");\r\n  const enterContent = document.querySelector(\"#enterCircleScreen .enterContent\");\r\n  const enterSystem = document.querySelector(\"#enterCircleScreen .enterSystem\");\r\n  const gate = document.getElementById(\"enterSignGate\");\r\n\r\n  if(enterScreen){\r\n    enterScreen.style.display = \"block\";\r\n    enterScreen.style.opacity = \"1\";\r\n    enterScreen.style.visibility = \"visible\";\r\n    enterScreen.style.pointerEvents = \"auto\";\r\n  }\r\n\r\n  if(gate){\r\n    gate.style.display = \"none\";\r\n    gate.style.pointerEvents = \"none\";\r\n  }\r\n\r\n  if(enterContent){\r\n    enterContent.classList.remove(\"hidden\");\r\n    enterContent.style.opacity = \"1\";\r\n    enterContent.style.pointerEvents = \"auto\";\r\n    enterContent.style.visibility = \"visible\";\r\n  }\r\n\r\n  if(enterSystem){\r\n    enterSystem.style.display = \"block\";\r\n    enterSystem.style.opacity = \"1\";\r\n    enterSystem.style.pointerEvents = \"auto\";\r\n    enterSystem.style.visibility = \"visible\";\r\n  }\r\n\r\n  return false;\r\n}, true);\r\n<\/script>\r\n<script>\r\n\/* =========================================================\r\n   GGG LEVEL 8 \u2014 INVENTORY BRIDGE\r\n   Connects Level 8 Control Panel to Fractional Club Page\r\n========================================================= *\/\r\n\r\nwindow.GGG_L8_ITEMS = [];\r\n\r\nfunction gggL8LoadInventory(){\r\n  const fd = new FormData();\r\n  fd.append(\"action\", \"ggg_l8_get_inventory\");\r\n\r\n  return fetch(\"\/GGG\/wp-admin\/admin-ajax.php\", {\r\n    method: \"POST\",\r\n    credentials: \"same-origin\",\r\n    body: fd\r\n  })\r\n  .then(r => r.json())\r\n  .then(data => {\r\n    window.GGG_L8_ITEMS = data?.data?.items || [];\r\n    console.log(\"GGG Level 8 Inventory Loaded:\", window.GGG_L8_ITEMS);\r\n    return window.GGG_L8_ITEMS;\r\n  })\r\n  .catch(err => {\r\n    console.warn(\"GGG Level 8 inventory could not load:\", err);\r\n    window.GGG_L8_ITEMS = [];\r\n    return [];\r\n  });\r\n}\r\n\r\nfunction gggL8FindItems(section, group){\r\n  return (window.GGG_L8_ITEMS || []).filter(item =>\r\n    item.status !== \"hidden\" &&\r\n    (!section || item.section === section) &&\r\n    (!group || item.group === group)\r\n  );\r\n}\r\n\r\nfunction gggL8FindByKey(key){\r\n  return (window.GGG_L8_ITEMS || []).find(item =>\r\n    item.status !== \"hidden\" &&\r\n    item.suboptionKey === key\r\n  );\r\n}\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function(){\r\n  gggL8LoadInventory();\r\n});\r\n<\/script>\r\n<script>\r\n\/* =========================================================\r\n   GGG LEVEL 8 \u2014 REAL TRADE MARKETPLACE\r\n========================================================= *\/\r\n\r\n(function(){\r\n\r\n  const AJAX_URL =\r\n    window.GGGCircleAuth?.ajaxUrl ||\r\n    \"\/GGG\/wp-admin\/admin-ajax.php\";\r\n\r\n  function gggTradeUser(){\r\n    const auth = window.GGGCircleAuth || {};\r\n    const vault = window.GGGVaultUser || {};\r\n\r\n    return {\r\n      name: auth.displayName || vault.display_name || vault.user_login || \"Circle Member\",\r\n      email: vault.user_email || auth.userEmail || auth.email || \"\"\r\n    };\r\n  }\r\n\r\n  function gggTradeShell(){\r\n    let shell = document.getElementById(\"gggTradePanel\");\r\n\r\n    if(shell) return shell;\r\n\r\n    shell = document.createElement(\"div\");\r\n    shell.id = \"gggTradePanel\";\r\n    shell.style.cssText = `\r\n      position:absolute;\r\n      inset:0;\r\n      z-index:80;\r\n      overflow:auto;\r\n      padding:90px 20px 40px;\r\n      background:linear-gradient(180deg, rgba(2,8,20,.94), rgba(2,8,20,.98));\r\n      color:white;\r\n      font-family:Arial,sans-serif;\r\n    `;\r\n\r\n    const tradeLayer = document.getElementById(\"enterLayer-trade\");\r\n    if(tradeLayer) tradeLayer.appendChild(shell);\r\n\r\n    return shell;\r\n  }\r\n\r\n  function gggCloseTradePanel(){\r\n    const shell = document.getElementById(\"gggTradePanel\");\r\n    if(shell) shell.remove();\r\n  }\r\n\r\n  function gggShowPostTrade(){\r\n    const user = gggTradeUser();\r\n    const shell = gggTradeShell();\r\n\r\n    shell.innerHTML = `\r\n      <button type=\"button\" id=\"gggCloseTradePanel\" style=\"\r\n        position:absolute;top:22px;left:22px;border-radius:50%;\r\n        width:46px;height:46px;border:1px solid rgba(141,238,255,.45);\r\n        background:rgba(0,0,0,.55);color:#8deeff;font-size:20px;cursor:pointer;\">\u2190<\/button>\r\n\r\n      <div style=\"max-width:880px;margin:0 auto;\">\r\n        <h2 style=\"font-size:clamp(2.4rem,7vw,5rem);margin:0 0 10px;text-transform:uppercase;\">\r\n          Post Trade\r\n        <\/h2>\r\n        <p style=\"color:rgba(255,255,255,.72);line-height:1.7;\">\r\n          Posting as ${user.name}. Add the ownership time, property, dates, and what you want in return.\r\n        <\/p>\r\n\r\n        <div style=\"display:grid;gap:14px;margin-top:24px;\">\r\n          <select id=\"tradeAssetType\" class=\"gggTradeInput\">\r\n            <option value=\"\">What are you offering?<\/option>\r\n            <option value=\"Full Week\">Full Week<\/option>\r\n            <option value=\"Weekday Stay\">Weekday Stay<\/option>\r\n            <option value=\"Weekend Stay\">Weekend Stay<\/option>\r\n            <option value=\"Room \/ Unit\">Room \/ Unit<\/option>\r\n            <option value=\"Penthouse\">Penthouse<\/option>\r\n          <\/select>\r\n\r\n          <input id=\"tradeProperty\" class=\"gggTradeInput\" placeholder=\"Property \/ Host: Aparthotel Bliss, Mansion, etc.\">\r\n          <input id=\"tradeDates\" class=\"gggTradeInput\" placeholder=\"Available dates\">\r\n          <input id=\"tradeWants\" class=\"gggTradeInput\" placeholder=\"What do you want back? Bliss Coin, another week, weekend, etc.\">\r\n          <textarea id=\"tradeNotes\" class=\"gggTradeInput\" placeholder=\"Notes for other owners\" style=\"min-height:120px;\"><\/textarea>\r\n\r\n          <button id=\"gggSubmitTradePost\" type=\"button\" style=\"\r\n            min-height:54px;border:none;border-radius:999px;\r\n            background:linear-gradient(135deg,#8deeff,#2f93ff);\r\n            color:#031018;font-weight:900;text-transform:uppercase;cursor:pointer;\">\r\n            Save Trade Post\r\n          <\/button>\r\n\r\n          <div id=\"gggTradeMsg\" style=\"color:#8deeff;font-weight:800;\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    `;\r\n\r\n    shell.querySelectorAll(\".gggTradeInput\").forEach(el => {\r\n      el.style.cssText = `\r\n        width:100%;\r\n        min-height:54px;\r\n        border-radius:18px;\r\n        border:1px solid rgba(141,238,255,.22);\r\n        background:rgba(255,255,255,.06);\r\n        color:white;\r\n        padding:14px 16px;\r\n        outline:none;\r\n      `;\r\n    });\r\n  }\r\n\r\n  function gggSaveTradePost(){\r\n    const msg = document.getElementById(\"gggTradeMsg\");\r\n    if(msg) msg.textContent = \"Saving trade...\";\r\n\r\n    const fd = new FormData();\r\n    fd.append(\"action\", \"ggg_l8_save_trade_post\");\r\nfd.append(\r\n  \"nonce\",\r\n  window.GGGL8DataEngineConfig?.nonce || \"\"\r\n);\r\n    fd.append(\"asset_type\", document.getElementById(\"tradeAssetType\")?.value || \"\");\r\n    fd.append(\"property\", document.getElementById(\"tradeProperty\")?.value || \"\");\r\n    fd.append(\"dates\", document.getElementById(\"tradeDates\")?.value || \"\");\r\n    fd.append(\"wants\", document.getElementById(\"tradeWants\")?.value || \"\");\r\n    fd.append(\"notes\", document.getElementById(\"tradeNotes\")?.value || \"\");\r\n\r\n    fetch(AJAX_URL, {\r\n      method: \"POST\",\r\n      credentials: \"same-origin\",\r\n      body: fd\r\n    })\r\n    .then(r => r.json())\r\n    .then(data => {\r\n      if(!data.success){\r\n        if(msg) msg.textContent = data?.data?.message || \"Could not save trade.\";\r\n        return;\r\n      }\r\n\r\n      if(msg) msg.textContent = \"Trade posted successfully.\";\r\n      setTimeout(gggShowSearchTrades, 650);\r\n    })\r\n    .catch(() => {\r\n      if(msg) msg.textContent = \"Connection error saving trade.\";\r\n    });\r\n  }\r\n\r\n  function gggShowSearchTrades(){\r\n    const shell = gggTradeShell();\r\n\r\n    shell.innerHTML = `\r\n      <button type=\"button\" id=\"gggCloseTradePanel\" style=\"\r\n        position:absolute;top:22px;left:22px;border-radius:50%;\r\n        width:46px;height:46px;border:1px solid rgba(141,238,255,.45);\r\n        background:rgba(0,0,0,.55);color:#8deeff;font-size:20px;cursor:pointer;\">\u2190<\/button>\r\n\r\n      <div style=\"max-width:1100px;margin:0 auto;\">\r\n        <h2 style=\"font-size:clamp(2.4rem,7vw,5rem);margin:0 0 10px;text-transform:uppercase;\">\r\n          Search Trades\r\n        <\/h2>\r\n        <p style=\"color:rgba(255,255,255,.72);line-height:1.7;\">\r\n          Browse real owner trade posts stored in WordPress.\r\n        <\/p>\r\n\r\n        <div id=\"gggTradeList\" style=\"display:grid;gap:16px;margin-top:24px;\">\r\n          Loading trades...\r\n        <\/div>\r\n      <\/div>\r\n    `;\r\n\r\n    const fd = new FormData();\r\n    fd.append(\"action\", \"ggg_l8_get_trade_posts\");\r\n\r\n    fetch(AJAX_URL, {\r\n      method: \"POST\",\r\n      credentials: \"same-origin\",\r\n      body: fd\r\n    })\r\n    .then(r => r.json())\r\n    .then(data => {\r\n      const list = document.getElementById(\"gggTradeList\");\r\n      const posts = data?.data?.posts || [];\r\n\r\n      if(!posts.length){\r\n        list.innerHTML = `<p style=\"color:rgba(255,255,255,.7)\">No active trade posts yet.<\/p>`;\r\n        return;\r\n      }\r\n\r\n      list.innerHTML = posts.map(post => `\r\n        <div style=\"\r\n          border-radius:24px;\r\n          border:1px solid rgba(141,238,255,.22);\r\n          background:rgba(255,255,255,.06);\r\n          padding:18px;\r\n          box-shadow:0 0 30px rgba(88,219,255,.10);\r\n        \">\r\n          <h3 style=\"margin:0;color:#8deeff;text-transform:uppercase;\">\r\n            ${post.asset_type || \"Trade Offer\"}\r\n          <\/h3>\r\n\r\n          <p style=\"margin:10px 0;color:rgba(255,255,255,.78);line-height:1.6;\">\r\n            <strong>Owner:<\/strong> ${post.owner_name || \"Circle Member\"}<br>\r\n            <strong>Property:<\/strong> ${post.property || \"Not listed\"}<br>\r\n            <strong>Dates:<\/strong> ${post.dates || \"Flexible\"}<br>\r\n            <strong>Wants:<\/strong> ${post.wants || \"Open to offers\"}<br>\r\n            <strong>Notes:<\/strong> ${post.notes || \"\"}\r\n          <\/p>\r\n\r\n          <button type=\"button\" class=\"gggMessageTradeOwner\"\r\n            data-owner=\"${encodeURIComponent(post.owner_name || \"\")}\"\r\n            data-email=\"${encodeURIComponent(post.owner_email || \"\")}\"\r\n            data-asset=\"${encodeURIComponent(post.asset_type || \"\")}\"\r\n            data-property=\"${encodeURIComponent(post.property || \"\")}\"\r\n            data-dates=\"${encodeURIComponent(post.dates || \"\")}\"\r\n            data-wants=\"${encodeURIComponent(post.wants || \"\")}\"\r\n            style=\"\r\n              min-height:46px;\r\n              border:none;\r\n              border-radius:999px;\r\n              padding:0 18px;\r\n              background:linear-gradient(135deg,#8deeff,#2f93ff);\r\n              color:#031018;\r\n              font-weight:900;\r\n              text-transform:uppercase;\r\n              cursor:pointer;\r\n            \">\r\n            Message Owner\r\n          <\/button>\r\n        <\/div>\r\n      `).join(\"\");\r\n    });\r\n  }\r\n\r\n  function gggMessageTradeOwner(btn){\r\n    const owner = decodeURIComponent(btn.dataset.owner || \"\");\r\n    const email = decodeURIComponent(btn.dataset.email || \"\");\r\n    const asset = decodeURIComponent(btn.dataset.asset || \"\");\r\n    const property = decodeURIComponent(btn.dataset.property || \"\");\r\n    const dates = decodeURIComponent(btn.dataset.dates || \"\");\r\n    const wants = decodeURIComponent(btn.dataset.wants || \"\");\r\n    const user = gggTradeUser();\r\n\r\n    const subject = \"GGG Trade Request - \" + asset;\r\n\r\n    const body =\r\n`Hello Gods Galaxy Game,\r\n\r\nA member wants to connect about a Trade post.\r\n\r\nInterested Member:\r\n${user.name}\r\n${user.email}\r\n\r\nTrade Owner:\r\n${owner}\r\n${email}\r\n\r\nTrade Details:\r\nAsset: ${asset}\r\nProperty: ${property}\r\nDates: ${dates}\r\nOwner Wants: ${wants}\r\n\r\nPlease connect both members or open the Avatar trade conversation.\r\n\r\nThank you.`;\r\n\r\n    window.location.href =\r\n      \"mailto:Godsgalaxygame@gmail.com?subject=\" +\r\n      encodeURIComponent(subject) +\r\n      \"&body=\" +\r\n      encodeURIComponent(body);\r\n  }\r\n\r\n  document.addEventListener(\"click\", function(e){\r\n    const postBtn = e.target.closest('[data-trade-action=\"post\"]');\r\n    const searchBtn = e.target.closest('[data-trade-action=\"search\"]');\r\n    const closeBtn = e.target.closest(\"#gggCloseTradePanel\");\r\n    const submitBtn = e.target.closest(\"#gggSubmitTradePost\");\r\n    const messageBtn = e.target.closest(\".gggMessageTradeOwner\");\r\n\r\n    if(postBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      gggShowPostTrade();\r\n      return;\r\n    }\r\n\r\n    if(searchBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      gggShowSearchTrades();\r\n      return;\r\n    }\r\n\r\n    if(closeBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      gggCloseTradePanel();\r\n      return;\r\n    }\r\n\r\n    if(submitBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      gggSaveTradePost();\r\n      return;\r\n    }\r\n\r\n    if(messageBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      gggMessageTradeOwner(messageBtn);\r\n      return;\r\n    }\r\n  }, true);\r\n\r\n})();\r\n<\/script>\r\n<script>\r\n\/* GGG LEVEL 8 \u2014 EXCHANGE MAP PINS *\/\r\n(function(){\r\n\r\n  const AJAX_URL = window.GGGCircleAuth?.ajaxUrl || \"\/GGG\/wp-admin\/admin-ajax.php\";\r\n\r\n  function loadExchangePins(type){\r\n    const fd = new FormData();\r\n    fd.append(\"action\", \"ggg_l8_get_exchange_pins\");\r\n\r\n    fetch(AJAX_URL, {\r\n      method:\"POST\",\r\n      credentials:\"same-origin\",\r\n      body:fd\r\n    })\r\n    .then(r => r.json())\r\n    .then(data => {\r\n      const pins = (data?.data?.pins || []).filter(pin => pin.type === type);\r\n      showExchangePanel(type, pins);\r\n    });\r\n  }\r\n\r\n  function showExchangePanel(type, pins){\r\n    let panel = document.getElementById(\"gggExchangePanel\");\r\n\r\n    if(!panel){\r\n      panel = document.createElement(\"div\");\r\n      panel.id = \"gggExchangePanel\";\r\n      panel.style.cssText = `\r\n        position:absolute;\r\n        inset:0;\r\n        z-index:90;\r\n        overflow:auto;\r\n        padding:88px 18px 50px;\r\n        background:linear-gradient(180deg,rgba(2,8,20,.92),rgba(2,8,20,.98));\r\n        color:white;\r\n      `;\r\n      document.getElementById(\"enterLayer-exchange\")?.appendChild(panel);\r\n    }\r\n\r\n    panel.innerHTML = `\r\n      <button id=\"closeExchangePanel\" type=\"button\" style=\"\r\n        position:absolute;top:22px;left:22px;width:46px;height:46px;\r\n        border-radius:50%;border:1px solid rgba(141,238,255,.45);\r\n        background:rgba(0,0,0,.55);color:#8deeff;font-size:20px;\">\u2190<\/button>\r\n\r\n      <h2 style=\"text-transform:uppercase;font-size:clamp(2.3rem,7vw,5rem);margin:0 0 12px;\">\r\n        ${type} Exchange\r\n      <\/h2>\r\n\r\n      <p style=\"color:rgba(255,255,255,.72);max-width:760px;line-height:1.7;\">\r\n        These are exchange pins from the owner network. Later this panel can connect directly to Google Maps markers.\r\n      <\/p>\r\n\r\n      <div style=\"display:grid;gap:16px;margin-top:24px;\">\r\n        ${pins.length ? pins.map(pin => `\r\n          <div style=\"\r\n            border:1px solid rgba(141,238,255,.22);\r\n            background:rgba(255,255,255,.06);\r\n            border-radius:24px;\r\n            padding:18px;\r\n            box-shadow:0 0 30px rgba(88,219,255,.10);\r\n          \">\r\n            <h3 style=\"margin:0;color:#8deeff;text-transform:uppercase;\">\ud83d\udccd ${pin.host || \"Exchange Pin\"}<\/h3>\r\n            <p style=\"line-height:1.6;color:rgba(255,255,255,.78);\">\r\n              <strong>Owner:<\/strong> ${pin.owner_name || \"Circle Owner\"}<br>\r\n              <strong>Offer:<\/strong> ${pin.offer || \"\"}<br>\r\n              <strong>Wants:<\/strong> ${pin.wants || \"\"}<br>\r\n              <strong>Dates:<\/strong> ${pin.dates || \"Flexible\"}<br>\r\n              <strong>Location:<\/strong> ${pin.lat || \"\"}, ${pin.lng || \"\"}\r\n            <\/p>\r\n            <button type=\"button\" class=\"gggExchangeRequestBtn\"\r\n              data-owner=\"${encodeURIComponent(pin.owner_name || \"\")}\"\r\n              data-host=\"${encodeURIComponent(pin.host || \"\")}\"\r\n              data-offer=\"${encodeURIComponent(pin.offer || \"\")}\"\r\n              data-wants=\"${encodeURIComponent(pin.wants || \"\")}\"\r\n              style=\"\r\n                min-height:46px;border:none;border-radius:999px;padding:0 18px;\r\n                background:linear-gradient(135deg,#8deeff,#2f93ff);\r\n                color:#031018;font-weight:900;text-transform:uppercase;\">\r\n              Request Exchange\r\n            <\/button>\r\n          <\/div>\r\n        `).join(\"\") : `<p>No ${type} exchange pins yet.<\/p>`}\r\n      <\/div>\r\n    `;\r\n  }\r\n\r\n  function sendExchangeRequest(btn){\r\n    const owner = decodeURIComponent(btn.dataset.owner || \"\");\r\n    const host = decodeURIComponent(btn.dataset.host || \"\");\r\n    const offer = decodeURIComponent(btn.dataset.offer || \"\");\r\n    const wants = decodeURIComponent(btn.dataset.wants || \"\");\r\n\r\n    const subject = \"GGG Exchange Request - \" + host;\r\n    const body =\r\n`Hello Gods Galaxy Game,\r\n\r\nA member wants to request an Exchange.\r\n\r\nOwner:\r\n${owner}\r\n\r\nHost:\r\n${host}\r\n\r\nOffer:\r\n${offer}\r\n\r\nWants:\r\n${wants}\r\n\r\nPlease open the Avatar Exchange conversation.\r\n\r\nThank you.`;\r\n\r\n    window.location.href =\r\n      \"mailto:Godsgalaxygame@gmail.com?subject=\" +\r\n      encodeURIComponent(subject) +\r\n      \"&body=\" +\r\n      encodeURIComponent(body);\r\n  }\r\n\r\n  document.addEventListener(\"click\", function(e){\r\n    const exchangeBtn = e.target.closest(\"[data-exchange-action]\");\r\n    const closeBtn = e.target.closest(\"#closeExchangePanel\");\r\n    const requestBtn = e.target.closest(\".gggExchangeRequestBtn\");\r\n\r\n    if(exchangeBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      loadExchangePins(exchangeBtn.getAttribute(\"data-exchange-action\"));\r\n      return;\r\n    }\r\n\r\n    if(closeBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      document.getElementById(\"gggExchangePanel\")?.remove();\r\n      return;\r\n    }\r\n\r\n    if(requestBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      sendExchangeRequest(requestBtn);\r\n    }\r\n  }, true);\r\n\r\n})();\r\n<\/script>\r\n<script>\r\n\/* =========================================================\r\n   GGG LEVEL 8 \u2014 EXCHANGE REAL GOOGLE MAP PINS\r\n========================================================= *\/\r\n(function(){\r\n\r\n  const AJAX_URL = window.GGGCircleAuth?.ajaxUrl || \"\/GGG\/wp-admin\/admin-ajax.php\";\r\n  let exchangeMap = null;\r\n  let exchangeMarkers = [];\r\n\r\n  function loadExchangePins(type){\r\n    const fd = new FormData();\r\n    fd.append(\"action\", \"ggg_l8_get_exchange_pins\");\r\n\r\n    fetch(AJAX_URL, {\r\n      method: \"POST\",\r\n      credentials: \"same-origin\",\r\n      body: fd\r\n    })\r\n    .then(r => r.json())\r\n    .then(data => {\r\n      const allPins = data?.data?.pins || [];\r\n\r\n      const pins = allPins.filter(pin =>\r\n        pin.suboptionKey === type &&\r\n        pin.status === \"active\" &&\r\n        pin.lat &&\r\n        pin.lng\r\n      );\r\n\r\n      openExchangeMapPanel(type, pins);\r\n    });\r\n  }\r\n\r\n  function openExchangeMapPanel(type, pins){\r\n    let panel = document.getElementById(\"gggExchangeMapPanel\");\r\n\r\n    if(!panel){\r\n      panel = document.createElement(\"div\");\r\n      panel.id = \"gggExchangeMapPanel\";\r\n      panel.innerHTML = `\r\n        <button id=\"gggCloseExchangeMap\" type=\"button\">\u2190<\/button>\r\n\r\n        <div class=\"gggExchangeMapHeader\">\r\n          <h2 id=\"gggExchangeMapTitle\">Exchange Map<\/h2>\r\n          <p id=\"gggExchangeMapCopy\"><\/p>\r\n        <\/div>\r\n\r\n        <div id=\"gggExchangeGoogleMap\"><\/div>\r\n\r\n        <div id=\"gggExchangePinCard\"><\/div>\r\n      `;\r\n\r\n      document.getElementById(\"enterLayer-exchange\")?.appendChild(panel);\r\n    }\r\n\r\n    panel.classList.add(\"active\");\r\n\r\n    document.getElementById(\"gggExchangeMapTitle\").textContent =\r\n      type.toUpperCase() + \" EXCHANGE MAP\";\r\n\r\n    document.getElementById(\"gggExchangeMapCopy\").textContent =\r\n      \"Select an owner pin to open the Avatar Exchange request.\";\r\n\r\n    setTimeout(() => initExchangeMap(pins), 100);\r\n  }\r\n\r\n  function initExchangeMap(pins){\r\n    const mapEl = document.getElementById(\"gggExchangeGoogleMap\");\r\n    if(!mapEl) return;\r\n\r\n    if(!window.google || !google.maps){\r\n      mapEl.innerHTML = `\r\n        <div style=\"padding:24px;color:white;text-align:center;\">\r\n          Google Maps is not loaded. Make sure your Google Maps API script is active on this page.\r\n        <\/div>\r\n      `;\r\n      return;\r\n    }\r\n\r\n    const defaultCenter = { lat: 6.2442, lng: -75.5812 };\r\n\r\n    exchangeMap = new google.maps.Map(mapEl, {\r\n      center: pins.length\r\n        ? { lat: parseFloat(pins[0].lat), lng: parseFloat(pins[0].lng) }\r\n        : defaultCenter,\r\n      zoom: pins.length ? 12 : 10,\r\n      mapTypeId: \"roadmap\",\r\n      disableDefaultUI: false\r\n    });\r\n\r\n    exchangeMarkers.forEach(marker => marker.setMap(null));\r\n    exchangeMarkers = [];\r\n\r\n    pins.forEach(pin => {\r\n      const marker = new google.maps.Marker({\r\n        position: {\r\n          lat: parseFloat(pin.lat),\r\n          lng: parseFloat(pin.lng)\r\n        },\r\n        map: exchangeMap,\r\n        title: pin.name || pin.location || \"Exchange Pin\"\r\n      });\r\n\r\n      marker.addListener(\"click\", function(){\r\n        openExchangePinCard(pin);\r\n      });\r\n\r\n      exchangeMarkers.push(marker);\r\n    });\r\n  }\r\n\r\n  function openExchangePinCard(pin){\r\n    const card = document.getElementById(\"gggExchangePinCard\");\r\n    if(!card) return;\r\n\r\n    card.classList.add(\"active\");\r\n\r\n    card.innerHTML = `\r\n      <button id=\"gggCloseExchangeCard\" type=\"button\">\u00d7<\/button>\r\n\r\n      <div class=\"gggExchangeAvatar\" style=\"background-image:url('${pin.imageUrl || \"\"}')\"><\/div>\r\n\r\n      <h3>${pin.name || \"Exchange Owner\"}<\/h3>\r\n\r\n      <p>\r\n        <strong>Host \/ Location:<\/strong> ${pin.location || \"Not listed\"}<br>\r\n        <strong>Availability:<\/strong> ${pin.availability || \"Flexible\"}<br>\r\n        <strong>Offer:<\/strong> ${pin.description || \"No offer listed.\"}<br>\r\n        <strong>Wants:<\/strong> ${pin.highlights || \"Open to exchange.\"}\r\n      <\/p>\r\n\r\n      <button class=\"gggRequestExchangeNow\" type=\"button\"\r\n        data-name=\"${encodeURIComponent(pin.name || \"\")}\"\r\n        data-location=\"${encodeURIComponent(pin.location || \"\")}\"\r\n        data-offer=\"${encodeURIComponent(pin.description || \"\")}\"\r\n        data-wants=\"${encodeURIComponent(pin.highlights || \"\")}\">\r\n        Request Avatar Exchange\r\n      <\/button>\r\n    `;\r\n  }\r\n\r\n  function sendExchangeRequest(btn){\r\n    const name = decodeURIComponent(btn.dataset.name || \"\");\r\n    const location = decodeURIComponent(btn.dataset.location || \"\");\r\n    const offer = decodeURIComponent(btn.dataset.offer || \"\");\r\n    const wants = decodeURIComponent(btn.dataset.wants || \"\");\r\n\r\n    const subject = \"GGG Avatar Exchange Request - \" + name;\r\n\r\n    const body =\r\n`Hello Gods Galaxy Game,\r\n\r\nA member wants to request an Avatar Exchange.\r\n\r\nExchange Owner \/ Pin:\r\n${name}\r\n\r\nLocation \/ Host:\r\n${location}\r\n\r\nOffer:\r\n${offer}\r\n\r\nWants:\r\n${wants}\r\n\r\nPlease open the Avatar Exchange conversation.\r\n\r\nThank you.`;\r\n\r\n    window.location.href =\r\n      \"mailto:Godsgalaxygame@gmail.com?subject=\" +\r\n      encodeURIComponent(subject) +\r\n      \"&body=\" +\r\n      encodeURIComponent(body);\r\n  }\r\n\r\n  document.addEventListener(\"click\", function(e){\r\n    const exchangeBtn = e.target.closest(\"[data-exchange-action]\");\r\n    const closeMap = e.target.closest(\"#gggCloseExchangeMap\");\r\n    const closeCard = e.target.closest(\"#gggCloseExchangeCard\");\r\n    const requestBtn = e.target.closest(\".gggRequestExchangeNow\");\r\n\r\n    if(exchangeBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      loadExchangePins(exchangeBtn.getAttribute(\"data-exchange-action\"));\r\n      return;\r\n    }\r\n\r\n    if(closeMap){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      document.getElementById(\"gggExchangeMapPanel\")?.classList.remove(\"active\");\r\n      return;\r\n    }\r\n\r\n    if(closeCard){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      document.getElementById(\"gggExchangePinCard\")?.classList.remove(\"active\");\r\n      return;\r\n    }\r\n\r\n    if(requestBtn){\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      sendExchangeRequest(requestBtn);\r\n    }\r\n  }, true);\r\n\r\n})();\r\n<\/script>\r\n<script>\r\n\/* ENTER BUY \u2192 OPEN REAL JOIN LAYERS *\/\r\n(function(){\r\n\r\n  function hideEnter(){\r\n    document.querySelectorAll(\".enterLayer\").forEach(layer=>{\r\n      layer.classList.remove(\"active\");\r\n      layer.style.display = \"none\";\r\n      layer.style.opacity = \"0\";\r\n      layer.style.pointerEvents = \"none\";\r\n    });\r\n\r\n    const enter = document.getElementById(\"enterCircleScreen\");\r\n    if(enter) enter.style.display = \"none\";\r\n  }\r\n\r\n  function showJoinLayer(layerName){\r\n    hideEnter();\r\n\r\n    const entry = document.getElementById(\"circleEntryScreen\");\r\n    const join = document.getElementById(\"joinCircleScreen\");\r\n    const joinContent = document.querySelector(\"#joinCircleScreen .joinContent\");\r\n    const joinTitle = document.querySelector(\"#joinCircleScreen .joinTitle\");\r\n    const joinOrbs = document.querySelector(\"#joinCircleScreen .joinOrbSystem\");\r\n\r\n    if(entry) entry.style.display = \"none\";\r\n\r\n    if(join){\r\n      join.style.display = \"block\";\r\n      join.style.opacity = \"1\";\r\n      join.style.visibility = \"visible\";\r\n      join.style.pointerEvents = \"auto\";\r\n    }\r\n\r\n    if(joinContent){\r\n      joinContent.classList.add(\"hidden\");\r\n      joinContent.style.opacity = \"0\";\r\n      joinContent.style.pointerEvents = \"none\";\r\n    }\r\n\r\n    if(joinTitle) joinTitle.style.display = \"none\";\r\n    if(joinOrbs) joinOrbs.style.display = \"none\";\r\n\r\n    document.querySelectorAll(\".joinLayer\").forEach(layer=>{\r\n      layer.classList.remove(\"active\");\r\n      layer.style.display = \"none\";\r\n      layer.style.opacity = \"0\";\r\n      layer.style.pointerEvents = \"none\";\r\n    });\r\n\r\n    const layer = document.getElementById(\"layer-\" + layerName);\r\n\r\n    if(layer){\r\n      layer.classList.add(\"active\");\r\n      layer.style.display = \"flex\";\r\n      layer.style.opacity = \"1\";\r\n      layer.style.visibility = \"visible\";\r\n      layer.style.pointerEvents = \"auto\";\r\n      layer.style.zIndex = \"50\";\r\n    }\r\n  }\r\n\r\n  document.addEventListener(\"click\", function(e){\r\n    const btn = e.target.closest(\"#enterLayer-buy [data-join-section]\");\r\n    if(!btn) return;\r\n\r\n    e.preventDefault();\r\n    e.stopPropagation();\r\n\r\n    const section = btn.getAttribute(\"data-join-section\");\r\n\r\n    if(section === \"blisscoin\"){\r\n      showJoinLayer(\"coins\");\r\n      return;\r\n    }\r\n\r\n    if(section === \"weeks\"){\r\n      showJoinLayer(\"weeks\");\r\n      return;\r\n    }\r\n\r\n    if(section === \"travelclub\"){\r\n      window.location.href = \"\/GGG\/medayork-pyramid-2\/\";\r\n      return;\r\n    }\r\n\r\n    if(section === \"citycard\"){\r\n      window.location.href = \"\/GGG\/rent-before-buying\/?citycard=1\";\r\n      return;\r\n    }\r\n\r\n  }, true);\r\n\r\n})();\r\n<\/script>\r\n\r\n<!-- =========================================================\r\nSTART REPLACING HERE\r\nReplace the old gggLevel8ReservationsStyles and\r\ngggLevel8ReservationsScript blocks with everything in this file.\r\n========================================================= -->\r\n\r\n<style id=\"gggLevel8ReservationsStyles\">\r\n:root{--l8r-cyan:#63e7ff;--l8r-blue:#4d82ff;--l8r-violet:#a779ff;--l8r-gold:#f4d27a;--l8r-green:#70f7a2;--l8r-ink:#030714;--l8r-panel:rgba(7,16,35,.94);--l8r-line:rgba(153,224,255,.16)}\r\n#fc4DetailPage.gggReservationsMode{background:radial-gradient(circle at 15% 0,rgba(61,151,255,.13),transparent 30%),radial-gradient(circle at 90% 20%,rgba(167,121,255,.1),transparent 28%),#02050e!important;overflow:auto!important}\r\n#fc4DetailPage.gggReservationsMode .fc4-shell{max-width:1600px!important;padding:10px 14px 120px!important}\r\n#fc4DetailPage.gggReservationsMode .fc4-detailCard{padding:0!important;border:0!important;background:transparent!important;box-shadow:none!important;overflow:visible!important}\r\n#fc4DetailPage.gggReservationsMode #fc4DetailPill,#fc4DetailPage.gggReservationsMode #fc4DetailTitle,#fc4DetailPage.gggReservationsMode #fc4DetailKicker,#fc4DetailPage.gggReservationsMode #fc4AddSelectionBtn,#fc4DetailPage.gggReservationsMode #fc4OpenRequestBtn{display:none!important}\r\n.l8r-app{width:100%;color:#f5fbff;font-family:inherit}\r\n.l8r-top{position:sticky;top:0;z-index:60;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 18px;border:1px solid var(--l8r-line);border-radius:22px;background:rgba(2,7,18,.9);backdrop-filter:blur(22px);box-shadow:0 18px 60px rgba(0,0,0,.28)}\r\n.l8r-brand{display:flex;align-items:center;gap:12px;min-width:0}.l8r-mark{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;background:linear-gradient(135deg,var(--l8r-cyan),var(--l8r-violet));color:#020713;font-weight:1000;box-shadow:0 0 25px rgba(99,231,255,.24)}\r\n.l8r-brand b{display:block;font-size:1rem;letter-spacing:.08em;text-transform:uppercase}.l8r-brand small{display:block;margin-top:3px;color:rgba(232,247,255,.55);font-size:.68rem;letter-spacing:.08em}\r\n.l8r-member{display:flex;align-items:center;gap:9px;flex-wrap:wrap;justify-content:flex-end}.l8r-badge{padding:9px 12px;border:1px solid var(--l8r-line);border-radius:999px;background:rgba(255,255,255,.035);font-size:.75rem;color:rgba(242,250,255,.78)}.l8r-badge.gold{color:var(--l8r-gold);border-color:rgba(244,210,122,.28)}\r\n.l8r-search{display:grid;grid-template-columns:1.2fr 1fr 1fr auto;gap:8px;margin-top:14px;padding:10px;border:1px solid var(--l8r-line);border-radius:22px;background:rgba(6,14,31,.9)}\r\n.l8r-field{min-width:0;padding:10px 13px;border-right:1px solid rgba(255,255,255,.08)}.l8r-field:last-of-type{border-right:0}.l8r-field label{display:block;margin-bottom:5px;color:rgba(235,248,255,.45);font-size:.62rem;font-weight:900;letter-spacing:.12em;text-transform:uppercase}.l8r-field input,.l8r-field select{width:100%;border:0;outline:0;background:transparent;color:#fff;font:inherit;font-weight:800}.l8r-field select option{color:#07101f}\r\n.l8r-button{border:1px solid rgba(99,231,255,.25);border-radius:13px;padding:11px 14px;background:rgba(99,231,255,.07);color:#fff;font-weight:900;cursor:pointer}.l8r-button.primary{border:0;background:linear-gradient(135deg,var(--l8r-cyan),var(--l8r-green));color:#021016}.l8r-button.gold{border:0;background:linear-gradient(135deg,var(--l8r-gold),#ff9f5a);color:#201100}.l8r-button:disabled{opacity:.45;cursor:not-allowed}\r\n.l8r-searchButton{min-width:115px;border-radius:15px}\r\n.l8r-tabs{display:flex;gap:7px;margin-top:14px;padding:5px;border:1px solid var(--l8r-line);border-radius:16px;background:rgba(6,14,31,.8);width:max-content;max-width:100%}.l8r-tab{border:0;border-radius:12px;padding:11px 15px;background:transparent;color:rgba(235,248,255,.58);font-weight:900;cursor:pointer}.l8r-tab.active{background:linear-gradient(135deg,rgba(99,231,255,.2),rgba(167,121,255,.18));color:#fff;box-shadow:inset 0 0 0 1px rgba(99,231,255,.22)}\r\n.l8r-main{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:14px;margin-top:14px}.l8r-workspace,.l8r-tray{border:1px solid var(--l8r-line);border-radius:24px;background:var(--l8r-panel)}.l8r-workspace{padding:18px;min-width:0}.l8r-tray{position:sticky;top:88px;align-self:start;padding:17px;max-height:calc(100vh - 110px);overflow:auto}\r\n.l8r-sectionTitle{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}.l8r-sectionTitle h2{margin:0;font-size:clamp(1.45rem,3vw,2.25rem)}.l8r-sectionTitle p{margin:6px 0 0;color:rgba(235,248,255,.55);font-size:.83rem}.l8r-count{color:var(--l8r-cyan);font-size:.75rem;font-weight:900}\r\n.l8r-filterLabel{margin-top:16px;color:rgba(235,248,255,.4);font-size:.62rem;font-weight:1000;letter-spacing:.13em;text-transform:uppercase}.l8r-row{display:flex;gap:7px;overflow-x:auto;padding:8px 1px 3px;scrollbar-width:thin}.l8r-chip{flex:0 0 auto;border:1px solid rgba(153,224,255,.15);border-radius:999px;padding:9px 12px;background:rgba(255,255,255,.03);color:rgba(245,251,255,.74);font-size:.75rem;font-weight:850;cursor:pointer}.l8r-chip.active{border-color:transparent;background:linear-gradient(135deg,var(--l8r-cyan),var(--l8r-violet));color:#03101c}.l8r-chip.locked{opacity:.62}.l8r-level{margin-left:5px;font-size:.58rem}\r\n.l8r-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:17px}.l8r-provider{position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.09);border-radius:19px;background:linear-gradient(160deg,rgba(18,35,64,.94),rgba(3,8,20,.98));transition:.2s}.l8r-provider:hover{transform:translateY(-3px);border-color:rgba(99,231,255,.32)}.l8r-provider.selected{border-color:rgba(112,247,162,.65);box-shadow:0 0 30px rgba(112,247,162,.12)}.l8r-image{height:180px;background:#0b152b center\/cover no-repeat}.l8r-selectedFlag{position:absolute;top:10px;right:10px;padding:7px 9px;border-radius:999px;background:rgba(3,25,18,.9);color:var(--l8r-green);font-size:.66rem;font-weight:1000}.l8r-body{padding:14px}.l8r-route{color:var(--l8r-cyan);font-size:.61rem;font-weight:1000;letter-spacing:.09em;text-transform:uppercase}.l8r-body h3{margin:8px 0 6px;font-size:1.05rem}.l8r-copy{min-height:38px;color:rgba(235,248,255,.58);font-size:.76rem;line-height:1.5}.l8r-meta{display:flex;gap:5px;flex-wrap:wrap;margin-top:9px}.l8r-meta span{padding:5px 7px;border:1px solid rgba(255,255,255,.08);border-radius:999px;color:rgba(255,255,255,.62);font-size:.62rem}.l8r-actions{display:flex;gap:7px;margin-top:12px;flex-wrap:wrap}.l8r-actions .l8r-button{flex:1;text-align:center;text-decoration:none;font-size:.7rem;padding:9px}\r\n.l8r-empty,.l8r-notice{grid-column:1\/-1;padding:18px;border:1px solid rgba(244,210,122,.2);border-radius:15px;background:rgba(244,210,122,.05);color:rgba(255,248,220,.8);line-height:1.55}.l8r-notice{margin-top:12px}.l8r-lock{text-align:center;padding:35px}\r\n.l8r-trayHead{display:flex;justify-content:space-between;gap:8px;align-items:center}.l8r-trayHead h3{margin:0;font-size:1.05rem}.l8r-trayCount{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--l8r-cyan);color:#03101c;font-weight:1000}.l8r-tripSummary{margin-top:12px;padding:11px;border-radius:14px;background:rgba(255,255,255,.035);color:rgba(235,248,255,.65);font-size:.73rem;line-height:1.6}.l8r-tripSummary b{color:#fff}.l8r-selectedList{display:grid;gap:7px;margin-top:11px}.l8r-selectedItem{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px;border:1px solid rgba(255,255,255,.07);border-radius:12px;background:rgba(255,255,255,.025);font-size:.7rem}.l8r-remove{border:0;background:transparent;color:#ff8eaa;cursor:pointer;font-size:1rem}.l8r-trayEmpty{margin-top:13px;color:rgba(235,248,255,.42);font-size:.74rem;line-height:1.55}.l8r-tray .l8r-button{width:100%;margin-top:9px}.l8r-creditNote{margin-top:10px;color:rgba(235,248,255,.4);font-size:.66rem;line-height:1.5}\r\n.l8r-packages{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-top:10px}.l8r-package{padding:11px;border:1px solid rgba(244,210,122,.2);border-radius:13px;background:rgba(244,210,122,.05);color:#fff;text-align:left;cursor:pointer}.l8r-package b{display:block;color:var(--l8r-gold);margin-bottom:3px}.l8r-hidden{display:none!important}\r\n.l8r-partnerGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:15px}.l8r-partner{min-height:210px;padding:22px;border:1px solid var(--l8r-line);border-radius:20px;background:radial-gradient(circle at 85% 10%,rgba(99,231,255,.17),transparent 30%),linear-gradient(145deg,rgba(15,33,64,.95),rgba(3,8,20,.98));color:#fff;text-align:left;cursor:pointer}.l8r-partner b{color:var(--l8r-cyan);font-size:.65rem;letter-spacing:.12em}.l8r-partner strong{display:block;margin:13px 0 8px;font-size:1.45rem}.l8r-partner span{color:rgba(235,248,255,.58);line-height:1.55}\r\n@media(max-width:1180px){.l8r-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.l8r-main{grid-template-columns:minmax(0,1fr) 290px}}\r\n@media(max-width:820px){#fc4DetailPage.gggReservationsMode .fc4-shell{padding:7px 7px 105px!important}.l8r-top{border-radius:17px;padding:11px}.l8r-brand small,.l8r-member .l8r-badge:first-child{display:none}.l8r-search{grid-template-columns:1fr 1fr}.l8r-searchButton{grid-column:1\/-1}.l8r-main{display:block}.l8r-tray{position:fixed;left:8px;right:8px;bottom:8px;top:auto;z-index:80;max-height:62vh;border-color:rgba(99,231,255,.28);box-shadow:0 -20px 60px rgba(0,0,0,.5)}.l8r-tray:not(.expanded) .l8r-tripSummary,.l8r-tray:not(.expanded) .l8r-selectedList,.l8r-tray:not(.expanded) .l8r-trayEmpty,.l8r-tray:not(.expanded) .l8r-packages,.l8r-tray:not(.expanded) .l8r-creditNote,.l8r-tray:not(.expanded) #l8rSubmit{display:none}.l8r-grid{grid-template-columns:1fr}.l8r-image{height:210px}.l8r-partnerGrid{grid-template-columns:1fr}.l8r-tabs{width:100%}.l8r-tab{flex:1;font-size:.68rem;padding:10px 7px}}\r\n\r\n\/* =========================================================\r\n   REQUEST DETAILS VISIBILITY\r\n========================================================= *\/\r\n\r\n.l8r-field input:not([readonly]),\r\n.l8r-field select {\r\n  min-height:42px;\r\n  padding:8px 10px;\r\n  border:1px solid rgba(99,231,255,.22);\r\n  border-radius:11px;\r\n  background:rgba(255,255,255,.07);\r\n  color:#ffffff;\r\n  color-scheme:dark;\r\n  cursor:pointer;\r\n  transition:.2s ease;\r\n}\r\n\r\n.l8r-field input:not([readonly]):hover,\r\n.l8r-field select:hover {\r\n  border-color:rgba(99,231,255,.55);\r\n  background:rgba(99,231,255,.10);\r\n}\r\n\r\n.l8r-field input:not([readonly]):focus,\r\n.l8r-field select:focus {\r\n  border-color:#63e7ff;\r\n  background:rgba(99,231,255,.12);\r\n  box-shadow:0 0 0 3px rgba(99,231,255,.10);\r\n}\r\n\r\n.l8r-field input[type=\"date\"]::-webkit-calendar-picker-indicator {\r\n  opacity:1;\r\n  cursor:pointer;\r\n  filter:invert(1) brightness(1.8);\r\n}\r\n\r\n.l8r-field select {\r\n  appearance:auto;\r\n}\r\n\r\n#l8rSubmit {\r\n  position:relative;\r\n  border:1px solid rgba(112,247,162,.85);\r\n  background:linear-gradient(135deg,#63e7ff,#70f7a2);\r\n  box-shadow:\r\n    0 0 0 1px rgba(112,247,162,.18),\r\n    0 0 24px rgba(112,247,162,.22);\r\n  letter-spacing:.035em;\r\n}\r\n\r\n#l8rSubmit:hover {\r\n  box-shadow:\r\n    0 0 0 1px rgba(112,247,162,.30),\r\n    0 0 34px rgba(112,247,162,.38);\r\n  transform:translateY(-1px);\r\n}\r\n\r\n#l8rSubmit::before {\r\n  content:\"NEXT STEP \u00b7 \";\r\n  font-size:.66rem;\r\n  letter-spacing:.08em;\r\n}\r\n<\/style>\r\n\r\n<script id=\"gggLevel8ReservationsScript\">\r\n(function(){\r\n  \"use strict\";\r\n  if(window.gggOpenLevel8Reservations) return;\r\n\r\n  const AJAX=\"\/GGG\/wp-admin\/admin-ajax.php\";\r\n  const state={\r\n  active:false,\r\n  view:\"inventory\",\r\n  status:{\r\n    logged_in:false,\r\n    levels:[1],\r\n    credits:0,\r\n    display_name:\"\"\r\n  },\r\n  inventory:[],\r\n  draft:null,\r\n  selected:new Set(),\r\n  main:\"Accommodations\",\r\n  option:\"High-Rise\",\r\n  leaf:\"1\u20133 Days\",\r\n  arrival:\"\",\r\n  departure:\"\",\r\n  travelers:1\r\n};\r\n  const ROUTES={\r\n    \"First Time Visitor\":{level:2,options:{\"Live Medellin\":[\"Weather Today\",\"Air Quality & CO2\",\"Rain & UV\",\"City Conditions\"],\"Getting Around\":[\"Medellin Metro\",\"Airport Transportation\",\"Taxis & Ride Apps\",\"Walking & Accessibility\"],\"Before You Arrive\":[\"Arrival Checklist\",\"Money & Payments\",\"Phone & Internet\",\"What to Pack\"],\"My Smart Recommendations\":[\"Featured\"]}},\r\n    \"Accommodations\":{level:2,options:{\"High-Rise\":[\"1\u20133 Days\",\"4\u20136 Days\",\"7 Days\",\"1 Month\"],\"Historic\":[\"1\u20133 Days\",\"4\u20136 Days\",\"7 Days\",\"1 Month\"],\"Eco-Stay\":[\"1\u20133 Days\",\"4\u20136 Days\",\"7 Days\",\"1 Month\"],\"Mansions\":[\"1\u20133 Days\",\"4\u20136 Days\",\"7 Days\",\"1 Month\"]}},\r\n    \"Transportation\":{level:2,options:{\"Heli\":[\"Around\",\"Go-To\",\"Emergency\",\"Adventure\"],\"Yacht\":[\"Around\",\"Go-To\",\"Emergency\",\"Adventure\"],\"Car\":[\"Around\",\"Go-To\",\"Emergency\",\"Adventure\"],\"Driver\":[\"Around\",\"Go-To\",\"Emergency\",\"Adventure\"]}},\r\n    \"Sustainability\":{level:2,options:{\"Recycling\":[\"Sponsor a Cleanup\",\"Join a Cleanup\",\"Recycling Tours\"],\"Rivers & Canals\":[\"Sponsor a Waterway Cleanup\",\"Join a Waterway Cleanup\",\"Water Conservation Tours\"],\"Sustainable Agriculture\":[\"Support a Farm or Garden\",\"Join a Community Project\",\"Farm & Composting Tours\"],\"Energy & Conservation\":[\"Support a Conservation Project\",\"Clean Energy Tours\",\"Learn How Energy Is Made\",\"Energy-Saving Tips\"]}},\r\n    \"Legacy\":{level:2,options:{\"Imagine\":[\"Develop a New Idea\",\"Find Collaborators\",\"Create the Idea\",\"Grow the Idea\"],\"Exchange\":[\"Exchange Ideas\",\"Cultural, Skills or Business Exchange\",\"Document the Exchange\",\"Vacation Property Exchange\"],\"Record\":[\"Develop the Creative Concept\",\"Connect With Local Creators\",\"Produce Your Legacy\",\"Grow Your Creation\"],\"Franchise\":[\"Imagine GGG in Your City\",\"Connect Your City\",\"Sponsor or Build a Stadium\",\"Launch Gods Galaxy Game\"]}},\r\n    \"Discover\":{level:3,options:{\"Adventure\":[\"Air Adventures\",\"Water Sports\",\"Horseback Experiences\",\"Extreme Adventures\"],\"Ancestral\":[\"Spiritual Heritage\",\"Sacred Waters\",\"Indigenous Heritage\",\"Legends & Mysteries\"],\"Cultural\":[\"Art & Creativity\",\"River Culture\",\"Farms & Flavors\",\"Medellin Identity\"],\"Historic\":[\"Antioquia Origins\",\"City Development\",\"Medellin Transformation\",\"Sports History\"]}},\r\n    \"Entertainment\":{level:3,options:{\"Concerts\":[\"Backstage Experience\",\"Private Concert Suite\",\"VIP Concert Experience\",\"On-Stage Viewing Experience\"],\"Fashion\":[\"Live Fashion Shows\",\"Fashion & Shopping Malls\",\"Digital Fashion Experience\",\"Downtown Fashion District\"],\"Comedy\":[\"Live Comedy Shows\",\"Stand-Up Comedy\",\"Comedy City Experience\",\"Book a Comedian\"],\"Sports\":[\"Sports Lessons & Training\",\"Attend a Live Game\",\"Play With Locals\",\"Stadium & Sports Tours\"]}},\r\n    \"Medical Tourism\":{level:3,options:{\"Vision Care\":[\"Eye Exams & Diagnostics\",\"Vision Correction Surgery\",\"Eyewear & Prescriptions\",\"Recovery & Follow-Up\"],\"Dental Care\":[\"Cleaning & Preventive Care\",\"Oral Surgery & Dental Implants\",\"Cosmetic Dentistry & Smile Design\",\"Emergency Dental Care\"],\"Aesthetic Care\":[\"Pre-Surgery Evaluation\",\"Cosmetic Surgery\",\"First Consultation\",\"Recovery & Aftercare\"],\"Regenerative Medicine\":[\"Health Assessment & Diagnostics\",\"Regenerative Therapies\",\"Recovery & Wellness Support\",\"Follow-Up Care\"]}},\r\n    \"Survival\":{level:4,options:{\"Networking\":[\"Social Connections\",\"Digital Networking\",\"Business Networking\",\"Influencer Connections\"],\"Dating\":[\"Dating Events\",\"Online Dating\",\"Blind Dates\",\"Social Mixers\"],\"Shared Dining\":[\"Restaurant Hopping\",\"Dinner Festivals\",\"Progressive Dinners\",\"City Dining\"],\"Partnership\":[\"Meet the Family\",\"Wedding Planning\",\"Matchmaking\",\"Marriage Experiences\"]}},\r\n    \"Gastronomic\":{level:4,options:{\"Culinary Skills\":[\"Learn to Cook\",\"Cook With Locals\",\"In-Room Cooking\",\"Shop and Cook\"],\"Culinary Experiences\":[\"Culinary Camps\",\"Cooking Classes\",\"Culinary Dates\",\"Private Dining\"],\"Food Discovery\":[\"Gastronomic Experiences\",\"Food-Truck Experiences\",\"Culinary Expositions\",\"Food Festivals\"],\"Food Innovation\":[\"Creative Cuisine\",\"Herbal Cuisine\",\"Botanical Cuisine\",\"Medicinal Nutrition\"]}},\r\n    \"Conference\":{level:4,options:{\"Creative Learning\":[\"One-Day Sessions\",\"Learning Camps\",\"Online Sessions\",\"Exclusive Sessions\"],\"Books and Writing\":[\"Meet an Author\",\"Creative Writing\",\"Writing Workshops\",\"Literary Festivals\"],\"Digital Innovation\":[\"Industry Conferences\",\"Innovation Camps\",\"Trading Education\",\"Youth Programs\"],\"Reinvention\":[\"Trial Sessions\",\"Transformation Camps\",\"Online Programs\",\"International Programs\"]}},\r\n    \"Give\":{level:4,options:{\"Support Children\":[\"Volunteer for a Day\",\"Health Support\",\"Meaningful Gifts\",\"Educational Trips\"],\"Strengthen Families\":[\"Share a Meal\",\"Support Education\",\"Family Experiences\",\"Adoption Support\"],\"Honor Older Adults\":[\"Walk Together\",\"Educational Support\",\"Spend a Day Together\",\"Community Outings\"],\"Community Support\":[\"Provide a Meal\",\"Community Meals\",\"Educational Support\",\"Inspire Change\"]}},\r\n    \"Cosmic\":{level:4,options:{\"Celestial Travel\":[\"Stargazing\",\"Meteor Experiences\",\"Eclipse Journeys\",\"Full-Moon Experiences\"],\"Universal Love\":[\"Relationship Retreats\",\"Self-Love\",\"Family Connection\",\"Love Again\"],\"Healing Journey\":[\"Spiritual Discovery\",\"Recovery Retreats\",\"Support and Renewal\",\"Purposeful Work\"],\"Higher Self\":[\"Cosmic Awareness\",\"Past-Life Reflection\",\"Reiki Energy\",\"Astral Exploration\"]}},\r\n    \"Entrepreneur\":{level:4,options:{\"Inspiration\":[\"Start-Up Experience\",\"Founder Lessons\",\"Business Bootcamp\",\"Mentor Others\"],\"Growth Mindset\":[\"Level Up\",\"Share Knowledge\",\"Sustainable Growth\",\"Innovate\"],\"Creation\":[\"Build Your Vision\",\"Design the Future\",\"Action Steps\",\"Creative Energy\"],\"Launch\":[\"Launch Workshops\",\"Start Your Project\",\"Showcase Your Work\",\"Inspire Others\"]}},\r\n    \"Insight\":{level:4,options:{\"Mindful Movement\":[\"Wellness Retreats\",\"Yoga Instruction\",\"Scenic Yoga\",\"Virtual Practice\"],\"Silent Reflection\":[\"Meditation Retreats\",\"Guided Learning\",\"One-Day Immersion\",\"Become a Guide\"],\"Nature Connection\":[\"Forest Connection\",\"Nights in Nature\",\"Parks and Sanctuaries\",\"Ancestral Traditions\"],\"Meditation and Energy\":[\"Mindful Yoga\",\"Past Reflection\",\"Reiki Wellness\",\"Astral Meditation\"]}}\r\n  };\r\n  const esc=v=>String(v==null?\"\":v).replace(\/[&<>\"']\/g,c=>({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#039;\"}[c]));\r\n  const norm=v=>String(v||\"\").toLowerCase().normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g,\"\").replace(\/[^a-z0-9]+\/g,\" \").trim();\r\n  const config=()=>window.GGGL8ReservationsConfig||{};\r\n  const owns=level=>level<=2||(state.status.levels||[]).map(Number).includes(Number(level));\r\n  function post(action,data){const body=new URLSearchParams();body.set(\"action\",action);if(config().nonce)body.set(\"nonce\",config().nonce);Object.entries(data||{}).forEach(([k,v])=>body.set(k,v==null?\"\":String(v)));return fetch(config().ajaxUrl||AJAX,{method:\"POST\",credentials:\"same-origin\",headers:{\"Content-Type\":\"application\/x-www-form-urlencoded; charset=UTF-8\"},body:body.toString()}).then(r=>r.json()).then(r=>{if(!r||r.success!==true){const e=new Error(r&&r.data&&r.data.message?r.data.message:\"The connection could not be completed.\");e.data=r&&r.data?r.data:{};throw e;}return r.data||{};});}\r\n  function itemId(i){return String(i.id||i.host_id||i.journeyId||i.name||i.title||\"\");}\r\n  function itemMain(item){\r\n  if(item.inventorySource === \"level8-direct\"){\r\n    return (\r\n      item.category ||\r\n      item.group ||\r\n      \"\"\r\n    );\r\n  }\r\n\r\n  return (\r\n    item.stage ||\r\n    item.guide ||\r\n    item.category ||\r\n    item.group ||\r\n    item.section ||\r\n    \"\"\r\n  );\r\n}\r\n\r\nfunction itemOption(item){\r\n  return (\r\n    item.option ||\r\n    item.providerType ||\r\n    item.parent ||\r\n    item.serviceType ||\r\n    item.type ||\r\n    \"\"\r\n  );\r\n}\r\n\r\nfunction itemLeaf(item){\r\n  return (\r\n    item.suboption ||\r\n    item.suboptionLabel ||\r\n    item.suboptionKey ||\r\n    item.style ||\r\n    item.experience ||\r\n    item.serviceOption ||\r\n    \"\"\r\n  );\r\n}\r\n  function activeItem(i){const a=i&&i.active;return !!i&&![false,0,\"0\",\"false\",\"inactive\",\"disabled\"].includes(a)&&![\"hidden\",\"inactive\",\"draft\"].includes(norm(i.status));}\r\n  function safeUrl(v){const u=String(v||\"\").trim();return \/^(https?:\\\/\\\/|\\\/)\/i.test(u)?u:\"\"}\r\n  function showDetail(){document.querySelectorAll(\".fc4-page\").forEach(p=>p.classList.remove(\"active\"));const page=document.getElementById(\"fc4DetailPage\");if(page)page.classList.add(\"active\",\"gggReservationsMode\");const overlay=document.getElementById(\"fc4Overlay\");if(overlay)overlay.scrollTo({top:0,behavior:\"smooth\"});}\r\n  function target(){return document.getElementById(\"fc4DetailText\")}\r\n  function appHTML(){const d=state.draft||{};return `<div class=\"l8r-app\"><header class=\"l8r-top\"><div class=\"l8r-brand\"><div class=\"l8r-mark\">8<\/div><div><b>Reservations<\/b><small>LEVEL 8 \u00b7 MEDELL\u00cdN TRAVEL WORKSPACE<\/small><\/div><\/div><div class=\"l8r-member\"><span class=\"l8r-badge\">${esc(state.status.display_name||\"Guest\")}<\/span><span class=\"l8r-badge gold\">${Number(state.status.credits||0)} request credit${Number(state.status.credits)===1?\"\":\"s\"}<\/span><\/div><\/header><section class=\"l8r-search\"><div class=\"l8r-field\"><label>Destination<\/label><input id=\"l8rDestination\" value=\"Medell\u00edn\" readonly><\/div><div class=\"l8r-field\"><label>Arrival<\/label><input id=\"l8rArrival\" type=\"date\" \r\nvalue=\"${esc(state.arrival||d.arrival_date||\"\")}\"><\/div><div class=\"l8r-field\"><label>Departure<\/label><input id=\"l8rDeparture\" type=\"date\" value=\"${esc(state.departure||d.departure_date||\"\")}\"><\/div><div class=\"l8r-field\"><label>Travelers<\/label><select id=\"l8rTravelers\">${[1,2,3,4,5,6,7,8,9,10].map(n=>`<option value=\"${n}\" ${Number(state.travelers||d.travelers||1)===n?\"selected\":\"\"}>${n}<\/option>`).join(\"\")}<\/select><\/div><button class=\"l8r-button primary l8r-searchButton\" id=\"l8rSearch\" type=\"button\">Apply To Request<\/button><\/section><nav class=\"l8r-tabs\"><button class=\"l8r-tab ${state.view===\"inventory\"?\"active\":\"\"}\" data-l8r-tab=\"inventory\">Bliss Inventory + Concierge<\/button><button class=\"l8r-tab ${state.view===\"partners\"?\"active\":\"\"}\" data-l8r-tab=\"partners\">Reserve Yourself<\/button><\/nav><main class=\"l8r-main\"><section class=\"l8r-workspace\" id=\"l8rWorkspace\"><\/section><aside class=\"l8r-tray\" id=\"l8rTray\"><\/aside><\/main><div id=\"l8rMessage\"><\/div><\/div>`}\r\n  function mount(){showDetail();const t=target();if(!t)return;t.innerHTML=appHTML();bindShell();renderView();renderTray();}\r\n  function bindShell(){document.querySelectorAll(\"[data-l8r-tab]\").forEach(b=>b.onclick=()=>{state.view=b.dataset.l8rTab;mount()});const search=document.getElementById(\"l8rSearch\");if(search)search.onclick=()=>{state.arrival=document.getElementById(\"l8rArrival\").value;state.departure=document.getElementById(\"l8rDeparture\").value;state.travelers=Number(document.getElementById(\"l8rTravelers\").value||1);renderView();renderTray()};}\r\n  function renderView(){state.view===\"partners\"?renderPartners():renderInventory()}\r\n  function chip(label,active,locked,level,kind){return `<button class=\"l8r-chip${active?\" active\":\"\"}${locked?\" locked\":\"\"}\" data-filter-kind=\"${kind}\" data-filter-value=\"${esc(label)}\" type=\"button\">${locked?\"\ud83d\udd12 \":\"\"}${esc(label)}${level>2?`<span class=\"l8r-level\">L${level}<\/span>`:\"\"}<\/button>`}\r\n  function renderInventory(){const w=document.getElementById(\"l8rWorkspace\");if(!w)return;const route=ROUTES[state.main];w.innerHTML=`<div class=\"l8r-sectionTitle\"><div><h2>Explore Bliss Inventory<\/h2><p>Choose a category, narrow the results, and add providers to one request.<\/p><\/div><span class=\"l8r-count\">${state.inventory.length} PROVIDERS CONNECTED<\/span><\/div><div class=\"l8r-filterLabel\">Category<\/div><div class=\"l8r-row\" id=\"l8rMainFilters\">${Object.entries(ROUTES).map(([n,r])=>chip(n,n===state.main,!owns(r.level),r.level,\"main\")).join(\"\")}<\/div><div id=\"l8rConditionalFilters\"><\/div><div class=\"l8r-grid\" id=\"l8rResults\"><\/div>`;document.querySelectorAll('[data-filter-kind=\"main\"]').forEach(b=>b.onclick=()=>{const r=ROUTES[b.dataset.filterValue];if(!owns(r.level)){renderLock(r.level,b.dataset.filterValue);return}state.main=b.dataset.filterValue;\r\n\r\nconst selectedRoute=\r\n  ROUTES[state.main];\r\n\r\nconst firstOption=\r\n  Object.keys(\r\n    selectedRoute.options || {}\r\n  )[0] || \"\";\r\n\r\nstate.option=\r\n  firstOption;\r\n\r\nstate.leaf=\r\n  (\r\n    selectedRoute.options[firstOption] ||\r\n    []\r\n  )[0] || \"\";\r\n\r\nrenderInventory();});renderConditional(route);renderResults();}\r\n  function renderConditional(route){\r\n  const box=\r\n    document.getElementById(\r\n      \"l8rConditionalFilters\"\r\n    );\r\n\r\n  if(\r\n    !box ||\r\n    !route ||\r\n    !owns(route.level)\r\n  ){\r\n    return;\r\n  }\r\n\r\n  const options=\r\n    Object.keys(\r\n      route.options || {}\r\n    );\r\n\r\n  \/*\r\n   * If the current option does not belong to the newly\r\n   * selected category, automatically choose the first one.\r\n   *\/\r\n  if(\r\n    !state.option ||\r\n    !route.options[state.option]\r\n  ){\r\n    state.option=\r\n      options[0] || \"\";\r\n  }\r\n\r\n  const leaves=\r\n    route.options[state.option] ||\r\n    [];\r\n\r\n  \/*\r\n   * Automatically select the first real suboption.\r\n   *\/\r\n  if(\r\n    !state.leaf ||\r\n    !leaves.includes(state.leaf)\r\n  ){\r\n    state.leaf=\r\n      leaves[0] || \"\";\r\n  }\r\n\r\n  box.innerHTML=`\r\n    <div class=\"l8r-filterLabel\">\r\n      Type\r\n    <\/div>\r\n\r\n    <div class=\"l8r-row\">\r\n      ${options\r\n        .map(function(name){\r\n          return chip(\r\n            name,\r\n            name === state.option,\r\n            false,\r\n            route.level,\r\n            \"option\"\r\n          );\r\n        })\r\n        .join(\"\")}\r\n    <\/div>\r\n\r\n    <div class=\"l8r-filterLabel\">\r\n      Specific option\r\n    <\/div>\r\n\r\n    <div class=\"l8r-row\">\r\n      ${leaves\r\n        .map(function(name){\r\n          return chip(\r\n            name,\r\n            name === state.leaf,\r\n            false,\r\n            route.level,\r\n            \"leaf\"\r\n          );\r\n        })\r\n        .join(\"\")}\r\n    <\/div>\r\n  `;\r\n\r\n  box\r\n    .querySelectorAll(\r\n      '[data-filter-kind=\"option\"]'\r\n    )\r\n    .forEach(function(button){\r\n\r\n      button.onclick=\r\n        function(){\r\n\r\n          state.option=\r\n            button.dataset.filterValue;\r\n\r\n          const newLeaves=\r\n            route.options[state.option] ||\r\n            [];\r\n\r\n          state.leaf=\r\n            newLeaves[0] || \"\";\r\n\r\n          renderInventory();\r\n        };\r\n    });\r\n\r\n  box\r\n    .querySelectorAll(\r\n      '[data-filter-kind=\"leaf\"]'\r\n    )\r\n    .forEach(function(button){\r\n\r\n      button.onclick=\r\n        function(){\r\n\r\n          state.leaf=\r\n            button.dataset.filterValue;\r\n\r\n          renderInventory();\r\n        };\r\n    });\r\n}\r\n  function categoryItems(){return state.inventory.filter(i=>activeItem(i)&&norm(itemMain(i))===norm(state.main))}\r\n  function matchingItems(){let items=categoryItems();if(state.option!==\"All\")items=items.filter(i=>norm(itemOption(i))===norm(state.option));if(state.leaf!==\"All\")items=items.filter(i=>norm(itemLeaf(i))===norm(state.leaf));const seen=new Set();return items.filter(i=>{const id=itemId(i);if(!id||seen.has(id))return false;seen.add(id);return true})}\r\n  function renderResults(){const box=document.getElementById(\"l8rResults\");if(!box)return;const items=matchingItems();if(!items.length){box.innerHTML=`<div class=\"l8r-empty\">No active provider currently matches <b>${esc(state.main)}${state.option!==\"All\"?` \u00b7 ${esc(state.option)}`:\"\"}${state.leaf!==\"All\"?` \u00b7 ${esc(state.leaf)}`:\"\"}<\/b>. Choose another type or specific option.<\/div>`;return}box.innerHTML=items.map(i=>{const id=itemId(i),selected=state.selected.has(id),image=safeUrl(i.image||i.imageUrl),website=safeUrl(i.websiteUrl||i.url);return `<article class=\"l8r-provider${selected?\" selected\":\"\"}\">${selected?'<span class=\"l8r-selectedFlag\">\u2713 ADDED<\/span>':\"\"}<div class=\"l8r-image\"${image?` style=\"background-image:url('${esc(image)}')\"`:\"\"}><\/div><div class=\"l8r-body\"><div class=\"l8r-route\">${esc(itemMain(i))}${itemOption(i)?` \u00b7 ${esc(itemOption(i))}`:\"\"}<\/div><h3>${esc(i.name||i.title||\"Participating Provider\")}<\/h3><div class=\"l8r-copy\">${esc(i.description||i.desc||\"Explore this participating provider.\")}<\/div><div class=\"l8r-meta\">${i.location?`<span>${esc(i.location)}<\/span>`:\"\"}${i.price?`<span>${esc(i.price)}<\/span>`:\"\"}${itemLeaf(i)?`<span>${esc(itemLeaf(i))}<\/span>`:\"\"}<\/div><div class=\"l8r-actions\">${website?`<a class=\"l8r-button\" href=\"${esc(website)}\" target=\"_blank\" rel=\"noopener noreferrer\">Website<\/a>`:\"\"}<button class=\"l8r-button primary\" data-select-host=\"${esc(id)}\" type=\"button\">${selected?\"Remove\":\"Add to Request\"}<\/button><\/div><\/div><\/article>`}).join(\"\");box.querySelectorAll(\"[data-select-host]\").forEach(b=>b.onclick=()=>{const id=b.dataset.selectHost;state.selected.has(id)?state.selected.delete(id):state.selected.add(id);renderResults();renderTray()});}\r\n  function selectedItems(){const ids=state.selected;return state.inventory.filter(i=>ids.has(itemId(i)))}\r\n  function renderTray(){const tray=document.getElementById(\"l8rTray\");if(!tray)return;const items=selectedItems(),d=state.draft||{},imported=Array.isArray(d.journey_items)?d.journey_items:[];tray.innerHTML=`<div class=\"l8r-trayHead\" id=\"l8rTrayToggle\"><h3>Your Request<\/h3><span class=\"l8r-trayCount\">${items.length}<\/span><\/div><div class=\"l8r-tripSummary\"><b>${esc(state.arrival||d.arrival_date||\"Add arrival date\")}<\/b> \u2192 <b>${esc(state.departure||d.departure_date||\"Add departure date\")}<\/b><br>${esc(state.travelers||d.travelers||1)} traveler(s)${d.request_id?`<br>Connected request: ${esc(d.request_id)}`:\"\"}${imported.length?`<br>${imported.length} Journey selection(s) imported`:\"\"}<\/div>${items.length?`<div class=\"l8r-selectedList\">${items.map(i=>`<div class=\"l8r-selectedItem\"><span>${esc(i.name||i.title||\"Provider\")}<\/span><button class=\"l8r-remove\" data-remove-host=\"${esc(itemId(i))}\" type=\"button\">\u00d7<\/button><\/div>`).join(\"\")}<\/div>`:`<div class=\"l8r-trayEmpty\">Add providers from the inventory. You can visit their websites before including them in your request.<\/div>`}<button class=\"l8r-button primary\" id=\"l8rSubmit\" type=\"button\">Submit to Concierge \u00b7 1 credit<\/button><button class=\"l8r-button gold\" id=\"l8rCredits\" type=\"button\">Buy Request Credits<\/button><div id=\"l8rPackages\" class=\"l8r-packages l8r-hidden\"><\/div><div class=\"l8r-creditNote\">A request credit sends the information for human review. Provider prices and any later reservation-processing charge remain separate.<\/div>`;tray.querySelectorAll(\"[data-remove-host]\").forEach(b=>b.onclick=()=>{state.selected.delete(b.dataset.removeHost);renderResults();renderTray()});document.getElementById(\"l8rSubmit\").onclick=submitRequest;document.getElementById(\"l8rCredits\").onclick=togglePackages;document.getElementById(\"l8rTrayToggle\").onclick=()=>tray.classList.toggle(\"expanded\");}\r\n  function packages(){return config().packages||{one:{credits:1,price:\"1.99\"},five:{credits:5,price:\"6.99\"},ten:{credits:10,price:\"12.99\"},twenty:{credits:20,price:\"19.99\"}}}\r\n  function togglePackages(){const box=document.getElementById(\"l8rPackages\");if(!box)return;box.classList.toggle(\"l8r-hidden\");box.innerHTML=Object.entries(packages()).map(([k,p])=>`<button class=\"l8r-package\" data-package=\"${esc(k)}\" type=\"button\"><b>${esc(p.credits)} request${Number(p.credits)===1?\"\":\"s\"}<\/b>$${esc(p.price)}<\/button>`).join(\"\");box.querySelectorAll(\"[data-package]\").forEach(b=>b.onclick=()=>checkout(b))}\r\n  async function checkout(b){try{b.disabled=true;const d=await post(\"ggg_l8r_create_checkout\",{package:b.dataset.package});if(!d.checkout_url)throw new Error(\"Stripe did not return a checkout destination.\");location.assign(d.checkout_url)}catch(e){showMessage(e.message);b.disabled=false}}\r\n  async function submitRequest(){if(!state.status.logged_in){showMessage(\"Please sign in before submitting a concierge request.\");return}if(!state.draft||!state.draft.request_id){showMessage(\"Open Reservations from Current Journey so dates, notes, and the private request number are connected before submission.\");return}if(Number(state.status.credits||0)<1){showMessage(\"Purchase at least one concierge request credit first.\");togglePackages();return}if(!confirm(\"Use 1 request credit and submit this request to a concierge?\"))return;try{const d=await post(\r\n  \"ggg_l8r_submit_concierge\",\r\n  {\r\n    request_id:\r\n      state.draft.request_id,\r\n\r\n    selected_ids:\r\n      JSON.stringify(\r\n        Array.from(\r\n          state.selected\r\n        )\r\n      ),\r\n\r\n    arrival_date:\r\n      state.arrival ||\r\n      state.draft.arrival_date ||\r\n      \"\",\r\n\r\n    departure_date:\r\n      state.departure ||\r\n      state.draft.departure_date ||\r\n      \"\",\r\n\r\n    travelers:\r\n      state.travelers ||\r\n      state.draft.travelers ||\r\n      1\r\n  }\r\n);state.status.credits=Number(d.credits||0);showMessage(`${d.message} Reference: ${d.request_id}`);mount()}catch(e){showMessage(e.message);if(e.data&#038;&#038;e.data.needs_credits)togglePackages()}}\r\n  function showMessage(text){let box=document.getElementById(\"l8rMessage\");if(!box){box=document.createElement(\"div\");box.id=\"l8rMessage\";const app=document.querySelector(\".l8r-app\");if(app)app.appendChild(box)}if(box)box.innerHTML=text?`<div class=\"l8r-notice\">${esc(text)}<\/div>`:\"\"}\r\n  function renderLock(level,name){const w=document.getElementById(\"l8rWorkspace\");if(!w)return;w.innerHTML=`<div class=\"l8r-lock\"><div class=\"l8r-route\">LEVEL ${level} REQUIRED<\/div><h2>${esc(name)}<\/h2><p>This inventory becomes available after Level ${level} is activated.<\/p><button class=\"l8r-button gold\" id=\"l8rUnlock\" type=\"button\">Unlock Level ${level}<\/button><\/div>`;document.getElementById(\"l8rUnlock\").onclick=()=>{const u=level===3?config().level3Url:config().level4Url;u?location.assign(u):showMessage(`The Level ${level} purchase destination has not been connected yet.`)}}\r\n  function renderPartners(){const w=document.getElementById(\"l8rWorkspace\");if(!w)return;w.innerHTML=`<div class=\"l8r-sectionTitle\"><div><h2>Reserve Yourself<\/h2><p>Search an external booking partner without using a concierge request credit.<\/p><\/div><\/div><div class=\"l8r-partnerGrid\"><button class=\"l8r-partner\" data-partner=\"accommodations\" type=\"button\"><b>STAYS<\/b><strong>Accommodations<\/strong><span>Search lodging inventory, dates, availability, and partner prices.<\/span><\/button><button class=\"l8r-partner\" data-partner=\"transportation\" type=\"button\"><b>MOVEMENT<\/b><strong>Transportation<\/strong><span>Search available transportation through a connected booking partner.<\/span><\/button><\/div><div class=\"l8r-notice\">Booking partners and participating businesses are independent providers. Their prices, availability, checkout, cancellations, refunds, and fulfillment are governed by their own terms.<\/div>`;w.querySelectorAll(\"[data-partner]\").forEach(b=>b.onclick=()=>{const u=b.dataset.partner===\"accommodations\"?config().accommodations:config().transportation;u?window.open(u,\"_blank\",\"noopener,noreferrer\"):showMessage(\"This booking-partner destination has not been connected yet.\")})}\r\n  async function loadConnections(){\r\n  const fallbackStatus = {\r\n    logged_in: document.body.classList.contains(\"logged-in\"),\r\n    levels: [1],\r\n    credits: 0\r\n  };\r\n\r\n  const results = await Promise.all([\r\n    post(\"ggg_l8r_status\").catch(() => fallbackStatus),\r\n\r\n    post(\"ggg_tc_get_inventory\")\r\n      .catch(() => ({ items: [] })),\r\n\r\n    post(\"ggg_l8_get_inventory\")\r\n      .catch(() => ({ items: [] }))\r\n  ]);\r\n\r\n  const statusData = results[0] || fallbackStatus;\r\n  const limitlessResponse = results[1] || {};\r\n  const level8Response = results[2] || {};\r\n\r\n  const extractItems = function(response){\r\n    if(Array.isArray(response)){\r\n      return response;\r\n    }\r\n\r\n    if(Array.isArray(response.items)){\r\n      return response.items;\r\n    }\r\n\r\n    if(Array.isArray(response.inventory)){\r\n      return response.inventory;\r\n    }\r\n\r\n    return [];\r\n  };\r\n\r\n  const limitlessItems = extractItems(limitlessResponse)\r\n    .map(function(item){\r\n      return Object.assign({}, item, {\r\n        inventorySource: \"limitless\",\r\n        sourceLabel: \"Bliss Travel by Limitless\"\r\n      });\r\n    });\r\n\r\n  const directLevel8Items = extractItems(level8Response)\r\n    .filter(function(item){\r\n      const section = norm(item.section);\r\n\r\n      return (\r\n        section === \"reservations\" ||\r\n        section === \"bliss reservations\"\r\n      );\r\n    })\r\n    .map(function(item){\r\n      return Object.assign({}, item, {\r\n        inventorySource: \"level8-direct\",\r\n        sourceLabel: \"Bliss Exclusive Collection\"\r\n      });\r\n    });\r\n\r\n  const merged = [\r\n    ...limitlessItems,\r\n    ...directLevel8Items\r\n  ];\r\n\r\n  const unique = new Map();\r\n\r\n  merged.forEach(function(item){\r\n    const source = item.inventorySource || \"unknown\";\r\n\r\n    const id = String(\r\n      item.id ||\r\n      item.host_id ||\r\n      item.journeyId ||\r\n      item.name ||\r\n      item.title ||\r\n      \"\"\r\n    );\r\n\r\n    if(!id){\r\n      return;\r\n    }\r\n\r\n    unique.set(source + \":\" + id, item);\r\n  });\r\n\r\n  state.status = statusData;\r\n  state.inventory = Array.from(unique.values());\r\n\r\n  state.draft =\r\n    window.GGGInvitationReservation ||\r\n    (\r\n      window.GGGInvitationConnector &&\r\n      typeof window.GGGInvitationConnector.getDraft === \"function\"\r\n        ? window.GGGInvitationConnector.getDraft()\r\n        : null\r\n    );\r\n\r\n  if(state.draft){\r\n    state.arrival =\r\n      state.draft.arrival_date || \"\";\r\n\r\n    state.departure =\r\n      state.draft.departure_date || \"\";\r\n\r\n    state.travelers =\r\n      Number(state.draft.travelers || 1);\r\n  }\r\n}\r\n  async function openReservations(){state.active=true;showDetail();const t=target();if(t)t.innerHTML='<div class=\"l8r-notice\">Preparing Reservations\u2026<\/div>';try{await loadConnections()}catch(e){console.error(\"[GGG Reservations]\",e)}mount()}\r\n  function exitReservations(){state.active=false;const page=document.getElementById(\"fc4DetailPage\");if(page)page.classList.remove(\"gggReservationsMode\");document.querySelectorAll(\".fc4-page\").forEach(p=>p.classList.remove(\"active\"));const home=document.getElementById(\"fc4HomePage\");if(home)home.classList.add(\"active\")}\r\n  document.addEventListener(\"click\",e=>{if(!state.active)return;if(e.target.closest(\"#fc4BackBtn\")){e.preventDefault();e.stopImmediatePropagation();exitReservations();return}if(e.target.closest(\"#fc4BackFromDetail\")){e.preventDefault();e.stopImmediatePropagation();exitReservations()}},true);\r\n  window.addEventListener(\"gggInvitationReservationLoaded\",e=>{state.draft=e.detail&&e.detail.draft?e.detail.draft:null;if(state.active)mount()});\r\n  window.gggOpenLevel8Reservations=openReservations;\r\n  window.GGGLevel8Reservations={open:openReservations,state:state};\r\n})();\r\n<\/script>\r\n\r\n<!-- =========================================================\r\nSTOP REPLACING HERE\r\n========================================================= -->\r\n\r\n\r\n<!-- GGG RENT BEFORE OWNING \u2014 PREMIUM CONNECTED SYSTEM V2 -->\r\n<style>\r\n#gggRboPage{--rb-accent:#75eaff;--rb-glow:rgba(117,234,255,.22);color:#eef8ff;font-family:inherit;min-height:100%}\r\n#gggRboPage *{box-sizing:border-box}\r\n#gggRboPage button,#gggRboPage input,#gggRboPage textarea{font:inherit}\r\n#gggRboPage button{cursor:pointer;color:inherit}\r\n#gggRboPage button:focus-visible,#gggRboPage input:focus-visible,#gggRboPage textarea:focus-visible{outline:2px solid var(--rb-accent);outline-offset:3px}\r\n#gggRboPage .rbo-shell{width:min(1500px,100%);margin:auto;padding:18px 18px 110px}\r\n#gggRboPage .rbo-top{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:14px 0 18px;border-bottom:1px solid rgba(133,220,255,.14)}\r\n#gggRboPage .rbo-topLeft{display:flex;align-items:center;gap:14px;min-width:0}\r\n#gggRboPage .rbo-back,#gggRboPage .rbo-button{border:1px solid rgba(131,218,255,.28);background:#0d1929;border-radius:12px;padding:10px 14px;text-decoration:none}\r\n#gggRboPage .rbo-back:hover,#gggRboPage .rbo-button:hover{border-color:var(--rb-accent);box-shadow:0 0 22px var(--rb-glow)}\r\n#gggRboPage .rbo-title{margin:0;font-size:clamp(20px,2vw,30px);letter-spacing:-.035em}\r\n#gggRboPage .rbo-subtitle{display:block;color:#91aabd;font-size:12px;margin-top:3px}\r\n#gggRboPage .rbo-status{display:flex;align-items:center;gap:8px;color:#a9bfd0;font-size:11px;white-space:nowrap}\r\n#gggRboPage .rbo-statusDot{width:8px;height:8px;border-radius:50%;background:#61edc0;box-shadow:0 0 12px #61edc0}\r\n#gggRboPage .rbo-paths{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:18px 0}\r\n#gggRboPage .rbo-path{position:relative;min-height:112px;padding:16px;text-align:left;border:1px solid rgba(132,216,255,.17);border-radius:20px;background:linear-gradient(145deg,rgba(17,35,55,.96),rgba(6,14,27,.98));overflow:hidden}\r\n#gggRboPage .rbo-path:after{content:\"\";position:absolute;width:140px;height:140px;right:-70px;top:-70px;border-radius:50%;background:var(--path-color);opacity:.13;filter:blur(10px)}\r\n#gggRboPage .rbo-path[aria-pressed=true]{border-color:var(--path-color);box-shadow:inset 0 -3px var(--path-color),0 0 25px color-mix(in srgb,var(--path-color) 18%,transparent)}\r\n#gggRboPage .rbo-pathNumber{display:block;color:var(--path-color);font-size:10px;font-weight:900;letter-spacing:.15em;text-transform:uppercase}\r\n#gggRboPage .rbo-path strong{display:block;margin-top:9px;font-size:16px;line-height:1.2}\r\n#gggRboPage .rbo-path small{display:block;margin-top:6px;color:#98adbe;font-size:11px;line-height:1.4}\r\n#gggRboPage .rbo-workspace{display:grid;grid-template-columns:minmax(0,1fr) 370px;gap:18px;align-items:start}\r\n#gggRboPage .rbo-browser{min-width:0}\r\n#gggRboPage .rbo-browserHead{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px}\r\n#gggRboPage .rbo-browserHead h3{margin:0;font-size:17px}\r\n#gggRboPage .rbo-browserHead p{margin:5px 0 0;color:#94aabd;font-size:12px;line-height:1.5;max-width:760px}\r\n#gggRboPage .rbo-count{padding:6px 10px;border:1px solid rgba(121,222,255,.22);border-radius:999px;color:var(--rb-accent);font-size:10px;font-weight:900;white-space:nowrap}\r\n#gggRboPage .rbo-filters{display:flex;gap:7px;overflow:auto;padding:2px 2px 13px;scrollbar-width:thin}\r\n#gggRboPage .rbo-filter{white-space:nowrap;padding:9px 13px;border:1px solid #2a4059;border-radius:999px;background:#0b1728;font-size:12px}\r\n#gggRboPage .rbo-filter[aria-pressed=true]{color:#04131b;background:var(--rb-accent);border-color:var(--rb-accent);font-weight:850}\r\n#gggRboPage .rbo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}\r\n#gggRboPage .rbo-card{position:relative;min-width:0;border:1px solid rgba(126,204,240,.16);border-radius:20px;background:linear-gradient(150deg,#122238,#081321);overflow:hidden;transition:.2s ease}\r\n#gggRboPage .rbo-card:hover{transform:translateY(-2px);border-color:rgba(117,234,255,.48)}\r\n#gggRboPage .rbo-card.is-selected{border-color:var(--rb-accent);box-shadow:0 0 24px var(--rb-glow)}\r\n#gggRboPage .rbo-image{height:176px;background:linear-gradient(135deg,#162b42,#0a1728);position:relative;overflow:hidden}\r\n#gggRboPage .rbo-image img{width:100%;height:100%;object-fit:cover}\r\n#gggRboPage .rbo-imageFallback{height:100%;display:grid;place-items:center;color:var(--rb-accent);font-size:15px;font-weight:900;letter-spacing:.09em}\r\n#gggRboPage .rbo-badge{position:absolute;top:12px;left:12px;padding:6px 9px;border:1px solid rgba(255,255,255,.2);border-radius:999px;background:rgba(3,11,20,.82);backdrop-filter:blur(8px);font-size:9px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}\r\n#gggRboPage .rbo-cardBody{padding:15px}\r\n#gggRboPage .rbo-kicker{color:var(--rb-accent);font-size:10px;font-weight:900;letter-spacing:.1em;text-transform:uppercase}\r\n#gggRboPage .rbo-card h4{margin:7px 0 5px;font-size:17px;line-height:1.3}\r\n#gggRboPage .rbo-location{color:#90a9bc;font-size:11px}\r\n#gggRboPage .rbo-meta{display:flex;flex-wrap:wrap;gap:5px;margin:11px 0}\r\n#gggRboPage .rbo-meta span{padding:5px 7px;border:1px solid rgba(129,201,236,.18);border-radius:8px;color:#c5d6e2;font-size:10px}\r\n#gggRboPage .rbo-description{color:#a9bece;font-size:12px;line-height:1.55;white-space:pre-line}\r\n#gggRboPage .rbo-details{margin:10px 0;font-size:12px;color:#c9d8e3}\r\n#gggRboPage .rbo-details summary{cursor:pointer;color:#dbe8f1}\r\n#gggRboPage .rbo-priceRow{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:13px}\r\n#gggRboPage .rbo-price strong{display:block;font-size:14px}\r\n#gggRboPage .rbo-price small{display:block;color:#8099ad;font-size:9px;margin-top:2px}\r\n#gggRboPage .rbo-pick{border:0;border-radius:11px;background:var(--rb-accent);color:#05141c;padding:10px 12px;font-size:11px;font-weight:900}\r\n#gggRboPage .rbo-card.is-selected .rbo-pick{color:#eafaff;background:#173148;border:1px solid var(--rb-accent)}\r\n#gggRboPage .rbo-notice{grid-column:1\/-1;padding:24px;border:1px dashed rgba(123,213,255,.28);border-radius:18px;background:rgba(11,24,40,.72);color:#a8bdcd;font-size:13px;line-height:1.6;text-align:center}\r\n#gggRboPage .rbo-plan{position:sticky;top:12px;border:1px solid rgba(127,218,255,.23);border-radius:22px;background:linear-gradient(155deg,#101f33,#07111e);box-shadow:0 18px 50px rgba(0,0,0,.32);overflow:hidden}\r\n#gggRboPage .rbo-planHead{padding:17px;border-bottom:1px solid rgba(126,214,255,.15)}\r\n#gggRboPage .rbo-planHead h3{margin:0;font-size:18px}\r\n#gggRboPage .rbo-planHead p{margin:5px 0 0;color:#8da5b7;font-size:11px}\r\n#gggRboPage .rbo-planBody{padding:14px;max-height:calc(100vh - 330px);overflow:auto}\r\n#gggRboPage .rbo-emptyPlan{padding:18px;border:1px dashed #29435c;border-radius:14px;color:#819caf;font-size:12px;line-height:1.6}\r\n#gggRboPage .rbo-line{display:grid;grid-template-columns:48px 1fr auto;gap:9px;align-items:center;padding:8px;margin-bottom:7px;border:1px solid rgba(127,204,239,.14);border-radius:12px;background:#102036}\r\n#gggRboPage .rbo-line img,#gggRboPage .rbo-lineIcon{width:48px;height:48px;border-radius:9px;object-fit:cover}\r\n#gggRboPage .rbo-lineIcon{display:grid;place-items:center;background:#203951;color:var(--rb-accent);font-size:10px;font-weight:900}\r\n#gggRboPage .rbo-line strong{display:block;font-size:11px;line-height:1.35}\r\n#gggRboPage .rbo-line small{display:block;color:#829caf;font-size:9px;margin-top:3px}\r\n#gggRboPage .rbo-remove{border:0;background:transparent;color:#a8bfd0;font-size:17px;padding:5px}\r\n#gggRboPage .rbo-form{padding:0 14px 14px}\r\n#gggRboPage .rbo-formGrid{display:grid;grid-template-columns:1fr 90px;gap:8px}\r\n#gggRboPage .rbo-form label{display:block;color:#9bb0c1;font-size:10px;margin-top:9px}\r\n#gggRboPage .rbo-form input,#gggRboPage .rbo-form textarea{width:100%;margin-top:5px;padding:10px;border:1px solid #304a63;border-radius:9px;background:#111f32;color:#fff;color-scheme:dark}\r\n#gggRboPage .rbo-form textarea{min-height:67px;resize:vertical}\r\n#gggRboPage .rbo-modeRow{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:6px}\r\n#gggRboPage .rbo-mode{padding:9px;border:1px solid #304a63;border-radius:9px;background:#111f32;font-size:10px}\r\n#gggRboPage .rbo-mode[aria-pressed=true]{color:#03141a;background:var(--rb-accent);border-color:var(--rb-accent);font-weight:900}\r\n#gggRboPage .rbo-continue{width:100%;margin-top:12px;border:0;border-radius:12px;padding:12px;background:linear-gradient(135deg,var(--rb-accent),#54a9ff);color:#03121a;font-weight:950}\r\n#gggRboPage .rbo-continue:disabled{opacity:.42;cursor:not-allowed}\r\n#gggRboPage .rbo-legal{margin:10px 0 0;color:#718a9d;font-size:9px;line-height:1.5}\r\n#gggRboPage .rbo-review{margin-top:10px;padding:11px;border:1px solid rgba(113,237,193,.26);border-radius:12px;background:rgba(43,126,98,.09);font-size:11px;line-height:1.5}\r\n#gggRboPage .rbo-review textarea{height:150px}\r\n#gggRboPage .rbo-reviewActions{display:flex;gap:7px;flex-wrap:wrap;margin-top:8px}\r\n#gggRboPage .rbo-reviewActions .rbo-button{font-size:10px;padding:8px 10px}\r\n#gggRboPage .rbo-mobileBar,#gggRboPage .rbo-closePlan{display:none}\r\n\r\n#gggRboPage .rbo-processFlag {\r\n  margin: 11px 0;\r\n  padding: 10px 11px;\r\n  border: 1px solid color-mix(\r\n    in srgb,\r\n    var(--rb-accent) 38%,\r\n    transparent\r\n  );\r\n  border-radius: 11px;\r\n  background: color-mix(\r\n    in srgb,\r\n    var(--rb-accent) 8%,\r\n    #081321\r\n  );\r\n  color: #dcecf5;\r\n  font-size: 11px;\r\n  line-height: 1.55;\r\n}\r\n\r\n#gggRboPage .rbo-processFlag strong {\r\n  display: block;\r\n  margin-bottom: 3px;\r\n  color: var(--rb-accent);\r\n  font-size: 11px;\r\n}\r\n\r\n#gggRboPage .rbo-depositAmount {\r\n  color: #ffcf7c;\r\n  font-weight: 900;\r\n}\r\n\r\n\/* RENT BEFORE OWNING \u2014 MY REQUESTS *\/\r\n\r\n#gggRboPage .rbo-myRequests {\r\n  margin-top: 16px;\r\n  padding: 14px;\r\n  border: 1px solid rgba(117, 234, 255, 0.2);\r\n  border-radius: 18px;\r\n  background: rgba(7, 17, 30, 0.88);\r\n}\r\n\r\n#gggRboPage .rbo-myRequestsHead {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  gap: 10px;\r\n  margin-bottom: 11px;\r\n}\r\n\r\n#gggRboPage .rbo-myRequestsHead h3 {\r\n  margin: 0;\r\n  font-size: 16px;\r\n}\r\n\r\n#gggRboPage .rbo-myRequestsHead button {\r\n  padding: 7px 10px;\r\n  border: 1px solid #294c64;\r\n  border-radius: 9px;\r\n  color: #bdefff;\r\n  background: #0c1d2d;\r\n  font-size: 10px;\r\n}\r\n\r\n#gggRboPage .rbo-requestList {\r\n  display: grid;\r\n  gap: 10px;\r\n}\r\n\r\n#gggRboPage .rbo-requestCard {\r\n  padding: 12px;\r\n  border: 1px solid rgba(125, 215, 255, 0.17);\r\n  border-radius: 14px;\r\n  background: linear-gradient(\r\n    145deg,\r\n    rgba(16, 34, 54, 0.96),\r\n    rgba(7, 17, 30, 0.98)\r\n  );\r\n}\r\n\r\n#gggRboPage .rbo-requestTop {\r\n  display: flex;\r\n  align-items: flex-start;\r\n  justify-content: space-between;\r\n  gap: 10px;\r\n}\r\n\r\n#gggRboPage .rbo-requestTop strong {\r\n  display: block;\r\n  color: #ffffff;\r\n  font-size: 12px;\r\n}\r\n\r\n#gggRboPage .rbo-requestId {\r\n  display: block;\r\n  margin-top: 3px;\r\n  color: #718da1;\r\n  font-size: 8px;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n#gggRboPage .rbo-requestStatus {\r\n  padding: 5px 8px;\r\n  border: 1px solid rgba(117, 234, 255, 0.3);\r\n  border-radius: 999px;\r\n  color: #7cecff;\r\n  background: rgba(117, 234, 255, 0.06);\r\n  font-size: 8px;\r\n  font-weight: 900;\r\n  text-transform: uppercase;\r\n  white-space: nowrap;\r\n}\r\n\r\n#gggRboPage .rbo-requestFacts {\r\n  display: grid;\r\n  grid-template-columns: 1fr 1fr;\r\n  gap: 7px;\r\n  margin-top: 10px;\r\n}\r\n\r\n#gggRboPage .rbo-requestFact {\r\n  padding: 8px;\r\n  border: 1px solid rgba(123, 200, 236, 0.12);\r\n  border-radius: 9px;\r\n  background: rgba(4, 13, 23, 0.65);\r\n}\r\n\r\n#gggRboPage .rbo-requestFact span {\r\n  display: block;\r\n  color: #7894a8;\r\n  font-size: 8px;\r\n  font-weight: 800;\r\n  text-transform: uppercase;\r\n}\r\n\r\n#gggRboPage .rbo-requestFact b {\r\n  display: block;\r\n  margin-top: 3px;\r\n  color: #e9faff;\r\n  font-size: 10px;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n#gggRboPage .rbo-adminMessage {\r\n  margin-top: 9px;\r\n  padding: 9px;\r\n  border-left: 3px solid #72eaff;\r\n  border-radius: 8px;\r\n  color: #bed1dd;\r\n  background: rgba(114, 234, 255, 0.05);\r\n  font-size: 10px;\r\n  line-height: 1.5;\r\n}\r\n\r\n#gggRboPage .rbo-acceptDates {\r\n  width: 100%;\r\n  margin-top: 10px;\r\n  padding: 10px;\r\n  border: 0;\r\n  border-radius: 10px;\r\n  color: #04141b;\r\n  background: linear-gradient(135deg, #72eaff, #72efbd);\r\n  font-size: 11px;\r\n  font-weight: 950;\r\n}\r\n\r\n@media (max-width: 560px) {\r\n  #gggRboPage .rbo-requestTop {\r\n    display: block;\r\n  }\r\n\r\n  #gggRboPage .rbo-requestStatus {\r\n    display: inline-block;\r\n    margin-top: 7px;\r\n  }\r\n\r\n  #gggRboPage .rbo-requestFacts {\r\n    grid-template-columns: 1fr;\r\n  }\r\n}\r\n\r\n@media(max-width:920px){\r\n #gggRboPage .rbo-shell{padding:12px 10px 100px}\r\n #gggRboPage .rbo-status{display:none}\r\n #gggRboPage .rbo-paths{grid-template-columns:1fr;gap:7px}\r\n #gggRboPage .rbo-path{min-height:auto;padding:12px 14px}\r\n #gggRboPage .rbo-path small{display:none}\r\n #gggRboPage .rbo-workspace{display:block}\r\n #gggRboPage .rbo-plan{display:none;position:fixed;inset:10px 10px 76px;z-index:10100;overflow:auto}\r\n #gggRboPage .rbo-plan.is-open{display:block}\r\n #gggRboPage .rbo-planBody{max-height:none}\r\n #gggRboPage .rbo-closePlan{display:block;float:right}\r\n #gggRboPage .rbo-mobileBar{display:flex;position:fixed;left:10px;right:10px;bottom:10px;z-index:10099;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid rgba(122,225,255,.35);border-radius:15px;background:rgba(7,18,31,.96);box-shadow:0 -10px 35px rgba(0,0,0,.42)}\r\n #gggRboPage .rbo-mobileBar span{font-size:11px;color:#a8bdcd}\r\n}\r\n@media(max-width:560px){#gggRboPage .rbo-grid{grid-template-columns:1fr}#gggRboPage .rbo-top{align-items:flex-start}#gggRboPage .rbo-image{height:164px}}\r\n@media(prefers-reduced-motion:reduce){#gggRboPage *{scroll-behavior:auto!important;transition:none!important}}\r\n<\/style>\r\n\r\n<script id=\"gggRentBeforeOwningV2\">\r\n(function(){\r\n 'use strict';\r\n if(window.GGGRentBeforeOwningV2)return;\r\n\r\n const paths = {\r\n  rewards: {\r\n    group: 'Experience Rewards',\r\n    title: 'Presentation Rewards',\r\n    eyebrow: 'Presentation Required',\r\n    caption: 'Choose an Antioquia reward',\r\n    description:\r\n      'Choose a promotional experience or discount. To receive the selected reward, you must register for and complete a Bliss Club sales presentation online or in person. A refundable $9.99 USD attendance deposit is required.',\r\n    color: '#ffbf68',\r\n    options: [\r\n      'Antioquia Experience',\r\n      'Dining Experience',\r\n      'Boat Experience',\r\n      'Air Experience',\r\n      'Entertainment Experience'\r\n    ]\r\n  },\r\n\r\n  intervals: {\r\n    group: 'Property Intervals',\r\n    title: 'Property Use Intervals',\r\n    eyebrow: 'Right-to-Use',\r\n    caption: 'Reserve property time before owning',\r\n    description:\r\n      'Explore available 1, 3, 5 or 7-day right-to-use opportunities. This is separate from the presentation-reward program. Availability, included units, dates, price and agreement terms must be confirmed before payment.',\r\n    color: '#72eaff',\r\n    options: [\r\n      '1 Day',\r\n      '3 Days',\r\n      '5 Days',\r\n      '7 Days'\r\n    ]\r\n  },\r\n\r\n  citycard: {\r\n    group: 'City Card Products',\r\n    title: 'City Card Balances',\r\n    eyebrow: 'Prepaid Use',\r\n    caption: 'Purchase time and credits',\r\n    description:\r\n      'Purchase eligible accommodation days, air hours, water hours, driver hours, chef hours, dining credits or Bliss Coin Credits. Approved balances are issued to your City Card Wallet only after payment is verified.',\r\n    color: '#72efbd',\r\n    options: [\r\n      'Accommodation Days',\r\n      'Air Hours',\r\n      'Water Hours',\r\n      'Driver Hours',\r\n      'Chef Hours',\r\n      'Dining Credits',\r\n      'Bliss Coin Credits'\r\n    ]\r\n  }\r\n};\r\n\r\n const state = {\r\n  path: \"rewards\",\r\n  filter: \"\",\r\n  items: [],\r\n  selected: new Map(),\r\n  loading: false,\r\n  error: \"\",\r\n  planOpen: false,\r\n  review: false,\r\n\r\n  requestedArrival: \"\",\r\n  requestedDeparture: \"\",\r\n  guests: \"1\",\r\n  notes: \"\",\r\n  presentationMode: \"\",\r\n\r\n  submitting: false,\r\n  submission: null,\r\n  customerRequests: [],\r\nrequestsLoading: false,\r\nrequestsError: \"\"\r\n};\r\n let page=null,controller=null,requestVersion=0;\r\n const esc=v=>String(v??'').replace(\/[&<>\"']\/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\r\n const slug=v=>String(v||'').toLowerCase().trim().replace(\/&\/g,'and').replace(\/[^a-z0-9]+\/g,'-').replace(\/^-|-$\/g,'');\r\n const safeUrl=v=>{try{const u=new URL(String(v||''),location.href);return \/^https?:$\/.test(u.protocol)?u.href:''}catch(e){return ''}};\r\n const title=i=>i.name||i.title||i.label||'Unnamed Level 8 offer';\r\n const image=i=>safeUrl(i.imageUrl||i.image||i.photoUrl||'');\r\n const price=i=>i.price||i.blissCoinValue||'Price on request';\r\n const optionValue=i=>i.option||i.suboption||i.suboptionKey||i.suboption_key||'';\r\n const optionKey=i=>slug(optionValue(i));\r\n\r\n function pathOf(i){\r\n  const group=slug(i.group||i.category||'');\r\n  const aliases={\r\n   'experience-rewards':'rewards','rewards':'rewards','preview-promotion':'rewards','packages-opc':'rewards',\r\n   'property-intervals':'intervals','intervals':'intervals','interval':'intervals',\r\n   'city-card-products':'citycard','city-card':'citycard','citycard':'citycard','cards':'citycard',\r\n   'coins':'citycard','coin':'citycard'\r\n  };\r\n  return aliases[group]||'';\r\n }\r\n\r\n function eligible(i){\r\n  if(!i||typeof i!=='object'||Array.isArray(i))return false;\r\n  if(['hidden','inactive','draft','disabled'].includes(slug(i.status)))return false;\r\n  const section=slug(i.section);\r\n  const correctSection=['rent-before-owning','rent-before-buying','preview','the-preview'].includes(section);\r\n  return Boolean(pathOf(i)&&correctSection);\r\n }\r\n\r\n function itemKey(i){return pathOf(i)+'|'+String(i.id||i.host_id||title(i))+'|'+optionKey(i)}\r\n function currentItems(){return state.items.filter(i=>pathOf(i)===state.path)}\r\n function filters(){\r\n  const list=paths[state.path].options.map(label=>({label,key:slug(label)}));\r\n  currentItems().forEach(i=>{const key=optionKey(i);if(key&&!list.some(f=>f.key===key))list.push({key,label:String(optionValue(i)||'Other')})});\r\n  return list;\r\n }\r\n function ensureFilter(){\r\n  const list=filters();\r\n  if(!list.some(f=>f.key===state.filter)){\r\n   const available=list.find(f=>currentItems().some(i=>optionKey(i)===f.key));\r\n   state.filter=(available||list[0]||{key:''}).key;\r\n  }\r\n }\r\n\r\n function createPage(){\r\n  if(page)return true;\r\n  const detail=document.getElementById('fc4DetailPage');\r\n  if(!detail||!detail.parentElement)return false;\r\n  page=document.createElement('div');\r\n  page.id='gggRboPage';\r\n  page.className='fc4-page';\r\n  detail.parentElement.appendChild(page);\r\n  page.addEventListener('click',handleClick);\r\n  page.addEventListener(\"input\", event => {\r\n  const field = event.target.name;\r\n\r\n  if (field === \"requestedArrival\") {\r\n    state.requestedArrival = event.target.value;\r\n    state.review = false;\r\n    return;\r\n  }\r\n\r\n  if (field === \"requestedDeparture\") {\r\n    state.requestedDeparture = event.target.value;\r\n    state.review = false;\r\n    return;\r\n  }\r\n\r\n  if (field === \"guests\") {\r\n    state.guests = event.target.value;\r\n    state.review = false;\r\n    return;\r\n  }\r\n\r\n  if (field === \"notes\") {\r\n    state.notes = event.target.value;\r\n    state.review = false;\r\n  }\r\n});\r\n  return true;\r\n }\r\n\r\n function activate(){\r\n  document.querySelectorAll('.fc4-page').forEach(p=>p.classList.remove('active'));\r\n  page.classList.add('active');\r\n  const overlay=document.getElementById('fc4Overlay');\r\n  if(overlay)overlay.scrollTop=0;\r\n }\r\n\r\n async function load(){\r\n  const version=++requestVersion;\r\n  if(controller)controller.abort();\r\n  controller=new AbortController();\r\n  state.loading=true;state.error='';render();\r\n  const timer=setTimeout(()=>controller?.abort(),20000);\r\n  try{\r\n   const body=new URLSearchParams({action:'ggg_l8_get_inventory'});\r\n   const ajax=window.GGGL8ControlPanelConfig?.ajaxUrl||window.GGGL8ReservationsConfig?.ajaxUrl||'\/GGG\/wp-admin\/admin-ajax.php';\r\n   const response=await fetch(ajax,{method:'POST',credentials:'same-origin',body,signal:controller.signal});\r\n   const data=await response.json();\r\n   if(!response.ok||data.success!==true||!Array.isArray(data.data?.items))throw Error(data?.data?.message||'Level 8 inventory did not return its item list.');\r\n   if(version!==requestVersion)return;\r\n   const seen=new Set();\r\n   state.items=data.data.items.filter(eligible).filter(i=>{const key=itemKey(i);if(seen.has(key))return false;seen.add(key);return true});\r\n   ensureFilter();\r\n  }catch(error){\r\n   if(version===requestVersion)state.error=error.name==='AbortError'?'Inventory loading timed out. Select Retry.':error.message;\r\n  }finally{\r\n   clearTimeout(timer);\r\n   if(version===requestVersion){state.loading=false;render()}\r\n  }\r\n }\r\n\r\n function open() {\r\n  if (!createPage()) {\r\n    console.error(\r\n      \"Rent Before Owning: #fc4DetailPage was not found.\"\r\n    );\r\n\r\n    return;\r\n  }\r\n\r\n  activate();\r\n  render();\r\n  load();\r\n  loadCustomerRequests();\r\n}\r\n\r\n function exit(){\r\n  requestVersion++;\r\n  if(controller)controller.abort();\r\n  state.loading=false;\r\n  page?.classList.remove('active');\r\n  document.getElementById('fc4HomePage')?.classList.add('active');\r\n }\r\n\r\n function imageHtml(i){return image(i)?'<img decoding=\"async\" src=\"'+esc(image(i))+'\" alt=\"'+esc(title(i))+'\" loading=\"lazy\">':'<div class=\"rbo-imageFallback\">'+esc(paths[pathOf(i)].eyebrow)+'<\/div>'}\r\n function meta(i){return [i.availability,i.validity,i.quantity&&i.unit?i.quantity+' '+i.unit:'',i.intervalDays?i.intervalDays+' days':'',i.location].filter(Boolean).slice(0,4)}\r\n\r\nfunction processNotice(i) {\r\n  const itemPath = pathOf(i);\r\n\r\n  if (itemPath === 'rewards') {\r\n    return `\r\n      <div class=\"rbo-processFlag\">\r\n        <strong>Presentation and deposit required<\/strong>\r\n        This reward requires an online or in-person sales presentation\r\n        conducted by Bliss Club Comercializador. Bliss OPC collects a\r\n        refundable <span class=\"rbo-depositAmount\">$9.99 USD attendance\r\n        deposit<\/span>. After attendance is confirmed, the deposit is\r\n        returned and the qualifying reward is issued according to its\r\n        published conditions.\r\n      <\/div>\r\n    `;\r\n  }\r\n\r\n  if (itemPath === 'intervals') {\r\n    return `\r\n      <div class=\"rbo-processFlag\">\r\n        <strong>Property use before ownership<\/strong>\r\n        Offered through Bliss Club Comercializador. Availability, dates,\r\n        included units and agreement requirements must be confirmed before\r\n        payment. If permitted by the agreement, unused accommodation time\r\n        may be marketed for rental through Bliss Travel, operated by\r\n        Limitless for Marketing.\r\n      <\/div>\r\n    `;\r\n  }\r\n\r\n  if (itemPath === 'citycard') {\r\n    return `\r\n      <div class=\"rbo-processFlag\">\r\n        <strong>City Card Wallet purchase<\/strong>\r\n        Sold and fulfilled by Luxus. Purchased hours, days or credits are\r\n        added to your City Card Wallet after payment is verified.\r\n      <\/div>\r\n    `;\r\n  }\r\n\r\n  return '';\r\n}\r\n\r\n function detailText(i){return i.description||i.details||'Complete inclusions and conditions will appear here when entered in the Level 8 control panel.'}\r\n function legalDetail(i){\r\n  if(pathOf(i)==='rewards')return [i.presentationRequired&&'Presentation: '+i.presentationRequired,i.presentationModes&&'Format: '+i.presentationModes,i.attendanceDeposit&&'Deposit: '+i.attendanceDeposit,i.rewardExpiration&&'Expiration: '+i.rewardExpiration,i.rewardConditions].filter(Boolean);\r\n  if(pathOf(i)==='intervals')return [i.includedUnits&&'Included: '+i.includedUnits,i.rentalRights,i.terms].filter(Boolean);\r\n  return [i.balanceType&&'Balance: '+i.balanceType,i.redemption,i.terms].filter(Boolean);\r\n }\r\n function actionLabel(i, selected) {\r\n  if (selected) {\r\n    return 'Remove';\r\n  }\r\n\r\n  if (pathOf(i) === 'rewards') {\r\n    return 'Choose This Reward';\r\n  }\r\n\r\n  if (pathOf(i) === 'intervals') {\r\n    return 'Choose This Interval';\r\n  }\r\n\r\n  return 'Add to City Card';\r\n}\r\n\r\n function card(i) {\r\n  const key = itemKey(i);\r\n  const selected = state.selected.has(key);\r\n  const path = paths[pathOf(i)];\r\n\r\n  return `\r\n    <article class=\"rbo-card${selected ? ' is-selected' : ''}\">\r\n      <div class=\"rbo-image\">\r\n        ${imageHtml(i)}\r\n        <span class=\"rbo-badge\">${esc(path.eyebrow)}<\/span>\r\n      <\/div>\r\n\r\n      <div class=\"rbo-cardBody\">\r\n        <span class=\"rbo-kicker\">\r\n          ${esc(optionValue(i) || path.title)}\r\n        <\/span>\r\n\r\n        <h4>${esc(title(i))}<\/h4>\r\n\r\n        <div class=\"rbo-location\">\r\n          ${esc(i.location || i.providerType || path.title)}\r\n        <\/div>\r\n\r\n        <div class=\"rbo-meta\">\r\n          ${meta(i).map(value => `\r\n            <span>${esc(value)}<\/span>\r\n          `).join('')}\r\n        <\/div>\r\n\r\n        ${processNotice(i)}\r\n\r\n        <p class=\"rbo-description\">\r\n          ${esc(detailText(i))}\r\n        <\/p>\r\n\r\n        ${\r\n          legalDetail(i).length\r\n            ? `\r\n              <details class=\"rbo-details\">\r\n                <summary>Complete conditions and inclusions<\/summary>\r\n                ${legalDetail(i).map(value => `\r\n                  <p>${esc(value)}<\/p>\r\n                `).join('')}\r\n              <\/details>\r\n            `\r\n            : ''\r\n        }\r\n\r\n        <div class=\"rbo-priceRow\">\r\n          <div class=\"rbo-price\">\r\n            <strong>${esc(price(i))}<\/strong>\r\n            <small>\r\n              Availability and eligibility must be confirmed\r\n            <\/small>\r\n          <\/div>\r\n\r\n          <button\r\n            class=\"rbo-pick\"\r\n            data-pick=\"${esc(key)}\"\r\n            aria-pressed=\"${selected}\">\r\n            ${esc(actionLabel(i, selected))}\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/article>\r\n  `;\r\n}\r\n\r\n function line(i,key){return `<div class=\"rbo-line\">${image(i)?'<img decoding=\"async\" src=\"'+esc(image(i))+'\" alt=\"\">':'<div class=\"rbo-lineIcon\">'+esc(paths[pathOf(i)].eyebrow.slice(0,3))+'<\/div>'}<div><strong>${esc(title(i))}<\/strong><small>${esc(optionValue(i))} \u00b7 ${esc(price(i))}<\/small><\/div><button class=\"rbo-remove\" data-remove=\"${esc(key)}\" aria-label=\"Remove ${esc(title(i))}\">\u00d7<\/button><\/div>`}\r\n function requestText() {\r\n  return [\r\n    \"RENT BEFORE OWNING \u2014 CUSTOMER REQUEST\",\r\n    \"\",\r\n    \"This submission is a request for review. It is not a completed purchase, confirmed reservation, transfer of ownership or issuance of wallet balances.\",\r\n    \"\",\r\n    \"Requested arrival: \" +\r\n      (state.requestedArrival || \"Flexible \/ to confirm\"),\r\n\r\n    \"Requested departure: \" +\r\n      (state.requestedDeparture || \"Not supplied\"),\r\n\r\n    \"Guests: \" + state.guests,\r\n    \"\",\r\n\r\n    ...Array.from(state.selected.values()).map(item => {\r\n      return [\r\n        paths[pathOf(item)].title,\r\n        title(item),\r\n        optionValue(item),\r\n        \"Inventory ID: \" +\r\n          String(item.id || \"not supplied\"),\r\n        \"Published price: \" + price(item)\r\n      ].join(\" | \");\r\n    }),\r\n\r\n    \"\",\r\n    \"Presentation format: \" +\r\n      (\r\n        state.presentationMode === \"online\"\r\n          ? \"Online\"\r\n          : state.presentationMode === \"in_person\"\r\n            ? \"In person at Bliss Club\"\r\n            : \"Not applicable or not selected\"\r\n      ),\r\n\r\n    \"\",\r\n    \"Customer notes: \" +\r\n      (state.notes || \"None\"),\r\n\r\n    \"\",\r\n    \"BUSINESS RESPONSIBILITIES\",\r\n\r\n    \"Limitless for Marketing \/ Bliss Travel: marketing, discovery and customer referral.\",\r\n\r\n    \"Bliss OPC: presentation registration, $9.99 USD attendance deposit and promotional reward administration.\",\r\n\r\n    \"Bliss Club Comercializador: sales presentation, attendance confirmation and applicable property interval process.\",\r\n\r\n    \"Luxus: eligible City Card product sale and fulfillment.\",\r\n\r\n    \"\",\r\n    \"Please confirm availability, eligibility, total price, payment recipient, presentation requirements, cancellation terms and any required agreement before collecting final payment.\"\r\n  ].join(\"\\n\");\r\n}\r\n\r\nfunction continueButtonLabel() {\r\n  const selectedPaths = Array.from(\r\n    new Set(\r\n      Array.from(state.selected.values()).map(item => pathOf(item))\r\n    )\r\n  );\r\n\r\n  if (\r\n    selectedPaths.length === 1 &&\r\n    selectedPaths[0] === 'rewards'\r\n  ) {\r\n    return 'Continue to Presentation Registration';\r\n  }\r\n\r\n  if (\r\n    selectedPaths.length === 1 &&\r\n    selectedPaths[0] === 'intervals'\r\n  ) {\r\n    return 'Request Availability and Agreement';\r\n  }\r\n\r\n  if (\r\n    selectedPaths.length === 1 &&\r\n    selectedPaths[0] === 'citycard'\r\n  ) {\r\n    return 'Continue to City Card Checkout';\r\n  }\r\n\r\n  return 'Continue with Selected Processes';\r\n}\r\n\r\n function plan() {\r\n  const entries = Array.from(state.selected.entries());\r\n\r\n  const hasRewards = entries.some(\r\n    ([, item]) => pathOf(item) === 'rewards'\r\n  );\r\n\r\nconst hasIntervals = entries.some(\r\n  ([, item]) => pathOf(item) === \"intervals\"\r\n);\r\n\r\n  return `\r\n    <aside class=\"rbo-plan${state.planOpen ? ' is-open' : ''}\">\r\n      <div class=\"rbo-planHead\">\r\n        <button\r\n          class=\"rbo-button rbo-closePlan\"\r\n          data-action=\"close-plan\">\r\n          Close\r\n        <\/button>\r\n\r\n        <h3>My Selections<\/h3>\r\n\r\n        <p>\r\n          ${entries.length}\r\n          selection${entries.length === 1 ? '' : 's'}\r\n          \u00b7 No purchase has been completed\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"rbo-planBody\">\r\n        ${\r\n          entries.length\r\n            ? entries.map(([key, item]) => line(item, key)).join('')\r\n            : `\r\n              <div class=\"rbo-emptyPlan\">\r\n                Choose a presentation reward, property-use interval or\r\n                City Card product. Your selections will appear here.\r\n              <\/div>\r\n            `\r\n        }\r\n      <\/div>\r\n\r\n      <div class=\"rbo-form\">\r\n        ${\r\n  hasIntervals\r\n    ? `\r\n      <div class=\"rbo-formGrid\">\r\n        <label>\r\n          Requested arrival\r\n          <input\r\n            name=\"requestedArrival\"\r\n            type=\"date\"\r\n            value=\"${esc(state.requestedArrival)}\">\r\n        <\/label>\r\n\r\n        <label>\r\n          Requested departure\r\n          <input\r\n            name=\"requestedDeparture\"\r\n            type=\"date\"\r\n            value=\"${esc(state.requestedDeparture)}\">\r\n        <\/label>\r\n      <\/div>\r\n\r\n      <label>\r\n        Guests\r\n        <input\r\n          name=\"guests\"\r\n          type=\"number\"\r\n          min=\"1\"\r\n          max=\"100\"\r\n          value=\"${esc(state.guests)}\">\r\n      <\/label>\r\n    `\r\n    : `\r\n      <div class=\"rbo-formGrid\">\r\n        <label>\r\n          Preferred date\r\n          <input\r\n            name=\"requestedArrival\"\r\n            type=\"date\"\r\n            value=\"${esc(state.requestedArrival)}\">\r\n        <\/label>\r\n\r\n        <label>\r\n          Guests\r\n          <input\r\n            name=\"guests\"\r\n            type=\"number\"\r\n            min=\"1\"\r\n            max=\"100\"\r\n            value=\"${esc(state.guests)}\">\r\n        <\/label>\r\n      <\/div>\r\n    `\r\n}\r\n\r\n        ${\r\n          hasRewards\r\n            ? `\r\n              <label>\r\n                How will you attend the presentation?\r\n\r\n                <div class=\"rbo-modeRow\">\r\n                  <button\r\n                    class=\"rbo-mode\"\r\n                    data-mode=\"online\"\r\n                    type=\"button\"\r\n                    aria-pressed=\"${state.presentationMode === 'online'}\">\r\n                    Online\r\n                  <\/button>\r\n\r\n                  <button\r\n                    class=\"rbo-mode\"\r\n                    data-mode=\"in_person\"\r\n                    type=\"button\"\r\n                    aria-pressed=\"${state.presentationMode === 'in_person'}\">\r\n                    In Person at Bliss Club\r\n                  <\/button>\r\n                <\/div>\r\n              <\/label>\r\n            `\r\n            : ''\r\n        }\r\n\r\n        <label>\r\n          Notes\r\n          <textarea\r\n            name=\"notes\"\r\n            maxlength=\"3000\"\r\n            placeholder=\"Dates, number of guests or anything the representative should know.\"\r\n          >${esc(state.notes)}<\/textarea>\r\n        <\/label>\r\n\r\n        <button\r\n          class=\"rbo-continue\"\r\n          data-action=\"review\"\r\n          ${entries.length ? '' : 'disabled'}>\r\n          ${esc(continueButtonLabel())}\r\n        <\/button>\r\n\r\n        <p class=\"rbo-legal\">\r\n          Continuing saves your selections for the appropriate business\r\n          process. It does not complete a purchase, confirm availability,\r\n          transfer property rights or issue wallet balances.\r\n        <\/p>\r\n\r\n        ${\r\n          state.review\r\n            ? `\r\n              <div class=\"rbo-review\">\r\n                <strong>Confirm your information<\/strong>\r\n\r\n                <p>\r\n                  Check your selections, preferred date and presentation\r\n                  format before continuing.\r\n                <\/p>\r\n\r\n                <textarea readonly>${esc(requestText())}<\/textarea>\r\n\r\n                <div class=\"rbo-reviewActions\">\r\n                  <button\r\n                    class=\"rbo-button\"\r\n                    data-action=\"copy\"\r\n                    type=\"button\">\r\n                    Copy Selection Details\r\n                  <\/button>\r\n\r\n                  <button\r\n                    class=\"rbo-button\"\r\n                    data-action=\"submit\"\r\n                    type=\"button\"\r\n                    ${state.submitting ? 'disabled' : ''}>\r\n                    ${\r\n                      state.submitting\r\n                        ? 'Saving\u2026'\r\n                        : esc(continueButtonLabel())\r\n                    }\r\n                  <\/button>\r\n                <\/div>\r\n              <\/div>\r\n            `\r\n            : ''\r\n        }\r\n\r\n        ${submissionHtml()}\r\n\r\n${myRequestsHtml()}\r\n\r\n<div id=\"rboMessage\" role=\"status\"><\/div>\r\n      <\/div>\r\n    <\/aside>\r\n  `;\r\n }\r\n\r\n function submissionHtml() {\r\n  if (!state.submission) {\r\n    return '';\r\n  }\r\n\r\n  const requests = Array.isArray(state.submission.requests)\r\n    ? state.submission.requests\r\n    : [];\r\n\r\n  return `\r\n    <div class=\"rbo-review\">\r\n      <strong>Your selections were saved<\/strong>\r\n\r\n      ${requests.map(function(request) {\r\n        if (request.path === 'rewards') {\r\n          return `\r\n            <p>\r\n              <b>Presentation Reward<\/b><br>\r\n              Your presentation registration was created.\r\n\r\n              ${\r\n                request.next_url\r\n                  ? `\r\n                    <br>\r\n                    <a\r\n                      class=\"rbo-button\"\r\n                      href=\"${esc(safeUrl(request.next_url))}\"\r\n                      rel=\"noopener\">\r\n                      Pay $9.99 USD Attendance Deposit\r\n                    <\/a>\r\n                  `\r\n                  : `\r\n                    <br>\r\n                    The Bliss OPC deposit checkout has not been connected yet.\r\n                  `\r\n              }\r\n            <\/p>\r\n          `;\r\n        }\r\n\r\n        if (request.path === 'intervals') {\r\n          return `\r\n            <p>\r\n              <b>Property Use Interval<\/b><br>\r\n              Your availability request was sent. Bliss Club\r\n              Comercializador must confirm the dates, included units,\r\n              agreement requirements and payment options before you pay.\r\n            <\/p>\r\n          `;\r\n        }\r\n\r\n        if (request.path === 'citycard') {\r\n          return `\r\n            <p>\r\n              <b>City Card Purchase<\/b><br>\r\n              This product is sold and fulfilled by Luxus.\r\n\r\n              ${\r\n                request.next_url\r\n                  ? `\r\n                    <br>\r\n                    <a\r\n                      class=\"rbo-button\"\r\n                      href=\"${esc(safeUrl(request.next_url))}\"\r\n                      rel=\"noopener\">\r\n                      Continue to Secure Checkout\r\n                    <\/a>\r\n                  `\r\n                  : `\r\n                    <br>\r\n                    This product\u2019s checkout has not been connected yet.\r\n                  `\r\n              }\r\n            <\/p>\r\n          `;\r\n        }\r\n\r\n        return '';\r\n      }).join('')}\r\n    <\/div>\r\n  `;\r\n}\r\n\r\nfunction readableRequestStatus(status) {\r\n  return String(status || \"submitted\")\r\n    .replaceAll(\"_\", \" \");\r\n}\r\n\r\nfunction requestItemNames(request) {\r\n  if (\r\n    !Array.isArray(request.items) ||\r\n    !request.items.length\r\n  ) {\r\n    return \"Saved Level 8 selection\";\r\n  }\r\n\r\n  return request.items\r\n    .map(item => item.name || \"Unnamed selection\")\r\n    .join(\", \");\r\n}\r\n\r\nfunction requestFact(label, value) {\r\n  if (\r\n    value === undefined ||\r\n    value === null ||\r\n    value === \"\"\r\n  ) {\r\n    return \"\";\r\n  }\r\n\r\n  return `\r\n    <div class=\"rbo-requestFact\">\r\n      <span>${esc(label)}<\/span>\r\n      <b>${esc(value)}<\/b>\r\n    <\/div>\r\n  `;\r\n}\r\n\r\nfunction customerRequestCard(request) {\r\n  const requestedDates = [\r\n    request.requested_arrival ||\r\n      request.preferred_date,\r\n    request.requested_departure\r\n  ].filter(Boolean).join(\" \u2192 \");\r\n\r\n  const confirmedDates = [\r\n    request.confirmed_arrival,\r\n    request.confirmed_departure\r\n  ].filter(Boolean).join(\" \u2192 \");\r\n\r\n  const alternativeDates = [\r\n    request.alternative_arrival,\r\n    request.alternative_departure\r\n  ].filter(Boolean).join(\" \u2192 \");\r\n\r\n  const canAcceptAlternative =\r\n    request.path === \"intervals\" &&\r\n    request.status ===\r\n      \"alternative_dates_offered\" &&\r\n    request.alternative_arrival &&\r\n    request.alternative_departure;\r\n\r\n  return `\r\n    <article class=\"rbo-requestCard\">\r\n      <div class=\"rbo-requestTop\">\r\n        <div>\r\n          <strong>\r\n            ${esc(requestItemNames(request))}\r\n          <\/strong>\r\n\r\n          <span class=\"rbo-requestId\">\r\n            ${esc(request.id || \"\")}\r\n          <\/span>\r\n        <\/div>\r\n\r\n        <span class=\"rbo-requestStatus\">\r\n          ${esc(\r\n            readableRequestStatus(request.status)\r\n          )}\r\n        <\/span>\r\n      <\/div>\r\n\r\n      <div class=\"rbo-requestFacts\">\r\n        ${requestFact(\r\n          \"Program\",\r\n          request.path === \"rewards\"\r\n            ? \"Preview Reward \u00b7 Bliss OPC\"\r\n            : request.path === \"intervals\"\r\n              ? \"Property Interval \u00b7 Bliss VOA\"\r\n              : \"City Card \u00b7 Bliss VOA\"\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Requested Dates\",\r\n          requestedDates\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Alternative Dates\",\r\n          alternativeDates\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Confirmed Dates\",\r\n          confirmedDates\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Guests\",\r\n          request.guests\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Presentation\",\r\n          request.presentation_mode\r\n            ? readableRequestStatus(\r\n                request.presentation_mode\r\n              )\r\n            : \"\"\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Presentation Date\",\r\n          request.presentation_date\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Approved Total\",\r\n          request.approved_total\r\n            ? \"$\" + request.approved_total\r\n            : \"\"\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Pay 50%\",\r\n          request.half_amount\r\n            ? \"$\" + request.half_amount\r\n            : \"\"\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Amount Paid\",\r\n          request.amount_paid\r\n            ? \"$\" + request.amount_paid\r\n            : \"\"\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Balance Due\",\r\n          request.balance_due\r\n            ? \"$\" + request.balance_due\r\n            : \"\"\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Payment\",\r\n          request.payment_unlocked\r\n            ? \"Available\"\r\n            : \"Not available yet\"\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Coupon Code\",\r\n          request.coupon_code\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"Deposit Refund\",\r\n          request.refund_status\r\n            ? readableRequestStatus(\r\n                request.refund_status\r\n              )\r\n            : \"\"\r\n        )}\r\n\r\n        ${requestFact(\r\n          \"City Card Wallet\",\r\n          request.wallet_status\r\n            ? readableRequestStatus(\r\n                request.wallet_status\r\n              )\r\n            : \"\"\r\n        )}\r\n      <\/div>\r\n\r\n      ${\r\n        request.customer_message\r\n          ? `\r\n            <div class=\"rbo-adminMessage\">\r\n              <strong>Administration update<\/strong>\r\n              <br>\r\n              ${esc(request.customer_message)}\r\n            <\/div>\r\n          `\r\n          : \"\"\r\n      }\r\n\r\n      ${\r\n        canAcceptAlternative\r\n          ? `\r\n            <button\r\n              class=\"rbo-acceptDates\"\r\n              type=\"button\"\r\n              data-accept-alternative=\"${esc(\r\n                request.id\r\n              )}\"\r\n            >\r\n              Accept Alternative Dates\r\n            <\/button>\r\n          `\r\n          : \"\"\r\n      }\r\n    <\/article>\r\n  `;\r\n}\r\n\r\nfunction myRequestsHtml() {\r\n  if (state.requestsLoading) {\r\n    return `\r\n      <section class=\"rbo-myRequests\">\r\n        <div class=\"rbo-myRequestsHead\">\r\n          <h3>My Requests<\/h3>\r\n        <\/div>\r\n\r\n        <div class=\"rbo-emptyPlan\">\r\n          Loading your requests...\r\n        <\/div>\r\n      <\/section>\r\n    `;\r\n  }\r\n\r\n  if (state.requestsError) {\r\n    return `\r\n      <section class=\"rbo-myRequests\">\r\n        <div class=\"rbo-myRequestsHead\">\r\n          <h3>My Requests<\/h3>\r\n\r\n          <button\r\n            type=\"button\"\r\n            data-refresh-my-requests\r\n          >\r\n            Retry\r\n          <\/button>\r\n        <\/div>\r\n\r\n        <div class=\"rbo-emptyPlan\">\r\n          ${esc(state.requestsError)}\r\n        <\/div>\r\n      <\/section>\r\n    `;\r\n  }\r\n\r\n  return `\r\n    <section class=\"rbo-myRequests\">\r\n      <div class=\"rbo-myRequestsHead\">\r\n        <h3>My Requests<\/h3>\r\n\r\n        <button\r\n          type=\"button\"\r\n          data-refresh-my-requests\r\n        >\r\n          Refresh\r\n        <\/button>\r\n      <\/div>\r\n\r\n      <div class=\"rbo-requestList\">\r\n        ${\r\n          state.customerRequests.length\r\n            ? state.customerRequests\r\n                .map(customerRequestCard)\r\n                .join(\"\")\r\n            : `\r\n              <div class=\"rbo-emptyPlan\">\r\n                You do not have any saved Rent Before\r\n                Owning requests yet.\r\n              <\/div>\r\n            `\r\n        }\r\n      <\/div>\r\n    <\/section>\r\n  `;\r\n}\r\n\r\nasync function customerWorkflowPost(\r\n  action,\r\n  data = {}\r\n) {\r\n  const body = new FormData();\r\n\r\n  body.append(\"action\", action);\r\n\r\n  body.append(\r\n    \"nonce\",\r\n    window.GGGL8DataEngineConfig?.nonce ||\r\n    window.GGGL8ControlPanelConfig?.nonce ||\r\n    \"\"\r\n  );\r\n\r\n  Object.entries(data).forEach(\r\n    ([key, value]) => {\r\n      body.append(key, value);\r\n    }\r\n  );\r\n\r\n  const ajax =\r\n    window.GGGL8DataEngineConfig?.ajaxUrl ||\r\n    window.GGGL8ControlPanelConfig?.ajaxUrl ||\r\n    \"\/GGG\/wp-admin\/admin-ajax.php\";\r\n\r\n  const response = await fetch(ajax, {\r\n    method: \"POST\",\r\n    credentials: \"same-origin\",\r\n    body\r\n  });\r\n\r\n  const result = await response.json();\r\n\r\n  if (\r\n    !response.ok ||\r\n    result?.success !== true\r\n  ) {\r\n    throw new Error(\r\n      result?.data?.message ||\r\n      \"The customer request could not be loaded.\"\r\n    );\r\n  }\r\n\r\n  return result.data || {};\r\n}\r\n\r\nasync function loadCustomerRequests() {\r\n  if (state.requestsLoading) {\r\n    return;\r\n  }\r\n\r\n  state.requestsLoading = true;\r\n  state.requestsError = \"\";\r\n\r\n  render();\r\n\r\n  try {\r\n    const data = await customerWorkflowPost(\r\n      \"ggg_l8_get_my_path_requests\"\r\n    );\r\n\r\n    state.customerRequests =\r\n      Array.isArray(data.requests)\r\n        ? data.requests\r\n        : [];\r\n  } catch (error) {\r\n    state.customerRequests = [];\r\n    state.requestsError = error.message;\r\n  } finally {\r\n    state.requestsLoading = false;\r\n    render();\r\n  }\r\n}\r\n\r\nasync function acceptAlternativeDates(requestId) {\r\n  if (!requestId) {\r\n    return;\r\n  }\r\n\r\n  if (\r\n    !confirm(\r\n      \"Accept the alternative arrival and departure dates?\"\r\n    )\r\n  ) {\r\n    return;\r\n  }\r\n\r\n  try {\r\n    const data = await customerWorkflowPost(\r\n      \"ggg_l8_accept_alternative_dates\",\r\n      {\r\n        id: requestId\r\n      }\r\n    );\r\n\r\n    state.submission = {\r\n      requests: data.request\r\n        ? [data.request]\r\n        : []\r\n    };\r\n\r\n    await loadCustomerRequests();\r\n  } catch (error) {\r\n    state.requestsError = error.message;\r\n    render();\r\n  }\r\n}\r\n\r\n async function submitRequest(){\r\n  if(state.submitting||!state.selected.size)return;\r\n  const hasRewards=Array.from(state.selected.values()).some(i=>pathOf(i)==='rewards');\r\n  if(hasRewards&&!['online','in_person'].includes(state.presentationMode)){\r\n   page.querySelector('#rboMessage').textContent='Choose online or in-person presentation.';\r\n   return;\r\n  }\r\n  state.submitting=true;render();\r\n  try{\r\n   const body=new FormData();\r\n   body.append('action','ggg_l8_create_path_request');\r\n   body.append('nonce',window.GGGL8DataEngineConfig?.nonce||window.GGGL8ControlPanelConfig?.nonce||'');\r\n   body.append('item_ids',JSON.stringify(Array.from(state.selected.values()).map(i=>String(i.id||''))));\r\n   body.append(\r\n  \"requested_arrival\",\r\n  state.requestedArrival\r\n);\r\n\r\nbody.append(\r\n  \"requested_departure\",\r\n  state.requestedDeparture\r\n);\r\n\r\nbody.append(\r\n  \"preferred_date\",\r\n  state.requestedArrival\r\n);\r\n   body.append('guests',state.guests);\r\n   body.append('notes',state.notes);\r\n   body.append('presentation_mode',state.presentationMode);\r\n   const ajax=window.GGGL8DataEngineConfig?.ajaxUrl||window.GGGL8ControlPanelConfig?.ajaxUrl||'\/GGG\/wp-admin\/admin-ajax.php';\r\n   const response=await fetch(ajax,{method:'POST',credentials:'same-origin',body});\r\n   const result=await response.json();\r\n   if(!response.ok||result.success!==true)throw Error(result?.data?.message||'The Level 8 request could not be saved.');\r\n   state.submission = result.data || {};\r\nstate.review = false;\r\n\r\nawait loadCustomerRequests();\r\n  }catch(error){\r\n   state.submission=null;\r\n   setTimeout(()=>{const message=page?.querySelector('#rboMessage');if(message)message.textContent=error.message},0);\r\n  }finally{state.submitting=false;render()}\r\n }\r\n\r\n function render(){\r\n  if(!page)return;\r\n  ensureFilter();\r\n  const path=paths[state.path];\r\n  page.style.setProperty('--rb-accent',path.color);\r\n  page.style.setProperty('--rb-glow',`color-mix(in srgb,${path.color} 22%,transparent)`);\r\n  const visible=currentItems().filter(i=>optionKey(i)===state.filter);\r\n  page.innerHTML=`<div class=\"rbo-shell\"><header class=\"rbo-top\"><div class=\"rbo-topLeft\"><button class=\"rbo-back\" data-action=\"back\">\u2190 Back<\/button><div><h2 class=\"rbo-title\">Rent Before Owning<\/h2><span class=\"rbo-subtitle\">Explore. Build. Review. Continue with the correct Level 8 process.<\/span><\/div><\/div><div class=\"rbo-status\"><span class=\"rbo-statusDot\"><\/span>Connected Level 8 inventory<\/div><\/header><nav class=\"rbo-paths\" aria-label=\"Rent Before Owning paths\">${Object.entries(paths).map(([key,p],index)=>`<button class=\"rbo-path\" data-path=\"${key}\" aria-pressed=\"${key===state.path}\" style=\"--path-color:${p.color}\"><span class=\"rbo-pathNumber\">Path 0${index+1}<\/span><strong>${esc(p.title)}<\/strong><small>${esc(p.caption)}<\/small><\/button>`).join('')}<\/nav>\r\n\r\n\r\n\r\n<div class=\"rbo-workspace\"><section class=\"rbo-browser\"><header class=\"rbo-browserHead\"><div><h3>${esc(path.caption)}<\/h3><p>${esc(path.description)}<\/p><\/div><span class=\"rbo-count\">${currentItems().length} published<\/span><\/header><div class=\"rbo-filters\">${filters().map(f=>`<button class=\"rbo-filter\" data-filter=\"${esc(f.key)}\" aria-pressed=\"${f.key===state.filter}\">${esc(f.label)}<\/button>`).join('')}<\/div><div class=\"rbo-grid\">${state.loading?'<div class=\"rbo-notice\">Loading connected Level 8 inventory\u2026<\/div>':state.error?'<div class=\"rbo-notice\">'+esc(state.error)+'<br><button class=\"rbo-button\" data-action=\"retry\">Retry inventory<\/button><\/div>':visible.length?visible.map(card).join(''):'<div class=\"rbo-notice\">No active offer has been assigned to this option in the Level 8 control panel.<\/div>'}<\/div><\/section>${plan()}<\/div><div class=\"rbo-mobileBar\"><span>${state.selected.size} selected<\/span><button class=\"rbo-button\" data-action=\"open-plan\">View My Selections<\/button><\/div><\/div>`;\r\n }\r\n\r\n function setPath(key){if(!paths[key])return;state.path=key;state.filter='';state.planOpen=false;state.review=false;ensureFilter();render()}\r\n async function handleClick(event){\r\n  const button=event.target.closest('button');if(!button)return;\r\n\r\nif (button.hasAttribute(\"data-refresh-my-requests\")) {\r\n  await loadCustomerRequests();\r\n  return;\r\n}\r\n\r\nif (button.hasAttribute(\"data-accept-alternative\")) {\r\n  await acceptAlternativeDates(\r\n    button.dataset.acceptAlternative\r\n  );\r\n\r\n  return;\r\n}\r\n\r\n  if(button.dataset.path){setPath(button.dataset.path);return}\r\n  if(button.dataset.mode){state.presentationMode=button.dataset.mode;state.review=false;render();return}\r\n  if(button.hasAttribute('data-filter')){state.filter=button.dataset.filter;render();return}\r\n  if(button.dataset.pick){const key=button.dataset.pick;if(state.selected.has(key))state.selected.delete(key);else{const item=state.items.find(i=>itemKey(i)===key);if(item)state.selected.set(key,item)}state.review=false;render();return}\r\n  if(button.dataset.remove){state.selected.delete(button.dataset.remove);state.review=false;render();return}\r\n  switch(button.dataset.action){\r\n   case'back':exit();break;\r\n   case'retry':load();break;\r\n   case'open-plan':state.planOpen=true;render();break;\r\n   case'close-plan':state.planOpen=false;render();break;\r\n   case'review':\r\n    if(!state.selected.size)return;\r\n\r\nconst includesInterval =\r\n  Array.from(state.selected.values())\r\n    .some(item => pathOf(item) === \"intervals\");\r\n\r\nif (\r\n  includesInterval &&\r\n  (\r\n    !state.requestedArrival ||\r\n    !state.requestedDeparture\r\n  )\r\n) {\r\n  page.querySelector(\"#rboMessage\").textContent =\r\n    \"Choose an arrival and departure date for the property interval.\";\r\n\r\n  return;\r\n}\r\n\r\nif (\r\n  includesInterval &&\r\n  state.requestedDeparture <= state.requestedArrival\r\n) {\r\n  page.querySelector(\"#rboMessage\").textContent =\r\n    \"The departure date must be after the arrival date.\";\r\n\r\n  return;\r\n}\r\n\r\n    if(!Number.isInteger(Number(state.guests))||Number(state.guests)<1||Number(state.guests)>100){page.querySelector('#rboMessage').textContent='Enter a guest count from 1 to 100.';return}\r\n    state.review=true;state.planOpen=true;render();page.querySelector('.rbo-review')?.scrollIntoView({block:'nearest'});break;\r\n   case'copy':\r\n    try{await navigator.clipboard.writeText(requestText());page.querySelector('#rboMessage').textContent='Request copied. It has not been submitted.'}catch(e){page.querySelector('#rboMessage').textContent='Select and copy the request text manually.'}break;\r\n   case'submit':await submitRequest();break;\r\n  }\r\n }\r\n\r\n window.addEventListener('click',function(event){\r\n  if(event.target.closest?.('#fc4FlexibleBtn')){event.preventDefault();event.stopImmediatePropagation();open();return}\r\n  if(page?.classList.contains('active')&&event.target.closest?.('#fc4BackBtn')){event.preventDefault();event.stopImmediatePropagation();exit()}\r\n },true);\r\n\r\n window.GGGRentBeforeOwningV2={open,reload:load};\r\n})();\r\n<\/script>\r\n<!-- END GGG RENT BEFORE OWNING -->\r\n<!-- END GGG RENT BEFORE OWNING -->\r\n\r\n<script id=\"gggReservationsDiagnostic\">\r\ndocument.addEventListener(\"DOMContentLoaded\", function(){\r\n  console.log(\r\n    \"Reservations script element:\",\r\n    document.getElementById(\"gggLevel8ReservationsScript\")\r\n  );\r\n\r\n  console.log(\r\n    \"Reservations function:\",\r\n    typeof window.gggOpenLevel8Reservations\r\n  );\r\n});\r\n<\/script>\r\n\r\n<!-- =========================================================\r\nGGG THE CIRCLE \u2014 CONSOLIDATED CONTROLLER V7\r\nReplaces the former V4, V4 visual fix, V5, V6 and text fix.\r\nKeeps the original Circle entrance, login, owner side and PHP.\r\n========================================================= -->\r\n\r\n<style id=\"gggCircleV7Styles\">\r\n\r\n\/* ---------- Build entrance: two image portals ---------- *\/\r\n#joinCircleScreen .joinTitle{\r\n  margin:0 0 22px!important;\r\n  font-size:clamp(2.4rem,6vw,5.2rem)!important;\r\n}\r\n#joinCircleScreen .joinOrbSystem.ggg-v7-portals{\r\n  position:relative!important;width:min(980px,92vw)!important;height:auto!important;\r\n  display:flex!important;align-items:center!important;justify-content:center!important;\r\n  gap:clamp(28px,7vw,90px)!important;\r\n}\r\n.ggg-v7-portal{\r\n  width:min(390px,41vw);padding:0;border:0;background:transparent;color:#fff;\r\n  text-align:center;cursor:pointer;transition:transform .28s ease;\r\n}\r\n.ggg-v7-portal:hover{transform:translateY(-6px) scale(1.02)}\r\n.ggg-v7-portalImage{\r\n  position:relative;display:block;width:100%;aspect-ratio:1.82\/1;overflow:hidden;\r\n  border:1px solid rgba(255,255,255,.28);border-radius:46px;background:#020713;\r\n  box-shadow:0 0 0 6px rgba(0,232,255,.035),0 0 42px rgba(0,232,255,.30),0 25px 65px rgba(0,0,0,.68);\r\n}\r\n.ggg-v7-portal.pyramid .ggg-v7-portalImage{\r\n  border-color:rgba(245,211,119,.48);\r\n  box-shadow:0 0 0 6px rgba(245,211,119,.035),0 0 42px rgba(245,211,119,.28),0 25px 65px rgba(0,0,0,.68);\r\n}\r\n.ggg-v7-portalImage::after{\r\n  content:\"\";position:absolute;inset:0;z-index:2;pointer-events:none;\r\n  background:linear-gradient(180deg,transparent 40%,rgba(0,0,0,.20) 68%,rgba(0,0,0,.72));\r\n}\r\n.ggg-v7-portalImage img{width:100%;height:100%;display:block;object-fit:cover}\r\n.ggg-v7-portal strong{\r\n  display:block;margin-top:15px;font-size:clamp(1.25rem,2.4vw,2rem);\r\n  letter-spacing:.09em;text-transform:uppercase;text-shadow:0 0 25px rgba(0,232,255,.48);\r\n}\r\n.ggg-v7-portal.pyramid strong{text-shadow:0 0 25px rgba(245,211,119,.55)}\r\n.ggg-v7-portal small{\r\n  display:block;margin-top:7px;color:rgba(255,255,255,.68);font-size:10px;\r\n  letter-spacing:.14em;text-transform:uppercase;\r\n}\r\n\r\n\/* ---------- True viewport builder ---------- *\/\r\n#layer-weeks.ggg-v7-builder{\r\n  position:fixed!important;inset:0!important;z-index:70!important;\r\n  width:100vw!important;height:100dvh!important;min-height:100dvh!important;\r\n  box-sizing:border-box!important;display:block!important;padding:0!important;\r\n  overflow:hidden!important;background:#000!important;isolation:isolate;\r\n  opacity:0;visibility:hidden;pointer-events:none;transform:none!important;\r\n  transition:opacity .28s ease,visibility .28s ease!important;\r\n}\r\n#layer-weeks.ggg-v7-builder.active{\r\n  opacity:1!important;visibility:visible!important;pointer-events:auto!important;\r\n}\r\n.ggg-v7-background{\r\n  position:absolute;inset:0;z-index:-3;width:100%;height:100%;display:block;\r\n  object-fit:cover;object-position:center center;pointer-events:none;\r\n}\r\n.ggg-v7-shade{\r\n  position:absolute;inset:0;z-index:-2;pointer-events:none;\r\n  background:radial-gradient(circle at 50% 52%,transparent 0 22%,rgba(0,0,0,.08) 48%,rgba(0,0,0,.52) 100%);\r\n}\r\n.ggg-v7-builderShell{\r\n  position:relative;width:100%;height:100%;min-height:0;margin:0;overflow:hidden;\r\n}\r\n.ggg-v7-back{\r\n  position:absolute;top:18px;left:18px;z-index:80;width:48px;height:48px;\r\n  border:1px solid rgba(244,210,122,.42);border-radius:50%;background:rgba(2,7,18,.80);\r\n  color:#f4d27a;font-size:20px;cursor:pointer;box-shadow:0 0 24px rgba(244,210,122,.13);\r\n}\r\n.ggg-v7-heading{\r\n  position:absolute;top:20px;left:50%;z-index:10;max-width:55vw;transform:translateX(-50%);text-align:center;\r\n}\r\n.ggg-v7-heading small{\r\n  display:block;color:rgba(255,255,255,.60);font-size:9px;font-weight:900;\r\n  letter-spacing:.21em;text-transform:uppercase;\r\n}\r\n.ggg-v7-heading h2{\r\n  margin:5px 0 0;color:#fff;font-size:clamp(1.55rem,3.5vw,3rem);line-height:1;\r\n  letter-spacing:.06em;text-transform:uppercase;text-shadow:0 0 28px rgba(0,232,255,.34);\r\n}\r\n\r\n\/* ---------- Dedicated animated City Card text button ---------- *\/\r\n.ggg-v7-cardButton{\r\n  position:absolute;top:78px;right:18px;z-index:115;min-width:158px;height:44px;\r\n  display:grid;place-items:center;overflow:hidden;padding:1px;border:0;border-radius:999px;\r\n  color:#fff;background:#020713;cursor:pointer;box-shadow:0 0 30px rgba(0,232,255,.25);\r\n}\r\n.ggg-v7-cardButton::before{\r\n  content:\"\";position:absolute;width:210%;height:500%;left:-55%;top:-200%;\r\n  background:conic-gradient(from 0deg,#67f5ff,#7a68ff,#ff73dc,#ffd36c,#fff,#67f5ff);\r\n  animation:gggV7NeonSpin 3.1s linear infinite;\r\n}\r\n.ggg-v7-cardButton::after{\r\n  content:\"\";position:absolute;inset:2px;border-radius:inherit;background:rgba(2,8,19,.94);\r\n}\r\n.ggg-v7-cardButton span{\r\n  position:relative;z-index:2;padding:0 17px;font-size:9px;font-weight:1000;\r\n  letter-spacing:.14em;text-transform:uppercase;text-shadow:0 0 12px #6ff5ff;\r\n}\r\n.ggg-v7-cardButton:hover{box-shadow:0 0 44px rgba(0,232,255,.48)}\r\n@keyframes gggV7NeonSpin{to{transform:rotate(360deg)}}\r\n\r\n\/* ---------- Black-hole stage ---------- *\/\r\n.ggg-v7-universe{\r\n  position:absolute;left:50%;top:51%;width:min(900px,96vw);height:min(680px,82dvh);\r\n  transform:translate(-50%,-50%);isolation:isolate;\r\n}\r\n.ggg-v7-universe::before{\r\n  content:\"\";position:absolute;width:58%;aspect-ratio:1;left:21%;top:15%;z-index:0;\r\n  border:1px solid rgba(108,242,255,.10);border-radius:50%;pointer-events:none;\r\n  box-shadow:0 0 45px rgba(0,232,255,.07),inset 0 0 55px rgba(245,209,111,.05);\r\n}\r\n.ggg-v7-category,.ggg-v7-item{\r\n  position:absolute;z-index:5;border-radius:50%;color:#fff;cursor:pointer;\r\n  transition:opacity .3s ease,transform .3s ease,box-shadow .3s ease,border-color .3s ease;\r\n}\r\n.ggg-v7-category{\r\n  --build-a:#78f8ff;\r\n  --build-b:#42ffa9;\r\n  --build-glow:rgba(70,245,255,.48);\r\n\r\n  width:145px;\r\n  height:145px;\r\n  padding:14px;\r\n\r\n  border:2px solid transparent!important;\r\n  border-radius:50%!important;\r\n  color:#fff;\r\n  overflow:visible!important;\r\n\r\n  background:\r\n    radial-gradient(\r\n  circle at 32% 23%,\r\n  rgba(255,255,255,.16),\r\n  transparent 18%\r\n) padding-box,\r\n\r\n    radial-gradient(\r\n  circle at center,\r\n  color-mix(in srgb,var(--build-a) 10%,transparent),\r\n  rgba(1,8,18,.97) 68%\r\n) padding-box,\r\n\r\n    conic-gradient(\r\n      from 0deg,\r\n      var(--build-a),\r\n      var(--build-b),\r\n      #d8fff3,\r\n      var(--build-a)\r\n    ) border-box!important;\r\n\r\n  box-shadow:\r\n    0 0 18px var(--build-glow),\r\n    0 0 48px color-mix(in srgb,var(--build-b) 28%,transparent),\r\n    inset 0 0 28px rgba(255,255,255,.09)!important;\r\n\r\n  animation:\r\n    gggBuildFloat 5s ease-in-out infinite,\r\n    gggBuildEnergy 3s ease-in-out infinite!important;\r\n}\r\n.ggg-v7-category:hover,.ggg-v7-category.active{\r\n  transform:scale(1.07);border-color:#9ffaff;box-shadow:0 0 52px rgba(0,232,255,.48),inset 0 0 26px rgba(255,255,255,.08);\r\n}\r\n.ggg-v7-category strong{display:block;font-size:13px;letter-spacing:.07em;text-transform:uppercase}\r\n.ggg-v7-category small{display:block;margin-top:6px;color:rgba(255,255,255,.62);font-size:8px;line-height:1.3;text-transform:uppercase}\r\n.ggg-v7-category:nth-of-type(1){top:0;left:calc(50% - 72.5px)}\r\n.ggg-v7-category:nth-of-type(2){top:22%;right:2%}\r\n.ggg-v7-category:nth-of-type(3){right:12%;bottom:0}\r\n.ggg-v7-category:nth-of-type(4){left:12%;bottom:0}\r\n.ggg-v7-category:nth-of-type(5){top:22%;left:2%}\r\n.ggg-v7-universe.inventory-open .ggg-v7-category{\r\n  opacity:0;transform:scale(.35);filter:blur(5px);pointer-events:none;\r\n}\r\n\r\n\/* ---------- Inventory satellites ---------- *\/\r\n.ggg-v7-inventory{position:absolute;inset:0;z-index:7;pointer-events:none}\r\n.ggg-v7-item{\r\n  width:145px;height:145px;padding:0;overflow:hidden;border:1px solid rgba(112,245,255,.60);\r\n  background:#020817;box-shadow:0 0 0 6px rgba(0,232,255,.035),0 0 35px rgba(0,232,255,.32),0 20px 42px rgba(0,0,0,.64);\r\n  opacity:0;pointer-events:auto;animation:gggV7Materialize .38s ease both;\r\n}\r\n.ggg-v7-item:hover{transform:scale(1.07);border-color:#fff;box-shadow:0 0 58px rgba(0,232,255,.58),0 22px 45px rgba(0,0,0,.70)}\r\n.ggg-v7-item img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.78}\r\n.ggg-v7-item::after{\r\n  content:\"\";position:absolute;inset:0;z-index:1;border-radius:inherit;\r\n  background:linear-gradient(180deg,transparent 27%,rgba(0,0,0,.27) 52%,rgba(0,0,0,.95));\r\n}\r\n.ggg-v7-itemCopy{position:absolute;left:8px;right:8px;bottom:15px;z-index:2;text-align:center}\r\n.ggg-v7-itemCopy strong{display:block;font-size:10px;line-height:1.15;letter-spacing:.035em;text-transform:uppercase;text-shadow:0 2px 7px #000,0 0 13px #13ddeb}\r\n.ggg-v7-itemCopy small{display:block;margin-top:4px;color:#92f9ff;font-size:8px;font-weight:900}\r\n.ggg-v7-item[data-slot=\"0\"]{top:0;left:calc(50% - 72.5px)}\r\n.ggg-v7-item[data-slot=\"1\"]{top:21%;right:1%}\r\n.ggg-v7-item[data-slot=\"2\"]{right:10%;bottom:0}\r\n.ggg-v7-item[data-slot=\"3\"]{bottom:-34px;left:calc(50% - 72.5px)}\r\n.ggg-v7-item[data-slot=\"4\"]{left:10%;bottom:0}\r\n.ggg-v7-item[data-slot=\"5\"]{top:21%;left:1%}\r\n@keyframes gggV7Materialize{from{opacity:0;filter:blur(7px)}to{opacity:1;filter:none}}\r\n\r\n.ggg-v7-status{\r\n  position:absolute;left:50%;bottom:34px;z-index:12;width:min(440px,76%);transform:translateX(-50%);\r\n  padding:11px 18px;border:1px solid rgba(0,238,255,.23);border-radius:999px;\r\n  color:rgba(255,255,255,.76);background:rgba(2,7,18,.78);font-size:11px;text-align:center;\r\n  box-shadow:0 0 28px rgba(0,232,255,.12);\r\n}\r\n.ggg-v7-orbitTop{\r\n  position:absolute;top:11px;left:11px;right:11px;z-index:25;display:none;\r\n  align-items:center;justify-content:space-between;gap:10px;pointer-events:none;\r\n}\r\n.ggg-v7-universe.inventory-open .ggg-v7-orbitTop{display:flex}\r\n.ggg-v7-orbitTop button{\r\n  padding:8px 13px;border:1px solid rgba(0,238,255,.32);border-radius:999px;\r\n  color:#fff;background:rgba(2,8,20,.82);font-size:8px;font-weight:900;\r\n  letter-spacing:.08em;text-transform:uppercase;cursor:pointer;pointer-events:auto;\r\n}\r\n.ggg-v7-orbitName{color:#b9fbff;font-size:9px;font-weight:1000;letter-spacing:.16em;text-transform:uppercase;text-shadow:0 0 16px #19dbe8}\r\n.ggg-v7-pager{\r\n  position:absolute;left:50%;bottom:-76px;z-index:25;display:none;align-items:center;gap:10px;\r\n  transform:translateX(-50%);\r\n}\r\n.ggg-v7-pager.visible{display:flex}\r\n.ggg-v7-pager button{\r\n  width:42px;height:42px;border:1px solid rgba(0,238,255,.38);border-radius:50%;\r\n  color:#fff;background:rgba(2,8,20,.88);font-size:19px;cursor:pointer;box-shadow:0 0 22px rgba(0,232,255,.14);\r\n}\r\n.ggg-v7-pageCount{min-width:52px;color:rgba(255,255,255,.74);font-size:9px;text-align:center}\r\n\r\n\/* ---------- Full-screen transparent host presentation ---------- *\/\r\n.ggg-v7-hostOverlay{\r\n  position:fixed;inset:0;z-index:2147483600;display:grid;place-items:center;padding:4vw;\r\n  box-sizing:border-box;background:rgba(0,0,0,.18);opacity:0;visibility:hidden;\r\n  pointer-events:none;transition:opacity .25s ease,visibility .25s ease;\r\n}\r\n.ggg-v7-hostOverlay.open{opacity:1;visibility:visible;pointer-events:auto}\r\n.ggg-v7-hostPanel{\r\n  --ggg-v7-host-image:none;position:relative;isolation:isolate;width:min(950px,92vw);\r\n  min-height:min(560px,72dvh);max-height:82dvh;overflow:auto;border:1px solid rgba(132,247,255,.48);\r\n  border-radius:38px;background:linear-gradient(145deg,rgba(4,17,30,.67),rgba(1,5,14,.79));\r\n  box-shadow:0 0 0 8px rgba(0,232,255,.025),0 0 85px rgba(0,232,255,.34),0 38px 110px rgba(0,0,0,.75);\r\n  backdrop-filter:blur(11px);-webkit-backdrop-filter:blur(11px);\r\n}\r\n.ggg-v7-hostPanel::before{\r\n  content:\"\";position:absolute;inset:0;z-index:-2;border-radius:inherit;\r\n  background-image:var(--ggg-v7-host-image);background-position:center;background-size:cover;\r\n  opacity:.25;filter:saturate(1.2) contrast(1.04);\r\n}\r\n.ggg-v7-hostPanel::after{\r\n  content:\"\";position:absolute;inset:0;z-index:-1;border-radius:inherit;\r\n  background:radial-gradient(circle at 82% 16%,rgba(0,232,255,.12),transparent 35%),linear-gradient(105deg,rgba(1,7,18,.96),rgba(1,7,18,.77) 56%,rgba(1,7,18,.58));\r\n}\r\n.ggg-v7-hostClose{\r\n  position:absolute;top:18px;right:18px;z-index:5;width:44px;height:44px;\r\n  border:1px solid rgba(255,255,255,.28);border-radius:50%;color:#fff;\r\n  background:rgba(0,0,0,.48);font-size:22px;cursor:pointer;\r\n}\r\n.ggg-v7-hostContent{\r\n  min-height:min(560px,72dvh);display:flex;flex-direction:column;justify-content:center;\r\n  padding:65px clamp(25px,7vw,85px) 48px;box-sizing:border-box;\r\n}\r\n.ggg-v7-hostType{color:#8ef8ff;font-size:10px;font-weight:1000;letter-spacing:.16em;text-transform:uppercase}\r\n.ggg-v7-hostContent h3{\r\n  max-width:690px;margin:10px 0 13px;color:#fff;font-size:clamp(2rem,5vw,4rem);\r\n  line-height:.96;text-transform:uppercase;text-shadow:0 0 27px rgba(0,232,255,.28);\r\n}\r\n.ggg-v7-hostContent p{max-width:680px;margin:0;color:rgba(239,249,255,.78);font-size:clamp(.82rem,1.4vw,1rem);line-height:1.65}\r\n.ggg-v7-hostMeta{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px}\r\n.ggg-v7-hostMeta span{padding:8px 12px;border:1px solid rgba(255,255,255,.15);border-radius:999px;background:rgba(0,0,0,.28);font-size:11px;font-weight:800}\r\n.ggg-v7-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:21px}\r\n.ggg-v7-action{\r\n  min-width:125px;padding:12px 18px;border:1px solid rgba(0,238,255,.40);border-radius:999px;\r\n  color:#fff;background:rgba(0,232,255,.11);font-size:9px;font-weight:1000;\r\n  letter-spacing:.08em;text-align:center;text-decoration:none;text-transform:uppercase;cursor:pointer;\r\n}\r\n.ggg-v7-legal{max-width:700px;margin-top:17px;color:rgba(255,255,255,.48);font-size:9px;line-height:1.5}\r\n\r\n\/* ---------- Mobile ---------- *\/\r\n@media(max-width:760px){\r\n  #mainJoin.joinContent{justify-content:flex-start!important;overflow:auto!important;padding:76px 0 38px!important}\r\n  #joinCircleScreen .joinTitle{width:88vw!important;margin:0 auto 22px!important;font-size:clamp(2.25rem,10vw,3.2rem)!important;line-height:1.02!important}\r\n  #joinCircleScreen .joinOrbSystem.ggg-v7-portals{width:min(520px,89vw)!important;display:grid!important;grid-template-columns:1fr!important;gap:25px!important}\r\n  .ggg-v7-portal{width:100%}\r\n  .ggg-v7-portalImage{aspect-ratio:1.9\/1;border-radius:38px}\r\n  .ggg-v7-portal strong{margin-top:12px;font-size:1.35rem}\r\n  .ggg-v7-portal small{font-size:8px}\r\n\r\n  #layer-weeks.ggg-v7-builder{height:100dvh!important;min-height:100dvh!important}\r\n  .ggg-v7-background{width:100vw;height:100dvh;object-position:center 48%;transform:scale(1.025)}\r\n  .ggg-v7-back{top:calc(15px + env(safe-area-inset-top));left:12px;width:44px;height:44px}\r\n  .ggg-v7-heading{top:calc(19px + env(safe-area-inset-top));max-width:50vw}\r\n  .ggg-v7-heading small{display:none}\r\n  .ggg-v7-heading h2{font-size:1.18rem;line-height:1.05}\r\n  .ggg-v7-cardButton{top:calc(76px + env(safe-area-inset-top));right:12px;min-width:132px;height:39px}\r\n  .ggg-v7-cardButton span{padding:0 13px;font-size:7px}\r\n\r\n  .ggg-v7-universe{top:54%;width:100vw;height:570px;transform:translate(-50%,-50%)}\r\n  .ggg-v7-universe::before{width:78%;left:11%;top:10%}\r\n  .ggg-v7-category,.ggg-v7-item{width:103px;height:103px}\r\n  .ggg-v7-category{padding:9px}\r\n  .ggg-v7-category strong{font-size:10px;line-height:1.1}\r\n  .ggg-v7-category small{font-size:7px}\r\n  .ggg-v7-category:nth-of-type(1){top:0;left:calc(50% - 51.5px)}\r\n  .ggg-v7-category:nth-of-type(2){top:21%;right:0}\r\n  .ggg-v7-category:nth-of-type(3){right:6%;bottom:12%}\r\n  .ggg-v7-category:nth-of-type(4){left:6%;bottom:12%}\r\n  .ggg-v7-category:nth-of-type(5){top:21%;left:0}\r\n  .ggg-v7-itemCopy{left:5px;right:5px;bottom:11px}\r\n  .ggg-v7-itemCopy strong{font-size:7.5px}\r\n  .ggg-v7-itemCopy small{font-size:6.5px}\r\n  .ggg-v7-item[data-slot=\"0\"]{top:0;left:calc(50% - 51.5px)}\r\n  .ggg-v7-item[data-slot=\"1\"]{top:21%;right:0}\r\n  .ggg-v7-item[data-slot=\"2\"]{right:6%;bottom:3%}\r\n  .ggg-v7-item[data-slot=\"3\"]{bottom:-22px;left:calc(50% - 51.5px)}\r\n  .ggg-v7-item[data-slot=\"4\"]{left:6%;bottom:3%}\r\n  .ggg-v7-item[data-slot=\"5\"]{top:21%;left:0}\r\n  .ggg-v7-orbitTop{top:5px;left:6px;right:6px}\r\n  .ggg-v7-orbitTop button{max-width:105px;padding:7px 9px;font-size:6.5px}\r\n  .ggg-v7-orbitName{position:absolute;top:112px;left:50%;transform:translateX(-50%);width:170px;font-size:7px;text-align:center}\r\n  .ggg-v7-pager{bottom:-60px}\r\n  .ggg-v7-status{bottom:28px;font-size:9px}\r\n\r\n  .ggg-v7-hostOverlay{padding:3vw}\r\n  .ggg-v7-hostPanel{width:94vw;min-height:70dvh;max-height:82dvh;border-radius:28px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}\r\n  .ggg-v7-hostContent{min-height:70dvh;justify-content:flex-end;padding:62px 22px 30px}\r\n  .ggg-v7-hostContent h3{font-size:2rem}\r\n  .ggg-v7-hostContent p{font-size:.78rem}\r\n  .ggg-v7-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}\r\n  .ggg-v7-action{min-width:0;padding:10px}\r\n}\r\n\r\n\/* =========================================================\r\n   BUILD YOUR CITY CARD \u2014 MOBILE HOST CIRCLES FIX\r\n   ========================================================= *\/\r\n@media(max-width:760px){\r\n\r\n  #joinCircleScreen #gggV7Universe{\r\n    overflow:visible!important;\r\n  }\r\n\r\n  #joinCircleScreen #gggV7Inventory{\r\n    display:block!important;\r\n    visibility:visible!important;\r\n    opacity:1!important;\r\n    pointer-events:none!important;\r\n    z-index:30!important;\r\n    overflow:visible!important;\r\n  }\r\n\r\n  #joinCircleScreen\r\n  #gggV7Universe.inventory-open\r\n  #gggV7Inventory .ggg-v7-item{\r\n    display:block!important;\r\n    visibility:visible!important;\r\n    opacity:1!important;\r\n    pointer-events:auto!important;\r\n    z-index:35!important;\r\n\r\n    width:96px!important;\r\n    height:96px!important;\r\n\r\n    animation:gggV7Materialize .38s ease both!important;\r\n  }\r\n\r\n  \/* TOP *\/\r\n  #joinCircleScreen .ggg-v7-item[data-slot=\"0\"]{\r\n    top:2%!important;\r\n    left:50%!important;\r\n    right:auto!important;\r\n    bottom:auto!important;\r\n    transform:translateX(-50%)!important;\r\n  }\r\n\r\n  \/* UPPER RIGHT *\/\r\n  #joinCircleScreen .ggg-v7-item[data-slot=\"1\"]{\r\n    top:22%!important;\r\n    right:2%!important;\r\n    left:auto!important;\r\n    bottom:auto!important;\r\n  }\r\n\r\n  \/* LOWER RIGHT *\/\r\n  #joinCircleScreen .ggg-v7-item[data-slot=\"2\"]{\r\n    top:auto!important;\r\n    right:8%!important;\r\n    bottom:12%!important;\r\n    left:auto!important;\r\n  }\r\n\r\n  \/* BOTTOM CENTER *\/\r\n  #joinCircleScreen .ggg-v7-item[data-slot=\"3\"]{\r\n    top:auto!important;\r\n    bottom:1%!important;\r\n    left:50%!important;\r\n    right:auto!important;\r\n    transform:translateX(-50%)!important;\r\n  }\r\n\r\n  \/* LOWER LEFT *\/\r\n  #joinCircleScreen .ggg-v7-item[data-slot=\"4\"]{\r\n    top:auto!important;\r\n    left:8%!important;\r\n    bottom:12%!important;\r\n    right:auto!important;\r\n  }\r\n\r\n  \/* UPPER LEFT *\/\r\n  #joinCircleScreen .ggg-v7-item[data-slot=\"5\"]{\r\n    top:22%!important;\r\n    left:2%!important;\r\n    right:auto!important;\r\n    bottom:auto!important;\r\n  }\r\n}\r\n\r\n@media(max-width:390px){\r\n  .ggg-v7-universe{height:535px}\r\n  .ggg-v7-category,.ggg-v7-item{width:94px;height:94px}\r\n  .ggg-v7-category:nth-of-type(1),.ggg-v7-item[data-slot=\"0\"]{left:calc(50% - 47px)}\r\n  .ggg-v7-item[data-slot=\"3\"]{left:calc(50% - 47px)}\r\n}\r\n@media(prefers-reduced-motion:reduce){\r\n  .ggg-v7-cardButton::before,.ggg-v7-item{animation:none!important}\r\n}\r\n<\/style>\r\n\r\n<script id=\"gggCircleV7Script\">\r\n(function(){\r\n  \"use strict\";\r\n\r\n  const CITY_CARD_IMAGE=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/09\/ced9a3b4-1f21-4b19-8970-4d14a085f445.png\";\r\n  const PYRAMID_IMAGE=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/09\/Screenshot_20260908_122436_Chrome.jpg\";\r\n  const BUILDER_BACKGROUND=\"http:\/\/godsgalaxygame.com\/GGG\/wp-content\/uploads\/2026\/04\/ae69d409-ac51-48c5-8936-09d75acf117f.png\";\r\n  const CITY_CARD_PAGE=\"\/GGG\/rent-before-buying\/?citycard=1\";\r\n  const PYRAMID_PAGE=\"\/GGG\/medayork-pyramid-2\/\";\r\n  const AJAX=window.GGGCircleAuth?.ajaxUrl||window.ajaxurl||\"\/GGG\/wp-admin\/admin-ajax.php\";\r\n  const PER_ORBIT=6;\r\n\r\n  let inventoryCache=null;\r\n  let currentCategory=\"\";\r\n  let currentItems=[];\r\n  let orbitPage=0;\r\n\r\n  function esc(value){\r\n    return String(value??\"\").replace(\/&\/g,\"&amp;\").replace(\/<\/g,\"&lt;\")\r\n      .replace(\/>\/g,\"&gt;\").replace(\/\"\/g,\"&quot;\").replace(\/'\/g,\"&#039;\");\r\n  }\r\n  function safeUrl(value){\r\n    if(!value)return\"\";\r\n    try{\r\n      const url=new URL(String(value),window.location.origin);\r\n      return \/^(https?:)$\/.test(url.protocol)?url.href:\"\";\r\n    }catch(error){return\"\";}\r\n  }\r\n\r\n  function createPortals(){\r\n    const system=document.querySelector(\"#joinCircleScreen .joinOrbSystem\");\r\n    if(!system)throw new Error(\"Build Your Circle portal container was not found.\");\r\n    system.className=\"joinOrbSystem ggg-v7-portals\";\r\n    system.innerHTML=`\r\n      <button id=\"gggV7CityPortal\" class=\"ggg-v7-portal city\" type=\"button\">\r\n        <span class=\"ggg-v7-portalImage\"><img decoding=\"async\" src=\"${esc(CITY_CARD_IMAGE)}\" alt=\"Build Your City Card\"><\/span>\r\n        <strong>Build Your City Card<\/strong><small>Credits \u00b7 Time \u00b7 Property Access<\/small>\r\n      <\/button>\r\n      <button id=\"gggV7PyramidPortal\" class=\"ggg-v7-portal pyramid\" type=\"button\">\r\n        <span class=\"ggg-v7-portalImage\"><img decoding=\"async\" src=\"${esc(PYRAMID_IMAGE)}\" alt=\"GGG Level Access\"><\/span>\r\n        <strong>GGG Level Access<\/strong><small>Enter The MedaYork Pyramid<\/small>\r\n      <\/button>`;\r\n    const title=document.querySelector(\"#joinCircleScreen .joinTitle\");\r\n    if(title)title.textContent=\"Build Your Circle\";\r\n  }\r\n\r\n  function createBuilder(){\r\n    const layer=document.getElementById(\"layer-weeks\");\r\n    if(!layer)throw new Error(\"The City Card builder layer was not found.\");\r\n    layer.className=\"joinLayer weeksLayer ggg-v7-builder\";\r\n    layer.innerHTML=`\r\n      <img decoding=\"async\" class=\"ggg-v7-background\" src=\"${esc(BUILDER_BACKGROUND)}\" alt=\"\">\r\n      <div class=\"ggg-v7-shade\"><\/div>\r\n      <div class=\"ggg-v7-builderShell\">\r\n        <button id=\"gggV7BuilderBack\" class=\"ggg-v7-back\" type=\"button\" aria-label=\"Back\">\u2190<\/button>\r\n        <header class=\"ggg-v7-heading\"><small>The Circle \u00b7 Luxus City Card<\/small><h2>Build Your City Card<\/h2><\/header>\r\n        <button id=\"gggV7OpenCard\" class=\"ggg-v7-cardButton\" type=\"button\"><span>City Card<\/span><\/button>\r\n        <div id=\"gggV7Universe\" class=\"ggg-v7-universe\">\r\n          <button class=\"ggg-v7-category\" type=\"button\" data-v7-category=\"Bliss Coin\">\r\n  <strong>Bliss Credits<\/strong>\r\n  <small>Travel & Experience Credits<\/small>\r\n<\/button>\r\n\r\n<button class=\"ggg-v7-category\" type=\"button\" data-v7-category=\"Air\">\r\n  <strong>Flight Time<\/strong>\r\n  <small>Helicopter & Air Experiences<\/small>\r\n<\/button>\r\n\r\n<button class=\"ggg-v7-category\" type=\"button\" data-v7-category=\"Aqua\">\r\n  <strong>Water Time<\/strong>\r\n  <small>Boats, Yachts & Water Experiences<\/small>\r\n<\/button>\r\n\r\n<button class=\"ggg-v7-category\" type=\"button\" data-v7-category=\"Gastro\">\r\n  <strong>Culinary Credits<\/strong>\r\n  <small>Dining, Chef & Gastronomic Experiences<\/small>\r\n<\/button>\r\n\r\n<button class=\"ggg-v7-category\" type=\"button\" data-v7-category=\"Land\">\r\n  <strong>Stay Time<\/strong>\r\n  <small>Accommodation & Property Access<\/small>\r\n<\/button>\r\n          <div class=\"ggg-v7-orbitTop\">\r\n            <button id=\"gggV7Categories\" type=\"button\">\u2190 Categories<\/button>\r\n            <span id=\"gggV7OrbitName\" class=\"ggg-v7-orbitName\"><\/span>\r\n          <\/div>\r\n          <div id=\"gggV7Inventory\" class=\"ggg-v7-inventory\"><\/div>\r\n          <div id=\"gggV7Pager\" class=\"ggg-v7-pager\">\r\n            <button type=\"button\" data-v7-page=\"previous\" aria-label=\"Previous products\">\u2039<\/button>\r\n            <span id=\"gggV7PageCount\" class=\"ggg-v7-pageCount\"><\/span>\r\n            <button type=\"button\" data-v7-page=\"next\" aria-label=\"Next products\">\u203a<\/button>\r\n          <\/div>\r\n        <\/div>\r\n        <div id=\"gggV7HostOverlay\" class=\"ggg-v7-hostOverlay\" aria-hidden=\"true\">\r\n          <article id=\"gggV7HostPanel\" class=\"ggg-v7-hostPanel\">\r\n            <button id=\"gggV7HostClose\" class=\"ggg-v7-hostClose\" type=\"button\" aria-label=\"Close\">\u00d7<\/button>\r\n            <div id=\"gggV7HostContent\" class=\"ggg-v7-hostContent\"><\/div>\r\n          <\/article>\r\n        <\/div>\r\n      <\/div>`;\r\n  }\r\n\r\n  function showBuildScreen(){\r\n    const entry=document.getElementById(\"circleEntryScreen\");\r\n    const join=document.getElementById(\"joinCircleScreen\");\r\n    const enter=document.getElementById(\"enterCircleScreen\");\r\n    const gate=document.getElementById(\"joinAuthGate\");\r\n    const content=document.getElementById(\"mainJoin\");\r\n    if(entry)entry.style.display=\"none\";\r\n    if(enter)enter.style.display=\"none\";\r\n    if(join){join.style.display=\"block\";join.style.opacity=\"1\";join.style.visibility=\"visible\";join.style.pointerEvents=\"auto\";}\r\n    if(gate){gate.style.display=\"none\";gate.style.visibility=\"hidden\";gate.style.pointerEvents=\"none\";}\r\n    if(content){content.classList.remove(\"hidden\");content.style.display=\"flex\";content.style.opacity=\"1\";content.style.visibility=\"visible\";content.style.pointerEvents=\"auto\";}\r\n  }\r\n  function openBuilder(){\r\n    const title=document.querySelector(\"#joinCircleScreen .joinTitle\");\r\n    const portals=document.querySelector(\"#joinCircleScreen .ggg-v7-portals\");\r\n    const layer=document.getElementById(\"layer-weeks\");\r\n    if(title)title.hidden=true;if(portals)portals.hidden=true;if(layer)layer.classList.add(\"active\");\r\n  }\r\n  function closeBuilder(){\r\n    const title=document.querySelector(\"#joinCircleScreen .joinTitle\");\r\n    const portals=document.querySelector(\"#joinCircleScreen .ggg-v7-portals\");\r\n    const layer=document.getElementById(\"layer-weeks\");\r\n    closeHost();resetCategories();\r\n    if(layer)layer.classList.remove(\"active\");if(title)title.hidden=false;if(portals)portals.hidden=false;\r\n  }\r\n\r\n  async function getInventory(){\r\n    if(Array.isArray(inventoryCache))return inventoryCache;\r\n    const form=new FormData();form.append(\"action\",\"ggg_l8_get_inventory\");\r\n    const response=await fetch(AJAX,{method:\"POST\",credentials:\"same-origin\",body:form});\r\n    const result=await response.json();\r\n    if(!response.ok||result?.success!==true)throw new Error(result?.data?.message||\"Level 8 inventory could not load.\");\r\n    inventoryCache=Array.isArray(result?.data?.items)?result.data.items:[];\r\n    return inventoryCache;\r\n  }\r\n  function groupNames(category){\r\n    return ({\r\n      \"Bliss Coin\":[\"bliss coin\",\"coins\",\"bliss coin credits\"],\r\n      \"Air\":[\"air\",\"air time\"],\"Aqua\":[\"aqua\",\"water\",\"aqua time\"],\r\n      \"Gastro\":[\"gastro\",\"chef\",\"gastro time\"],\r\n      \"Land\":[\"land\",\"property time\",\"fractional ownership\"]\r\n    })[category]||[];\r\n  }\r\n  function matchingItems(items,category){\r\n    const groups=groupNames(category);\r\n    return items.filter(item=>{\r\n      const section=String(item.section||\"\").trim().toLowerCase();\r\n      const group=String(item.group||\"\").trim().toLowerCase();\r\n      const status=String(item.status||\"active\").trim().toLowerCase();\r\n      return status===\"active\"&&[\"the circle\",\"circle\",\"owners club\"].includes(section)&&groups.includes(group);\r\n    });\r\n  }\r\n\r\n  function renderOrbit(){\r\n    const box=document.getElementById(\"gggV7Inventory\");\r\n    const pager=document.getElementById(\"gggV7Pager\");\r\n    const count=document.getElementById(\"gggV7PageCount\");\r\n    if(!box)return;\r\n    if(!currentItems.length){\r\n      box.innerHTML=`<div class=\"ggg-v7-status\">No active ${esc(currentCategory)} inventory is currently published.<\/div>`;\r\n      if(pager)pager.classList.remove(\"visible\");return;\r\n    }\r\n    const pages=Math.ceil(currentItems.length\/PER_ORBIT);\r\n    if(orbitPage<0)orbitPage=pages-1;if(orbitPage>=pages)orbitPage=0;\r\n    const start=orbitPage*PER_ORBIT;\r\n    box.innerHTML=currentItems.slice(start,start+PER_ORBIT).map((item,slot)=>{\r\n      const image=safeUrl(item.imageUrl||item.image||\"\");\r\n      return `<button class=\"ggg-v7-item\" type=\"button\" data-v7-item=\"${start+slot}\" data-slot=\"${slot}\" style=\"animation-delay:${slot*.045}s\">\r\n        ${image?`<img decoding=\"async\" src=\"${esc(image)}\" alt=\"${esc(item.name||\"Level 8 product\")}\">`:\"\"}\r\n        <span class=\"ggg-v7-itemCopy\"><strong>${esc(item.name||\"Level 8 Product\")}<\/strong><small>${esc(item.price||\"Price pending\")}<\/small><\/span>\r\n      <\/button>`;\r\n    }).join(\"\");\r\n    if(count)count.textContent=`${orbitPage+1} \/ ${pages}`;\r\n    if(pager)pager.classList.toggle(\"visible\",pages>1);\r\n  }\r\n\r\n  async function chooseCategory(category){\r\n    currentCategory=category;orbitPage=0;currentItems=[];\r\n    const universe=document.getElementById(\"gggV7Universe\");\r\n    const box=document.getElementById(\"gggV7Inventory\");\r\n    const name=document.getElementById(\"gggV7OrbitName\");\r\n    document.querySelectorAll(\"[data-v7-category]\").forEach(button=>button.classList.toggle(\"active\",button.dataset.v7Category===category));\r\n    if(universe)universe.classList.add(\"inventory-open\");if(name)name.textContent=category+\" Inventory\";\r\n    if(box)box.innerHTML=`<div class=\"ggg-v7-status\">Loading ${esc(category)} inventory\u2026<\/div>`;\r\n    try{currentItems=matchingItems(await getInventory(),category);renderOrbit();}\r\n    catch(error){if(box)box.innerHTML=`<div class=\"ggg-v7-status\">${esc(error.message)}<\/div>`;}\r\n  }\r\n  function resetCategories(){\r\n    const universe=document.getElementById(\"gggV7Universe\");\r\n    const box=document.getElementById(\"gggV7Inventory\");\r\n    const pager=document.getElementById(\"gggV7Pager\");\r\n    if(universe)universe.classList.remove(\"inventory-open\");if(box)box.innerHTML=\"\";\r\n    if(pager)pager.classList.remove(\"visible\");\r\n    document.querySelectorAll(\"[data-v7-category]\").forEach(button=>button.classList.remove(\"active\"));\r\n    currentCategory=\"\";currentItems=[];orbitPage=0;\r\n  }\r\n\r\n  function openHost(index){\r\n    const item=currentItems[index];if(!item)return;\r\n    const overlay=document.getElementById(\"gggV7HostOverlay\");\r\n    const panel=document.getElementById(\"gggV7HostPanel\");\r\n    const content=document.getElementById(\"gggV7HostContent\");\r\n    const image=safeUrl(item.imageUrl||item.image||\"\");\r\n    const website=safeUrl(item.websiteUrl||item.url||\"\");\r\n    const purchase=safeUrl(item.reserveUrl||\"\");\r\n    if(panel){\r\n      if(image)panel.style.setProperty(\"--ggg-v7-host-image\",`url(\"${image.replace(\/[\"'()\\\\]\/g,\"\\\\$&\")}\")`);\r\n      else panel.style.setProperty(\"--ggg-v7-host-image\",\"none\");\r\n    }\r\n    if(content)content.innerHTML=`\r\n      <div class=\"ggg-v7-hostType\">${esc(currentCategory)}<\/div>\r\n      <h3>${esc(item.name||\"Level 8 Product\")}<\/h3>\r\n      <p>${esc(item.description||\"\")}<\/p>\r\n      <div class=\"ggg-v7-hostMeta\"><span>${esc(item.price||\"Price pending\")}<\/span><span>${esc(item.availability||\"Availability pending\")}<\/span>${item.location?`<span>${esc(item.location)}<\/span>`:\"\"}<\/div>\r\n      <div class=\"ggg-v7-actions\">${website?`<a class=\"ggg-v7-action\" href=\"${esc(website)}\" target=\"_blank\" rel=\"noopener\">Provider<\/a>`:\"\"}${purchase?`<a class=\"ggg-v7-action\" href=\"${esc(purchase)}\" target=\"_blank\" rel=\"noopener\">Continue<\/a>`:`<button class=\"ggg-v7-action\" type=\"button\" data-v7-payment-pending>Payment Pending<\/button>`}<\/div>\r\n      <div class=\"ggg-v7-legal\">Before continuing, review the displayed provider, price, availability and transaction conditions. Eligible value is issued to the Luxus City Card only after payment and fulfillment requirements are verified.<\/div>`;\r\n    if(overlay){overlay.classList.add(\"open\");overlay.setAttribute(\"aria-hidden\",\"false\");}\r\n  }\r\n  function closeHost(){\r\n    const overlay=document.getElementById(\"gggV7HostOverlay\");\r\n    if(overlay){overlay.classList.remove(\"open\");overlay.setAttribute(\"aria-hidden\",\"true\");}\r\n  }\r\n\r\n  window.addEventListener(\"click\",function(event){\r\n    const target=event.target;if(!(target instanceof Element))return;\r\n    if(target.closest(\"#joinZone\")){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();showBuildScreen();\r\n    }\r\n  },true);\r\n\r\n  document.addEventListener(\"click\",function(event){\r\n    const target=event.target;if(!(target instanceof Element))return;\r\n    if(target.closest(\"#gggV7CityPortal\")){event.preventDefault();openBuilder();return;}\r\n    if(target.closest(\"#gggV7PyramidPortal\")){event.preventDefault();window.location.href=PYRAMID_PAGE;return;}\r\n    if(target.closest(\"#gggV7BuilderBack\")){event.preventDefault();closeBuilder();return;}\r\n    if(target.closest(\"#gggV7OpenCard\")){event.preventDefault();window.location.href=CITY_CARD_PAGE;return;}\r\n    if(target.closest(\"#gggV7Categories\")){event.preventDefault();resetCategories();return;}\r\n    if(target.closest(\"#gggV7HostClose\")||target.id===\"gggV7HostOverlay\"){event.preventDefault();closeHost();return;}\r\n    const category=target.closest(\"[data-v7-category]\");\r\n    if(category){event.preventDefault();chooseCategory(category.dataset.v7Category);return;}\r\n    const item=target.closest(\"[data-v7-item]\");\r\n    if(item){event.preventDefault();openHost(Number(item.dataset.v7Item));return;}\r\n    const page=target.closest(\"[data-v7-page]\");\r\n    if(page){event.preventDefault();orbitPage+=page.dataset.v7Page===\"next\"?1:-1;renderOrbit();return;}\r\n    if(target.closest(\"[data-v7-payment-pending]\")){event.preventDefault();alert(\"The payment URL has not been added to this product in the Level 8 control panel.\");}\r\n  });\r\n\r\n  function initialize(){\r\n    createPortals();createBuilder();\r\n    const copy=document.querySelector(\"#joinText p\");\r\n    if(copy)copy.textContent=\"Build your City Card or explore GGG Level Access.\";\r\n    console.log(\"GGG Circle consolidated V7 initialized.\");\r\n  }\r\n  try{initialize();}catch(error){console.error(\"GGG Circle V7 failed:\",error);}\r\n})();\r\n<\/script>\r\n\r\n<!-- =========================================================\r\nGGG THE CIRCLE \u2014 V8 OWNER + PORTAL REPAIR\r\nPaste AFTER the existing GGG Circle V7 block.\r\nDoes not replace Reservations, Rent Before Owning, the hero,\r\nthe City Card page, or the Level 8 inventory engine.\r\n========================================================= -->\r\n\r\n<style id=\"gggCircleV8RepairStyles\">\r\n\/* ---------- Correct the two Build Your Circle portals ---------- *\/\r\n#joinCircleScreen .joinOrbSystem.ggg-v7-portals{\r\n  width:min(1040px,92vw)!important;\r\n  min-height:min(610px,72dvh)!important;\r\n  display:flex!important;\r\n  align-items:center!important;\r\n  justify-content:center!important;\r\n  gap:clamp(42px,8vw,118px)!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal{\r\n  position:relative;\r\n  flex:0 0 auto;\r\n  width:auto!important;\r\n  isolation:isolate;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal.city{\r\n  width:min(410px,42vw)!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal.pyramid{\r\n  width:min(350px,36vw)!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portalImage{\r\n  isolation:isolate;\r\n  overflow:visible!important;\r\n  border-radius:24px!important;\r\n  background:rgba(1,7,18,.58)!important;\r\n  transform:translateZ(0);\r\n\r\n  border:1px solid rgba(100,235,255,.75)!important;\r\n\r\n  box-shadow:\r\n    0 0 0 1px rgba(100,235,255,.15),\r\n    0 0 26px rgba(0,220,255,.35),\r\n    0 0 70px rgba(70,80,255,.16),\r\n    0 30px 80px rgba(0,0,0,.75)!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal.city .ggg-v7-portalImage{\r\n  aspect-ratio:1.45\/1!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal.pyramid .ggg-v7-portalImage{\r\n  aspect-ratio:1.05\/1!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portalImage::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-12px;\r\n  z-index:-2;\r\n  border-radius:inherit;\r\n  opacity:.78;\r\n  filter:blur(15px);\r\n  background:conic-gradient(from 0deg,#43f6ff,#37f0ad,#092a61,#f0d57f,#43f6ff);\r\n  animation:gggV8PortalAura 7s linear infinite;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal.city .ggg-v7-portalImage::before{\r\n  background:conic-gradient(\r\n    from 0deg,\r\n    #ffffff,\r\n    #43f6ff,\r\n    #1677ff,\r\n    #6a5cff,\r\n    #43f6ff,\r\n    #ffffff\r\n  )!important;\r\n\r\n  opacity:.95!important;\r\n  filter:blur(13px)!important;\r\n  animation:gggV8PortalAura 6s linear infinite!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal.pyramid .ggg-v7-portalImage::before{\r\n  background:conic-gradient(from 0deg,#f1d27a,#267eff,#09122f,#ffffff,#f1d27a);\r\n  animation-direction:reverse;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portalImage img{\r\n  position:relative;\r\n  z-index:1;\r\n  width:100%!important;\r\n  height:100%!important;\r\n  border-radius:inherit!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal.city .ggg-v7-portalImage img{object-fit:cover!important;}\r\n#joinCircleScreen .ggg-v7-portal.pyramid .ggg-v7-portalImage img{object-fit:contain!important;}\r\n\r\n#joinCircleScreen .ggg-v7-portal strong{\r\n  margin-top:20px!important;\r\n  font-size:clamp(1.15rem,2vw,1.75rem)!important;\r\n}\r\n\r\n@keyframes gggV8PortalAura{\r\n  to{filter:blur(15px) hue-rotate(360deg);transform:rotate(360deg) scale(1.02)}\r\n}\r\n\r\n\/* ---------- One real owner interface ---------- *\/\r\n#enterCircleScreen .ggg-v8-ownerSystem{\r\n  position:relative;\r\n  display:none;\r\n  width:100%;\r\n  height:100dvh;\r\n  min-height:100dvh;\r\n  overflow:hidden;\r\n  color:#fff;\r\n  font-family:Arial,sans-serif;\r\n  isolation:isolate;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-ownerSystem.is-open{display:block!important;}\r\n\r\n.ggg-v8-ownerTop{\r\n  position:absolute;\r\n  top:clamp(20px,4vh,42px);\r\n  left:50%;\r\n  z-index:20;\r\n  width:min(760px,72vw);\r\n  transform:translateX(-50%);\r\n  text-align:center;\r\n  pointer-events:none;\r\n}\r\n\r\n.ggg-v8-ownerTop small{\r\n  display:block;\r\n  color:#8df7ff;\r\n  font-size:9px;\r\n  font-weight:900;\r\n  letter-spacing:.24em;\r\n  text-transform:uppercase;\r\n}\r\n\r\n.ggg-v8-ownerTop h1{\r\n  margin:6px 0 0;\r\n  color:#fff;\r\n  font-size:clamp(1.8rem,4.5vw,4.2rem);\r\n  line-height:.95;\r\n  letter-spacing:.11em;\r\n  text-transform:uppercase;\r\n  text-shadow:0 0 30px rgba(80,235,255,.44);\r\n}\r\n\r\n.ggg-v8-cardLink{\r\n  position:absolute;\r\n  top:clamp(22px,4vh,44px);\r\n  right:clamp(16px,3vw,40px);\r\n  z-index:40;\r\n  min-height:42px;\r\n  padding:0 19px;\r\n  overflow:hidden;\r\n  border:0;\r\n  border-radius:999px;\r\n  color:#fff;\r\n  background:#020713;\r\n  font-size:8px;\r\n  font-weight:1000;\r\n  letter-spacing:.15em;\r\n  text-transform:uppercase;\r\n  cursor:pointer;\r\n  box-shadow:0 0 30px rgba(0,232,255,.26);\r\n}\r\n\r\n.ggg-v8-cardLink::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-300%;\r\n  z-index:-2;\r\n  background:conic-gradient(#5cf8ff,#3b79ff,#6dffb4,#f4d27a,#5cf8ff);\r\n  animation:gggV8Spin 3.8s linear infinite;\r\n}\r\n\r\n.ggg-v8-cardLink::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:2px;\r\n  z-index:-1;\r\n  border-radius:inherit;\r\n  background:rgba(2,8,20,.95);\r\n}\r\n\r\n@keyframes gggV8Spin{to{transform:rotate(360deg)}}\r\n\r\n.ggg-v8-ownerStage{\r\n  position:absolute;\r\n  left:50%;\r\n  top:53%;\r\n  width:min(940px,96vw);\r\n  height:min(700px,82dvh);\r\n  transform:translate(-50%,-50%);\r\n}\r\n\r\n.ggg-v8-ownerStage::before,\r\n.ggg-v8-ownerStage::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  left:50%;\r\n  top:50%;\r\n  border:1px solid rgba(104,240,255,.12);\r\n  border-radius:50%;\r\n  transform:translate(-50%,-50%);\r\n  pointer-events:none;\r\n}\r\n\r\n.ggg-v8-ownerStage::before{width:62%;aspect-ratio:1;box-shadow:0 0 70px rgba(0,224,255,.08)}\r\n.ggg-v8-ownerStage::after{width:36%;aspect-ratio:1;border-color:rgba(244,210,122,.10)}\r\n\r\n.ggg-v8-core{\r\n  position:absolute;\r\n  left:50%;\r\n  top:50%;\r\n  z-index:5;\r\n  width:150px;\r\n  height:150px;\r\n  display:grid;\r\n  place-items:center;\r\n  padding:18px;\r\n  border:1px solid rgba(244,210,122,.38);\r\n  border-radius:50%;\r\n  color:#fff;\r\n  background:radial-gradient(circle,rgba(16,41,68,.32),rgba(0,0,0,.18) 70%);\r\n  box-shadow:0 0 42px rgba(60,218,255,.17),inset 0 0 30px rgba(244,210,122,.08);\r\n  transform:translate(-50%,-50%);\r\n  text-align:center;\r\n  backdrop-filter:blur(8px);\r\n}\r\n\r\n.ggg-v8-core strong{font-size:13px;letter-spacing:.15em;text-transform:uppercase}\r\n.ggg-v8-core small{display:block;margin-top:6px;color:rgba(255,255,255,.58);font-size:8px;letter-spacing:.11em;text-transform:uppercase}\r\n\r\n.ggg-v8-gateway,\r\n.ggg-v8-asset{\r\n  position:absolute;\r\n  z-index:10;\r\n  width:132px;\r\n  height:132px;\r\n  display:flex;\r\n  flex-direction:column;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:12px;\r\n  border:1px solid rgba(91,239,255,.38);\r\n  border-radius:50%;\r\n  color:#fff;\r\n  background:radial-gradient(circle at 34% 25%,rgba(255,255,255,.18),transparent 20%),radial-gradient(circle,rgba(15,120,160,.21),rgba(0,4,14,.86) 72%);\r\n  box-shadow:0 0 30px rgba(0,225,255,.20),inset 0 0 24px rgba(255,255,255,.06);\r\n  text-align:center;\r\n  cursor:pointer;\r\n  transition:opacity .3s ease,transform .3s ease,box-shadow .3s ease;\r\n  animation:gggV8Drift 5.2s ease-in-out infinite;\r\n}\r\n\r\n.ggg-v8-gateway:hover,.ggg-v8-asset:hover{\r\n  z-index:15;\r\n  transform:scale(1.08);\r\n  box-shadow:0 0 44px rgba(0,232,255,.42),0 0 90px rgba(64,255,184,.16);\r\n}\r\n\r\n.ggg-v8-gateway strong,.ggg-v8-asset strong{font-size:14px;letter-spacing:.11em;text-transform:uppercase}\r\n.ggg-v8-gateway small,.ggg-v8-asset small{margin-top:7px;color:rgba(255,255,255,.62);font-size:8px;line-height:1.25;text-transform:uppercase}\r\n.ggg-v8-gateway[data-owner-mode=\"use\"]{left:50%;top:14%;transform:translateX(-50%)}\r\n.ggg-v8-gateway[data-owner-mode=\"rent\"]{right:9%;top:47%}\r\n.ggg-v8-gateway[data-owner-mode=\"trade\"]{left:50%;bottom:4%;transform:translateX(-50%)}\r\n.ggg-v8-gateway[data-owner-mode=\"exchange\"]{left:9%;top:47%}\r\n.ggg-v8-gateway[data-owner-mode=\"use\"]:hover,.ggg-v8-gateway[data-owner-mode=\"trade\"]:hover{transform:translateX(-50%) scale(1.08)}\r\n.ggg-v8-gateway:nth-child(2){animation-delay:-1.2s}.ggg-v8-gateway:nth-child(3){animation-delay:-2.4s}.ggg-v8-gateway:nth-child(4){animation-delay:-3.6s}\r\n\r\n@keyframes gggV8Drift{0%,100%{margin-top:0}50%{margin-top:-9px}}\r\n\r\n.ggg-v8-orbitItems{position:absolute;inset:0;z-index:12;pointer-events:none}\r\n.ggg-v8-orbitItems.is-visible{pointer-events:auto}\r\n.ggg-v8-ownerStage.mode-open .ggg-v8-gateway{opacity:0;pointer-events:none;transform:scale(.72)}\r\n.ggg-v8-ownerStage.mode-open .ggg-v8-gateway[data-owner-mode=\"use\"],\r\n.ggg-v8-ownerStage.mode-open .ggg-v8-gateway[data-owner-mode=\"trade\"]{transform:translateX(-50%) scale(.72)}\r\n\r\n.ggg-v8-asset{width:118px;height:118px;overflow:hidden}\r\n.ggg-v8-asset:nth-child(1){left:50%;top:9%;transform:translateX(-50%)}\r\n.ggg-v8-asset:nth-child(2){right:8%;top:37%}\r\n.ggg-v8-asset:nth-child(3){right:21%;bottom:3%}\r\n.ggg-v8-asset:nth-child(4){left:21%;bottom:3%}\r\n.ggg-v8-asset:nth-child(5){left:8%;top:37%}\r\n.ggg-v8-asset:nth-child(6){left:50%;bottom:-2%;transform:translateX(-50%)}\r\n.ggg-v8-asset:nth-child(1):hover,.ggg-v8-asset:nth-child(6):hover{transform:translateX(-50%) scale(1.08)}\r\n\r\n.ggg-v8-modeBack{\r\n  position:absolute;\r\n  left:50%;\r\n  bottom:-10px;\r\n  z-index:30;\r\n  display:none;\r\n  min-height:38px;\r\n  padding:0 16px;\r\n  border:1px solid rgba(255,255,255,.20);\r\n  border-radius:999px;\r\n  color:#fff;\r\n  background:rgba(1,7,18,.72);\r\n  font-size:8px;\r\n  font-weight:900;\r\n  letter-spacing:.12em;\r\n  text-transform:uppercase;\r\n  transform:translateX(-50%);\r\n  cursor:pointer;\r\n}\r\n.ggg-v8-ownerStage.mode-open .ggg-v8-modeBack{display:block}\r\n\r\n.ggg-v8-empty{\r\n  position:absolute;\r\n  left:50%;\r\n  top:74%;\r\n  z-index:15;\r\n  width:min(430px,82vw);\r\n  color:rgba(255,255,255,.68);\r\n  font-size:11px;\r\n  line-height:1.55;\r\n  text-align:center;\r\n  transform:translateX(-50%);\r\n}\r\n\r\n.ggg-v8-detail{\r\n  position:fixed;\r\n  inset:0;\r\n  z-index:2147483647;\r\n  display:none;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:4vw;\r\n  background:rgba(0,3,12,.60);\r\n  backdrop-filter:blur(13px);\r\n}\r\n.ggg-v8-detail.open{display:flex}\r\n.ggg-v8-detailPanel{\r\n  position:relative;\r\n  width:min(940px,94vw);\r\n  min-height:min(590px,76dvh);\r\n  max-height:86dvh;\r\n  overflow:auto;\r\n  display:flex;\r\n  flex-direction:column;\r\n  justify-content:center;\r\n  padding:70px clamp(26px,7vw,84px) 48px;\r\n  border:1px solid rgba(97,239,255,.40);\r\n  border-radius:42px;\r\n  background:radial-gradient(circle at 82% 18%,rgba(0,229,255,.13),transparent 38%),linear-gradient(115deg,rgba(1,7,18,.94),rgba(1,7,18,.72));\r\n  box-shadow:0 0 80px rgba(0,232,255,.20),0 44px 120px rgba(0,0,0,.80);\r\n}\r\n.ggg-v8-detailClose{position:absolute;top:18px;right:18px;width:44px;height:44px;border:1px solid rgba(255,255,255,.25);border-radius:50%;color:#fff;background:rgba(0,0,0,.45);font-size:22px;cursor:pointer}\r\n.ggg-v8-detailPanel small{color:#7af5ff;font-weight:900;letter-spacing:.16em;text-transform:uppercase}\r\n.ggg-v8-detailPanel h2{margin:9px 0 13px;font-size:clamp(2.2rem,6vw,5rem);line-height:.92;text-transform:uppercase}\r\n.ggg-v8-detailPanel p{max-width:680px;color:rgba(255,255,255,.72);line-height:1.7}\r\n.ggg-v8-detailActions{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}\r\n.ggg-v8-detailActions button,.ggg-v8-detailActions a{min-height:44px;display:inline-grid;place-items:center;padding:0 18px;border:1px solid rgba(90,240,255,.38);border-radius:999px;color:#fff;background:rgba(0,220,255,.10);font-size:8px;font-weight:1000;letter-spacing:.10em;text-decoration:none;text-transform:uppercase;cursor:pointer}\r\n\r\n@media(max-width:760px){\r\n  #joinCircleScreen .joinOrbSystem.ggg-v7-portals{min-height:0!important;display:grid!important;grid-template-columns:1fr!important;gap:34px!important;padding-bottom:35px}\r\n  #joinCircleScreen .ggg-v7-portal.city,\r\n#joinCircleScreen .ggg-v7-portal.pyramid{\r\n  width:min(420px,84vw)!important;\r\n  margin:auto!important;\r\n}\r\n\r\n#joinCircleScreen .ggg-v7-portal.city .ggg-v7-portalImage,\r\n#joinCircleScreen .ggg-v7-portal.pyramid .ggg-v7-portalImage{\r\n  aspect-ratio:1.28\/1!important;\r\n}\r\n\r\n  .ggg-v8-ownerTop{top:76px;width:76vw}\r\n  .ggg-v8-ownerTop h1{font-size:1.7rem}\r\n  .ggg-v8-cardLink{\r\n  top:70px;\r\n  right:18px;\r\n  min-height:34px;\r\n  padding:0 14px;\r\n  font-size:7px;\r\n}\r\n  .ggg-v8-ownerStage{\r\n  top:48%;\r\n  width:100vw;\r\n  height:620px;\r\n}\r\n  .ggg-v8-ownerStage::before{width:92%}\r\n  .ggg-v8-core{width:112px;height:112px}\r\n  .ggg-v8-core strong{font-size:10px}\r\n  .ggg-v8-gateway{width:100px;height:100px;padding:9px}\r\n  .ggg-v8-gateway strong{font-size:11px}\r\n  .ggg-v8-gateway small{display:none}\r\n  .ggg-v8-gateway[data-owner-mode=\"use\"]{top:18%}\r\n  .ggg-v8-gateway[data-owner-mode=\"rent\"]{right:3%;top:46%}\r\n  .ggg-v8-gateway[data-owner-mode=\"trade\"]{bottom:8%}\r\n  .ggg-v8-gateway[data-owner-mode=\"exchange\"]{left:3%;top:46%}\r\n  .ggg-v8-asset{width:92px;height:92px;padding:8px}\r\n  .ggg-v8-asset strong{font-size:10px}\r\n  .ggg-v8-asset small{font-size:6.5px}\r\n  .ggg-v8-asset:nth-child(1){top:15%}\r\n  .ggg-v8-asset:nth-child(2){right:1%;top:39%}\r\n  .ggg-v8-asset:nth-child(3){right:10%;bottom:9%}\r\n  .ggg-v8-asset:nth-child(4){left:10%;bottom:9%}\r\n  .ggg-v8-asset:nth-child(5){left:1%;top:39%}\r\n  .ggg-v8-asset:nth-child(6){bottom:0}\r\n  .ggg-v8-detail{padding:3vw}\r\n  .ggg-v8-detailPanel{min-height:72dvh;border-radius:29px;padding:68px 23px 32px}\r\n}\r\n\r\n@media(prefers-reduced-motion:reduce){\r\n  .ggg-v8-gateway,.ggg-v8-asset,.ggg-v8-cardLink::before,#joinCircleScreen .ggg-v7-portalImage::before{animation:none!important}\r\n}\r\n<\/style>\r\n\r\n<script id=\"gggCircleV8RepairScript\">\r\n(function(){\r\n  \"use strict\";\r\n\r\n  const AJAX=window.GGGCircleAuth?.ajaxUrl||window.ajaxurl||\"\/GGG\/wp-admin\/admin-ajax.php\";\r\n  const CITY_CARD_URL=\"\/GGG\/rent-before-buying\/?citycard=1\";\r\n  const RESERVATIONS_URL=\"\/GGG\/fractional-ownership\/?fractional=1&reservations=1\";\r\n  let ownerData={loggedIn:false,access:false,assets:[]};\r\n  let activeItems=[];\r\n\r\n  const esc=value=>String(value??\"\").replace(\/&\/g,\"&amp;\").replace(\/<\/g,\"&lt;\").replace(\/>\/g,\"&gt;\").replace(\/\"\/g,\"&quot;\").replace(\/'\/g,\"&#039;\");\r\n\r\n  async function post(action,data={}){\r\n    const body=new FormData();\r\n    body.append(\"action\",action);\r\n    Object.entries(data).forEach(([key,value])=>body.append(key,value));\r\n    const response=await fetch(AJAX,{method:\"POST\",credentials:\"same-origin\",body});\r\n    const text=await response.text();\r\n    let result;\r\n    try{result=JSON.parse(text);}catch(error){throw new Error(\"WordPress returned an invalid response.\");}\r\n    if(!response.ok||result?.success!==true)throw new Error(result?.data?.message||\"The account connection did not respond.\");\r\n    return result.data||{};\r\n  }\r\n\r\n  function numberText(value){\r\n    if(value===null||value===undefined||value===\"\")return\"0.00\";\r\n    return String(value);\r\n  }\r\n\r\n  function normalizeOwnerData(vault={},card={}){\r\n    const balances=card?.balances||vault?.wallet?.balances||vault?.balances||{};\r\n    const definitions=[\r\n      [\"bc\",\"Bliss Coin\",\"Credits\",balances.bc||balances.blissCoin],\r\n      [\"air\",\"Air\",\"Flight Time\",balances.air],\r\n      [\"aqua\",\"Aqua\",\"Water Time\",balances.aqua],\r\n      [\"gastro\",\"Gastro\",\"Chef Time\",balances.gastro],\r\n      [\"land\",\"Land\",\"Property Time\",balances.land]\r\n    ];\r\n    const assets=definitions.map(([key,name,unit,source])=>({\r\n      id:\"balance-\"+key,key,name,unit,\r\n      balance:numberText(source?.balance??source??0),\r\n      value:numberText(source?.value??\"$0.00\"),\r\n      kind:\"balance\"\r\n    }));\r\n    const issued=[...(Array.isArray(vault?.assets)?vault.assets:[]),...(Array.isArray(vault?.ownerships)?vault.ownerships:[])];\r\n    issued.forEach((item,index)=>assets.push({\r\n      id:String(item.id||\"issued-\"+index),\r\n      key:String(item.type||item.group||\"ownership\").toLowerCase(),\r\n      name:String(item.name||item.title||\"Owned Access\"),\r\n      unit:String(item.unit||item.meta||\"Issued Entitlement\"),\r\n      balance:numberText(item.balance??item.quantity??item.available??\"Active\"),\r\n      value:numberText(item.value??item.price??\"\"),\r\n      kind:\"entitlement\",\r\n      raw:item\r\n    }));\r\n    const loggedIn=!!(card?.logged_in||vault?.logged_in||window.GGGCircleAuth?.loggedIn||document.body.classList.contains(\"logged-in\"));\r\n    const access=!!(vault?.has_level_8||vault?.owners_club_access||vault?.master_demo_owner||loggedIn);\r\n    return{loggedIn,access,assets,vault,card};\r\n  }\r\n\r\n  function correctLabels(){\r\n    const joinHeading=document.querySelector(\"#joinText h2\");\r\n    const joinCopy=document.querySelector(\"#joinText p\");\r\n    const enterHeading=document.querySelector(\"#enterText h2\");\r\n    const enterCopy=document.querySelector(\"#enterText p\");\r\n    if(joinHeading)joinHeading.innerHTML=\"Build<br>Your Circle\";\r\n    if(joinCopy)joinCopy.textContent=\"Build your City Card or enter GGG Level Access.\";\r\n    if(enterHeading)enterHeading.innerHTML=\"Enter<br>Your Circle\";\r\n    if(enterCopy)enterCopy.textContent=\"Use, rent, trade, or exchange what belongs to you.\";\r\n    document.querySelectorAll(\"#joinCircleScreen .joinTitle\").forEach(title=>title.textContent=\"Build Your Circle\");\r\n  }\r\n\r\n  function buildOwnerSystem(){\r\n    const content=document.querySelector(\"#enterCircleScreen .enterContent\");\r\n    if(!content)throw new Error(\"Enter Your Circle container was not found.\");\r\n    const systems=[...content.querySelectorAll(\":scope > .enterSystem\")];\r\n    const system=systems[0]||document.createElement(\"div\");\r\n    systems.slice(1).forEach(duplicate=>duplicate.remove());\r\n    document.getElementById(\"enterLayer\")?.remove();\r\n    system.className=\"enterSystem ggg-v8-ownerSystem\";\r\n    system.innerHTML=`\r\n      <header class=\"ggg-v8-ownerTop\"><small>Level 8 \u00b7 Private Owner Network<\/small><h1>Your Circle<\/h1><\/header>\r\n      <button id=\"gggV8OpenCard\" class=\"ggg-v8-cardLink\" type=\"button\">City Card<\/button>\r\n      <div id=\"gggV8OwnerStage\" class=\"ggg-v8-ownerStage\">\r\n        <div id=\"gggV8Core\" class=\"ggg-v8-core\"><div><strong>Your Assets<\/strong><small>Choose an action<\/small><\/div><\/div>\r\n        <button class=\"ggg-v8-gateway\" type=\"button\" data-owner-mode=\"use\"><strong>Use<\/strong><small>Activate owned value<\/small><\/button>\r\n        <button class=\"ggg-v8-gateway\" type=\"button\" data-owner-mode=\"rent\"><strong>Rent<\/strong><small>List unused time<\/small><\/button>\r\n        <button class=\"ggg-v8-gateway\" type=\"button\" data-owner-mode=\"trade\"><strong>Trade<\/strong><small>Owner marketplace<\/small><\/button>\r\n        <button class=\"ggg-v8-gateway\" type=\"button\" data-owner-mode=\"exchange\"><strong>Exchange<\/strong><small>Move time and access<\/small><\/button>\r\n        <div id=\"gggV8OrbitItems\" class=\"ggg-v8-orbitItems\"><\/div>\r\n        <button id=\"gggV8ModeBack\" class=\"ggg-v8-modeBack\" type=\"button\">\u2190 Owner Actions<\/button>\r\n      <\/div>\r\n      <div id=\"gggV8Detail\" class=\"ggg-v8-detail\" aria-hidden=\"true\">\r\n        <article class=\"ggg-v8-detailPanel\"><button class=\"ggg-v8-detailClose\" type=\"button\" aria-label=\"Close\">\u00d7<\/button><div id=\"gggV8DetailBody\"><\/div><\/article>\r\n      <\/div>`;\r\n    if(!system.parentNode)content.appendChild(system);\r\n    return system;\r\n  }\r\n\r\n  async function loadOwner(){\r\n    const results=await Promise.allSettled([post(\"ggg_get_current_user_vault_access\"),post(\"ggg_get_city_card_data\")]);\r\n    const vault=results[0].status===\"fulfilled\"?results[0].value:{};\r\n    const card=results[1].status===\"fulfilled\"?results[1].value:{};\r\n    ownerData=normalizeOwnerData(vault,card);\r\n    return ownerData;\r\n  }\r\n\r\n  function showSystem(show){\r\n    const system=document.querySelector(\"#enterCircleScreen .ggg-v8-ownerSystem\");\r\n    const gate=document.getElementById(\"enterSignGate\");\r\n    if(system)system.classList.toggle(\"is-open\",!!show);\r\n    if(system){system.style.display=show?\"block\":\"none\";system.style.opacity=show?\"1\":\"0\";system.style.visibility=show?\"visible\":\"hidden\";system.style.pointerEvents=show?\"auto\":\"none\";}\r\n    if(gate){gate.style.display=show?\"none\":\"flex\";gate.style.visibility=show?\"hidden\":\"visible\";gate.style.pointerEvents=show?\"none\":\"auto\";}\r\n  }\r\n\r\n  async function openOwnerScreen(){\r\n    document.getElementById(\"circleEntryScreen\")?.style.setProperty(\"display\",\"none\");\r\n    document.getElementById(\"joinCircleScreen\")?.style.setProperty(\"display\",\"none\");\r\n    const screen=document.getElementById(\"enterCircleScreen\");\r\n    if(screen){screen.style.display=\"block\";screen.style.opacity=\"1\";screen.style.visibility=\"visible\";screen.style.pointerEvents=\"auto\";}\r\n    showSystem(false);\r\n    try{await loadOwner();}catch(error){ownerData=normalizeOwnerData({},{});}\r\n    showSystem(ownerData.loggedIn);\r\n  }\r\n\r\n  function resetOwnerStage(){\r\n    const stage=document.getElementById(\"gggV8OwnerStage\");\r\n    const orbit=document.getElementById(\"gggV8OrbitItems\");\r\n    const core=document.getElementById(\"gggV8Core\");\r\n    if(stage){\r\n  stage.classList.remove(\r\n    \"mode-open\",\r\n    \"mode-use\",\r\n    \"mode-rent\",\r\n    \"mode-trade\",\r\n    \"mode-exchange\"\r\n  );\r\n}\r\n    if(orbit){orbit.classList.remove(\"is-visible\");orbit.innerHTML=\"\";}\r\n    if(core)core.innerHTML=\"<div><strong>Your Assets<\/strong><small>Choose an action<\/small><\/div>\";\r\n    activeItems=[];\r\n  }\r\n\r\n  function renderOrbit(items, mode, emptyText){\r\n  const stage = document.getElementById(\"gggV8OwnerStage\");\r\n  const orbit = document.getElementById(\"gggV8OrbitItems\");\r\n  const core = document.getElementById(\"gggV8Core\");\r\n\r\n  if(!stage || !orbit) return;\r\n\r\n  const normalizedMode = String(mode || \"\").toLowerCase();\r\n\r\n  stage.classList.remove(\r\n    \"mode-use\",\r\n    \"mode-rent\",\r\n    \"mode-trade\",\r\n    \"mode-exchange\"\r\n  );\r\n\r\n  stage.classList.add(\r\n    \"mode-open\",\r\n    \"mode-\" + normalizedMode\r\n  );\r\n\r\n  activeItems = Array.isArray(items)\r\n    ? items.slice(0, 6)\r\n    : [];\r\n\r\n  if(core){\r\n    core.innerHTML = `\r\n      <div>\r\n        <strong>${esc(mode)}<\/strong>\r\n        <small>${esc(activeItems.length)} available<\/small>\r\n      <\/div>\r\n    `;\r\n  }\r\n\r\n  orbit.classList.add(\"is-visible\");\r\n\r\n  const assetModeClass =\r\n    normalizedMode === \"use\"\r\n      ? \" ggg-v8-useAsset\"\r\n      : \"\";\r\n\r\n  orbit.innerHTML = activeItems.length\r\n    ? activeItems.map((item, index) => `\r\n        <button\r\n          class=\"ggg-v8-asset${assetModeClass}\"\r\n          type=\"button\"\r\n          data-owner-item=\"${index}\"\r\n          style=\"animation-delay:${index * -0.75}s\"\r\n        >\r\n          <strong>${esc(item.name || \"Owner Asset\")}<\/strong>\r\n\r\n          <small>\r\n            ${esc(\r\n              item.balance ??\r\n              item.dates ??\r\n              item.location ??\r\n              item.unit ??\r\n              \"\"\r\n            )}\r\n          <\/small>\r\n        <\/button>\r\n      `).join(\"\")\r\n    : `<div class=\"ggg-v8-empty\">${esc(emptyText)}<\/div>`;\r\n}\r\n\r\n  async function openMode(mode){\r\n    const core=document.getElementById(\"gggV8Core\");\r\n    if(core)core.innerHTML=`<div><strong>${esc(mode)}<\/strong><small>Loading<\/small><\/div>`;\r\n    if(mode===\"use\"){\r\n      if(!ownerData.assets.length)await loadOwner();\r\n      renderOrbit(ownerData.assets,\"Use\",\"No issued City Card balance or ownership entitlement is connected to this account yet.\");\r\n      return;\r\n    }\r\n    if(mode===\"rent\"){\r\n      const eligible=ownerData.assets.filter(item=>item.kind===\"entitlement\"||item.key.includes(\"land\")||item.key.includes(\"property\"));\r\n      renderOrbit(eligible,\"Rent\",\"No rentable property entitlement is connected to this account. Public Level 8 inventory is not treated as something you own.\");\r\n      return;\r\n    }\r\n    if(mode===\"trade\"){\r\n      try{\r\n        const data=await post(\"ggg_l8_get_trade_posts\");\r\n        renderOrbit(Array.isArray(data.posts)?data.posts:[],\"Trade\",\"No active owner trade posts are published yet.\");\r\n      }catch(error){renderOrbit([],\"Trade\",error.message);}\r\n      return;\r\n    }\r\n    if(mode===\"exchange\"){\r\n      try{\r\n        const data=await post(\"ggg_l8_get_exchange_pins\");\r\n        renderOrbit(Array.isArray(data.pins)?data.pins:[],\"Exchange\",\"No active exchange properties or dates are published yet.\");\r\n      }catch(error){renderOrbit([],\"Exchange\",error.message);}\r\n    }\r\n  }\r\n\r\n  function openDetail(item,mode){\r\n    if(!item)return;\r\n    const detail=document.getElementById(\"gggV8Detail\");\r\n    const body=document.getElementById(\"gggV8DetailBody\");\r\n    const name=item.name||item.title||item.property||\"Owner Asset\";\r\n    const description=item.description||item.notes||item.unit||\"This record is connected to the signed-in owner system.\";\r\n    const value=item.value||item.price||item.wants||\"\";\r\n    const availability=item.availability||item.dates||item.balance||\"\";\r\n    const mainAction=mode===\"use\"?`<button type=\"button\" data-v8-reserve>Continue to Reservations<\/button>`:`<button type=\"button\" data-v8-request=\"${esc(mode)}\">Request ${esc(mode)}<\/button>`;\r\n    if(body)body.innerHTML=`<small>${esc(mode)} \u00b7 Verified account view<\/small><h2>${esc(name)}<\/h2><p>${esc(description)}<\/p><p>${value?`<strong>Value:<\/strong> ${esc(value)}<br>`:\"\"}${availability?`<strong>Available:<\/strong> ${esc(availability)}`:\"\"}<\/p><div class=\"ggg-v8-detailActions\">${mainAction}<a href=\"${CITY_CARD_URL}\">Open City Card<\/a><\/div>`;\r\n    if(detail){detail.classList.add(\"open\");detail.setAttribute(\"aria-hidden\",\"false\");}\r\n  }\r\n\r\n  function closeDetail(){\r\n    const detail=document.getElementById(\"gggV8Detail\");\r\n    if(detail){detail.classList.remove(\"open\");detail.setAttribute(\"aria-hidden\",\"true\");}\r\n  }\r\n\r\n  function initialize(){\r\n    correctLabels();\r\n    buildOwnerSystem();\r\n    resetOwnerStage();\r\n  }\r\n\r\n  window.addEventListener(\"click\",function(event){\r\n    const target=event.target;\r\n    if(!(target instanceof Element)||!target.closest(\"#enterZone\"))return;\r\n    event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();\r\n    openOwnerScreen();\r\n  },true);\r\n\r\n  document.addEventListener(\"click\",function(event){\r\n    const target=event.target;\r\n    if(!(target instanceof Element))return;\r\n    if(target.closest(\"#gggV8OpenCard\")){event.preventDefault();window.location.href=CITY_CARD_URL;return;}\r\n    const mode=target.closest(\"[data-owner-mode]\");\r\n    if(mode){event.preventDefault();openMode(mode.dataset.ownerMode);return;}\r\n    if(target.closest(\"#gggV8ModeBack\")){event.preventDefault();resetOwnerStage();return;}\r\n    const item=target.closest(\"[data-owner-item]\");\r\n    if(item){event.preventDefault();openDetail(activeItems[Number(item.dataset.ownerItem)],document.getElementById(\"gggV8Core\")?.querySelector(\"strong\")?.textContent||\"Use\");return;}\r\n    if(target.closest(\".ggg-v8-detailClose\")||target.id===\"gggV8Detail\"){event.preventDefault();closeDetail();return;}\r\n    if(target.closest(\"[data-v8-reserve]\")){\r\n      event.preventDefault();closeDetail();\r\n      if(typeof window.gggOpenLevel8Reservations===\"function\")window.gggOpenLevel8Reservations();\r\n      else window.location.href=RESERVATIONS_URL;\r\n      return;\r\n    }\r\n    const request=target.closest(\"[data-v8-request]\");\r\n    if(request){event.preventDefault();alert(\"The \"+request.dataset.v8Request+\" request is ready for the secure owner-action endpoint. No ownership will be changed from the browser alone.\");}\r\n    if(target.closest(\"#gggEnterLoginBtn\"))setTimeout(async()=>{try{await loadOwner();showSystem(ownerData.loggedIn);}catch(error){}},1100);\r\n  });\r\n\r\n  try{initialize();}catch(error){console.error(\"GGG Circle V8 repair failed:\",error);}\r\n})();\r\n<\/script>\r\n\r\n<!-- =========================================================\r\nGGG ENTER YOUR CIRCLE \u2014 MOBILE ORBIT + LIGHTING FIX V8.1\r\n========================================================= -->\r\n\r\n<style id=\"gggEnterCircleMobileFixV81\">\r\n\/* City Card sits below the 48px menu button at top:18px. *\/\r\n#enterCircleScreen .ggg-v8-cardLink{\r\n  top:66px!important;\r\n  right:18px!important;\r\n}\r\n\r\n\/* Remove the center text circle and leave the background Crown visible. *\/\r\n#enterCircleScreen .ggg-v8-core{\r\n  display:none!important;\r\n}\r\n\r\n\/* Use one shared center and true X\/Y orbital coordinates. *\/\r\n#enterCircleScreen .ggg-v8-ownerStage{\r\n  --orbit-x:260px;\r\n  --orbit-x-neg:-260px;\r\n  --orbit-y:215px;\r\n  --orbit-y-neg:-215px;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway{\r\n  left:50%!important;\r\n  top:50%!important;\r\n  right:auto!important;\r\n  bottom:auto!important;\r\n  overflow:visible;\r\n  border:2px solid transparent!important;\r\n  background:\r\n    radial-gradient(circle at 34% 24%,rgba(255,255,255,.28),transparent 19%) padding-box,\r\n    radial-gradient(circle,rgba(5,34,64,.88),rgba(0,3,13,.96) 73%) padding-box,\r\n    conic-gradient(from 0deg,var(--v8-a),var(--v8-b),#f4d27a,var(--v8-a)) border-box!important;\r\n  box-shadow:\r\n    0 0 22px var(--v8-glow),\r\n    0 0 58px var(--v8-glow),\r\n    inset 0 0 28px rgba(255,255,255,.08)!important;\r\n  transform:translate(-50%,-50%) translate(var(--x),var(--y))!important;\r\n  animation:gggV81Float 5.4s ease-in-out infinite,\r\n            gggV81Pulse 2.8s ease-in-out infinite!important;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-8px;\r\n  z-index:-1;\r\n  border:1px solid var(--v8-a);\r\n  border-radius:50%;\r\n  opacity:.52;\r\n  filter:blur(1px);\r\n  box-shadow:0 0 20px var(--v8-glow);\r\n  animation:gggV81Halo 3.6s ease-in-out infinite;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-18px;\r\n  z-index:-2;\r\n  border-radius:50%;\r\n  background:radial-gradient(circle,transparent 48%,var(--v8-glow) 70%,transparent 74%);\r\n  opacity:.40;\r\n  animation:gggV81Rotate 8s linear infinite;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway strong{\r\n  color:#fff;\r\n  text-shadow:0 0 9px #fff,0 0 21px var(--v8-a);\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway small{\r\n  color:rgba(240,252,255,.75);\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway[data-owner-mode=\"use\"]{\r\n  --x:0px;--y:var(--orbit-y-neg);\r\n  --v8-a:#78f8ff;--v8-b:#42ffa9;--v8-glow:rgba(63,239,255,.48);\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway[data-owner-mode=\"rent\"]{\r\n  --x:var(--orbit-x);--y:0px;\r\n  --v8-a:#50ffae;--v8-b:#f4d27a;--v8-glow:rgba(64,255,166,.44);\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway[data-owner-mode=\"trade\"]{\r\n  --x:0px;--y:var(--orbit-y);\r\n  --v8-a:#d58cff;--v8-b:#4b8dff;--v8-glow:rgba(155,102,255,.46);\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway[data-owner-mode=\"exchange\"]{\r\n  --x:var(--orbit-x-neg);--y:0px;\r\n  --v8-a:#4fc7ff;--v8-b:#4267ff;--v8-glow:rgba(56,141,255,.48);\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-gateway:hover{\r\n  transform:translate(-50%,-50%) translate(var(--x),var(--y)) scale(1.08)!important;\r\n}\r\n\r\n@keyframes gggV81Float{\r\n  0%,100%{margin-top:0}\r\n  50%{margin-top:-9px}\r\n}\r\n\r\n@keyframes gggV81Pulse{\r\n  0%,100%{filter:brightness(.94) saturate(1)}\r\n  50%{filter:brightness(1.18) saturate(1.24)}\r\n}\r\n\r\n@keyframes gggV81Halo{\r\n  0%,100%{transform:scale(.96);opacity:.32}\r\n  50%{transform:scale(1.06);opacity:.72}\r\n}\r\n\r\n@keyframes gggV81Rotate{\r\n  to{transform:rotate(360deg)}\r\n}\r\n\r\n@media(max-width:760px){\r\n  #enterCircleScreen .ggg-v8-cardLink{\r\n    top:66px!important;\r\n    right:14px!important;\r\n    min-height:38px!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-ownerTop{\r\n    top:126px!important;\r\n    width:86vw!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-ownerTop small{\r\n    display:none!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-ownerTop h1{\r\n    font-size:clamp(1.45rem,7vw,2rem)!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-ownerStage{\r\n    --orbit-x:min(34vw,132px);\r\n    --orbit-x-neg:max(-34vw,-132px);\r\n    --orbit-y:min(23vh,188px);\r\n    --orbit-y-neg:max(-23vh,-188px);\r\n    position:fixed!important;\r\n    inset:0!important;\r\n    width:100vw!important;\r\n    height:100dvh!important;\r\n    transform:none!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-gateway{\r\n    width:104px!important;\r\n    height:104px!important;\r\n    padding:10px!important;\r\n    left:50%!important;\r\n    top:54%!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-gateway strong{\r\n    font-size:12px!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-gateway small{\r\n    display:block!important;\r\n    margin-top:6px!important;\r\n    font-size:6.5px!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-modeBack{\r\n    bottom:calc(18px + env(safe-area-inset-bottom))!important;\r\n  }\r\n}\r\n\r\n@media(max-width:380px){\r\n  #enterCircleScreen .ggg-v8-ownerStage{\r\n    --orbit-x:126px;\r\n    --orbit-x-neg:-126px;\r\n    --orbit-y:168px;\r\n    --orbit-y-neg:-168px;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-gateway{\r\n    width:96px!important;\r\n    height:96px!important;\r\n  }\r\n}\r\n\r\n@media(prefers-reduced-motion:reduce){\r\n  #enterCircleScreen .ggg-v8-gateway,\r\n  #enterCircleScreen .ggg-v8-gateway::before,\r\n  #enterCircleScreen .ggg-v8-gateway::after{\r\n    animation:none!important;\r\n  }\r\n}\r\n\r\nhtml body #enterCircleScreen #gggV8OpenCard{\r\n  position:fixed!important;\r\n  top:68px!important;\r\nright:18px!important;\r\n  bottom:auto!important;\r\n  left:auto!important;\r\n  margin:0!important;\r\n  transform:none!important;\r\n  z-index:121!important;\r\n}\r\n\r\n\/* =========================================================\r\n   USE WALLET \u2014 CYAN\/GREEN ENERGY LEVELS\r\n========================================================= *\/\r\n\r\n#enterCircleScreen .ggg-v8-useAsset{\r\n  --use-a:#78f8ff;\r\n  --use-b:#42ffa9;\r\n  --use-glow:rgba(70,245,255,.48);\r\n\r\n  overflow:visible!important;\r\n  border:2px solid transparent!important;\r\n\r\n  background:\r\n    radial-gradient(\r\n  circle at 32% 23%,\r\n  rgba(255,255,255,.16),\r\n  transparent 18%\r\n) padding-box,\r\n    radial-gradient(\r\n      circle at center,\r\n      color-mix(in srgb,var(--use-a) 23%,transparent),\r\n      rgba(1,10,21,.94) 70%\r\n    ) padding-box,\r\n    conic-gradient(\r\n      from 0deg,\r\n      var(--use-a),\r\n      var(--use-b),\r\n      #d8fff3,\r\n      var(--use-a)\r\n    ) border-box!important;\r\n\r\n  box-shadow:\r\n    0 0 18px var(--use-glow),\r\n    0 0 48px color-mix(in srgb,var(--use-b) 28%,transparent),\r\n    inset 0 0 28px rgba(255,255,255,.09)!important;\r\n\r\n  animation:\r\n    gggUseFloat 5s ease-in-out infinite,\r\n    gggUseEnergy 3s ease-in-out infinite!important;\r\n}\r\n\r\n\/* Bliss Coin *\/\r\n#enterCircleScreen .ggg-v8-useAsset:nth-child(1){\r\n  --use-a:#9cffff;\r\n  --use-b:#65ffbf;\r\n  --use-glow:rgba(117,255,241,.58);\r\n}\r\n\r\n\/* Air *\/\r\n#enterCircleScreen .ggg-v8-useAsset:nth-child(2){\r\n  --use-a:#61efff;\r\n  --use-b:#49baff;\r\n  --use-glow:rgba(65,218,255,.56);\r\n}\r\n\r\n\/* Aqua *\/\r\n#enterCircleScreen .ggg-v8-useAsset:nth-child(3){\r\n  --use-a:#24dfff;\r\n  --use-b:#18f4d0;\r\n  --use-glow:rgba(24,225,255,.53);\r\n}\r\n\r\n\/* Gastro *\/\r\n#enterCircleScreen .ggg-v8-useAsset:nth-child(4){\r\n  --use-a:#6dffc1;\r\n  --use-b:#b9ff78;\r\n  --use-glow:rgba(79,255,181,.50);\r\n}\r\n\r\n\/* Land *\/\r\n#enterCircleScreen .ggg-v8-useAsset:nth-child(5){\r\n  --use-a:#a9ff7d;\r\n  --use-b:#46e6b0;\r\n  --use-glow:rgba(110,255,157,.48);\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-useAsset::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-8px;\r\n  z-index:-1;\r\n  border:1px solid var(--use-a);\r\n  border-radius:50%;\r\n  opacity:.48;\r\n  filter:blur(1px);\r\n  box-shadow:\r\n    0 0 17px var(--use-glow),\r\n    0 0 32px var(--use-glow);\r\n  animation:gggUseHalo 3.2s ease-in-out infinite;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-useAsset::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-17px;\r\n  z-index:-2;\r\n  border-radius:50%;\r\n  background:\r\n    conic-gradient(\r\n      from 0deg,\r\n      transparent,\r\n      var(--use-a),\r\n      transparent 32%,\r\n      var(--use-b),\r\n      transparent 68%\r\n    );\r\n  opacity:.23;\r\n  filter:blur(7px);\r\n  animation:gggUseSpin 8s linear infinite;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-useAsset strong{\r\n  color:#fff!important;\r\n  text-shadow:\r\n    0 0 8px #fff,\r\n    0 0 19px var(--use-a),\r\n    0 0 34px var(--use-b);\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-useAsset small{\r\n  color:rgba(225,255,250,.84)!important;\r\n  font-weight:800;\r\n}\r\n\r\n\/* Mobile: arrange all five Use balances around the black hole *\/\r\n@media(max-width:760px){\r\n\r\n  #enterCircleScreen .ggg-v8-useAsset{\r\n    left:50%!important;\r\n    top:51%!important;\r\n    right:auto!important;\r\n    bottom:auto!important;\r\n    width:94px!important;\r\n    height:94px!important;\r\n\r\n    transform:\r\n      translate(-50%,-50%)\r\n      translate(var(--use-x),var(--use-y))!important;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-useAsset:nth-child(1){\r\n    --use-x:0px;\r\n    --use-y:-174px;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-useAsset:nth-child(2){\r\n    --use-x:126px;\r\n    --use-y:-54px;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-useAsset:nth-child(3){\r\n    --use-x:79px;\r\n    --use-y:132px;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-useAsset:nth-child(4){\r\n    --use-x:-79px;\r\n    --use-y:132px;\r\n  }\r\n\r\n  #enterCircleScreen .ggg-v8-useAsset:nth-child(5){\r\n    --use-x:-126px;\r\n    --use-y:-54px;\r\n  }\r\n}\r\n\r\n@keyframes gggUseFloat{\r\n  0%,100%{margin-top:0}\r\n  50%{margin-top:-8px}\r\n}\r\n\r\n@keyframes gggUseEnergy{\r\n  0%,100%{filter:brightness(.92) saturate(1)}\r\n  50%{filter:brightness(1.20) saturate(1.28)}\r\n}\r\n\r\n@keyframes gggUseHalo{\r\n  0%,100%{transform:scale(.95);opacity:.32}\r\n  50%{transform:scale(1.07);opacity:.72}\r\n}\r\n\r\n@keyframes gggUseSpin{\r\n  to{transform:rotate(360deg)}\r\n}\r\n\r\n<\/style>\r\n\r\n<script id=\"gggOwnerBackControllerV9\">\r\n(function(){\r\n  \"use strict\";\r\n\r\n  function returnToOwnerActions(){\r\n    const stage = document.getElementById(\"gggV8OwnerStage\");\r\n    const orbit = document.getElementById(\"gggV8OrbitItems\");\r\n    const core = document.getElementById(\"gggV8Core\");\r\n    const detail = document.getElementById(\"gggV8Detail\");\r\n\r\n    if(stage){\r\n      stage.classList.remove(\r\n        \"mode-open\",\r\n        \"mode-use\",\r\n        \"mode-rent\",\r\n        \"mode-trade\",\r\n        \"mode-exchange\"\r\n      );\r\n    }\r\n\r\n    if(orbit){\r\n      orbit.classList.remove(\"is-visible\");\r\n      orbit.innerHTML = \"\";\r\n    }\r\n\r\n    if(core){\r\n      core.innerHTML = `\r\n        <div>\r\n          <strong>Your Assets<\/strong>\r\n          <small>Choose an action<\/small>\r\n        <\/div>\r\n      `;\r\n    }\r\n\r\n    if(detail){\r\n      detail.classList.remove(\"open\");\r\n      detail.setAttribute(\"aria-hidden\", \"true\");\r\n    }\r\n  }\r\n\r\n  function returnToCircleEntrance(){\r\n    const entry = document.getElementById(\"circleEntryScreen\");\r\n    const join = document.getElementById(\"joinCircleScreen\");\r\n    const enter = document.getElementById(\"enterCircleScreen\");\r\n\r\n    returnToOwnerActions();\r\n\r\n    if(join){\r\n      join.style.display = \"none\";\r\n    }\r\n\r\n    if(enter){\r\n      enter.style.display = \"none\";\r\n      enter.style.opacity = \"0\";\r\n      enter.style.visibility = \"hidden\";\r\n      enter.style.pointerEvents = \"none\";\r\n    }\r\n\r\n    if(entry){\r\n      entry.style.display = \"block\";\r\n      entry.style.opacity = \"1\";\r\n      entry.style.visibility = \"visible\";\r\n      entry.style.pointerEvents = \"auto\";\r\n      entry.classList.remove(\"zoomEnter\", \"zoomJoin\");\r\n    }\r\n\r\n    document.querySelectorAll(\r\n      \"#circleEntryScreen .circleText, \" +\r\n      \"#circleEntryScreen .circleZone, \" +\r\n      \"#circleEntryScreen #centerCrownText\"\r\n    ).forEach(function(element){\r\n      element.style.display = \"\";\r\n      element.style.opacity = \"\";\r\n      element.style.visibility = \"visible\";\r\n      element.style.pointerEvents = \"\";\r\n    });\r\n  }\r\n\r\n  window.addEventListener(\"click\", function(event){\r\n    const target = event.target;\r\n\r\n    if(!(target instanceof Element)) return;\r\n\r\n    const internalBack = target.closest(\"#gggV8ModeBack\");\r\n    const mainBack = target.closest(\r\n      \"#enterCircleScreen > .circleBack\"\r\n    );\r\n\r\n    if(!internalBack && !mainBack) return;\r\n\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    event.stopImmediatePropagation();\r\n\r\n    const stage = document.getElementById(\"gggV8OwnerStage\");\r\n    const modeIsOpen =\r\n      stage &&\r\n      stage.classList.contains(\"mode-open\");\r\n\r\n    if(internalBack || modeIsOpen){\r\n      returnToOwnerActions();\r\n      return;\r\n    }\r\n\r\n    returnToCircleEntrance();\r\n  }, true);\r\n\r\n  window.GGGOwnerBack = {\r\n    ownerActions: returnToOwnerActions,\r\n    circleEntrance: returnToCircleEntrance\r\n  };\r\n})();\r\n<\/script>\r\n\r\n<!-- =========================================================\r\nGGG LEVEL 8 \u2014 ENTER YOUR CIRCLE \/ RENT CONNECTION PATCH\r\n\r\nPASTE LOCATION:\r\nPaste this entire block AFTER the existing\r\n<script id=\"gggCircleV8RepairScript\">...<\/script>\r\nand after its current Circle CSS fixes, but BEFORE the final\r\n marker.\r\n\r\nDELETE NOTHING. This patch changes only the Rent gateway.\r\n========================================================= -->\r\n\r\n<style id=\"gggV8RentConnectionStyles\">\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-rent .ggg-v8-rentAction{\r\n  --rent-a:#b98cff;\r\n  --rent-b:#29e7ff;\r\n  border:2px solid transparent!important;\r\n  background:\r\n    radial-gradient(circle at 33% 23%,rgba(255,255,255,.28),transparent 19%) padding-box,\r\n    linear-gradient(145deg,rgba(31,13,64,.96),rgba(1,12,31,.94)) padding-box,\r\n    linear-gradient(135deg,var(--rent-a),var(--rent-b),#f4d27a) border-box!important;\r\n  box-shadow:\r\n    inset 0 0 25px rgba(185,140,255,.17),\r\n    0 0 16px rgba(41,231,255,.35),\r\n    0 0 44px rgba(185,140,255,.22)!important;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-rent .ggg-v8-rentAction:nth-child(2){\r\n  --rent-a:#29e7ff;\r\n  --rent-b:#4f78ff;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-rent .ggg-v8-rentAction:nth-child(3){\r\n  --rent-a:#f4d27a;\r\n  --rent-b:#d38cff;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-rent .ggg-v8-rentAction::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-9px;\r\n  z-index:-1;\r\n  border-radius:50%;\r\n  border:1px solid color-mix(in srgb,var(--rent-a) 38%,transparent);\r\n  box-shadow:0 0 24px color-mix(in srgb,var(--rent-b) 28%,transparent);\r\n  animation:gggRentPulse 2.8s ease-in-out infinite;\r\n}\r\n\r\n@keyframes gggRentPulse{\r\n  0%,100%{opacity:.35;transform:scale(.96)}\r\n  50%{opacity:.95;transform:scale(1.05)}\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-detailPanel.ggg-v8-rentPanel{\r\n  width:min(1120px,94vw)!important;\r\n  max-height:91dvh!important;\r\n  overflow:auto!important;\r\n  padding:70px clamp(20px,4vw,54px) 38px!important;\r\n  border-color:rgba(113,235,255,.30)!important;\r\n  background:\r\n    radial-gradient(circle at 84% 12%,rgba(185,140,255,.20),transparent 33%),\r\n    radial-gradient(circle at 12% 86%,rgba(41,231,255,.14),transparent 35%),\r\n    linear-gradient(135deg,rgba(3,8,23,.94),rgba(3,9,22,.78))!important;\r\n  backdrop-filter:blur(24px) saturate(145%);\r\n}\r\n\r\n.ggg-rent-head{margin-bottom:24px}\r\n.ggg-rent-head h2{max-width:850px!important;font-size:clamp(2rem,5vw,4.4rem)!important}\r\n.ggg-rent-head p{margin:0!important}\r\n\r\n.ggg-rent-summary{\r\n  display:grid;\r\n  grid-template-columns:repeat(4,minmax(0,1fr));\r\n  gap:10px;\r\n  margin:22px 0;\r\n}\r\n\r\n.ggg-rent-stat{\r\n  min-height:92px;\r\n  padding:16px;\r\n  border:1px solid rgba(126,231,255,.15);\r\n  border-radius:18px;\r\n  background:rgba(255,255,255,.035);\r\n}\r\n.ggg-rent-stat small{display:block!important;color:rgba(255,255,255,.50)!important;font-size:8px!important}\r\n.ggg-rent-stat strong{display:block;margin-top:8px;font-size:clamp(1.2rem,2.5vw,2rem)}\r\n\r\n.ggg-rent-form,.ggg-rent-stack{display:grid;gap:14px}\r\n.ggg-rent-formGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}\r\n.ggg-rent-field{display:grid;gap:7px}\r\n.ggg-rent-field.full{grid-column:1\/-1}\r\n.ggg-rent-field label,.ggg-rent-sectionTitle{\r\n  color:#8ff4ff;\r\n  font-size:9px;\r\n  font-weight:1000;\r\n  letter-spacing:.13em;\r\n  text-transform:uppercase;\r\n}\r\n.ggg-rent-field input,.ggg-rent-field select,.ggg-rent-field textarea{\r\n  width:100%;\r\n  min-height:48px;\r\n  padding:11px 13px;\r\n  border:1px solid rgba(130,231,255,.18);\r\n  border-radius:14px;\r\n  outline:0;\r\n  background:rgba(0,0,0,.32);\r\n  color:#fff;\r\n  font:inherit;\r\n}\r\n.ggg-rent-field textarea{min-height:92px;resize:vertical}\r\n.ggg-rent-field option{color:#06101e}\r\n\r\n.ggg-rent-entitlement,.ggg-rent-listing{\r\n  padding:18px;\r\n  border:1px solid rgba(130,231,255,.14);\r\n  border-radius:20px;\r\n  background:rgba(255,255,255,.035);\r\n}\r\n.ggg-rent-entitlement h3,.ggg-rent-listing h3{margin:0 0 8px;font-size:1.05rem}\r\n.ggg-rent-meta{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}\r\n.ggg-rent-meta span,.ggg-rent-status{\r\n  padding:7px 10px;\r\n  border:1px solid rgba(255,255,255,.12);\r\n  border-radius:999px;\r\n  color:rgba(255,255,255,.72);\r\n  font-size:8px;\r\n  font-weight:900;\r\n  letter-spacing:.08em;\r\n  text-transform:uppercase;\r\n}\r\n.ggg-rent-status{color:#91f7ff;border-color:rgba(41,231,255,.30)}\r\n\r\n.ggg-rent-unitGrid{display:flex;flex-wrap:wrap;gap:8px;padding-top:5px}\r\n.ggg-rent-unit{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:7px;\r\n  padding:9px 11px;\r\n  border:1px solid rgba(255,255,255,.13);\r\n  border-radius:999px;\r\n  background:rgba(255,255,255,.03);\r\n  color:#fff;\r\n  font-size:10px;\r\n}\r\n\r\n.ggg-rent-terms{\r\n  padding:15px;\r\n  border:1px solid rgba(244,210,122,.24);\r\n  border-radius:16px;\r\n  background:rgba(244,210,122,.055);\r\n  color:rgba(255,255,255,.70);\r\n  font-size:11px;\r\n  line-height:1.55;\r\n}\r\n.ggg-rent-consent{display:flex;align-items:flex-start;gap:10px;margin-top:11px;color:#fff}\r\n.ggg-rent-consent input{margin-top:3px}\r\n\r\n.ggg-rent-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:15px}\r\n.ggg-rent-button{\r\n  min-height:44px;\r\n  padding:0 18px;\r\n  border:1px solid rgba(90,240,255,.38);\r\n  border-radius:999px;\r\n  background:rgba(0,220,255,.10);\r\n  color:#fff;\r\n  font-size:9px;\r\n  font-weight:1000;\r\n  letter-spacing:.09em;\r\n  text-transform:uppercase;\r\n  cursor:pointer;\r\n}\r\n.ggg-rent-button.primary{border:0;background:linear-gradient(135deg,#35edff,#9d7cff);color:#04101d}\r\n.ggg-rent-button.warn{border-color:rgba(255,159,178,.34);background:rgba(255,85,122,.09)}\r\n.ggg-rent-button:disabled{opacity:.45;cursor:not-allowed}\r\n.ggg-rent-message{padding:13px;border-radius:14px;background:rgba(41,231,255,.08);color:#bdfaff;line-height:1.45}\r\n.ggg-rent-empty{text-align:center;padding:35px 15px}\r\n.ggg-rent-empty h3{font-size:clamp(1.4rem,4vw,2.3rem);margin:0 0 10px}\r\n\r\n@media(max-width:720px){\r\n  .ggg-rent-summary{grid-template-columns:repeat(2,minmax(0,1fr))}\r\n  .ggg-rent-formGrid{grid-template-columns:1fr}\r\n  .ggg-rent-field.full{grid-column:auto}\r\n  #enterCircleScreen .ggg-v8-detailPanel.ggg-v8-rentPanel{width:96vw!important;max-height:92dvh!important;padding:65px 17px 26px!important}\r\n}\r\n\r\n@media(prefers-reduced-motion:reduce){\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-rent .ggg-v8-rentAction::after{animation:none!important}\r\n}\r\n\r\n\/* RENT \u2014 THREE-ORB TRIANGLE *\/\r\n\r\n#enterCircleScreen\r\n.ggg-v8-ownerStage.mode-rent\r\n.ggg-v8-rentAction:nth-child(1){\r\n  top:6%!important;\r\n  bottom:auto!important;\r\n  left:50%!important;\r\n  right:auto!important;\r\n  transform:translateX(-50%)!important;\r\n}\r\n\r\n#enterCircleScreen\r\n.ggg-v8-ownerStage.mode-rent\r\n.ggg-v8-rentAction:nth-child(2){\r\n  top:auto!important;\r\n  bottom:20%!important;\r\n  left:13%!important;\r\n  right:auto!important;\r\n  transform:none!important;\r\n}\r\n\r\n#enterCircleScreen\r\n.ggg-v8-ownerStage.mode-rent\r\n.ggg-v8-rentAction:nth-child(3){\r\n  top:auto!important;\r\n  bottom:20%!important;\r\n  left:auto!important;\r\n  right:13%!important;\r\n  transform:none!important;\r\n}\r\n\r\n\/* Keep the centered top orb centered while hovering *\/\r\n#enterCircleScreen\r\n.ggg-v8-ownerStage.mode-rent\r\n.ggg-v8-rentAction:nth-child(1):hover{\r\n  transform:translateX(-50%) scale(1.08)!important;\r\n}\r\n\r\n\/* MOBILE *\/\r\n@media(max-width:720px){\r\n\r\n  #enterCircleScreen\r\n  .ggg-v8-ownerStage.mode-rent\r\n  .ggg-v8-rentAction:nth-child(1){\r\n    top:17%!important;\r\n  }\r\n\r\n  #enterCircleScreen\r\n  .ggg-v8-ownerStage.mode-rent\r\n  .ggg-v8-rentAction:nth-child(2){\r\n    left:3%!important;\r\n    bottom:18%!important;\r\n  }\r\n\r\n  #enterCircleScreen\r\n  .ggg-v8-ownerStage.mode-rent\r\n  .ggg-v8-rentAction:nth-child(3){\r\n    right:3%!important;\r\n    bottom:18%!important;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<script id=\"gggV8RentConnectionScript\">\r\n(function(){\r\n  \"use strict\";\r\n  if(window.GGGV8RentConnection)return;\r\n\r\n  const AJAX=\r\n    window.GGGL8DataEngineConfig?.ajaxUrl||\r\n    window.GGGL8ControlPanelConfig?.ajaxUrl||\r\n    window.GGGCircleAuth?.ajaxUrl||\r\n    window.ajaxurl||\r\n    \"\/GGG\/wp-admin\/admin-ajax.php\";\r\n\r\n  const NONCE=()=>\r\n    window.GGGL8DataEngineConfig?.nonce||\r\n    window.GGGL8ControlPanelConfig?.nonce||\r\n    window.GGGCircleAuth?.nonce||\r\n    \"\";\r\n\r\n  \/* Add the real Become a Host URL here later. *\/\r\n  const BECOME_HOST_URL=\"\";\r\n\r\n  let dashboard={entitlements:[],listings:[],summary:{}};\r\n  let loading=false;\r\n\r\n  const esc=value=>String(value??\"\")\r\n    .replace(\/&\/g,\"&amp;\").replace(\/<\/g,\"&lt;\").replace(\/>\/g,\"&gt;\")\r\n    .replace(\/\"\/g,\"&quot;\").replace(\/'\/g,\"&#039;\");\r\n\r\n  const num=value=>Number(value||0);\r\n  const qty=value=>Number.isInteger(num(value))?String(num(value)):num(value).toFixed(2);\r\n  const date=value=>value?String(value):\"Not assigned\";\r\n  const money=(value,currency=\"USD\")=>{\r\n    const amount=num(value);\r\n    try{return new Intl.NumberFormat(\"en-US\",{style:\"currency\",currency:currency||\"USD\"}).format(amount);}\r\n    catch(error){return `${currency||\"USD\"} ${amount.toFixed(2)}`;}\r\n  };\r\n\r\n  async function post(action,data={}){\r\n    const body=new FormData();\r\n    body.append(\"action\",action);\r\n    body.append(\"nonce\",NONCE());\r\n    Object.entries(data).forEach(([key,value])=>body.append(key,value));\r\n    const response=await fetch(AJAX,{method:\"POST\",credentials:\"same-origin\",body});\r\n    const raw=await response.text();\r\n    let result;\r\n    try{result=JSON.parse(raw);}catch(error){throw new Error(\"WordPress returned an invalid response.\");}\r\n    if(!response.ok||result?.success!==true){\r\n      throw new Error(result?.data?.message||result?.data||\"The Rent connection did not respond.\");\r\n    }\r\n    return result.data||{};\r\n  }\r\n\r\n  function detailElements(){\r\n    return{\r\n      overlay:document.getElementById(\"gggV8Detail\"),\r\n      panel:document.querySelector(\"#gggV8Detail .ggg-v8-detailPanel\"),\r\n      body:document.getElementById(\"gggV8DetailBody\")\r\n    };\r\n  }\r\n\r\n  function openPanel(html){\r\n    const {overlay,panel,body}=detailElements();\r\n    if(!overlay||!panel||!body)return;\r\n    panel.classList.add(\"ggg-v8-rentPanel\");\r\n    body.innerHTML=html;\r\n    overlay.classList.add(\"open\");\r\n    overlay.setAttribute(\"aria-hidden\",\"false\");\r\n  }\r\n\r\n  function clearRentPanelClass(){\r\n    detailElements().panel?.classList.remove(\"ggg-v8-rentPanel\");\r\n  }\r\n\r\n  async function loadDashboard(){\r\n    dashboard=await post(\"ggg_l8_get_my_rent_dashboard\");\r\n    dashboard.entitlements=Array.isArray(dashboard.entitlements)?dashboard.entitlements:[];\r\n    dashboard.listings=Array.isArray(dashboard.listings)?dashboard.listings:[];\r\n    dashboard.summary=dashboard.summary||{};\r\n    return dashboard;\r\n  }\r\n\r\n  function rentActions(){\r\n    const s=dashboard.summary||{};\r\n    return[\r\n      {id:\"list\",name:\"List My Property Time\",caption:`${qty(s.available_quantity)} available`},\r\n      {id:\"portfolio\",name:\"Rental Portfolio\",caption:`${dashboard.listings.length} listing${dashboard.listings.length===1?\"\":\"s\"}`},\r\n      {id:\"host\",name:\"Become a Host\",caption:\"Add another property\"}\r\n    ];\r\n  }\r\n\r\n  function renderRentOrbit(){\r\n    const stage=document.getElementById(\"gggV8OwnerStage\");\r\n    const orbit=document.getElementById(\"gggV8OrbitItems\");\r\n    if(!stage||!orbit)return;\r\n    stage.classList.remove(\"mode-use\",\"mode-trade\",\"mode-exchange\");\r\n    stage.classList.add(\"mode-open\",\"mode-rent\");\r\n    orbit.classList.add(\"is-visible\");\r\n    orbit.innerHTML=rentActions().map((item,index)=>`\r\n      <button class=\"ggg-v8-asset ggg-v8-rentAction\" type=\"button\" data-rent-action=\"${item.id}\" style=\"animation-delay:${index*-.7}s\">\r\n        <strong>${esc(item.name)}<\/strong><small>${esc(item.caption)}<\/small>\r\n      <\/button>`).join(\"\");\r\n  }\r\n\r\n  async function openRent(){\r\n    if(loading)return;\r\n    loading=true;\r\n    const core=document.getElementById(\"gggV8Core\");\r\n    if(core)core.innerHTML=\"<div><strong>Rent<\/strong><small>Loading owner records<\/small><\/div>\";\r\n    try{\r\n      await loadDashboard();\r\n      renderRentOrbit();\r\n    }catch(error){\r\n      const stage=document.getElementById(\"gggV8OwnerStage\");\r\n      const orbit=document.getElementById(\"gggV8OrbitItems\");\r\n      stage?.classList.add(\"mode-open\",\"mode-rent\");\r\n      if(orbit){orbit.classList.add(\"is-visible\");orbit.innerHTML=`<div class=\"ggg-v8-empty\">${esc(error.message)}<\/div>`;}\r\n    }finally{loading=false;}\r\n  }\r\n\r\n  function activeEntitlements(){\r\n    return dashboard.entitlements.filter(item=>String(item.status||\"active\")===\"active\");\r\n  }\r\n\r\n  function summaryHtml(){\r\n    const s=dashboard.summary||{};\r\n    return `<div class=\"ggg-rent-summary\">\r\n      <div class=\"ggg-rent-stat\"><small>Owned Time<\/small><strong>${qty(s.total_quantity)}<\/strong><\/div>\r\n      <div class=\"ggg-rent-stat\"><small>Available<\/small><strong>${qty(s.available_quantity)}<\/strong><\/div>\r\n      <div class=\"ggg-rent-stat\"><small>Listed \/ Reserved<\/small><strong>${qty(s.listed_quantity)} \/ ${qty(s.reserved_quantity)}<\/strong><\/div>\r\n      <div class=\"ggg-rent-stat\"><small>Owner Earnings<\/small><strong>${money(s.owner_earnings)}<\/strong><\/div>\r\n    <\/div>`;\r\n  }\r\n\r\n  function entitlementOptions(items){\r\n    return items.map(item=>`<option value=\"${esc(item.id)}\">${esc(item.property_name||\"Property Time\")} \u00b7 ${qty(item.available_quantity)} ${esc(item.unit_label||\"nights\")} available<\/option>`).join(\"\");\r\n  }\r\n\r\n  function showUnits(entitlementId){\r\n    const item=dashboard.entitlements.find(entry=>String(entry.id)===String(entitlementId));\r\n    const box=document.getElementById(\"gggRentUnits\");\r\n    if(!box)return;\r\n    const units=Array.isArray(item?.units)?item.units:[];\r\n    box.innerHTML=units.length?`\r\n      <span class=\"ggg-rent-sectionTitle\">Optional property units<\/span>\r\n      <div class=\"ggg-rent-unitGrid\">${units.map(unit=>`<label class=\"ggg-rent-unit\"><input type=\"checkbox\" name=\"selected_units\" value=\"${esc(unit)}\"> ${esc(unit)}<\/label>`).join(\"\")}<\/div>`:\"\";\r\n  }\r\n\r\n  function renderListForm(){\r\n    const items=activeEntitlements().filter(item=>num(item.available_quantity)>0);\r\n    if(!items.length){\r\n      openPanel(`<div class=\"ggg-rent-empty\">\r\n        <small>Rent \u00b7 Verified ownership required<\/small>\r\n        <h3>No verified property time is currently available to rent.<\/h3>\r\n        <p>Only an active day or week issued to this signed-in owner can be listed. Public purchase inventory is never treated as owned property time.<\/p>\r\n        <div class=\"ggg-rent-actions\" style=\"justify-content:center\">\r\n          <button class=\"ggg-rent-button primary\" type=\"button\" data-rent-explore>Explore Property Time<\/button>\r\n          <button class=\"ggg-rent-button\" type=\"button\" data-rent-host>Become a Host<\/button>\r\n        <\/div>\r\n      <\/div>`);\r\n      return;\r\n    }\r\n\r\n    const first=items[0];\r\n    openPanel(`<div class=\"ggg-rent-head\"><small>Bliss Administration \u00b7 Owner Rental Request<\/small><h2>List My Property Time<\/h2><p>Choose verified time from your account and submit it for review.<\/p><\/div>\r\n      ${summaryHtml()}\r\n      <form id=\"gggRentListingForm\" class=\"ggg-rent-form\">\r\n        <div class=\"ggg-rent-formGrid\">\r\n          <div class=\"ggg-rent-field full\"><label for=\"gggRentEntitlement\">Owned property time<\/label><select id=\"gggRentEntitlement\" name=\"entitlement_id\" required>${entitlementOptions(items)}<\/select><\/div>\r\n          <div class=\"ggg-rent-field\"><label for=\"gggRentSelection\">How to list it<\/label><select id=\"gggRentSelection\" name=\"selection_type\"><option value=\"full_interval\">Full owned interval<\/option><option value=\"short_stay\">Short stay \/ partial time<\/option><option value=\"selected_units\">Selected property units<\/option><\/select><\/div>\r\n          <div class=\"ggg-rent-field\"><label for=\"gggRentQuantity\">Quantity to list<\/label><input id=\"gggRentQuantity\" name=\"quantity\" type=\"number\" min=\"0.01\" step=\"0.01\" max=\"${esc(first.available_quantity)}\" value=\"${esc(first.available_quantity)}\" required><\/div>\r\n          <div class=\"ggg-rent-field\"><label for=\"gggRentStart\">Start date<\/label><input id=\"gggRentStart\" name=\"start_date\" type=\"date\" value=\"${esc(first.start_date||\"\")}\"><\/div>\r\n          <div class=\"ggg-rent-field\"><label for=\"gggRentEnd\">End date<\/label><input id=\"gggRentEnd\" name=\"end_date\" type=\"date\" value=\"${esc(first.end_date||\"\")}\"><\/div>\r\n          <div class=\"ggg-rent-field\"><label for=\"gggRentPrice\">Requested public price<\/label><input id=\"gggRentPrice\" name=\"public_price\" type=\"number\" min=\"0\" step=\"0.01\" placeholder=\"0.00\"><\/div>\r\n          <div class=\"ggg-rent-field\"><label for=\"gggRentCurrency\">Currency<\/label><select id=\"gggRentCurrency\" name=\"currency\"><option value=\"USD\">USD<\/option><option value=\"COP\">COP<\/option><\/select><\/div>\r\n          <div id=\"gggRentUnits\" class=\"ggg-rent-field full\"><\/div>\r\n          <div class=\"ggg-rent-field full\"><label for=\"gggRentNote\">Owner note<\/label><textarea id=\"gggRentNote\" name=\"owner_note\" placeholder=\"Anything Bliss Administration should review\"><\/textarea><\/div>\r\n        <\/div>\r\n        <div class=\"ggg-rent-terms\">\r\n          Submitting sends this verified property time to Bliss Administration for review. Approval may allow it to be marketed through Bliss Travel. This request does not transfer ownership. Dates, permitted divisions, public price, the stated 50\/50 distribution, refunds, taxes and payout remain subject to the signed Owner Rental Terms and final approval.\r\n          <label class=\"ggg-rent-consent\"><input name=\"agreement_accepted\" type=\"checkbox\" value=\"1\" required><span>I reviewed and accept the Owner Rental Terms for this request.<\/span><\/label>\r\n        <\/div>\r\n        <div id=\"gggRentFormMessage\"><\/div>\r\n        <div class=\"ggg-rent-actions\"><button class=\"ggg-rent-button primary\" type=\"submit\">Submit to Bliss Administration<\/button><button class=\"ggg-rent-button\" type=\"button\" data-rent-portfolio>View Rental Portfolio<\/button><\/div>\r\n      <\/form>`);\r\n    showUnits(first.id);\r\n  }\r\n\r\n  function entitlementCards(){\r\n    if(!dashboard.entitlements.length)return`<div class=\"ggg-rent-message\">No property-time entitlement has been issued to this account yet.<\/div>`;\r\n    return dashboard.entitlements.map(item=>`<article class=\"ggg-rent-entitlement\">\r\n      <h3>${esc(item.property_name||\"Property Time\")}<\/h3>\r\n      <div class=\"ggg-rent-meta\">\r\n        <span>Owned ${qty(item.total_quantity)} ${esc(item.unit_label||\"nights\")}<\/span>\r\n        <span>Used ${qty(item.used_quantity)}<\/span>\r\n        <span>Listed ${qty(item.listed_quantity)}<\/span>\r\n        <span>Reserved ${qty(item.reserved_quantity)}<\/span>\r\n        <span>Available ${qty(item.available_quantity)}<\/span>\r\n        <span>${esc(date(item.start_date))} \u2192 ${esc(date(item.end_date))}<\/span>\r\n      <\/div>\r\n    <\/article>`).join(\"\");\r\n  }\r\n\r\n  function listingActions(item){\r\n    const status=String(item.status||\"\");\r\n    const buttons=[];\r\n    if(status===\"active\")buttons.push(`<button class=\"ggg-rent-button\" type=\"button\" data-rent-listing-action=\"pause\" data-listing-id=\"${esc(item.id)}\">Pause<\/button>`);\r\n    if(status===\"paused\")buttons.push(`<button class=\"ggg-rent-button\" type=\"button\" data-rent-listing-action=\"resume\" data-listing-id=\"${esc(item.id)}\">Resume<\/button>`);\r\n    if([\"pending_review\",\"changes_requested\",\"approved\",\"active\",\"paused\"].includes(status))buttons.push(`<button class=\"ggg-rent-button warn\" type=\"button\" data-rent-listing-action=\"withdraw\" data-listing-id=\"${esc(item.id)}\">Withdraw<\/button>`);\r\n    return buttons.length?`<div class=\"ggg-rent-actions\">${buttons.join(\"\")}<\/div>`:\"\";\r\n  }\r\n\r\n  function listingCards(){\r\n    if(!dashboard.listings.length)return`<div class=\"ggg-rent-message\">You have no rental requests yet. Your dashboard remains available even when it is empty.<\/div>`;\r\n    return dashboard.listings.map(item=>`<article class=\"ggg-rent-listing\">\r\n      <span class=\"ggg-rent-status\">${esc(String(item.status||\"pending\").replaceAll(\"_\",\" \"))}<\/span>\r\n      <h3>${esc(item.property_name||\"Property Time\")}<\/h3>\r\n      <div class=\"ggg-rent-meta\">\r\n        <span>${qty(item.quantity)} ${esc(item.unit_label||\"nights\")}<\/span>\r\n        <span>${esc(date(item.start_date))} \u2192 ${esc(date(item.end_date))}<\/span>\r\n        <span>${money(item.public_price,item.currency)}<\/span>\r\n        <span>Owner share ${money(item.finance?.owner_share,item.currency)}<\/span>\r\n        <span>Payout ${esc(item.finance?.payout_status||\"not ready\")}<\/span>\r\n      <\/div>\r\n      ${item.admin_note?`<p><strong>Administration note:<\/strong> ${esc(item.admin_note)}<\/p>`:\"\"}\r\n      ${listingActions(item)}\r\n    <\/article>`).join(\"\");\r\n  }\r\n\r\n  function renderPortfolio(message=\"\"){\r\n    openPanel(`<div class=\"ggg-rent-head\"><small>Bliss Administration \u00b7 Signed-in Owner<\/small><h2>Rental Portfolio<\/h2><p>See what you own, what is committed, and the rental activity connected to your account.<\/p><\/div>\r\n      ${message?`<div class=\"ggg-rent-message\">${esc(message)}<\/div>`:\"\"}\r\n      ${summaryHtml()}\r\n      <div class=\"ggg-rent-stack\"><span class=\"ggg-rent-sectionTitle\">Property Time<\/span>${entitlementCards()}<span class=\"ggg-rent-sectionTitle\">Rental Requests<\/span>${listingCards()}<\/div>\r\n      <div class=\"ggg-rent-actions\"><button class=\"ggg-rent-button primary\" type=\"button\" data-rent-list>List Available Time<\/button><button class=\"ggg-rent-button\" type=\"button\" data-rent-host>Become a Host<\/button><\/div>`);\r\n  }\r\n\r\n  function renderHost(){\r\n    openPanel(`<div class=\"ggg-rent-head\"><small>Bliss Travel \u00b7 Host Onboarding<\/small><h2>Become a Host<\/h2><p>Add a property that is not already part of your verified Circle ownership.<\/p><\/div>\r\n      <div class=\"ggg-rent-terms\">Host onboarding is separate from listing an existing owner entitlement. Property approval, identity, payout, availability, marketing and host terms must be completed before a property can appear in Reservations.<\/div>\r\n      <div class=\"ggg-rent-actions\">\r\n        ${BECOME_HOST_URL?`<a class=\"ggg-rent-button primary\" href=\"${esc(BECOME_HOST_URL)}\">Start Host Onboarding<\/a>`:`<button class=\"ggg-rent-button primary\" type=\"button\" disabled>Host URL To Be Added<\/button>`}\r\n        <button class=\"ggg-rent-button\" type=\"button\" data-rent-portfolio>Return to Portfolio<\/button>\r\n      <\/div>`);\r\n  }\r\n\r\n  async function submitListing(form){\r\n    const message=document.getElementById(\"gggRentFormMessage\");\r\n    const submit=form.querySelector('[type=\"submit\"]');\r\n    const data=new FormData(form);\r\n    const units=[...form.querySelectorAll('[name=\"selected_units\"]:checked')].map(input=>input.value);\r\n    if(submit)submit.disabled=true;\r\n    if(message)message.innerHTML='<div class=\"ggg-rent-message\">Submitting for review\u2026<\/div>';\r\n    try{\r\n      const result=await post(\"ggg_l8_submit_rental_listing\",{\r\n        entitlement_id:data.get(\"entitlement_id\")||\"\",\r\n        selection_type:data.get(\"selection_type\")||\"full_interval\",\r\n        quantity:data.get(\"quantity\")||\"0\",\r\n        start_date:data.get(\"start_date\")||\"\",\r\n        end_date:data.get(\"end_date\")||\"\",\r\n        public_price:data.get(\"public_price\")||\"0\",\r\n        currency:data.get(\"currency\")||\"USD\",\r\n        selected_units:JSON.stringify(units),\r\n        owner_note:data.get(\"owner_note\")||\"\",\r\n        agreement_accepted:data.get(\"agreement_accepted\")?\"1\":\"0\",\r\n        terms_version:\"owner-rental-v1\"\r\n      });\r\n      dashboard=result.dashboard||await loadDashboard();\r\n      renderRentOrbit();\r\n      renderPortfolio(result.message||\"Rental request submitted.\");\r\n    }catch(error){\r\n      if(message)message.innerHTML=`<div class=\"ggg-rent-message\">${esc(error.message)}<\/div>`;\r\n      if(submit)submit.disabled=false;\r\n    }\r\n  }\r\n\r\n  async function updateListing(id,action){\r\n    try{\r\n      const result=await post(\"ggg_l8_owner_update_rental_listing\",{listing_id:id,listing_action:action});\r\n      dashboard=result.dashboard||await loadDashboard();\r\n      renderRentOrbit();\r\n      renderPortfolio(result.message||\"Rental listing updated.\");\r\n    }catch(error){renderPortfolio(error.message);}\r\n  }\r\n\r\n  function goToBuild(){\r\n    clearRentPanelClass();\r\n    document.querySelector(\"#gggV8Detail\")?.classList.remove(\"open\");\r\n    document.getElementById(\"joinZone\")?.click();\r\n  }\r\n\r\n  window.addEventListener(\"click\",function(event){\r\n    const target=event.target;\r\n    if(!(target instanceof Element))return;\r\n\r\n    if(target.closest('[data-owner-mode=\"rent\"]')){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();\r\n      openRent();return;\r\n    }\r\n\r\n    const action=target.closest(\"[data-rent-action]\");\r\n    if(action){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();\r\n      const type=action.dataset.rentAction;\r\n      if(type===\"list\")renderListForm();\r\n      else if(type===\"portfolio\")renderPortfolio();\r\n      else renderHost();\r\n      return;\r\n    }\r\n\r\n    if(target.closest(\"[data-rent-list]\")){event.preventDefault();renderListForm();return;}\r\n    if(target.closest(\"[data-rent-portfolio]\")){event.preventDefault();renderPortfolio();return;}\r\n    if(target.closest(\"[data-rent-host]\")){event.preventDefault();renderHost();return;}\r\n    if(target.closest(\"[data-rent-explore]\")){event.preventDefault();goToBuild();return;}\r\n\r\n    const listingAction=target.closest(\"[data-rent-listing-action]\");\r\n    if(listingAction){\r\n      event.preventDefault();\r\n      updateListing(listingAction.dataset.listingId,listingAction.dataset.rentListingAction);\r\n      return;\r\n    }\r\n\r\n    if(target.closest(\".ggg-v8-detailClose\")||target.id===\"gggV8Detail\")clearRentPanelClass();\r\n  },true);\r\n\r\n  document.addEventListener(\"change\",function(event){\r\n    if(event.target?.id!==\"gggRentEntitlement\")return;\r\n    const item=dashboard.entitlements.find(entry=>String(entry.id)===String(event.target.value));\r\n    const quantityInput=document.getElementById(\"gggRentQuantity\");\r\n    const start=document.getElementById(\"gggRentStart\");\r\n    const end=document.getElementById(\"gggRentEnd\");\r\n    if(quantityInput){quantityInput.max=item?.available_quantity||0;quantityInput.value=item?.available_quantity||0;}\r\n    if(start)start.value=item?.start_date||\"\";\r\n    if(end)end.value=item?.end_date||\"\";\r\n    showUnits(event.target.value);\r\n  });\r\n\r\n  document.addEventListener(\"submit\",function(event){\r\n    if(event.target?.id!==\"gggRentListingForm\")return;\r\n    event.preventDefault();\r\n    submitListing(event.target);\r\n  },true);\r\n\r\n  window.GGGV8RentConnection={reload:loadDashboard,open:openRent};\r\n})();\r\n<\/script>\r\n\r\n<!-- GGG LEVEL 8 \u2014 TRADE CONSTELLATION CUSTOMER PATCH\r\n     Paste this block at the very end of the same custom HTML block,\r\n     immediately before its final WordPress HTML-block closing marker.\r\n     Do not delete the Circle, Rent, City Card, or owner-login code. -->\r\n\r\n<style id=\"gggV8TradeConstellationStyles\">\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction{\r\n  --trade-a:#a971ff;\r\n  --trade-b:#30e8ff;\r\n  --trade-c:#f5d17a;\r\n  width:clamp(132px,12vw,190px)!important;\r\n  aspect-ratio:1!important;\r\n  border:2px solid transparent!important;\r\n  border-radius:50%!important;\r\n  color:#fff!important;\r\n  background:\r\n    radial-gradient(\r\n  circle at 32% 23%,\r\n  rgba(255,255,255,.16),\r\n  transparent 18%\r\n) padding-box,\r\n    radial-gradient(circle at 52% 68%,rgba(169,113,255,.22),transparent 56%) padding-box,\r\n    linear-gradient(145deg,rgba(30,8,58,.96),rgba(1,13,31,.95)) padding-box,\r\n    conic-gradient(from 30deg,var(--trade-a),var(--trade-b),var(--trade-c),var(--trade-a)) border-box!important;\r\n  box-shadow:\r\n    inset 0 0 28px rgba(169,113,255,.22),\r\n    0 0 18px rgba(48,232,255,.38),\r\n    0 0 58px rgba(169,113,255,.24)!important;\r\n  animation:gggTradeFloat 5.8s ease-in-out infinite!important;\r\n  overflow:hidden;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-30%;\r\n  border-radius:50%;\r\n  background:conic-gradient(from 0deg,transparent 0 22%,rgba(48,232,255,.25) 31%,transparent 42% 68%,rgba(245,209,122,.22) 76%,transparent 86%);\r\n  animation:gggTradeSpin 7s linear infinite;\r\n  pointer-events:none;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction strong,\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction small{\r\n  position:relative;\r\n  z-index:1;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction:nth-child(1){\r\n  left:50%!important;top:10%!important;right:auto!important;bottom:auto!important;\r\n  transform:translateX(-50%)!important;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction:nth-child(2){\r\n  left:12%!important;bottom:10%!important;right:auto!important;top:auto!important;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction:nth-child(3){\r\n  right:12%!important;bottom:10%!important;left:auto!important;top:auto!important;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction:hover{\r\n  filter:brightness(1.22) saturate(1.2);\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction:nth-child(1):hover{\r\n  transform:translateX(-50%) scale(1.08)!important;\r\n}\r\n\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeMatch{\r\n  --score:#31e7ff;\r\n  border:1px solid color-mix(in srgb,var(--score) 76%,white 24%)!important;\r\n  background:\r\n    radial-gradient(circle at 31% 24%,rgba(255,255,255,.22),transparent 18%),\r\n    linear-gradient(145deg,rgba(25,8,50,.94),rgba(1,13,28,.96))!important;\r\n  box-shadow:inset 0 0 24px rgba(169,113,255,.18),0 0 20px color-mix(in srgb,var(--score) 42%,transparent)!important;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeMatch[data-score=\"exact\"]{--score:#f7d783}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeMatch[data-score=\"strong\"]{--score:#b47cff}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeMatch[data-score=\"open\"]{--score:#58ffc7}\r\n\r\n#enterCircleScreen .ggg-v8-tradePanel{\r\n  width:min(1100px,94vw)!important;\r\n  max-height:88dvh;\r\n  overflow:auto;\r\n  border:1px solid rgba(107,231,255,.5)!important;\r\n  background:\r\n    radial-gradient(circle at 12% 4%,rgba(154,89,255,.19),transparent 37%),\r\n    linear-gradient(145deg,rgba(4,7,22,.92),rgba(1,15,29,.88))!important;\r\n  box-shadow:0 0 55px rgba(33,213,255,.2),inset 0 0 42px rgba(137,82,255,.1)!important;\r\n  backdrop-filter:blur(24px) saturate(1.35);\r\n}\r\n\r\n.ggg-trade-head small,.ggg-trade-kicker{\r\n  color:#6ff0ff;\r\n  letter-spacing:.16em;\r\n  text-transform:uppercase;\r\n  font-size:11px;\r\n}\r\n.ggg-trade-head h2{margin:8px 0 7px;font-size:clamp(28px,4vw,52px);line-height:1;color:#fff}\r\n.ggg-trade-head p{margin:0;color:rgba(255,255,255,.68)}\r\n.ggg-trade-flow{\r\n  display:grid;\r\n  grid-template-columns:1fr auto 1fr;\r\n  gap:15px;\r\n  align-items:stretch;\r\n  margin:25px 0 18px;\r\n}\r\n.ggg-trade-side{\r\n  padding:18px;\r\n  border:1px solid rgba(111,232,255,.24);\r\n  border-radius:22px;\r\n  background:rgba(4,13,30,.56);\r\n}\r\n.ggg-trade-side.want{border-color:rgba(191,126,255,.35)}\r\n.ggg-trade-arrow{align-self:center;color:#f4d27a;font-size:28px;text-shadow:0 0 18px rgba(244,210,122,.65)}\r\n.ggg-trade-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\r\n.ggg-trade-field{display:grid;gap:7px}\r\n.ggg-trade-field.full{grid-column:1\/-1}\r\n.ggg-trade-field label{font-size:11px;letter-spacing:.11em;text-transform:uppercase;color:rgba(255,255,255,.66)}\r\n.ggg-trade-field input,.ggg-trade-field select,.ggg-trade-field textarea{\r\n  width:100%;\r\n  min-height:46px;\r\n  box-sizing:border-box;\r\n  border:1px solid rgba(92,222,255,.3);\r\n  border-radius:13px;\r\n  padding:11px 13px;\r\n  color:#fff;\r\n  background:rgba(0,7,19,.78);\r\n  outline:none;\r\n}\r\n.ggg-trade-field textarea{min-height:82px;resize:vertical}\r\n.ggg-trade-available{font-size:12px;color:#70f2d2}\r\n.ggg-trade-terms{\r\n  margin-top:15px;\r\n  padding:15px;\r\n  border:1px solid rgba(244,210,122,.25);\r\n  border-radius:16px;\r\n  background:rgba(244,210,122,.055);\r\n  color:rgba(255,255,255,.7);\r\n  font-size:12px;\r\n  line-height:1.55;\r\n}\r\n.ggg-trade-consent{display:flex;gap:9px;align-items:flex-start;margin-top:11px;color:#fff}\r\n.ggg-trade-consent input{margin-top:3px}\r\n.ggg-trade-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:17px}\r\n.ggg-trade-button{\r\n  appearance:none;\r\n  border:1px solid rgba(95,227,255,.42);\r\n  border-radius:999px;\r\n  min-height:42px;\r\n  padding:10px 17px;\r\n  color:#fff;\r\n  background:rgba(4,19,38,.76);\r\n  cursor:pointer;\r\n  font-weight:800;\r\n  letter-spacing:.04em;\r\n}\r\n.ggg-trade-button.primary{\r\n  border-color:transparent;\r\n  color:#05101a;\r\n  background:linear-gradient(100deg,#6af5ff,#be91ff,#f5d17a);\r\n  box-shadow:0 0 22px rgba(85,229,255,.28);\r\n}\r\n.ggg-trade-button.warn{border-color:rgba(255,130,155,.45);color:#ffb4c4}\r\n.ggg-trade-button:disabled{opacity:.42;cursor:not-allowed}\r\n.ggg-trade-message{margin-top:13px;padding:11px 13px;border:1px solid rgba(99,231,255,.25);border-radius:13px;color:#d8fbff;background:rgba(17,78,101,.18)}\r\n.ggg-trade-empty{padding:38px 18px;text-align:center;color:rgba(255,255,255,.7)}\r\n.ggg-trade-stack{display:grid;gap:13px;margin-top:22px}\r\n.ggg-trade-card{\r\n  position:relative;\r\n  padding:17px;\r\n  border:1px solid rgba(105,225,255,.22);\r\n  border-radius:19px;\r\n  background:linear-gradient(135deg,rgba(13,23,48,.72),rgba(4,9,22,.74));\r\n}\r\n.ggg-trade-card h3{margin:6px 0;color:#fff;font-size:18px}\r\n.ggg-trade-card p{margin:5px 0;color:rgba(255,255,255,.67);font-size:13px}\r\n.ggg-trade-status{display:inline-flex;padding:5px 9px;border:1px solid rgba(112,240,255,.32);border-radius:999px;color:#76edff;font-size:10px;letter-spacing:.12em;text-transform:uppercase}\r\n.ggg-trade-pair{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:center;margin-top:11px}\r\n.ggg-trade-pair > div{padding:11px;border-radius:13px;background:rgba(0,7,19,.58)}\r\n.ggg-trade-pair small{display:block;color:rgba(255,255,255,.52);text-transform:uppercase;letter-spacing:.1em;font-size:9px}\r\n.ggg-trade-pair strong{display:block;margin-top:4px;color:#fff}\r\n.ggg-trade-offers{display:grid;gap:9px;margin-top:14px}\r\n.ggg-trade-offer{padding:12px;border-left:2px solid #b780ff;background:rgba(111,69,171,.1);border-radius:0 12px 12px 0}\r\n\r\n@keyframes gggTradeSpin{to{transform:rotate(360deg)}}\r\n@keyframes gggTradeFloat{0%,100%{margin-top:0}50%{margin-top:-9px}}\r\n\r\n@media(max-width:720px){\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction{width:124px!important}\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction:nth-child(1){top:14%!important}\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction:nth-child(2){left:3%!important;bottom:17%!important}\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction:nth-child(3){right:3%!important;bottom:17%!important}\r\n  .ggg-trade-flow{grid-template-columns:1fr}\r\n  .ggg-trade-arrow{transform:rotate(90deg);justify-self:center}\r\n  .ggg-trade-grid{grid-template-columns:1fr}\r\n  .ggg-trade-field.full{grid-column:auto}\r\n  .ggg-trade-pair{grid-template-columns:1fr}\r\n  .ggg-trade-pair > span{transform:rotate(90deg);justify-self:center}\r\n}\r\n\r\n@media(prefers-reduced-motion:reduce){\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction,\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-trade .ggg-v8-tradeAction::before{animation:none!important}\r\n}\r\n<\/style>\r\n\r\n<script id=\"gggV8TradeConstellationScript\">\r\n(function(){\r\n  \"use strict\";\r\n  if(window.GGGV8TradeConstellation)return;\r\n\r\n  const AJAX=\r\n    window.GGGL8DataEngineConfig?.ajaxUrl||\r\n    window.GGGL8ControlPanelConfig?.ajaxUrl||\r\n    window.GGGCircleAuth?.ajaxUrl||\r\n    window.ajaxurl||\r\n    \"\/GGG\/wp-admin\/admin-ajax.php\";\r\n\r\n  const NONCE=()=>\r\n    window.GGGL8DataEngineConfig?.nonce||\r\n    window.GGGL8ControlPanelConfig?.nonce||\r\n    window.GGGCircleAuth?.nonce||\r\n    \"\";\r\n\r\n  let tradeState={wallet:{},entitlements:[],my_trades:[],offers_sent:[],marketplace:[]};\r\n  let loading=false;\r\n\r\n  const esc=value=>String(value??\"\")\r\n    .replace(\/&\/g,\"&amp;\").replace(\/<\/g,\"&lt;\").replace(\/>\/g,\"&gt;\")\r\n    .replace(\/\"\/g,\"&quot;\").replace(\/'\/g,\"&#039;\");\r\n\r\n  const num=value=>Number(value||0);\r\n  const qty=value=>Number.isInteger(num(value))?String(num(value)):num(value).toFixed(2);\r\n  const pretty=value=>String(value||\"\").replaceAll(\"_\",\" \").replace(\/\\b\\w\/g,letter=>letter.toUpperCase());\r\n\r\n  async function post(action,data={}){\r\n    const body=new FormData();\r\n    body.append(\"action\",action);\r\n    body.append(\"nonce\",NONCE());\r\n    Object.entries(data).forEach(([key,value])=>body.append(key,value));\r\n    const response=await fetch(AJAX,{method:\"POST\",credentials:\"same-origin\",body});\r\n    const raw=await response.text();\r\n    let result;\r\n    try{result=JSON.parse(raw);}catch(error){throw new Error(\"WordPress returned an invalid response.\");}\r\n    if(!response.ok||result?.success!==true){\r\n      throw new Error(result?.data?.message||result?.data||\"The Trade connection did not respond.\");\r\n    }\r\n    return result.data||{};\r\n  }\r\n\r\n  function normalizeState(data={}){\r\n    return{\r\n      wallet:data.wallet||{},\r\n      entitlements:Array.isArray(data.entitlements)?data.entitlements:[],\r\n      my_trades:Array.isArray(data.my_trades)?data.my_trades:[],\r\n      offers_sent:Array.isArray(data.offers_sent)?data.offers_sent:[],\r\n      marketplace:Array.isArray(data.marketplace)?data.marketplace:[]\r\n    };\r\n  }\r\n\r\n  async function loadState(){\r\n    tradeState=normalizeState(await post(\"ggg_l8_trade_get_state\"));\r\n    return tradeState;\r\n  }\r\n\r\n  function detailElements(){\r\n    return{\r\n      overlay:document.getElementById(\"gggV8Detail\"),\r\n      panel:document.querySelector(\"#gggV8Detail .ggg-v8-detailPanel\"),\r\n      body:document.getElementById(\"gggV8DetailBody\")\r\n    };\r\n  }\r\n\r\n  function openPanel(html){\r\n    const {overlay,panel,body}=detailElements();\r\n    if(!overlay||!panel||!body)return;\r\n    panel.classList.add(\"ggg-v8-tradePanel\");\r\n    body.innerHTML=html;\r\n    overlay.classList.add(\"open\");\r\n    overlay.setAttribute(\"aria-hidden\",\"false\");\r\n  }\r\n\r\n  function closePanel(){\r\n    const {overlay,panel}=detailElements();\r\n    panel?.classList.remove(\"ggg-v8-tradePanel\");\r\n    overlay?.classList.remove(\"open\");\r\n    overlay?.setAttribute(\"aria-hidden\",\"true\");\r\n  }\r\n\r\n  function assetText(asset={}){\r\n    if(asset.type===\"open\")return\"Open to Offers\";\r\n    const property=asset.property_name?` \u00b7 ${asset.property_name}`:\"\";\r\n    return `${qty(asset.amount)} ${asset.unit||\"\"} ${asset.label||pretty(asset.type)}${property}`.trim();\r\n  }\r\n\r\n  function assetCatalog(){\r\n    const choices=[];\r\n    Object.values(tradeState.wallet||{}).forEach(item=>{\r\n      choices.push({\r\n        token:`digital:${item.type}`,\r\n        type:item.type,\r\n        label:item.label,\r\n        unit:item.unit,\r\n        available:num(item.available),\r\n        entitlement_id:\"\",\r\n        property_name:\"\"\r\n      });\r\n    });\r\n    tradeState.entitlements.forEach(item=>{\r\n      if(String(item.status||\"active\")!==\"active\")return;\r\n      choices.push({\r\n        token:`property:${item.id}`,\r\n        type:\"property_time\",\r\n        label:item.property_name||\"Property Time\",\r\n        unit:item.unit_label||\"nights\",\r\n        available:num(item.available_quantity),\r\n        entitlement_id:item.id||\"\",\r\n        property_name:item.property_name||\"Property Time\"\r\n      });\r\n    });\r\n    return choices;\r\n  }\r\n\r\n  function ownedOptions(selectedType=\"\"){\r\n    const choices=assetCatalog();\r\n    if(!choices.length)return'<option value=\"\">No verified assets connected<\/option>';\r\n    return choices.map(item=>{\r\n      const selected=selectedType&&item.type===selectedType?\" selected\":\"\";\r\n      const disabled=item.available<=0?\" disabled\":\"\";\r\n      return `<option value=\"${esc(item.token)}\"${selected}${disabled}>${esc(item.label)} \u00b7 ${qty(item.available)} ${esc(item.unit)} available<\/option>`;\r\n    }).join(\"\");\r\n  }\r\n\r\n  function catalogItem(token){\r\n    return assetCatalog().find(item=>item.token===token)||null;\r\n  }\r\n\r\n  function wantedOptions(){\r\n    return `<option value=\"open\">Open to Offers<\/option>\r\n      <option value=\"bliss_coin\">Bliss Coin<\/option>\r\n      <option value=\"air\">Air<\/option>\r\n      <option value=\"aqua\">Aqua<\/option>\r\n      <option value=\"gastro\">Gastro<\/option>\r\n      <option value=\"property_time\">Property Time<\/option>`;\r\n  }\r\n\r\n  function tradeActions(){\r\n    const live=tradeState.marketplace.filter(item=>!item.is_mine&&item.status===\"open\").length;\r\n    const pending=tradeState.my_trades.reduce((total,item)=>total+(item.offers||[]).filter(offer=>offer.status===\"pending\").length,0);\r\n    return[\r\n      {id:\"build\",name:\"Build a Trade\",caption:\"Offer verified value\"},\r\n      {id:\"matches\",name:\"Live Matches\",caption:`${live} owner match${live===1?\"\":\"es\"}`},\r\n      {id:\"vault\",name:\"Trade Vault\",caption:`${pending} offer${pending===1?\"\":\"s\"} waiting`}\r\n    ];\r\n  }\r\n\r\n  function renderTradeOrbit(){\r\n    const stage=document.getElementById(\"gggV8OwnerStage\");\r\n    const orbit=document.getElementById(\"gggV8OrbitItems\");\r\n    const core=document.getElementById(\"gggV8Core\");\r\n    if(!stage||!orbit)return;\r\n    stage.classList.remove(\"mode-use\",\"mode-rent\",\"mode-exchange\");\r\n    stage.classList.add(\"mode-open\",\"mode-trade\");\r\n    orbit.classList.add(\"is-visible\");\r\n    if(core)core.innerHTML=\"\";\r\n    orbit.innerHTML=tradeActions().map((item,index)=>`\r\n      <button class=\"ggg-v8-asset ggg-v8-tradeAction\" type=\"button\" data-trade-action=\"${item.id}\" style=\"animation-delay:${index*-.8}s\">\r\n        <strong>${esc(item.name)}<\/strong><small>${esc(item.caption)}<\/small>\r\n      <\/button>`).join(\"\");\r\n  }\r\n\r\n  async function openTrade(){\r\n    if(loading)return;\r\n    loading=true;\r\n    const core=document.getElementById(\"gggV8Core\");\r\n    if(core)core.innerHTML=\"<div><strong>Trade<\/strong><small>Reading verified assets<\/small><\/div>\";\r\n    try{\r\n      await loadState();\r\n      renderTradeOrbit();\r\n    }catch(error){\r\n      const stage=document.getElementById(\"gggV8OwnerStage\");\r\n      const orbit=document.getElementById(\"gggV8OrbitItems\");\r\n      stage?.classList.add(\"mode-open\",\"mode-trade\");\r\n      if(orbit){orbit.classList.add(\"is-visible\");orbit.innerHTML=`<div class=\"ggg-v8-empty\">${esc(error.message)}<\/div>`;}\r\n    }finally{loading=false;}\r\n  }\r\n\r\n  function defaultExpiry(){\r\n    const date=new Date();\r\n    date.setDate(date.getDate()+30);\r\n    return date.toISOString().slice(0,10);\r\n  }\r\n\r\n  function renderBuild(message=\"\"){\r\n    const available=assetCatalog().some(item=>item.available>0);\r\n    openPanel(`<div class=\"ggg-trade-head\"><small>Level 8 \u00b7 Verified Owner-to-Owner Exchange<\/small><h2>Build a Trade<\/h2><p>Choose what leaves your Circle and what you want returned.<\/p><\/div>\r\n      ${message?`<div class=\"ggg-trade-message\">${esc(message)}<\/div>`:\"\"}\r\n      ${available?`<form id=\"gggTradeBuildForm\">\r\n        <div class=\"ggg-trade-flow\">\r\n          <section class=\"ggg-trade-side\">\r\n            <span class=\"ggg-trade-kicker\">I Offer<\/span>\r\n            <div class=\"ggg-trade-grid\" style=\"margin-top:12px\">\r\n              <div class=\"ggg-trade-field full\"><label for=\"gggTradeOfferAsset\">My verified asset<\/label><select id=\"gggTradeOfferAsset\" name=\"offered_token\" required>${ownedOptions()}<\/select><span id=\"gggTradeOfferAvailable\" class=\"ggg-trade-available\"><\/span><\/div>\r\n              <div class=\"ggg-trade-field full\"><label for=\"gggTradeOfferAmount\">Amount<\/label><input id=\"gggTradeOfferAmount\" name=\"offered_amount\" type=\"number\" min=\"0.01\" step=\"0.01\" required><\/div>\r\n            <\/div>\r\n          <\/section>\r\n          <div class=\"ggg-trade-arrow\">\u21c4<\/div>\r\n          <section class=\"ggg-trade-side want\">\r\n            <span class=\"ggg-trade-kicker\">I Want<\/span>\r\n            <div class=\"ggg-trade-grid\" style=\"margin-top:12px\">\r\n              <div class=\"ggg-trade-field full\"><label for=\"gggTradeWantedType\">Requested value<\/label><select id=\"gggTradeWantedType\" name=\"wanted_type\">${wantedOptions()}<\/select><\/div>\r\n              <div id=\"gggTradeWantedAmountField\" class=\"ggg-trade-field full\" hidden><label for=\"gggTradeWantedAmount\">Amount<\/label><input id=\"gggTradeWantedAmount\" name=\"wanted_amount\" type=\"number\" min=\"0.01\" step=\"0.01\"><\/div>\r\n              <div id=\"gggTradeWantedPropertyField\" class=\"ggg-trade-field full\" hidden><label for=\"gggTradeWantedProperty\">Preferred property<\/label><input id=\"gggTradeWantedProperty\" name=\"wanted_property\" type=\"text\" placeholder=\"Optional property name\"><\/div>\r\n            <\/div>\r\n          <\/section>\r\n        <\/div>\r\n        <div class=\"ggg-trade-grid\">\r\n          <div class=\"ggg-trade-field\"><label for=\"gggTradeExpiry\">Open until<\/label><input id=\"gggTradeExpiry\" name=\"expires_date\" type=\"date\" value=\"${defaultExpiry()}\" required><\/div>\r\n          <div class=\"ggg-trade-field\"><label for=\"gggTradeNotes\">Owner note<\/label><textarea id=\"gggTradeNotes\" name=\"notes\" placeholder=\"Optional trade details\"><\/textarea><\/div>\r\n        <\/div>\r\n        <div class=\"ggg-trade-terms\">Luxus maintains the connected City Card balances. Bliss Administration records completed Level 8 trades. A temporary system hold protects the amount offered while a trade or offer remains open. Bliss Coin Credits are closed-loop platform credits\u2014not cash, cryptocurrency, or an ownership interest. Any trade involving Property Time requires availability verification and Bliss Administration approval before completion.\r\n          <label class=\"ggg-trade-consent\"><input name=\"agreement_accepted\" type=\"checkbox\" value=\"1\" required><span>I reviewed and accept the Trade Terms for this request.<\/span><\/label>\r\n        <\/div>\r\n        <div id=\"gggTradeBuildMessage\"><\/div>\r\n        <div class=\"ggg-trade-actions\"><button class=\"ggg-trade-button primary\" type=\"submit\">Activate Trade<\/button><button class=\"ggg-trade-button\" type=\"button\" data-trade-open=\"vault\">Open Trade Vault<\/button><\/div>\r\n      <\/form>`:`<div class=\"ggg-trade-empty\"><h3>No tradable balance is available yet.<\/h3><p>When Luxus issues City Card value or Bliss Administration issues Property Time, it will become selectable here automatically.<\/p><\/div>`}`);\r\n    syncOfferAsset();\r\n    syncWantedType();\r\n  }\r\n\r\n  function syncOfferAsset(){\r\n    const select=document.getElementById(\"gggTradeOfferAsset\");\r\n    const input=document.getElementById(\"gggTradeOfferAmount\");\r\n    const help=document.getElementById(\"gggTradeOfferAvailable\");\r\n    if(!select||!input)return;\r\n    const firstEnabled=[...select.options].find(option=>!option.disabled);\r\n    if((!select.value||select.selectedOptions[0]?.disabled)&&firstEnabled)select.value=firstEnabled.value;\r\n    const item=catalogItem(select.value);\r\n    input.max=item?.available||0;\r\n    if(!input.value||num(input.value)>num(input.max))input.value=item?.available||\"\";\r\n    if(help)help.textContent=item?`${qty(item.available)} ${item.unit} available`:\"No verified asset available\";\r\n  }\r\n\r\n  function syncWantedType(){\r\n    const type=document.getElementById(\"gggTradeWantedType\")?.value||\"open\";\r\n    const amountField=document.getElementById(\"gggTradeWantedAmountField\");\r\n    const propertyField=document.getElementById(\"gggTradeWantedPropertyField\");\r\n    const input=document.getElementById(\"gggTradeWantedAmount\");\r\n    if(amountField)amountField.hidden=type===\"open\";\r\n    if(propertyField)propertyField.hidden=type!==\"property_time\";\r\n    if(input)input.required=type!==\"open\";\r\n  }\r\n\r\n  async function submitTrade(form){\r\n    const data=new FormData(form);\r\n    const source=catalogItem(String(data.get(\"offered_token\")||\"\"));\r\n    const wantedType=String(data.get(\"wanted_type\")||\"open\");\r\n    const message=document.getElementById(\"gggTradeBuildMessage\");\r\n    const submit=form.querySelector('[type=\"submit\"]');\r\n    if(!source){if(message)message.innerHTML='<div class=\"ggg-trade-message\">Choose an available verified asset.<\/div>';return;}\r\n    const offered={type:source.type,amount:data.get(\"offered_amount\"),unit:source.unit,entitlement_id:source.entitlement_id,property_name:source.property_name};\r\n    const wanted=wantedType===\"open\"?{type:\"open\"}:{type:wantedType,amount:data.get(\"wanted_amount\"),property_name:data.get(\"wanted_property\")||\"\"};\r\n    if(submit)submit.disabled=true;\r\n    if(message)message.innerHTML='<div class=\"ggg-trade-message\">Activating secure trade\u2026<\/div>';\r\n    try{\r\n      const result=await post(\"ggg_l8_trade_create\",{\r\n        offered_asset:JSON.stringify(offered),\r\n        wanted_asset:JSON.stringify(wanted),\r\n        expires_date:data.get(\"expires_date\")||\"\",\r\n        notes:data.get(\"notes\")||\"\",\r\n        agreement_accepted:data.get(\"agreement_accepted\")?\"1\":\"0\"\r\n      });\r\n      tradeState=normalizeState(result.state||await loadState());\r\n      renderTradeOrbit();\r\n      renderVault(result.message||\"Trade activated.\");\r\n    }catch(error){\r\n      if(message)message.innerHTML=`<div class=\"ggg-trade-message\">${esc(error.message)}<\/div>`;\r\n      if(submit)submit.disabled=false;\r\n    }\r\n  }\r\n\r\n  function scoreClass(label=\"\"){\r\n    const value=label.toLowerCase();\r\n    if(value.includes(\"exact\"))return\"exact\";\r\n    if(value.includes(\"strong\"))return\"strong\";\r\n    if(value.includes(\"open\"))return\"open\";\r\n    return\"available\";\r\n  }\r\n\r\n  function renderMatches(){\r\n    const stage=document.getElementById(\"gggV8OwnerStage\");\r\n    const orbit=document.getElementById(\"gggV8OrbitItems\");\r\n    const core=document.getElementById(\"gggV8Core\");\r\n    if(!stage||!orbit)return;\r\n    const matches=tradeState.marketplace.filter(item=>!item.is_mine&&item.status===\"open\").slice(0,6);\r\n    stage.classList.add(\"mode-open\",\"mode-trade\");\r\n    if(core)core.innerHTML='<div><strong>Live Matches<\/strong><small>Select an owner trade<\/small><\/div>';\r\n    orbit.classList.add(\"is-visible\");\r\n    orbit.innerHTML=matches.length?matches.map((item,index)=>`\r\n      <button class=\"ggg-v8-asset ggg-v8-tradeMatch\" type=\"button\" data-trade-match=\"${index}\" data-score=\"${scoreClass(item.match?.label)}\" style=\"animation-delay:${index*-.65}s\">\r\n        <strong>${esc(item.offered_asset?.label||\"Owner Trade\")}<\/strong>\r\n        <small>${esc(item.match?.label||\"Available Match\")} \u00b7 ${esc(assetText(item.offered_asset))}<\/small>\r\n      <\/button>`).join(\"\"):'<div class=\"ggg-v8-empty\">No other owner trades are open right now. Build yours and it will enter the constellation.<\/div>';\r\n    orbit.dataset.tradeMatches=JSON.stringify(matches.map(item=>item.id));\r\n  }\r\n\r\n  function findMarketTrade(id){\r\n    return tradeState.marketplace.find(item=>String(item.id)===String(id));\r\n  }\r\n\r\n  function openMatch(item){\r\n    if(!item)return;\r\n    const desired=item.wanted_asset?.type||\"\";\r\n    const hasAsset=assetCatalog().some(asset=>asset.type===desired&&asset.available>0);\r\n    openPanel(`<div class=\"ggg-trade-head\"><small>${esc(item.match?.label||\"Live Owner Match\")} \u00b7 ${esc(item.owner_alias||\"Verified Owner\")}<\/small><h2>${esc(assetText(item.offered_asset))}<\/h2><p>This owner is requesting ${esc(assetText(item.wanted_asset))}.<\/p><\/div>\r\n      <div class=\"ggg-trade-pair\"><div><small>You Receive<\/small><strong>${esc(assetText(item.offered_asset))}<\/strong><\/div><span>\u21c4<\/span><div><small>You Offer<\/small><strong>${esc(assetText(item.wanted_asset))}<\/strong><\/div><\/div>\r\n      ${item.notes?`<div class=\"ggg-trade-message\">${esc(item.notes)}<\/div>`:\"\"}\r\n      ${item.viewer_offer?`<div class=\"ggg-trade-message\">Your offer is ${esc(pretty(item.viewer_offer.status))}.<\/div>`:`<form id=\"gggTradeOfferForm\" data-trade-id=\"${esc(item.id)}\">\r\n        <div class=\"ggg-trade-grid\" style=\"margin-top:18px\">\r\n          <div class=\"ggg-trade-field\"><label for=\"gggTradeCounterAsset\">Offer from my Circle<\/label><select id=\"gggTradeCounterAsset\" name=\"offered_token\" required>${ownedOptions(desired)}<\/select><span id=\"gggTradeCounterAvailable\" class=\"ggg-trade-available\"><\/span><\/div>\r\n          <div class=\"ggg-trade-field\"><label for=\"gggTradeCounterAmount\">Amount<\/label><input id=\"gggTradeCounterAmount\" name=\"amount\" type=\"number\" min=\"0.01\" step=\"0.01\" required><\/div>\r\n          <div class=\"ggg-trade-field full\"><label for=\"gggTradeCounterNote\">Message<\/label><textarea id=\"gggTradeCounterNote\" name=\"note\" placeholder=\"Optional note to the owner\"><\/textarea><\/div>\r\n        <\/div>\r\n        <div class=\"ggg-trade-terms\">Sending this offer places a temporary system hold on the selected verified value. The owner must accept it. Digital-only trades complete after acceptance; Property Time proceeds to Bliss Administration for verification.<\/div>\r\n        <div id=\"gggTradeOfferMessage\"><\/div>\r\n        <div class=\"ggg-trade-actions\"><button class=\"ggg-trade-button primary\" type=\"submit\"${hasAsset||desired===\"open\"?\"\":\" disabled\"}>${item.want_mode===\"exact\"?\"Send Exact Offer\":\"Send Offer\"}<\/button><button class=\"ggg-trade-button\" type=\"button\" data-trade-open=\"matches\">Back to Matches<\/button><\/div>\r\n      <\/form>`}`);\r\n    syncCounterAsset();\r\n  }\r\n\r\n  function syncCounterAsset(){\r\n    const select=document.getElementById(\"gggTradeCounterAsset\");\r\n    const input=document.getElementById(\"gggTradeCounterAmount\");\r\n    const help=document.getElementById(\"gggTradeCounterAvailable\");\r\n    if(!select||!input)return;\r\n    const firstEnabled=[...select.options].find(option=>!option.disabled);\r\n    if((!select.value||select.selectedOptions[0]?.disabled)&&firstEnabled)select.value=firstEnabled.value;\r\n    const item=catalogItem(select.value);\r\n    input.max=item?.available||0;\r\n    if(!input.value||num(input.value)>num(input.max))input.value=item?.available||\"\";\r\n    if(help)help.textContent=item?`${qty(item.available)} ${item.unit} available`:\"No verified asset available\";\r\n  }\r\n\r\n  async function submitOffer(form){\r\n    const data=new FormData(form);\r\n    const source=catalogItem(String(data.get(\"offered_token\")||\"\"));\r\n    const message=document.getElementById(\"gggTradeOfferMessage\");\r\n    const submit=form.querySelector('[type=\"submit\"]');\r\n    if(!source){if(message)message.innerHTML='<div class=\"ggg-trade-message\">Choose an available verified asset.<\/div>';return;}\r\n    if(submit)submit.disabled=true;\r\n    try{\r\n      const result=await post(\"ggg_l8_trade_make_offer\",{\r\n        trade_id:form.dataset.tradeId||\"\",\r\n        offered_asset:JSON.stringify({type:source.type,amount:data.get(\"amount\"),unit:source.unit,entitlement_id:source.entitlement_id,property_name:source.property_name}),\r\n        note:data.get(\"note\")||\"\"\r\n      });\r\n      tradeState=normalizeState(result.state||await loadState());\r\n      renderTradeOrbit();\r\n      renderVault(result.message||\"Offer sent.\");\r\n    }catch(error){\r\n      if(message)message.innerHTML=`<div class=\"ggg-trade-message\">${esc(error.message)}<\/div>`;\r\n      if(submit)submit.disabled=false;\r\n    }\r\n  }\r\n\r\n  function ownerTradeCards(){\r\n    if(!tradeState.my_trades.length)return'<div class=\"ggg-trade-empty\">You have not activated a trade yet.<\/div>';\r\n    return tradeState.my_trades.slice().reverse().map(trade=>{\r\n      const offers=Array.isArray(trade.offers)?trade.offers:[];\r\n      const pending=offers.filter(offer=>offer.status===\"pending\");\r\n      return `<article class=\"ggg-trade-card\">\r\n        <span class=\"ggg-trade-status\">${esc(pretty(trade.status))}<\/span>\r\n        <h3>${esc(assetText(trade.offered_asset))} \u21c4 ${esc(assetText(trade.wanted_asset))}<\/h3>\r\n        <p>Expires ${esc(trade.expires_at||\"\u2014\")} \u00b7 ${offers.length} total offer${offers.length===1?\"\":\"s\"}<\/p>\r\n        ${pending.length?`<div class=\"ggg-trade-offers\">${pending.map(offer=>`<div class=\"ggg-trade-offer\"><strong>${esc(offer.owner_alias||\"Verified Owner\")} offers ${esc(assetText(offer.offered_asset))}<\/strong>${offer.note?`<p>${esc(offer.note)}<\/p>`:\"\"}<div class=\"ggg-trade-actions\"><button class=\"ggg-trade-button primary\" type=\"button\" data-trade-accept=\"${esc(offer.id)}\" data-trade-id=\"${esc(trade.id)}\">Accept Offer<\/button><\/div><\/div>`).join(\"\")}<\/div>`:\"\"}\r\n        ${trade.status===\"open\"?`<div class=\"ggg-trade-actions\"><button class=\"ggg-trade-button warn\" type=\"button\" data-trade-cancel=\"${esc(trade.id)}\">Cancel Trade<\/button><\/div>`:\"\"}\r\n        ${trade.status===\"pending_admin\"?'<div class=\"ggg-trade-message\">Property Time is awaiting Bliss Administration verification.<\/div>':\"\"}\r\n      <\/article>`;\r\n    }).join(\"\");\r\n  }\r\n\r\n  function sentOfferCards(){\r\n    if(!tradeState.offers_sent.length)return'<div class=\"ggg-trade-empty\">You have not sent an offer yet.<\/div>';\r\n    return tradeState.offers_sent.slice().reverse().map(record=>`\r\n      <article class=\"ggg-trade-card\">\r\n        <span class=\"ggg-trade-status\">${esc(pretty(record.offer?.status))}<\/span>\r\n        <h3>You offered ${esc(assetText(record.offer?.offered_asset))}<\/h3>\r\n        <p>For ${esc(assetText(record.trade_offered_asset))} from ${esc(record.owner_alias||\"Verified Owner\")}<\/p>\r\n        ${record.offer?.status===\"pending\"?`<div class=\"ggg-trade-actions\"><button class=\"ggg-trade-button warn\" type=\"button\" data-trade-withdraw=\"${esc(record.offer.id)}\" data-trade-id=\"${esc(record.trade_id)}\">Withdraw Offer<\/button><\/div>`:\"\"}\r\n      <\/article>`).join(\"\");\r\n  }\r\n\r\n  function renderVault(message=\"\"){\r\n    openPanel(`<div class=\"ggg-trade-head\"><small>Level 8 \u00b7 Signed-in Owner Record<\/small><h2>Trade Vault<\/h2><p>Your active trades, received offers, sent offers, and verification states.<\/p><\/div>\r\n      ${message?`<div class=\"ggg-trade-message\">${esc(message)}<\/div>`:\"\"}\r\n      <div class=\"ggg-trade-actions\"><button class=\"ggg-trade-button primary\" type=\"button\" data-trade-open=\"build\">Build a Trade<\/button><button class=\"ggg-trade-button\" type=\"button\" data-trade-open=\"matches\">Live Matches<\/button><\/div>\r\n      <div class=\"ggg-trade-stack\"><span class=\"ggg-trade-kicker\">My Trades<\/span>${ownerTradeCards()}<span class=\"ggg-trade-kicker\" style=\"margin-top:12px\">Offers I Sent<\/span>${sentOfferCards()}<\/div>\r\n      <div class=\"ggg-trade-terms\">Luxus reflects completed digital balance movements in the City Card. Bliss Administration verifies Property Time and records approved completion. An open, cancelled, expired, withdrawn, rejected, or pending trade is not a completed transfer.<\/div>`);\r\n  }\r\n\r\n  async function acceptOffer(tradeId,offerId){\r\n    try{\r\n      const result=await post(\"ggg_l8_trade_accept_offer\",{trade_id:tradeId,offer_id:offerId});\r\n      tradeState=normalizeState(result.state||await loadState());\r\n      renderTradeOrbit();\r\n      renderVault(result.message||\"Offer accepted.\");\r\n    }catch(error){renderVault(error.message);}\r\n  }\r\n\r\n  async function updateTrade(tradeId,action,offerId=\"\"){\r\n    try{\r\n      const result=await post(\"ggg_l8_trade_update\",{trade_id:tradeId,trade_action:action,offer_id:offerId});\r\n      tradeState=normalizeState(result.state||await loadState());\r\n      renderTradeOrbit();\r\n      renderVault(result.message||\"Trade updated.\");\r\n    }catch(error){renderVault(error.message);}\r\n  }\r\n\r\n  window.addEventListener(\"click\",function(event){\r\n    const target=event.target;\r\n    if(!(target instanceof Element))return;\r\n\r\n    if(target.closest('[data-owner-mode=\"trade\"]')){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();\r\n      openTrade();return;\r\n    }\r\n\r\n    const action=target.closest(\"[data-trade-action]\");\r\n    if(action){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();\r\n      const type=action.dataset.tradeAction;\r\n      if(type===\"build\")renderBuild();\r\n      else if(type===\"matches\")renderMatches();\r\n      else renderVault();\r\n      return;\r\n    }\r\n\r\n    const open=target.closest(\"[data-trade-open]\");\r\n    if(open){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();\r\n      const type=open.dataset.tradeOpen;\r\n      if(type===\"build\")renderBuild();\r\n      else if(type===\"matches\"){closePanel();renderMatches();}\r\n      else renderVault();\r\n      return;\r\n    }\r\n\r\n    const match=target.closest(\"[data-trade-match]\");\r\n    if(match){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();\r\n      const ids=JSON.parse(document.getElementById(\"gggV8OrbitItems\")?.dataset.tradeMatches||\"[]\");\r\n      openMatch(findMarketTrade(ids[Number(match.dataset.tradeMatch)]));\r\n      return;\r\n    }\r\n\r\n    const accept=target.closest(\"[data-trade-accept]\");\r\n    if(accept){event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();acceptOffer(accept.dataset.tradeId,accept.dataset.tradeAccept);return;}\r\n    const cancel=target.closest(\"[data-trade-cancel]\");\r\n    if(cancel){event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();updateTrade(cancel.dataset.tradeCancel,\"cancel\");return;}\r\n    const withdraw=target.closest(\"[data-trade-withdraw]\");\r\n    if(withdraw){event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();updateTrade(withdraw.dataset.tradeId,\"withdraw_offer\",withdraw.dataset.tradeWithdraw);return;}\r\n\r\n    if(target.closest(\".ggg-v8-detailClose\")||target.id===\"gggV8Detail\"){\r\n      closePanel();\r\n    }\r\n  },true);\r\n\r\n  document.addEventListener(\"change\",function(event){\r\n    if(event.target?.id===\"gggTradeOfferAsset\")syncOfferAsset();\r\n    if(event.target?.id===\"gggTradeWantedType\")syncWantedType();\r\n    if(event.target?.id===\"gggTradeCounterAsset\")syncCounterAsset();\r\n  });\r\n\r\n  document.addEventListener(\"submit\",function(event){\r\n    if(event.target?.id===\"gggTradeBuildForm\"){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();submitTrade(event.target);return;\r\n    }\r\n    if(event.target?.id===\"gggTradeOfferForm\"){\r\n      event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();submitOffer(event.target);\r\n    }\r\n  },true);\r\n\r\n  window.GGGV8TradeConstellation={open:openTrade,reload:loadState};\r\n})();\r\n<\/script>\r\n\r\n<!-- =========================================================\r\nGGG LEVEL 8 \u2014 ENTER YOUR CIRCLE \/ EXCHANGE GALAXY\r\n\r\nPLACEMENT:\r\nPaste this complete block near the bottom of the Level 8 page,\r\nimmediately BEFORE the final <!-- \/wp:post-content --> marker.\r\n\r\nDELETE NOTHING. This intercepts only the Exchange gateway.\r\nRequires the active GGG Level 8 Exchange Engine PHP snippet.\r\n========================================================= -->\r\n\r\n<style id=\"gggV8ExchangeGalaxyStyles\">\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway{\r\n  --ex-a:#34efff;\r\n  --ex-b:#7f68ff;\r\n  position:absolute!important;\r\n  width:clamp(126px,13vw,184px)!important;\r\n  aspect-ratio:1!important;\r\n  border:2px solid transparent!important;\r\n  border-radius:50%!important;\r\n  display:grid!important;\r\n  place-content:center!important;\r\n  gap:7px!important;\r\n  padding:17px!important;\r\n  color:#fff!important;\r\n  text-align:center!important;\r\n  cursor:pointer!important;\r\n  z-index:8!important;\r\n  background:\r\n    radial-gradient(\r\n  circle at 32% 23%,\r\n  rgba(255,255,255,.16),\r\n  transparent 18%\r\n) padding-box,\r\n    radial-gradient(circle at 50% 75%,rgba(52,239,255,.16),transparent 55%) padding-box,\r\n    linear-gradient(145deg,rgba(10,25,69,.95),rgba(2,5,20,.96)) padding-box,\r\n    linear-gradient(135deg,var(--ex-a),var(--ex-b),#f7d980) border-box!important;\r\n  box-shadow:\r\n    inset 0 0 32px rgba(79,121,255,.19),\r\n    0 0 18px rgba(52,239,255,.40),\r\n    0 0 52px rgba(127,104,255,.22)!important;\r\n  animation:gggExchangeFloat 5.2s ease-in-out infinite!important;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway::after{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:-10px;\r\n  border:1px solid rgba(83,230,255,.30);\r\n  border-radius:50%;\r\n  box-shadow:0 0 25px rgba(88,112,255,.23);\r\n  animation:gggExchangeRing 3.2s ease-in-out infinite;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway strong{\r\n  font-size:clamp(.76rem,1.25vw,1.02rem)!important;\r\n  line-height:1.05!important;\r\n  letter-spacing:.06em!important;\r\n  text-transform:uppercase!important;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway small{\r\n  color:rgba(223,247,255,.68)!important;\r\n  font-size:8px!important;\r\n  line-height:1.3!important;\r\n  letter-spacing:.11em!important;\r\n  text-transform:uppercase!important;\r\n}\r\n\/* EXCHANGE \u2014 TRUE TRIANGLE POSITION *\/\r\n\r\n\/* Top center *\/\r\n#enterCircleScreen\r\n.ggg-v8-ownerStage.mode-exchange\r\n.ggg-exchange-gateway:nth-child(1){\r\n  top:12%!important;\r\n  bottom:auto!important;\r\n  left:50%!important;\r\n  right:auto!important;\r\n  transform:translateX(-50%)!important;\r\n}\r\n\r\n\/* Bottom left *\/\r\n#enterCircleScreen\r\n.ggg-v8-ownerStage.mode-exchange\r\n.ggg-exchange-gateway:nth-child(2){\r\n  top:auto!important;\r\n  bottom:20%!important;\r\n  left:13%!important;\r\n  right:auto!important;\r\n  transform:none!important;\r\n  --ex-a:#7ce8ff;\r\n  --ex-b:#305dff;\r\n  animation-delay:-1.4s!important;\r\n}\r\n\r\n\/* Bottom right *\/\r\n#enterCircleScreen\r\n.ggg-v8-ownerStage.mode-exchange\r\n.ggg-exchange-gateway:nth-child(3){\r\n  top:auto!important;\r\n  bottom:20%!important;\r\n  left:auto!important;\r\n  right:13%!important;\r\n  transform:none!important;\r\n  --ex-a:#c98dff;\r\n  --ex-b:#4ddfff;\r\n  animation-delay:-2.7s!important;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway:nth-child(1):hover{\r\n  transform:translateX(-50%) scale(1.08)!important;\r\n}\r\n#enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway:nth-child(n+2):hover{\r\n  transform:scale(1.08)!important;\r\n}\r\n@keyframes gggExchangeFloat{0%,100%{margin-top:0}50%{margin-top:-10px}}\r\n@keyframes gggExchangeRing{0%,100%{opacity:.35;transform:scale(.96)}50%{opacity:1;transform:scale(1.05)}}\r\n\r\n#enterCircleScreen .ggg-v8-detailPanel.ggg-exchange-panel{\r\n  width:min(1180px,95vw)!important;\r\n  max-height:92dvh!important;\r\n  overflow:auto!important;\r\n  padding:68px clamp(17px,4vw,48px) 34px!important;\r\n  border:1px solid rgba(80,225,255,.32)!important;\r\n  background:\r\n    radial-gradient(circle at 82% 10%,rgba(90,74,255,.22),transparent 34%),\r\n    radial-gradient(circle at 9% 92%,rgba(32,225,255,.16),transparent 33%),\r\n    linear-gradient(145deg,rgba(3,8,26,.95),rgba(2,8,22,.83))!important;\r\n  backdrop-filter:blur(25px) saturate(145%)!important;\r\n  box-shadow:0 0 80px rgba(52,205,255,.18)!important;\r\n}\r\n.ggg-ex-head{margin-bottom:22px}\r\n.ggg-ex-head>small,.ggg-ex-label{color:#8cf3ff;font-size:9px;font-weight:1000;letter-spacing:.14em;text-transform:uppercase}\r\n.ggg-ex-head h2{margin:8px 0!important;font-size:clamp(2rem,5vw,4.2rem)!important;line-height:.96!important}\r\n.ggg-ex-head p{max-width:760px;margin:0!important;color:rgba(255,255,255,.67)!important}\r\n.ggg-ex-tabs,.ggg-ex-actions,.ggg-ex-meta{display:flex;flex-wrap:wrap;gap:8px}\r\n.ggg-ex-tabs{margin:18px 0 22px}\r\n.ggg-ex-button,.ggg-ex-tab{\r\n  min-height:42px;padding:0 16px;border:1px solid rgba(104,226,255,.28);border-radius:999px;\r\n  background:rgba(55,207,255,.07);color:#fff;font-size:9px;font-weight:1000;letter-spacing:.10em;\r\n  text-transform:uppercase;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;\r\n}\r\n.ggg-ex-button.primary,.ggg-ex-tab.active{border:0;background:linear-gradient(135deg,#42efff,#806bff);color:#02101c;box-shadow:0 0 24px rgba(58,225,255,.28)}\r\n.ggg-ex-button.warn{border-color:rgba(255,128,163,.35);background:rgba(255,72,122,.08)}\r\n.ggg-ex-button:disabled{opacity:.43;cursor:not-allowed}\r\n.ggg-ex-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}\r\n.ggg-ex-card{\r\n  position:relative;min-height:220px;padding:20px;border:1px solid rgba(105,226,255,.16);border-radius:24px;\r\n  overflow:hidden;background:linear-gradient(145deg,rgba(255,255,255,.055),rgba(15,50,82,.055));\r\n}\r\n.ggg-ex-card.has-image{padding-top:138px;background-size:cover;background-position:center}\r\n.ggg-ex-card.has-image::before{content:\"\";position:absolute;inset:0;background:linear-gradient(180deg,rgba(2,6,18,.06) 15%,rgba(2,7,22,.96) 67%)}\r\n.ggg-ex-card>*{position:relative;z-index:1}\r\n.ggg-ex-card h3{margin:9px 0 7px;font-size:1.1rem}\r\n.ggg-ex-card p{margin:7px 0;color:rgba(255,255,255,.66);font-size:11px;line-height:1.5}\r\n.ggg-ex-status,.ggg-ex-meta span{\r\n  display:inline-flex;padding:6px 9px;border:1px solid rgba(255,255,255,.13);border-radius:999px;\r\n  color:rgba(255,255,255,.72);font-size:8px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;\r\n}\r\n.ggg-ex-status{color:#88f6ff;border-color:rgba(64,235,255,.30)}\r\n.ggg-ex-score{position:absolute;top:16px;right:16px;width:48px;aspect-ratio:1;border-radius:50%;display:grid;place-content:center;background:rgba(3,9,28,.80);border:1px solid rgba(82,229,255,.34);font-weight:1000;color:#8df6ff}\r\n.ggg-ex-actions{margin-top:15px}\r\n.ggg-ex-form{display:grid;gap:14px}\r\n.ggg-ex-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}\r\n.ggg-ex-field{display:grid;gap:7px}.ggg-ex-field.full{grid-column:1\/-1}\r\n.ggg-ex-field label{color:#8cf3ff;font-size:9px;font-weight:1000;letter-spacing:.12em;text-transform:uppercase}\r\n.ggg-ex-field input,.ggg-ex-field select,.ggg-ex-field textarea{\r\n  width:100%;min-height:48px;padding:11px 13px;border:1px solid rgba(110,224,255,.18);border-radius:14px;\r\n  outline:0;background:rgba(0,0,0,.32);color:#fff;font:inherit;\r\n}\r\n.ggg-ex-field textarea{min-height:90px;resize:vertical}.ggg-ex-field option{color:#07111e}\r\n.ggg-ex-terms{padding:15px;border:1px solid rgba(245,212,123,.25);border-radius:17px;background:rgba(245,212,123,.055);color:rgba(255,255,255,.70);font-size:11px;line-height:1.55}\r\n.ggg-ex-consent{display:flex;gap:10px;align-items:flex-start;margin-top:10px;color:#fff}.ggg-ex-consent input{margin-top:3px}\r\n.ggg-ex-message,.ggg-ex-empty{padding:18px;border:1px solid rgba(87,226,255,.15);border-radius:17px;background:rgba(60,210,255,.055);color:#c8f9ff;line-height:1.5}\r\n.ggg-ex-empty{text-align:center;padding:38px 18px}\r\n.ggg-ex-stack{display:grid;gap:13px}\r\n.ggg-ex-map{height:min(55vh,520px);min-height:340px;border:1px solid rgba(90,226,255,.18);border-radius:24px;overflow:hidden;background:rgba(0,0,0,.25)}\r\n.ggg-ex-mapFallback{height:100%;display:grid;place-content:center;padding:30px;text-align:center;color:rgba(255,255,255,.64)}\r\n.ggg-ex-calendar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\r\n.ggg-ex-date{padding:17px;border:1px solid rgba(102,229,255,.15);border-radius:18px;background:rgba(255,255,255,.035)}\r\n.ggg-ex-date h3{margin:0 0 8px}.ggg-ex-divider{height:1px;background:linear-gradient(90deg,transparent,rgba(90,231,255,.25),transparent);margin:22px 0}\r\n\r\n@media(max-width:760px){\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway{width:116px!important;padding:12px!important}\r\n    \/* Top center *\/\r\n  #enterCircleScreen\r\n  .ggg-v8-ownerStage.mode-exchange\r\n  .ggg-exchange-gateway:nth-child(1){\r\n    top:17%!important;\r\n    bottom:auto!important;\r\n    left:50%!important;\r\n    right:auto!important;\r\n  }\r\n\r\n  \/* Bottom left *\/\r\n  #enterCircleScreen\r\n  .ggg-v8-ownerStage.mode-exchange\r\n  .ggg-exchange-gateway:nth-child(2){\r\n    top:auto!important;\r\n    bottom:18%!important;\r\n    left:3%!important;\r\n    right:auto!important;\r\n  }\r\n\r\n  \/* Bottom right *\/\r\n  #enterCircleScreen\r\n  .ggg-v8-ownerStage.mode-exchange\r\n  .ggg-exchange-gateway:nth-child(3){\r\n    top:auto!important;\r\n    bottom:18%!important;\r\n    left:auto!important;\r\n    right:3%!important;\r\n  }\r\n  #enterCircleScreen .ggg-v8-detailPanel.ggg-exchange-panel{width:96vw!important;padding:64px 15px 25px!important}\r\n  .ggg-ex-grid,.ggg-ex-fields,.ggg-ex-calendar{grid-template-columns:1fr}\r\n  .ggg-ex-field.full{grid-column:auto}\r\n}\r\n@media(prefers-reduced-motion:reduce){\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway,\r\n  #enterCircleScreen .ggg-v8-ownerStage.mode-exchange .ggg-exchange-gateway::after{animation:none!important}\r\n}\r\n<\/style>\r\n\r\n<script id=\"gggV8ExchangeGalaxyScript\">\r\n(function(){\r\n  \"use strict\";\r\n  if(window.GGGV8ExchangeGalaxy)return;\r\n\r\n  const AJAX=window.GGGL8DataEngineConfig?.ajaxUrl||window.GGGL8ControlPanelConfig?.ajaxUrl||window.GGGCircleAuth?.ajaxUrl||window.ajaxurl||\"\/GGG\/wp-admin\/admin-ajax.php\";\r\n  const NONCE=()=>window.GGGL8DataEngineConfig?.nonce||window.GGGL8ControlPanelConfig?.nonce||window.GGGCircleAuth?.nonce||\"\";\r\n  let state={entitlements:[],marketplace:[],admin_opportunities:[],my_exchanges:[],proposals_sent:[]};\r\n  let currentView=\"orbit\";\r\n  let loading=false;\r\n  let exchangeMap=null;\r\n  let exchangeMarkers=[];\r\n\r\n  const esc=value=>String(value??\"\").replace(\/&\/g,\"&amp;\").replace(\/<\/g,\"&lt;\").replace(\/>\/g,\"&gt;\").replace(\/\"\/g,\"&quot;\").replace(\/'\/g,\"&#039;\");\r\n  const num=value=>Number(value||0);\r\n  const qty=value=>Number.isInteger(num(value))?String(num(value)):num(value).toFixed(2);\r\n  const status=value=>String(value||\"pending\").replaceAll(\"_\",\" \");\r\n  const date=value=>value?String(value).slice(0,10):\"Flexible\";\r\n  const imageStyle=url=>url?` style=\"background-image:url('${esc(url)}')\"`:\"\";\r\n\r\n  async function post(action,data={}){\r\n    const body=new FormData();\r\n    body.append(\"action\",action);body.append(\"nonce\",NONCE());\r\n    Object.entries(data).forEach(([key,value])=>body.append(key,value));\r\n    const response=await fetch(AJAX,{method:\"POST\",credentials:\"same-origin\",body});\r\n    const raw=await response.text();let result;\r\n    try{result=JSON.parse(raw);}catch(error){throw new Error(\"WordPress returned an invalid Exchange response.\");}\r\n    if(!response.ok||result?.success!==true)throw new Error(result?.data?.message||result?.data||\"The Exchange connection did not respond.\");\r\n    return result.data||{};\r\n  }\r\n\r\n  function normalize(data){\r\n    state={\r\n      entitlements:Array.isArray(data?.entitlements)?data.entitlements:[],\r\n      marketplace:Array.isArray(data?.marketplace)?data.marketplace:[],\r\n      admin_opportunities:Array.isArray(data?.admin_opportunities)?data.admin_opportunities:[],\r\n      my_exchanges:Array.isArray(data?.my_exchanges)?data.my_exchanges:[],\r\n      proposals_sent:Array.isArray(data?.proposals_sent)?data.proposals_sent:[]\r\n    };\r\n    return state;\r\n  }\r\n\r\n  async function loadState(){normalize(await post(\"ggg_l8_exchange_get_state\"));return state;}\r\n\r\n  function detail(){return{overlay:document.getElementById(\"gggV8Detail\"),panel:document.querySelector(\"#gggV8Detail .ggg-v8-detailPanel\"),body:document.getElementById(\"gggV8DetailBody\")};}\r\n  function openPanel(html){\r\n    const parts=detail();if(!parts.overlay||!parts.panel||!parts.body)return;\r\n    parts.panel.classList.add(\"ggg-exchange-panel\");parts.body.innerHTML=html;\r\n    parts.overlay.classList.add(\"open\");parts.overlay.setAttribute(\"aria-hidden\",\"false\");\r\n  }\r\n  function clearPanel(){detail().panel?.classList.remove(\"ggg-exchange-panel\");}\r\n  function head(title,copy){return`<div class=\"ggg-ex-head\"><small>Bliss Administration \u00b7 Verified Owner Exchange<\/small><h2>${esc(title)}<\/h2><p>${esc(copy)}<\/p><\/div>`;}\r\n  function message(text){return`<div class=\"ggg-ex-message\">${esc(text)}<\/div>`;}\r\n  function activeEntitlements(){return state.entitlements.filter(item=>String(item.status||\"active\")===\"active\"&&num(item.exchange_available_quantity)>0);}\r\n  function entitlementOptions(items=activeEntitlements()){return items.map(item=>`<option value=\"${esc(item.id)}\">${esc(item.property_name||\"Property Time\")} \u00b7 ${qty(item.exchange_available_quantity)} ${esc(item.unit_label||\"nights\")} available<\/option>`).join(\"\");}\r\n\r\n  function renderExchangeOrbit(){\r\n    const stage=document.getElementById(\"gggV8OwnerStage\"),orbit=document.getElementById(\"gggV8OrbitItems\");\r\n    if(!stage||!orbit)return;\r\n    stage.classList.remove(\"mode-use\",\"mode-rent\",\"mode-trade\");stage.classList.add(\"mode-open\",\"mode-exchange\");\r\n    orbit.classList.add(\"is-visible\");\r\n    const openCount=state.marketplace.length+state.admin_opportunities.length;\r\n    orbit.innerHTML=`\r\n      <button class=\"ggg-v8-asset ggg-exchange-gateway\" type=\"button\" data-exchange-gateway=\"find\"><strong>Find My Exchange<\/strong><small>${openCount} live possibilities<\/small><\/button>\r\n      <button class=\"ggg-v8-asset ggg-exchange-gateway\" type=\"button\" data-exchange-gateway=\"move\"><strong>Move My Time<\/strong><small>Year \u00b7 season \u00b7 dates<\/small><\/button>\r\n      <button class=\"ggg-v8-asset ggg-exchange-gateway\" type=\"button\" data-exchange-gateway=\"vault\"><strong>My Exchanges<\/strong><small>${state.my_exchanges.length+state.proposals_sent.length} tracked records<\/small><\/button>`;\r\n  }\r\n\r\n  async function openExchange(){\r\n    if(loading)return;loading=true;\r\n    try{await loadState();renderExchangeOrbit();}\r\n    catch(error){\r\n      const stage=document.getElementById(\"gggV8OwnerStage\"),orbit=document.getElementById(\"gggV8OrbitItems\");\r\n      stage?.classList.add(\"mode-open\",\"mode-exchange\");\r\n      if(orbit){orbit.classList.add(\"is-visible\");orbit.innerHTML=`<div class=\"ggg-v8-empty\">${esc(error.message)}<\/div>`;}\r\n    }finally{loading=false;}\r\n  }\r\n\r\n  function tabs(){return`<div class=\"ggg-ex-tabs\">\r\n    <button class=\"ggg-ex-tab ${currentView===\"orbit\"?\"active\":\"\"}\" type=\"button\" data-ex-view=\"orbit\">Orbit<\/button>\r\n    <button class=\"ggg-ex-tab ${currentView===\"map\"?\"active\":\"\"}\" type=\"button\" data-ex-view=\"map\">Map<\/button>\r\n    <button class=\"ggg-ex-tab ${currentView===\"calendar\"?\"active\":\"\"}\" type=\"button\" data-ex-view=\"calendar\">Calendar<\/button>\r\n    <button class=\"ggg-ex-button\" type=\"button\" data-ex-create>Publish My Time<\/button>\r\n  <\/div>`;}\r\n\r\n  function marketCard(item,index){\r\n    const media=item.media||{};const score=item.match?.score||0;\r\n    return`<article class=\"ggg-ex-card ${media.imageUrl?\"has-image\":\"\"}\"${imageStyle(media.imageUrl)}>\r\n      ${score?`<span class=\"ggg-ex-score\">${esc(score)}%<\/span>`:\"\"}\r\n      <span class=\"ggg-ex-status\">${esc(item.match?.label||status(item.exchange_type))}<\/span>\r\n      <h3>${esc(item.property_name||\"Property Time\")}<\/h3>\r\n      <p>${esc(item.owner_alias||\"Verified Owner\")} \u00b7 ${qty(item.quantity)} ${esc(item.unit_label||\"nights\")}<\/p>\r\n      <div class=\"ggg-ex-meta\"><span>${esc(date(item.start_date))} \u2192 ${esc(date(item.end_date))}<\/span>${media.location?`<span>${esc(media.location)}<\/span>`:\"\"}<\/div>\r\n      <p>Seeking ${esc(item.wanted_property||item.wanted_location||\"a compatible owner exchange\")}.<\/p>\r\n      <div class=\"ggg-ex-actions\">${item.is_mine?`<button class=\"ggg-ex-button\" type=\"button\" data-ex-vault>My Listing<\/button>`:`<button class=\"ggg-ex-button primary\" type=\"button\" data-ex-propose=\"${index}\">Propose Exchange<\/button>`}<\/div>\r\n    <\/article>`;\r\n  }\r\n\r\n  function opportunityCard(item,index){\r\n    return`<article class=\"ggg-ex-card ${item.imageUrl?\"has-image\":\"\"}\"${imageStyle(item.imageUrl)}>\r\n      <span class=\"ggg-ex-status\">Circle Opportunity<\/span><h3>${esc(item.name||\"Exchange Opportunity\")}<\/h3>\r\n      <p>${esc(item.location||\"Private Exchange Network\")} \u00b7 ${esc(item.availability||\"Dates by verification\")}<\/p>\r\n      <div class=\"ggg-ex-meta\"><span>${esc(item.unit_label||\"nights\")}<\/span>${item.exchange_value?`<span>${esc(item.exchange_value)}<\/span>`:\"\"}<\/div>\r\n      <p>${esc(item.description||item.highlights||\"A control-panel opportunity approved for the Exchange Galaxy.\")}<\/p>\r\n      <div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button primary\" type=\"button\" data-ex-opportunity=\"${index}\">Request This Exchange<\/button><\/div>\r\n    <\/article>`;\r\n  }\r\n\r\n  function orbitHtml(){\r\n    const cards=[...state.marketplace.map(marketCard),...state.admin_opportunities.map(opportunityCard)];\r\n    return cards.length?`<div class=\"ggg-ex-grid\">${cards.join(\"\")}<\/div>`:`<div class=\"ggg-ex-empty\"><h3>No live exchanges yet.<\/h3><p>Your dashboard still works. Publish verified Property Time to create the first owner exchange.<\/p><button class=\"ggg-ex-button primary\" type=\"button\" data-ex-create>Publish My Time<\/button><\/div>`;\r\n  }\r\n\r\n  function calendarHtml(){\r\n    const items=[...state.marketplace.map(item=>({name:item.property_name,start:item.start_date,end:item.end_date,kind:\"Owner Exchange\"})),...state.admin_opportunities.map(item=>({name:item.name,start:item.availability,end:\"\",kind:\"Circle Opportunity\"}))];\r\n    return items.length?`<div class=\"ggg-ex-calendar\">${items.map(item=>`<article class=\"ggg-ex-date\"><span class=\"ggg-ex-status\">${esc(item.kind)}<\/span><h3>${esc(item.name||\"Exchange\")}<\/h3><p>${esc(date(item.start))}${item.end?` \u2192 ${esc(date(item.end))}`:\"\"}<\/p><\/article>`).join(\"\")}<\/div>`:`<div class=\"ggg-ex-empty\">No approved Exchange dates are published yet.<\/div>`;\r\n  }\r\n\r\n  function mapPoints(){\r\n    const owner=state.marketplace.map((item,index)=>({kind:\"owner\",index,name:item.property_name,location:item.media?.location||\"\",lat:item.media?.lat,lng:item.media?.lng}));\r\n    const admin=state.admin_opportunities.map((item,index)=>({kind:\"opportunity\",index,name:item.name,location:item.location||\"\",lat:item.lat,lng:item.lng}));\r\n    return [...owner,...admin].filter(item=>Number.isFinite(Number(item.lat))&&Number.isFinite(Number(item.lng)));\r\n  }\r\n\r\n  function initializeMap(){\r\n    const box=document.getElementById(\"gggExchangeMap\");if(!box)return;\r\n    const points=mapPoints();\r\n    if(!window.google?.maps){box.innerHTML='<div class=\"ggg-ex-mapFallback\">The map library is not available on this page. Orbit and Calendar remain fully connected.<\/div>';return;}\r\n    if(!points.length){box.innerHTML='<div class=\"ggg-ex-mapFallback\">No approved Exchange coordinates are published yet.<\/div>';return;}\r\n    exchangeMap=new google.maps.Map(box,{center:{lat:Number(points[0].lat),lng:Number(points[0].lng)},zoom:10,mapTypeId:\"roadmap\",disableDefaultUI:true,zoomControl:true});\r\n    exchangeMarkers.forEach(marker=>marker.setMap(null));exchangeMarkers=[];\r\n    points.forEach(point=>{\r\n      const marker=new google.maps.Marker({map:exchangeMap,position:{lat:Number(point.lat),lng:Number(point.lng)},title:point.name});\r\n      marker.addListener(\"click\",()=>{\r\n        if(point.kind===\"owner\")renderProposal(point.index);else renderOpportunity(point.index);\r\n      });exchangeMarkers.push(marker);\r\n    });\r\n  }\r\n\r\n  function showFind(view=currentView){\r\n    currentView=view;\r\n    const content=view===\"orbit\"?orbitHtml():view===\"calendar\"?calendarHtml():`<div id=\"gggExchangeMap\" class=\"ggg-ex-map\"><\/div>`;\r\n    openPanel(`${head(\"Find My Exchange\",\"Explore verified owner listings and approved Circle opportunities without exposing private owner information.\")}${tabs()}${content}`);\r\n    if(view===\"map\")setTimeout(initializeMap,20);\r\n  }\r\n\r\n  function noEntitlement(title){\r\n    openPanel(`${head(title,\"A verified Property Time entitlement is required before this action can reserve anything from your account.\")}<div class=\"ggg-ex-empty\"><h3>No exchange-ready Property Time<\/h3><p>Public inventory is never treated as something you own. Once Property Time is issued to your account, it will appear here automatically.<\/p><\/div>`);\r\n  }\r\n\r\n  function renderCreateListing(){\r\n    const items=activeEntitlements();if(!items.length){noEntitlement(\"Publish My Time\");return;}\r\n    const first=items[0];\r\n    openPanel(`${head(\"Publish My Time\",\"Offer verified Property Time to the private owner network and describe what you want in return.\")}\r\n      <form id=\"gggExchangeListingForm\" class=\"ggg-ex-form\"><div class=\"ggg-ex-fields\">\r\n        <div class=\"ggg-ex-field full\"><label>Owned Property Time<\/label><select name=\"entitlement_id\" data-ex-entitlement required>${entitlementOptions(items)}<\/select><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Exchange Route<\/label><select name=\"exchange_type\"><option value=\"community\">Community Exchange<\/option><option value=\"internal\">Same-Property Exchange<\/option><option value=\"position\">Entire Position<\/option><\/select><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Quantity<\/label><input name=\"quantity\" data-ex-quantity type=\"number\" min=\"0.01\" step=\"0.01\" max=\"${esc(first.exchange_available_quantity)}\" value=\"${esc(first.exchange_available_quantity)}\" required><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Offered Start<\/label><input name=\"start_date\" data-ex-start type=\"date\" value=\"${esc(first.start_date||\"\")}\"><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Offered End<\/label><input name=\"end_date\" data-ex-end type=\"date\" value=\"${esc(first.end_date||\"\")}\"><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Wanted Property<\/label><input name=\"wanted_property\" placeholder=\"Property or host\"><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Wanted Location<\/label><input name=\"wanted_location\" placeholder=\"El Pe\u00f1ol, Guatap\u00e9...\"><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Wanted Start<\/label><input name=\"wanted_start_date\" type=\"date\"><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Wanted End<\/label><input name=\"wanted_end_date\" type=\"date\"><\/div>\r\n        <div class=\"ggg-ex-field full\"><label>Owner Note<\/label><textarea name=\"notes\" placeholder=\"Describe the exchange you want\"><\/textarea><\/div>\r\n      <\/div>\r\n      <div class=\"ggg-ex-terms\">Bliss Administration reviews eligibility, dates, matching rights and final completion. Submitting creates a temporary hold on the offered Property Time; it does not transfer a deed or complete an exchange. An Entire Position request requires the complete, uncommitted entitlement.\r\n        <label class=\"ggg-ex-consent\"><input name=\"flexible_dates\" type=\"checkbox\" value=\"1\"><span>My requested dates are flexible.<\/span><\/label>\r\n        <label class=\"ggg-ex-consent\"><input name=\"agreement_accepted\" type=\"checkbox\" value=\"1\" required><span>I reviewed and accept the Exchange Terms for this request.<\/span><\/label>\r\n      <\/div><div id=\"gggExchangeMessage\"><\/div><div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button primary\" type=\"submit\">Submit for Review<\/button><button class=\"ggg-ex-button\" type=\"button\" data-ex-find>Return to Exchange Galaxy<\/button><\/div><\/form>`);\r\n  }\r\n\r\n  function renderMove(){\r\n    const items=activeEntitlements();if(!items.length){noEntitlement(\"Move My Time\");return;}\r\n    const first=items[0];\r\n    openPanel(`${head(\"Move My Time\",\"Request a different year, season or date window for verified Property Time.\")}\r\n      <form id=\"gggExchangeMoveForm\" class=\"ggg-ex-form\"><div class=\"ggg-ex-fields\">\r\n        <div class=\"ggg-ex-field full\"><label>Owned Property Time<\/label><select name=\"entitlement_id\" data-ex-entitlement required>${entitlementOptions(items)}<\/select><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Quantity<\/label><input name=\"quantity\" data-ex-quantity type=\"number\" min=\"0.01\" step=\"0.01\" max=\"${esc(first.exchange_available_quantity)}\" value=\"${esc(first.exchange_available_quantity)}\" required><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Requested Start<\/label><input name=\"requested_start_date\" type=\"date\" required><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Requested End<\/label><input name=\"requested_end_date\" type=\"date\" required><\/div>\r\n        <div class=\"ggg-ex-field full\"><label>Request Note<\/label><textarea name=\"notes\" placeholder=\"Year, season or date preference\"><\/textarea><\/div>\r\n      <\/div><div class=\"ggg-ex-terms\">Bliss Administration must verify availability and the rights attached to the original entitlement before any date movement becomes final. This request temporarily holds the quantity selected; it does not promise replacement dates.\r\n        <label class=\"ggg-ex-consent\"><input name=\"flexible_dates\" type=\"checkbox\" value=\"1\"><span>My requested dates are flexible.<\/span><\/label>\r\n        <label class=\"ggg-ex-consent\"><input name=\"agreement_accepted\" type=\"checkbox\" value=\"1\" required><span>I reviewed and accept the Exchange Terms for this request.<\/span><\/label>\r\n      <\/div><div id=\"gggExchangeMessage\"><\/div><div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button primary\" type=\"submit\">Send to Bliss Administration<\/button><button class=\"ggg-ex-button\" type=\"button\" data-ex-vault>View My Exchanges<\/button><\/div><\/form>`);\r\n  }\r\n\r\n  function renderProposal(index){\r\n    const target=state.marketplace[index];if(!target)return;\r\n    const items=activeEntitlements();if(!items.length){noEntitlement(\"Propose Exchange\");return;}\r\n    const first=items[0];\r\n    openPanel(`${head(\"Propose Exchange\",`${target.owner_alias||\"A verified owner\"} is offering ${target.property_name||\"Property Time\"}.`)}\r\n      <article class=\"ggg-ex-card\"><span class=\"ggg-ex-status\">${esc(target.match?.label||\"Owner Exchange\")}<\/span><h3>${esc(target.property_name)}<\/h3><p>${qty(target.quantity)} ${esc(target.unit_label||\"nights\")} \u00b7 ${esc(date(target.start_date))} \u2192 ${esc(date(target.end_date))}<\/p><p>Seeking ${esc(target.wanted_property||target.wanted_location||\"a compatible exchange\")}.<\/p><\/article>\r\n      <div class=\"ggg-ex-divider\"><\/div>\r\n      <form id=\"gggExchangeProposalForm\" class=\"ggg-ex-form\"><input type=\"hidden\" name=\"record_id\" value=\"${esc(target.id)}\"><div class=\"ggg-ex-fields\">\r\n        <div class=\"ggg-ex-field full\"><label>Your Property Time<\/label><select name=\"entitlement_id\" data-ex-entitlement required>${entitlementOptions(items)}<\/select><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Quantity<\/label><input name=\"quantity\" data-ex-quantity type=\"number\" min=\"0.01\" step=\"0.01\" max=\"${esc(first.exchange_available_quantity)}\" value=\"${esc(first.exchange_available_quantity)}\" required><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Offered Start<\/label><input name=\"start_date\" data-ex-start type=\"date\" value=\"${esc(first.start_date||\"\")}\"><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Offered End<\/label><input name=\"end_date\" data-ex-end type=\"date\" value=\"${esc(first.end_date||\"\")}\"><\/div>\r\n        <div class=\"ggg-ex-field full\"><label>Message to Owner<\/label><textarea name=\"note\" placeholder=\"Explain your proposed match\"><\/textarea><\/div>\r\n      <\/div><div class=\"ggg-ex-terms\">Your proposal creates a temporary hold. The other owner may accept or decline it. An accepted proposal still requires final verification by Bliss Administration before either account is changed.<\/div><div id=\"gggExchangeMessage\"><\/div><div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button primary\" type=\"submit\">Send Proposal<\/button><button class=\"ggg-ex-button\" type=\"button\" data-ex-find>Return<\/button><\/div><\/form>`);\r\n  }\r\n\r\n  function renderOpportunity(index){\r\n    const opportunity=state.admin_opportunities[index];if(!opportunity)return;\r\n    const items=activeEntitlements();if(!items.length){noEntitlement(\"Request Exchange Opportunity\");return;}\r\n    const first=items[0];\r\n    openPanel(`${head(\"Request Opportunity\",opportunity.name||\"Approved Circle Exchange\")}\r\n      <article class=\"ggg-ex-card ${opportunity.imageUrl?\"has-image\":\"\"}\"${imageStyle(opportunity.imageUrl)}><span class=\"ggg-ex-status\">Circle Opportunity<\/span><h3>${esc(opportunity.name)}<\/h3><p>${esc(opportunity.location||\"\")} \u00b7 ${esc(opportunity.availability||\"Dates by verification\")}<\/p><p>${esc(opportunity.description||opportunity.highlights||\"\")}<\/p><\/article>\r\n      <div class=\"ggg-ex-divider\"><\/div><form id=\"gggExchangeOpportunityForm\" class=\"ggg-ex-form\"><input type=\"hidden\" name=\"opportunity_id\" value=\"${esc(opportunity.id)}\"><div class=\"ggg-ex-fields\">\r\n        <div class=\"ggg-ex-field full\"><label>Your Property Time<\/label><select name=\"entitlement_id\" data-ex-entitlement required>${entitlementOptions(items)}<\/select><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Quantity<\/label><input name=\"quantity\" data-ex-quantity type=\"number\" min=\"0.01\" step=\"0.01\" max=\"${esc(first.exchange_available_quantity)}\" value=\"${esc(first.exchange_available_quantity)}\" required><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Wanted Start<\/label><input name=\"wanted_start_date\" type=\"date\"><\/div>\r\n        <div class=\"ggg-ex-field\"><label>Wanted End<\/label><input name=\"wanted_end_date\" type=\"date\"><\/div>\r\n        <div class=\"ggg-ex-field full\"><label>Request Note<\/label><textarea name=\"notes\"><\/textarea><\/div>\r\n      <\/div><div class=\"ggg-ex-terms\">Bliss Administration verifies both the submitted Property Time and the destination opportunity. No exchange is complete until Administration approves the dates and records the result.\r\n        <label class=\"ggg-ex-consent\"><input name=\"agreement_accepted\" type=\"checkbox\" value=\"1\" required><span>I reviewed and accept the Exchange Terms for this request.<\/span><\/label>\r\n      <\/div><div id=\"gggExchangeMessage\"><\/div><div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button primary\" type=\"submit\">Request Verification<\/button><button class=\"ggg-ex-button\" type=\"button\" data-ex-find>Return<\/button><\/div><\/form>`);\r\n  }\r\n\r\n  function proposalCards(record){\r\n    const proposals=Array.isArray(record.proposals)?record.proposals:[];\r\n    if(!proposals.length)return\"\";\r\n    return`<div class=\"ggg-ex-divider\"><\/div><span class=\"ggg-ex-label\">Proposals Received<\/span><div class=\"ggg-ex-stack\">${proposals.map(proposal=>`<article class=\"ggg-ex-card\"><span class=\"ggg-ex-status\">${esc(status(proposal.status))}<\/span><h3>${esc(proposal.property_name||\"Property Time\")}<\/h3><p>${esc(proposal.owner_alias||\"Verified Owner\")} \u00b7 ${qty(proposal.quantity)} ${esc(proposal.unit_label||\"nights\")}<\/p><div class=\"ggg-ex-meta\"><span>${esc(date(proposal.start_date))} \u2192 ${esc(date(proposal.end_date))}<\/span><\/div>${proposal.note?`<p>${esc(proposal.note)}<\/p>`:\"\"}${record.status===\"open\"&&proposal.status===\"pending\"?`<div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button primary\" type=\"button\" data-ex-accept=\"${esc(proposal.id)}\" data-record-id=\"${esc(record.id)}\">Accept + Verify<\/button><\/div>`:\"\"}<\/article>`).join(\"\")}<\/div>`;\r\n  }\r\n\r\n  function myRecordCard(record){\r\n    const cancellable=[\"pending_review\",\"open\",\"pending_admin\"].includes(String(record.status||\"\"));\r\n    return`<article class=\"ggg-ex-card\"><span class=\"ggg-ex-status\">${esc(status(record.status))}<\/span><h3>${esc(record.property_name||record.destination_property||\"Exchange\")}<\/h3><p>${esc(status(record.record_type))} \u00b7 ${qty(record.quantity)} ${esc(record.unit_label||\"nights\")}<\/p><div class=\"ggg-ex-meta\"><span>${esc(date(record.start_date))} \u2192 ${esc(date(record.end_date))}<\/span>${record.wanted_start_date?`<span>Wanted ${esc(date(record.wanted_start_date))}<\/span>`:\"\"}<\/div>${record.admin_note?`<p><strong>Administration:<\/strong> ${esc(record.admin_note)}<\/p>`:\"\"}<div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button\" type=\"button\" data-ex-record=\"${esc(record.id)}\">Open Record<\/button>${cancellable?`<button class=\"ggg-ex-button warn\" type=\"button\" data-ex-cancel=\"${esc(record.id)}\">Cancel<\/button>`:\"\"}<\/div><\/article>`;\r\n  }\r\n\r\n  function sentProposalCard(item){\r\n    const proposal=item.proposal||{};\r\n    return`<article class=\"ggg-ex-card\"><span class=\"ggg-ex-status\">${esc(status(proposal.status))}<\/span><h3>${esc(item.destination_property||\"Owner Exchange\")}<\/h3><p>To ${esc(item.owner_alias||\"Verified Owner\")} \u00b7 offering ${esc(proposal.property_name||\"Property Time\")}<\/p><div class=\"ggg-ex-meta\"><span>${qty(proposal.quantity)} ${esc(proposal.unit_label||\"nights\")}<\/span><span>${esc(date(proposal.start_date))} \u2192 ${esc(date(proposal.end_date))}<\/span><\/div>${proposal.status===\"pending\"?`<div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button warn\" type=\"button\" data-ex-withdraw=\"${esc(proposal.id)}\" data-record-id=\"${esc(item.record_id)}\">Withdraw Proposal<\/button><\/div>`:\"\"}<\/article>`;\r\n  }\r\n\r\n  function renderVault(note=\"\"){\r\n    const mine=state.my_exchanges.length?state.my_exchanges.map(myRecordCard).join(\"\"):`<div class=\"ggg-ex-message\">You have not created an Exchange record yet.<\/div>`;\r\n    const sent=state.proposals_sent.length?state.proposals_sent.map(sentProposalCard).join(\"\"):`<div class=\"ggg-ex-message\">You have not sent an owner proposal yet.<\/div>`;\r\n    openPanel(`${head(\"My Exchanges\",\"Track every listing, time movement, proposal and final Administration decision connected to this account.\")}${note?message(note):\"\"}<span class=\"ggg-ex-label\">My Exchange Records<\/span><div class=\"ggg-ex-grid\">${mine}<\/div><div class=\"ggg-ex-divider\"><\/div><span class=\"ggg-ex-label\">Proposals Sent<\/span><div class=\"ggg-ex-grid\">${sent}<\/div><div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button primary\" type=\"button\" data-ex-find>Find My Exchange<\/button><button class=\"ggg-ex-button\" type=\"button\" data-ex-create>Publish My Time<\/button><\/div>`);\r\n  }\r\n\r\n  function renderRecord(id){\r\n    const record=state.my_exchanges.find(item=>String(item.id)===String(id));if(!record)return;\r\n    openPanel(`${head(record.property_name||record.destination_property||\"Exchange Record\",\"This is the private Administration record connected to your signed-in account.\")}<article class=\"ggg-ex-card\"><span class=\"ggg-ex-status\">${esc(status(record.status))}<\/span><h3>${esc(status(record.record_type))}<\/h3><p>${qty(record.quantity)} ${esc(record.unit_label||\"nights\")} \u00b7 ${esc(date(record.start_date))} \u2192 ${esc(date(record.end_date))}<\/p>${record.notes?`<p>${esc(record.notes)}<\/p>`:\"\"}${record.admin_note?`<p><strong>Administration:<\/strong> ${esc(record.admin_note)}<\/p>`:\"\"}<\/article>${proposalCards(record)}<div class=\"ggg-ex-actions\"><button class=\"ggg-ex-button\" type=\"button\" data-ex-vault>Return to My Exchanges<\/button><\/div>`);\r\n  }\r\n\r\n  function updateEntitlementFields(select){\r\n    const item=state.entitlements.find(entry=>String(entry.id)===String(select.value));const form=select.closest(\"form\");if(!item||!form)return;\r\n    const quantity=form.querySelector(\"[data-ex-quantity]\"),start=form.querySelector(\"[data-ex-start]\"),end=form.querySelector(\"[data-ex-end]\");\r\n    if(quantity){quantity.max=item.exchange_available_quantity||0;quantity.value=item.exchange_available_quantity||0;}\r\n    if(start)start.value=item.start_date||\"\";if(end)end.value=item.end_date||\"\";\r\n  }\r\n\r\n  function formData(form){const data=new FormData(form),result={};data.forEach((value,key)=>result[key]=value);return result;}\r\n  async function submit(form,action){\r\n    const box=document.getElementById(\"gggExchangeMessage\"),button=form.querySelector('[type=\"submit\"]');\r\n    if(button)button.disabled=true;if(box)box.innerHTML=message(\"Sending secure request\u2026\");\r\n    try{const result=await post(action,formData(form));normalize(result.state||await post(\"ggg_l8_exchange_get_state\"));renderExchangeOrbit();renderVault(result.message||\"Exchange request saved.\");}\r\n    catch(error){if(box)box.innerHTML=message(error.message);if(button)button.disabled=false;}\r\n  }\r\n  async function update(action,recordId,proposalId=\"\"){\r\n    try{const result=action===\"accept\"?await post(\"ggg_l8_exchange_accept_proposal\",{record_id:recordId,proposal_id:proposalId}):await post(\"ggg_l8_exchange_update\",{record_id:recordId,proposal_id:proposalId,exchange_action:action});normalize(result.state||{});renderExchangeOrbit();renderVault(result.message||\"Exchange updated.\");}\r\n    catch(error){renderVault(error.message);}\r\n  }\r\n\r\n  window.addEventListener(\"click\",function(event){\r\n    const target=event.target;if(!(target instanceof Element))return;\r\n    if(target.closest('[data-owner-mode=\"exchange\"]')){event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();openExchange();return;}\r\n    const gateway=target.closest(\"[data-exchange-gateway]\");if(gateway){event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();const type=gateway.dataset.exchangeGateway;if(type===\"find\")showFind();else if(type===\"move\")renderMove();else renderVault();return;}\r\n    const view=target.closest(\"[data-ex-view]\");if(view){event.preventDefault();showFind(view.dataset.exView);return;}\r\n    if(target.closest(\"[data-ex-find]\")){event.preventDefault();showFind();return;}\r\n    if(target.closest(\"[data-ex-create]\")){event.preventDefault();renderCreateListing();return;}\r\n    if(target.closest(\"[data-ex-vault]\")){event.preventDefault();renderVault();return;}\r\n    const proposal=target.closest(\"[data-ex-propose]\");if(proposal){event.preventDefault();renderProposal(Number(proposal.dataset.exPropose));return;}\r\n    const opportunity=target.closest(\"[data-ex-opportunity]\");if(opportunity){event.preventDefault();renderOpportunity(Number(opportunity.dataset.exOpportunity));return;}\r\n    const record=target.closest(\"[data-ex-record]\");if(record){event.preventDefault();renderRecord(record.dataset.exRecord);return;}\r\n    const cancel=target.closest(\"[data-ex-cancel]\");if(cancel){event.preventDefault();if(confirm(\"Cancel this Exchange record and release its temporary hold?\"))update(\"cancel\",cancel.dataset.exCancel);return;}\r\n    const withdraw=target.closest(\"[data-ex-withdraw]\");if(withdraw){event.preventDefault();if(confirm(\"Withdraw this proposal and release its temporary hold?\"))update(\"withdraw_proposal\",withdraw.dataset.recordId,withdraw.dataset.exWithdraw);return;}\r\n    const accept=target.closest(\"[data-ex-accept]\");if(accept){event.preventDefault();if(confirm(\"Accept this proposal and send both sides to Bliss Administration for final verification?\"))update(\"accept\",accept.dataset.recordId,accept.dataset.exAccept);return;}\r\n    if(target.closest(\".ggg-v8-detailClose\")||target.id===\"gggV8Detail\")clearPanel();\r\n  },true);\r\n\r\n  document.addEventListener(\"change\",event=>{if(event.target?.matches(\"[data-ex-entitlement]\"))updateEntitlementFields(event.target);});\r\n  document.addEventListener(\"submit\",event=>{\r\n    const form=event.target;if(!(form instanceof HTMLFormElement))return;\r\n    const actions={gggExchangeListingForm:\"ggg_l8_exchange_create_listing\",gggExchangeMoveForm:\"ggg_l8_exchange_create_time_request\",gggExchangeProposalForm:\"ggg_l8_exchange_make_proposal\",gggExchangeOpportunityForm:\"ggg_l8_exchange_request_opportunity\"};\r\n    if(!actions[form.id])return;event.preventDefault();event.stopPropagation();submit(form,actions[form.id]);\r\n  },true);\r\n\r\n  window.GGGV8ExchangeGalaxy={open:openExchange,reload:loadState};\r\n})();\r\n<\/script>\r\n\r\n\r\n<!-- \/wp:html -->\r\n\r\n<!-- wp:paragraph -->\r\n<p><\/p>\r\n<!-- \/wp:paragraph -->","protected":false},"excerpt":{"rendered":"<p>ASTRO TRAVEL RECOMMENDATIONS \u2648\ufe0e Aries \u2649\ufe0e Taurus \u264a\ufe0e Gemini \u264b\ufe0e Cancer \u264c\ufe0e Leo \u264d\ufe0e Virgo \u264e\ufe0e Libra \u264f\ufe0e Scorpio \u2650\ufe0e Sagittarius \u2651\ufe0e Capricorn \u2652\ufe0e Aquarius \u2653\ufe0e Pisces \u2190 \u2630 Luxury Fractional Club Access, preview, and ownership pathways inside the Luxury Fractional Club. About the Club Access &#038; Ownership Legal &#038; Disclosures Terms of Use Privacy [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3871","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/godsgalaxygame.com\/GGG\/wp-json\/wp\/v2\/pages\/3871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/godsgalaxygame.com\/GGG\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/godsgalaxygame.com\/GGG\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/godsgalaxygame.com\/GGG\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/godsgalaxygame.com\/GGG\/wp-json\/wp\/v2\/comments?post=3871"}],"version-history":[{"count":576,"href":"https:\/\/godsgalaxygame.com\/GGG\/wp-json\/wp\/v2\/pages\/3871\/revisions"}],"predecessor-version":[{"id":10633,"href":"https:\/\/godsgalaxygame.com\/GGG\/wp-json\/wp\/v2\/pages\/3871\/revisions\/10633"}],"wp:attachment":[{"href":"https:\/\/godsgalaxygame.com\/GGG\/wp-json\/wp\/v2\/media?parent=3871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}