{"id":37,"date":"2026-09-25T16:28:40","date_gmt":"2026-09-25T16:28:40","guid":{"rendered":"https:\/\/dazedsea.com\/?page_id=37"},"modified":"2026-09-25T16:29:06","modified_gmt":"2026-09-25T16:29:06","slug":"dazed-sea-coming-soon","status":"publish","type":"page","link":"https:\/\/dazedsea.com\/","title":{"rendered":"Dazed SEA Coming Soon"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"37\" class=\"elementor elementor-37\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a803d50 e-con-full e-flex e-con e-parent\" data-id=\"a803d50\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c0521e8 elementor-widget elementor-widget-html\" data-id=\"c0521e8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>DAZED SOUTH-EAST ASIA<\/title>\n  \n  <!-- Brutalist \/ Monospaced Editorial Typography -->\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Space+Mono:ital,wght@0,400;0,700;1,400&display=swap\" rel=\"stylesheet\">\n\n  <style>\n    \/* Scoped container for seamless Elementor embedding *\/\n    #dz-root {\n      position: relative;\n      width: 100vw;\n      min-height: 100vh;\n      min-height: 100dvh;\n      background-color: #050505;\n      color: #FFFFFF;\n      font-family: 'Space Mono', monospace, -apple-system, sans-serif;\n      overflow: hidden;\n      margin: 0;\n      padding: 0;\n      box-sizing: border-box;\n      user-select: none;\n      -webkit-user-select: none;\n    }\n\n    #dz-root *, #dz-root *::before, #dz-root *::after {\n      box-sizing: inherit;\n    }\n\n    \/* Ambient CRT Scanline Overlay *\/\n    #dz-root .scanlines {\n      position: absolute;\n      inset: 0;\n      pointer-events: none;\n      background: repeating-linear-gradient(\n        0deg,\n        rgba(0, 0, 0, 0.28) 0px,\n        rgba(0, 0, 0, 0.28) 1px,\n        transparent 1px,\n        transparent 3px\n      );\n      z-index: 20;\n    }\n\n    \/* Subtle Film Grain Noise *\/\n    #dz-root .film-grain {\n      position: absolute;\n      inset: 0;\n      pointer-events: none;\n      opacity: 0.035;\n      background-image: url(\"data:image\/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http:\/\/www.w3.org\/2000\/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'\/%3E%3C\/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'\/%3E%3C\/svg%3E\");\n      z-index: 21;\n    }\n\n    \/* Primary Interactive Canvas Layer *\/\n    #dz-root #dzCanvas {\n      position: absolute;\n      inset: 0;\n      width: 100%;\n      height: 100%;\n      display: block;\n      z-index: 10;\n      cursor: crosshair;\n    }\n\n    \/* Top Navigation Hairline Bar *\/\n    #dz-root .top-bar {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      padding: clamp(16px, 2.5vw, 28px) clamp(20px, 3.5vw, 48px);\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      font-size: clamp(10px, 0.85vw, 12px);\n      letter-spacing: 0.22em;\n      text-transform: uppercase;\n      z-index: 30;\n      border-bottom: 1px solid rgba(255, 255, 255, 0.12);\n      pointer-events: none;\n    }\n\n    #dz-root .top-bar-left {\n      display: flex;\n      align-items: center;\n      gap: 10px;\n    }\n\n    #dz-root .rec-dot {\n      width: 6px;\n      height: 6px;\n      border-radius: 50%;\n      background-color: #ff002e;\n      box-shadow: 0 0 8px #ff002e;\n      animation: dzPulse 2s infinite ease-in-out;\n    }\n\n    @keyframes dzPulse {\n      0%, 100% { opacity: 1; transform: scale(1); }\n      50% { opacity: 0.3; transform: scale(0.85); }\n    }\n\n    #dz-root .top-bar-right {\n      color: rgba(255, 255, 255, 0.7);\n    }\n\n    \/* Minimal Bottom Footer Dock *\/\n    #dz-root .bottom-dock {\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      width: 100%;\n      padding: clamp(16px, 2.5vw, 28px) clamp(20px, 3.5vw, 48px);\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      z-index: 30;\n      border-top: 1px solid rgba(255, 255, 255, 0.12);\n    }\n\n    #dz-root .inquiry-trigger {\n      background: transparent;\n      border: 1px solid rgba(255, 255, 255, 0.35);\n      color: rgba(255, 255, 255, 0.85);\n      font-family: inherit;\n      font-size: clamp(10px, 0.8vw, 12px);\n      letter-spacing: 0.25em;\n      text-transform: uppercase;\n      padding: 10px 24px;\n      cursor: pointer;\n      transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n\n    #dz-root .inquiry-trigger:hover {\n      background-color: #ffffff;\n      color: #050505;\n      border-color: #ffffff;\n      box-shadow: 0 0 20px rgba(255, 255, 255, 0.25);\n    }\n\n    \/* High-Contrast Editorial Confirmation Modal *\/\n    #dz-root #dzModalOverlay {\n      position: absolute;\n      inset: 0;\n      background-color: #ffffff;\n      color: #000000;\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      z-index: 100;\n      opacity: 0;\n      pointer-events: none;\n      transition: opacity 0.25s ease;\n      padding: 24px;\n      text-align: center;\n    }\n\n    #dz-root #dzModalOverlay.active {\n      opacity: 1;\n      pointer-events: auto;\n    }\n\n    #dz-root .modal-inner {\n      max-width: 680px;\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      gap: clamp(28px, 4vw, 40px);\n    }\n\n    #dz-root .modal-message {\n      font-size: clamp(13px, 1.35vw, 17px);\n      line-height: 1.8;\n      letter-spacing: 0.15em;\n      text-transform: uppercase;\n      font-weight: 400;\n    }\n\n    #dz-root .modal-close-btn {\n      background: #000000;\n      color: #ffffff;\n      border: 1px solid #000000;\n      font-family: inherit;\n      font-size: clamp(11px, 0.9vw, 13px);\n      letter-spacing: 0.25em;\n      text-transform: uppercase;\n      padding: 12px 36px;\n      cursor: pointer;\n      transition: all 0.2s ease;\n    }\n\n    #dz-root .modal-close-btn:hover {\n      background: transparent;\n      color: #000000;\n    }\n  <\/style>\n<\/head>\n<body style=\"margin: 0; padding: 0; background: #050505;\">\n\n  <!-- Strict invisible source SVG to prevent DOM rendering \/ phantom duplicates -->\n  <svg id=\"dzSvgSource\" style=\"display: none !important; position: absolute; width: 0; height: 0; overflow: hidden;\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 2575.38 472.49\">\n    <g>\n      <path fill=\"#ffffff\" d=\"M.62,2.92h297.96c79.81,0,115.39,26.99,115.39,100.47v253.18c0,85.54-31,112.53-115.39,112.53H.62V2.92ZM202.7,362.31c20.66,0,26.4-9.18,26.4-33.3v-186.59c0-24.11-6.31-33.3-26.4-33.3h-20.1v253.18h20.1Z\"\/>\n      <path fill=\"#ffffff\" d=\"M638.45,106.84l18.95,158.45h-38.46l19.52-158.45ZM496.08,2.92l-82.11,466.17h187.74l10.34-101.04h52.24l10.33,101.04h188.31L780.83,2.92h-284.75Z\"\/>\n      <path fill=\"#ffffff\" d=\"M884.95,2.93v106.21h113.68l-124.59,260.07v99.89h327.83v-106.21h-125.16l125.16-262.36V2.93h-316.92Z\"\/>\n      <path fill=\"#ffffff\" d=\"M1218.01,2.92v466.17h293.95v-106.21h-111.96v-96.45h111.96v-106.21h-111.96v-51.09h111.96V2.92h-293.95Z\"\/>\n      <path fill=\"#ffffff\" d=\"M1528.1,469.1h297.97c84.39,0,115.39-26.99,115.39-112.53V103.39c0-73.48-35.59-100.47-115.39-100.47h-297.97v466.17ZM1710.09,362.32V109.13h20.1c20.09,0,26.4,9.19,26.4,33.3v186.59c0,24.11-5.74,33.3-26.4,33.3h-20.1Z\"\/>\n      <path fill=\"#ffffff\" d=\"M2179.45,163.25h-79.58v-82.46c0-13.07-4.42-19.61-13.26-19.61-4.61,0-7.7,1.64-9.23,4.9-1.54,3.27-2.3,8.17-2.3,14.71v72.66c0,7.7.95,13.46,2.87,17.3,1.92,3.85,6.92,8.07,14.99,12.69l49.02,28.26c16.16,8.85,26.43,19.03,30.86,30.56,4.41,11.53,6.63,25,6.63,40.37v97.46c0,19.99-.96,36.14-2.89,48.44-1.92,12.31-6.05,21.73-12.39,28.26-6.35,6.54-15.67,10.96-27.97,13.26-12.31,2.31-28.84,3.46-49.59,3.46s-36.15-1.16-48.44-3.46c-12.31-2.31-21.62-6.82-27.97-13.55-6.35-6.72-10.58-16.24-12.68-28.54-2.12-12.3-3.18-28.26-3.18-47.87v-103.22h80.74v114.18c0,13.46,4.41,20.18,13.26,20.18,7.68,0,11.53-6.72,11.53-20.18v-99.19c0-7.68-.87-13.26-2.59-16.72-1.72-3.46-6.83-7.68-15.28-12.69l-51.33-29.99c-14.99-8.84-24.8-19.12-29.41-30.85-4.61-11.72-6.92-25.85-6.92-42.39v-66.89c0-19.99,1.06-36.04,3.18-48.15,2.1-12.11,6.43-21.53,12.98-28.26,6.52-6.72,15.94-11.25,28.25-13.55,12.3-2.31,28.45-3.46,48.44-3.46s37.29,1.15,49.59,3.46c12.3,2.31,21.62,6.92,27.97,13.84,6.34,6.92,10.38,16.43,12.11,28.54,1.72,12.11,2.59,27.97,2.59,47.57v70.93Z\"\/>\n      <path fill=\"#ffffff\" d=\"M2345.53,1.78v61.13h-47.87v119.37h47.87v61.7h-47.87v164.35h47.87v61.7h-128.02V1.78h128.02Z\"\/>\n      <path fill=\"#ffffff\" d=\"M2525.45,1.78l47.28,468.26h-77.84l-5.77-99.76h-33.45l-5.76,99.76h-77.28L2418.77,1.78h106.68ZM2458.55,307.99h27.1l-12.11-213.37h-2.31l-12.68,213.37Z\"\/>\n    <\/g>\n  <\/svg>\n\n  <div id=\"dz-root\">\n    <div class=\"scanlines\"><\/div>\n    <div class=\"film-grain\"><\/div>\n\n    <!-- Top Hairline Navigation -->\n    <header class=\"top-bar\">\n      <div class=\"top-bar-left\">\n        <span class=\"rec-dot\"><\/span>\n        <span>DAZED &amp; CONFUSED ARCHIVE<\/span>\n      <\/div>\n      <div class=\"top-bar-right\">\n        EDITION \/\/ REGION [SOUTH-EAST ASIA]\n      <\/div>\n    <\/header>\n\n    <!-- Interactive Distortion Canvas (Renders Logo + Subtitle together) -->\n    <canvas id=\"dzCanvas\"><\/canvas>\n\n    <!-- Bottom Dock -->\n    <footer class=\"bottom-dock\">\n      <button class=\"inquiry-trigger\" id=\"inquiryBtn\" type=\"button\">[ Press &amp; Inquiries ]<\/button>\n    <\/footer>\n\n    <!-- Persistent Fullscreen Overlay Modal -->\n    <div id=\"dzModalOverlay\">\n      <div class=\"modal-inner\">\n        <div class=\"modal-message\">\n          The email dazedsea@digizenmedia.com has been copied to your clipboard.\n        <\/div>\n        <button class=\"modal-close-btn\" id=\"modalCloseBtn\" type=\"button\">[ OK ]<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n\n  <script>\n    (function() {\n      'use strict';\n\n      const root = document.getElementById('dz-root');\n      const canvas = document.getElementById('dzCanvas');\n      const ctx = canvas.getContext('2d', { willReadFrequently: true });\n      const svgSource = document.getElementById('dzSvgSource');\n\n      \/\/ Obfuscated Email Assembly (Never cleartext in HTML source)\n      const mailChunks = [100, 97, 122, 101, 100, 115, 101, 97, 64, 100, 105, 103, 105, 122, 101, 110, 109, 101, 100, 105, 97, 46, 99, 111, 109];\n      function getEmail() {\n        return String.fromCharCode.apply(null, mailChunks);\n      }\n\n      \/\/ Editorial Modal Interactions\n      const inquiryBtn = document.getElementById('inquiryBtn');\n      const modal = document.getElementById('dzModalOverlay');\n      const modalCloseBtn = document.getElementById('modalCloseBtn');\n\n      function copyTextFallback(text) {\n        const temp = document.createElement('textarea');\n        temp.value = text;\n        temp.style.position = 'fixed';\n        temp.style.opacity = '0';\n        document.body.appendChild(temp);\n        temp.focus();\n        temp.select();\n        try {\n          document.execCommand('copy');\n        } catch (e) {}\n        document.body.removeChild(temp);\n      }\n\n      function openModal() {\n        const email = getEmail();\n        if (navigator.clipboard && navigator.clipboard.writeText) {\n          navigator.clipboard.writeText(email).catch(function() {\n            copyTextFallback(email);\n          });\n        } else {\n          copyTextFallback(email);\n        }\n        modal.classList.add('active');\n      }\n\n      function closeModal() {\n        modal.classList.remove('active');\n      }\n\n      if (inquiryBtn) inquiryBtn.addEventListener('click', openModal);\n      if (modalCloseBtn) modalCloseBtn.addEventListener('click', closeModal);\n      if (modal) {\n        modal.addEventListener('click', function(e) {\n          if (e.target === modal) closeModal();\n        });\n      }\n      window.addEventListener('keydown', function(e) {\n        if (e.key === 'Escape' && modal.classList.contains('active')) {\n          closeModal();\n        }\n      });\n\n      \/\/ Offscreen Buffers for Vector Master Scene & Lens Refraction\n      const offCanvas = document.createElement('canvas');\n      const offCtx = offCanvas.getContext('2d');\n      const patchCanvas = document.createElement('canvas');\n      const patchCtx = patchCanvas.getContext('2d');\n\n      const logoImg = new Image();\n      let isSvgLoaded = false;\n\n      \/\/ Extract raw SVG payload to image Blob\n      const svgData = new XMLSerializer().serializeToString(svgSource);\n      const svgBlob = new Blob([svgData], { type: 'image\/svg+xml;charset=utf-8' });\n      const svgUrl = URL.createObjectURL(svgBlob);\n\n      logoImg.onload = function() {\n        isSvgLoaded = true;\n        renderOffscreen();\n      };\n      logoImg.src = svgUrl;\n\n      let width = 0;\n      let height = 0;\n      let dpr = 1;\n      let logoRect = { x: 0, y: 0, w: 0, h: 0 };\n      let textPosY = 0;\n      let fontSizePx = 16;\n\n      \/\/ Pointer & Physics State\n      const pointer = {\n        x: -9999,\n        y: -9999,\n        targetX: -9999,\n        targetY: -9999,\n        active: false,\n        lastMoveTime: 0\n      };\n\n      const lensRadius = 150; \/\/ CSS pixels\n      const lensPower = 1.62;  \/\/ Optical magnification gradient\n\n      function handleResize() {\n        const rect = root.getBoundingClientRect();\n        width = rect.width;\n        height = rect.height;\n        dpr = Math.min(window.devicePixelRatio || 1, 2);\n\n        canvas.width = Math.floor(width * dpr);\n        canvas.height = Math.floor(height * dpr);\n        ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n\n        offCanvas.width = canvas.width;\n        offCanvas.height = canvas.height;\n        offCtx.setTransform(dpr, 0, 0, dpr, 0, 0);\n\n        \/\/ Center SVG masthead matching 2575.38 x 472.49 viewBox ratio\n        const maxWidth = Math.min(width * 0.88, 1080);\n        const logoAspect = 2575.38 \/ 472.49;\n        const logoW = maxWidth;\n        const logoH = logoW \/ logoAspect;\n\n        \/\/ Position combined block (logo + 60px gap + subtitle) centered vertically\n        const spaceGap = Math.max(55, Math.min(width * 0.065, 75));\n        fontSizePx = Math.max(13, Math.min(width * 0.014, 18));\n        const totalBlockH = logoH + spaceGap + fontSizePx;\n\n        logoRect.w = logoW;\n        logoRect.h = logoH;\n        logoRect.x = (width - logoW) \/ 2;\n        logoRect.y = (height - totalBlockH) \/ 2;\n        textPosY = logoRect.y + logoH + spaceGap + fontSizePx;\n\n        if (pointer.targetX === -9999) {\n          pointer.x = width \/ 2;\n          pointer.y = height \/ 2;\n          pointer.targetX = pointer.x;\n          pointer.targetY = pointer.y;\n        }\n\n        renderOffscreen();\n      }\n\n      \/\/ Draw tracked text with letter spacing\n      function drawTrackedText(targetCtx, text, x, y, tracking) {\n        targetCtx.save();\n        const chars = text.split('');\n        let totalWidth = 0;\n        const widths = [];\n\n        for (let i = 0; i < chars.length; i++) {\n          const w = targetCtx.measureText(chars[i]).width;\n          widths.push(w);\n          totalWidth += w + (i < chars.length - 1 ? tracking : 0);\n        }\n\n        let curX = x - totalWidth \/ 2;\n        for (let i = 0; i < chars.length; i++) {\n          targetCtx.fillText(chars[i], curX, y);\n          curX += widths[i] + tracking;\n        }\n        targetCtx.restore();\n      }\n\n      function renderOffscreen() {\n        if (width === 0) return;\n        offCtx.save();\n        offCtx.setTransform(dpr, 0, 0, dpr, 0, 0);\n        offCtx.clearRect(0, 0, width, height);\n\n        \/\/ 1. Draw SVG masthead if loaded\n        if (isSvgLoaded) {\n          offCtx.drawImage(logoImg, logoRect.x, logoRect.y, logoRect.w, logoRect.h);\n        }\n\n        \/\/ 2. Draw \"See you soon...\" on the exact same plane so it distorts with the lens\n        offCtx.fillStyle = 'rgba(255, 255, 255, 0.88)';\n        offCtx.font = '400 ' + fontSizePx + \"px 'Space Mono', monospace, sans-serif\";\n        offCtx.textBaseline = 'alphabetic';\n        const tracking = fontSizePx * 0.38;\n        drawTrackedText(offCtx, 'SEE YOU SOON...', width \/ 2, textPosY, tracking);\n\n        offCtx.restore();\n      }\n\n      if (document.fonts && document.fonts.ready) {\n        document.fonts.ready.then(function() {\n          renderOffscreen();\n        });\n      }\n\n      window.addEventListener('resize', handleResize);\n\n      \/\/ Pointer Tracking\n      function updatePointer(clientX, clientY) {\n        const rect = root.getBoundingClientRect();\n        pointer.targetX = clientX - rect.left;\n        pointer.targetY = clientY - rect.top;\n        pointer.active = true;\n        pointer.lastMoveTime = performance.now();\n      }\n\n      window.addEventListener('pointermove', function(e) {\n        updatePointer(e.clientX, e.clientY);\n      });\n\n      window.addEventListener('touchmove', function(e) {\n        if (e.touches.length > 0) {\n          updatePointer(e.touches[0].clientX, e.touches[0].clientY);\n        }\n      }, { passive: true });\n\n      \/\/ Glitch State & Scheduler\n      let glitchActive = false;\n      let nextGlitchTime = performance.now() + 2500;\n      let glitchDuration = 0;\n      let glitchSlices = [];\n\n      function triggerGlitch(now) {\n        glitchActive = true;\n        glitchDuration = now + (60 + Math.random() * 110);\n        glitchSlices = [];\n        const count = Math.floor(2 + Math.random() * 4);\n        for (let i = 0; i < count; i++) {\n          glitchSlices.push({\n            y: Math.random() * height,\n            h: 6 + Math.random() * 26,\n            offset: (Math.random() - 0.5) * 40\n          });\n        }\n      }\n\n      \/\/ Animation Loop\n      function animate(time) {\n        requestAnimationFrame(animate);\n\n        \/\/ Ambient idle drift if no interaction occurred for 2.2 seconds\n        if (!pointer.active || (time - pointer.lastMoveTime > 2200)) {\n          const t = time * 0.0011;\n          const orbitRadiusX = logoRect.w * 0.32;\n          const orbitRadiusY = logoRect.h * 0.85;\n          pointer.targetX = (width \/ 2) + Math.cos(t) * orbitRadiusX;\n          pointer.targetY = (height \/ 2) + Math.sin(t * 1.5) * orbitRadiusY;\n        }\n\n        \/\/ Smooth spring easing\n        pointer.x += (pointer.targetX - pointer.x) * 0.12;\n        pointer.y += (pointer.targetY - pointer.y) * 0.12;\n\n        \/\/ Schedule random scanline displacement glitches\n        if (time > nextGlitchTime) {\n          triggerGlitch(time);\n          nextGlitchTime = time + 3000 + Math.random() * 4500;\n        }\n        if (glitchActive && time > glitchDuration) {\n          glitchActive = false;\n        }\n\n        \/\/ 1. Draw base unwarped scene\n        ctx.save();\n        ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n        ctx.fillStyle = '#050505';\n        ctx.fillRect(0, 0, width, height);\n\n        if (!isSvgLoaded) {\n          ctx.restore();\n          return;\n        }\n\n        \/\/ Base layer: official logo + subtitle\n        ctx.drawImage(offCanvas, 0, 0, width, height);\n\n        \/\/ 2. Glitch slice displacements\n        if (glitchActive && glitchSlices.length > 0) {\n          for (let i = 0; i < glitchSlices.length; i++) {\n            const slice = glitchSlices[i];\n            const sy = Math.floor(slice.y * dpr);\n            const sh = Math.floor(slice.h * dpr);\n            if (sy + sh < offCanvas.height) {\n              ctx.drawImage(\n                offCanvas,\n                0, sy, offCanvas.width, sh,\n                slice.offset, slice.y, width, slice.h\n              );\n            }\n          }\n        }\n        ctx.restore();\n\n        \/\/ 3. Convex Optical Lens Distortion (CRITICAL FIX: Zero Ghosting)\n        const lx = pointer.x;\n        const ly = pointer.y;\n        const lr = lensRadius;\n        const lrDpr = Math.floor(lr * dpr);\n        const lSizeDpr = lrDpr * 2;\n\n        const sourceX = Math.floor((lx - lr) * dpr);\n        const sourceY = Math.floor((ly - lr) * dpr);\n\n        if (\n          sourceX >= 0 &&\n          sourceY >= 0 &&\n          sourceX + lSizeDpr <= canvas.width &&\n          sourceY + lSizeDpr <= canvas.height\n        ) {\n          const srcData = offCtx.getImageData(sourceX, sourceY, lSizeDpr, lSizeDpr);\n          const src = srcData.data;\n\n          if (patchCanvas.width !== lSizeDpr || patchCanvas.height !== lSizeDpr) {\n            patchCanvas.width = lSizeDpr;\n            patchCanvas.height = lSizeDpr;\n          }\n\n          const outData = patchCtx.createImageData(lSizeDpr, lSizeDpr);\n          const out = outData.data;\n\n          const centerDpr = lrDpr;\n          const centerDprSq = centerDpr * centerDpr;\n          const chromaSeparation = Math.floor(3 * dpr);\n\n          for (let y = 0; y < lSizeDpr; y++) {\n            const dy = y - centerDpr;\n            const dySq = dy * dy;\n            for (let x = 0; x < lSizeDpr; x++) {\n              const dx = x - centerDpr;\n              const distSq = dx * dx + dySq;\n              const outIndex = (y * lSizeDpr + x) * 4;\n\n              if (distSq < centerDprSq) {\n                const dist = Math.sqrt(distSq);\n                const normDist = dist \/ centerDpr; \/\/ 0 (center) to 1 (rim)\n                \n                \/\/ Convex warp curve\n                const distortion = Math.pow(Math.sin((normDist * Math.PI) \/ 2), lensPower);\n                const sampleFactor = normDist > 0 ? (distortion \/ normDist) : 0;\n\n                const sampleX = centerDpr + dx * sampleFactor;\n                const sampleY = centerDpr + dy * sampleFactor;\n\n                \/\/ Prism Chromatic Fringe at the border\n                const rimStrength = Math.pow(normDist, 3.5);\n                const rOffsetX = Math.round(dx * sampleFactor - (dx \/ (dist || 1)) * chromaSeparation * rimStrength);\n                const bOffsetX = Math.round(dx * sampleFactor + (dx \/ (dist || 1)) * chromaSeparation * rimStrength);\n\n                const getRed = (centerDpr + rOffsetX >= 0 && centerDpr + rOffsetX < lSizeDpr) ? centerDpr + rOffsetX : sampleX;\n                const getBlue = (centerDpr + bOffsetX >= 0 && centerDpr + bOffsetX < lSizeDpr) ? centerDpr + bOffsetX : sampleX;\n\n                const sxClamped = Math.max(0, Math.min(lSizeDpr - 1, Math.round(sampleX)));\n                const syClamped = Math.max(0, Math.min(lSizeDpr - 1, Math.round(sampleY)));\n                const rxClamped = Math.max(0, Math.min(lSizeDpr - 1, Math.round(getRed)));\n                const bxClamped = Math.max(0, Math.min(lSizeDpr - 1, Math.round(getBlue)));\n\n                const idxG = (syClamped * lSizeDpr + sxClamped) * 4;\n                const idxR = (syClamped * lSizeDpr + rxClamped) * 4;\n                const idxB = (syClamped * lSizeDpr + bxClamped) * 4;\n\n                \/\/ Write sampled color values with solid alpha = 255\n                \/\/ The offscreen buffer background is black (#050505), so empty space samples solid black\n                out[outIndex]     = src[idxR]     !== 0 ? src[idxR]     : 5;\n                out[outIndex + 1] = src[idxG + 1] !== 0 ? src[idxG + 1] : 5;\n                out[outIndex + 2] = src[idxB + 2] !== 0 ? src[idxB + 2] : 5;\n                out[outIndex + 3] = 255;\n              } else {\n                \/\/ Strictly 0 alpha outside circle\n                out[outIndex + 3] = 0;\n              }\n            }\n          }\n\n          patchCtx.putImageData(outData, 0, 0);\n\n          \/\/ Render step: Wipe the circle completely on the main canvas with black\n          ctx.save();\n          ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n          ctx.beginPath();\n          ctx.arc(lx, ly, lr, 0, Math.PI * 2);\n          ctx.fillStyle = '#050505';\n          ctx.fill();\n\n          \/\/ Clip and draw the warped patch cleanly over the wiped circle\n          ctx.clip();\n          ctx.drawImage(patchCanvas, lx - lr, ly - lr, lr * 2, lr * 2);\n          ctx.restore();\n\n          \/\/ Delicate Optical Rim Hairline\n          ctx.save();\n          ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n          ctx.beginPath();\n          ctx.arc(lx, ly, lr, 0, Math.PI * 2);\n          ctx.strokeStyle = 'rgba(255, 255, 255, 0.22)';\n          ctx.lineWidth = 1;\n          ctx.stroke();\n\n          \/\/ Subtle Crosshair Anchor\n          ctx.strokeStyle = 'rgba(255, 255, 255, 0.45)';\n          ctx.lineWidth = 1;\n          const crossSize = 5;\n          ctx.beginPath();\n          ctx.moveTo(lx - crossSize, ly);\n          ctx.lineTo(lx + crossSize, ly);\n          ctx.moveTo(lx, ly - crossSize);\n          ctx.lineTo(lx, ly + crossSize);\n          ctx.stroke();\n          ctx.restore();\n        }\n      }\n\n      window.addEventListener('load', function() {\n        handleResize();\n        requestAnimationFrame(animate);\n      });\n    })();\n  <\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>DAZED SOUTH-EAST ASIA DAZED &amp; CONFUSED ARCHIVE EDITION \/\/ REGION [SOUTH-EAST ASIA] [ Press &amp; Inquiries ] The email dazedsea@digizenmedia.com has been copied to your clipboard. [ OK ]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-37","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dazedsea.com\/index.php\/wp-json\/wp\/v2\/pages\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dazedsea.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dazedsea.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dazedsea.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dazedsea.com\/index.php\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":3,"href":"https:\/\/dazedsea.com\/index.php\/wp-json\/wp\/v2\/pages\/37\/revisions"}],"predecessor-version":[{"id":40,"href":"https:\/\/dazedsea.com\/index.php\/wp-json\/wp\/v2\/pages\/37\/revisions\/40"}],"wp:attachment":[{"href":"https:\/\/dazedsea.com\/index.php\/wp-json\/wp\/v2\/media?parent=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}