endpoints.path: /
endpoints.endpoint_type: HTTP
endpoints.scan_time: 2025-10-10T15:19:29.558621
endpoints.uri: http://qr-ops.com/
endpoints.protocol: HTTP/1.1
endpoints.status_reason: OK
endpoints.key: x-goog-stored-content-length
endpoints.headers: 33464
endpoints.key: Cache-Control
endpoints.headers: no-store, max-age=0
endpoints.key: Connection
endpoints.headers: keep-alive
endpoints.key: x-goog-hash
endpoints.headers: crc32c=79RnhA== md5=nby7qVkK3T7exyxpnZRk/w==
endpoints.key: x-goog-generation
endpoints.headers: 1754218907493814
endpoints.key: CF-Cache-Status
endpoints.headers: DYNAMIC
endpoints.key: Report-To
endpoints.headers: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=eHN4qf%2BoQ3rP6SvPCEvJPa5LgjX09t9o9r1Q4T3zSn0qRQ1U5LslC%2BMtxgszHMc4o28ejrcTY1LsS5XAp46D5BzDSxcM24t2G14%3D"}]}
endpoints.key: Date
endpoints.headers: <REDACTED>
endpoints.key: Content-Type
endpoints.headers: text/html
endpoints.key: Last-Modified
endpoints.headers: Sun, 03 Aug 2025 11:01:47 GMT
endpoints.key: Vary
endpoints.headers: accept-encoding
endpoints.key: CF-Ray
endpoints.headers: 98c718abbdac508f-ORD
endpoints.key: alt-svc
endpoints.headers: h3=":443"; ma=86400
endpoints.key: Expires
endpoints.headers: Fri, 10 Oct 2025 15:19:31 GMT
endpoints.key: x-goog-storage-class
endpoints.headers: STANDARD
endpoints.key: Transfer-Encoding
endpoints.headers: chunked
endpoints.key: x-goog-meta-goog-reserved-file-mtime
endpoints.headers: 1754218902
endpoints.key: Nel
endpoints.headers: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
endpoints.key: Content-Encoding
endpoints.headers: gzip
endpoints.key: x-goog-metageneration
endpoints.headers: 2
endpoints.key: Server
endpoints.headers: cloudflare
endpoints.key: x-goog-stored-content-encoding
endpoints.headers: identity
endpoints.key: X-GUploader-UploadID
endpoints.headers: AAwnv3K3xxAjlV69uIw79uybUyB2PzxlBaYoUKxsOxtXPgdWuWnvIuvx_Ndj1DkRQvu2lEST
endpoints.html_tags: <title>Important Information</title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="version" content="1.3.8" />
endpoints.body: <!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="UTF-8" />
  	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
  	<meta name="version" content="1.3.8" />
    <title>Important Information</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
  
      html, body {
        height: 100%;
        font-family: 'Arial', sans-serif;
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        overflow-x: hidden;
      }
  
      /* CAPTCHA overlay */
      .start-overlay {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background: rgba(240, 240, 240, 0.98);
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        z-index: 1000;
        font-family: Arial, sans-serif;
      }
  
      .captcha-container {
        background: white;
        border: 2px solid #d3d3d3;
        border-radius: 4px;
        padding: 20px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        max-width: 400px;
        width: 90%;
      }
  
      .captcha-header {
        display: flex;
        align-items: center;
        margin-bottom: 15px;
        font-size: 14px;
        color: #333;
      }
  
      .captcha-logo {
        width: 20px;
        height: 20px;
        margin-right: 8px;
        background: #4285f4;
        border-radius: 2px;
        display: flex;
        align-items: center;
        justify-content: center;
        color: white;
        font-weight: bold;
        font-size: 12px;
      }
  
      .captcha-checkbox-container {
        display: flex;
        align-items: center;
        background: #fafafa;
        border: 2px solid #c1c1c1;
        border-radius: 2px;
        padding: 12px;
        cursor: pointer;
        transition: all 0.2s ease;
        margin-bottom: 15px;
      }
  
      .captcha-checkbox-container:hover {
        background: #f0f0f0;
        border-color: #4285f4;
      }
  
      .captcha-checkbox {
        width: 24px;
        height: 24px;
        border: 2px solid #c1c1c1;
        border-radius: 2px;
        margin-right: 12px;
        display: flex;
        align-items: center;
        justify-content: center;
        background: white;
        transition: all 0.2s ease;
        position: relative;
      }
  
      .captcha-checkbox.loading {
        border-color: #4285f4;
      }
  
      .captcha-checkbox.loading::after {
        content: "";
        width: 14px;
        height: 14px;
        border: 2px solid #4285f4;
        border-top: 2px solid transparent;
        border-radius: 50%;
        animation: spin 1s linear infinite;
      }
  
      .captcha-checkbox.verified::after {
        content: "✓";
        color: #0f9d58;
        font-weight: bold;
        font-size: 16px;
        animation: none;
      }
  
      @keyframes spin {
        0% { transform: rotate(0deg); }
        100% { transform: rotate(360deg); }
      }
  
      .captcha-text {
        font-size: 14px;
        color: #333;
        user-select: none;
      }
  
      .captcha-footer {
        display: flex;
        justify-content: space-between;
        align-items: center;
        font-size: 10px;
        color: #999;
        margin-top: 10px;
      }
  
      .captcha-links {
        display: flex;
        gap: 10px;
      }
  
      .captcha-links a {
        color: #4285f4;
        text-decoration: none;
      }
  
      .captcha-links a:hover {
        text-decoration: underline;
      }
  
      .recaptcha-brand {
        display: flex;
        align-items: center;
        gap: 5px;
      }
  
      .loading-dots {
        display: inline-block;
        margin-left: 5px;
      }
  
      .loading-dots::after {
        content: "";
        animation: dots 1.5s steps(4, end) infinite;
      }
  
      @keyframes dots {
        0%, 20% { content: ""; }
        40% { content: "."; }
        60% { content: ".."; }
        80%, 100% { content: "..."; }
      }
  
      /* Video container - full screen, non-interactive until activated */
      .video-container {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        z-index: 1;
        opacity: 0;
        pointer-events: none;
        transition: opacity .25s ease;
      }
      
      .video-container.active {
        opacity: 1;
        pointer-events: auto;
      }
      
      video {
        width: 100%;
        height: 100%;
        object-fit: cover;
      }
  
  				/* === Canonical stats layout (consolidated) === */
  		.stats-overlay {
  		  position: fixed;
  		  top: 16px;
  		  left: 16px;      /* overridden as needed by canonical block */
  		  right: auto;
  		  background: rgba(0, 0, 0, 0.85);
  		  color: #fff;
  		  padding: 10px 12px;
  		  border-radius: 14px;
  		  backdrop-filter: blur(15px);
  		  border: 1px solid rgba(255, 255, 255, 0.12);
  		  z-index: 100;
  		  min-width: 240px;
  		  max-width: 300px;
  		  box-shadow: 0 12px 26px rgba(0, 0, 0, 0.35);
  		  opacity: 0;
  		  transition: opacity 0.5s ease;
  		  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  		  font-size: 12.5px;
  		}
  		
  		.stats-overlay.visible { opacity: 1; }
  		
  		.stat-item {
  		  display: grid;
  		  grid-template-columns: auto 1fr; /* label auto, value flexible */
  		  align-items: center;
  		  gap: 6px;
  		  padding: 1px 0;
  		  line-height: 1.1;
  		  border-bottom: 1px dashed rgba(255, 255, 255, 0.08);
  		}
  		
  		.stat-item--primary {
  		  padding-top: 0;                   /* less space above */
  		  padding-bottom: 3px;
  		  border-bottom: 1px solid rgba(255, 255, 255, 0.14);
  		}
  		
  		.stat-value {
  		  color: #ffa500;
  		  font-weight: 700;
  		  font-size: 12.5px;
  		  text-align: right;
  		  justify-self: end;
  		  white-space: nowrap;        /* single line */
  		  overflow: hidden;           /* enable ellipsis */
  		  text-overflow: ellipsis;    /* … when clipped */
  		  max-width: none;
  		  min-width: 0;
  		  line-height: 1.15;
  		}
  
  		.stats-title {
  		  font-size: 22px;                  /* unchanged */
  		  font-weight: 800;
  		  margin: 0 0 6px 0;                /* tighter */
  		  color: #ff6b6b;
  		  text-align: left;
  		  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
  		}
  		
  		.stat-label {
  		  font-weight: 500;
  		  opacity: 0.9;
  		  font-size: 11.5px;                /* smaller labels */
  		  line-height: 1.15;
  		}
  		
  		/* Main stat a touch larger */
  		.stat-item--primary .stat-value {
  		  font-size: 14.5px;
  		  color: #ffd089;
  		}
  		
  		/* subtle separator before the “worst …” group */
  		.stat-sep {
  		  height: 4px;                      /* tighter */
  		  border-top: 1px solid rgba(255, 255, 255, 0.12);
  		  margin: 4px 0 2px;
  		}
  		
  		/* Extra‑dense on short viewports */
  		@media (max-height: 700px) {
  		  .stats-overlay { padding: 8px 10px; }
  		  .stat-item { padding: 1px 0; gap: 6px; line-height: 1.1; }
  		  .stat-label, .stat-value { font-size: 11px; line-height: 1.1; }
  		  .stat-item--primary .stat-value { font-size: 14px; }
  		}
  
      /* Education panel */
  		.education-panel {
  		  position: fixed;
  		  bottom: 16px;
  		  left: 16px;
  		  right: auto;
  		  background: rgba(255, 255, 255, 0.96);
  		  padding: 16px;                        /* smaller */
  		  border-radius: 14px;
  		  max-width: 340px;                      /* narrower */
  		  backdrop-filter: blur(14px);
  		  border: 1px solid rgba(0, 0, 0, 0.08);
  		  z-index: 100;
  		  box-shadow: 0 12px 26px rgba(0, 0, 0, 0.22);
  		  opacity: 0;
  		  transition: opacity 0.5s ease;
  		  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
  		}
  		
  		.education-panel.visible { opacity: 1; }
  		
  		.education-title {
  		  font-size: 18px;                       /* smaller */
  		  font-weight: 800;
  		  color: #e74c3c;
  		  margin: 0 0 10px 0;                    /* tighter */
  		  text-align: left;
  		}
  		
  		.warning-points {
  		  list-style: none;
  		  margin: 8px 0 10px 0;                  /* tighter */
  		  padding: 0;
  		}
  		
  		.warning-points li {
  		  margin: 6px 0;                         /* tighter rows */
  		  padding-left: 22px;                    /* smaller indent */
  		  position: relative;
  		  font-size: 14px;                       /* smaller text */
  		  line-height: 1.35;                     /* tighter line-height */
  		  color: #2c3e50;
  		}
  		
  		.warning-points li:before {
  		  content: "⚠️";
  		  position: absolute;
  		  left: 0;
  		  top: 0.1em;
  		  font-size: 16px;
  		}
  		
  		.learn-more {
  		  display: inline-block;
  		  background: linear-gradient(135deg, #3498db, #2980b9);
  		  color: white;
  		  padding: 10px 16px;                    /* smaller button */
  		  text-decoration: none;
  		  border-radius: 20px;
  		  font-size: 13px;                       /* smaller font */
  		  font-weight: 700;
  		  margin-top: 6px;                       /* less gap */
  		  transition: all 0.25s ease;
  		  box-shadow: 0 4px 12px rgba(52, 152, 219, 0.25);
  		}
  
      .learn-more:hover {
        transform: translateY(-2px);
        box-shadow: 0 6px 16px rgba(52, 152, 219, 0.4);
        background: linear-gradient(135deg, #2980b9, #3498db);
      }
  
  		@media (max-width: 480px) {
  		  .education-panel {
  		    font-size: 13px;
  		    padding: 18px;
  		  }
  		  .warning-points li {
  		    font-size: 13px;
  		    margin: 8px 0;
  		  }
  		  .learn-more {
  		    font-size: 13px;
  		    padding: 10px 18px;
  		  }
  		}
  
      /* Enhanced touch response */
  		.captcha-container,
  		.captcha-checkbox-container,
  		.captcha-links a,
  		.learn-more {
  		  -webkit-tap-highlight-color: transparent;
  		  touch-action: manipulation;
  		}
  
      /* Fade animations */
      .fade-in {
        animation: fadeIn 0.5s ease-in;
      }
  
      @keyframes fadeIn {
        from { opacity: 0; }
        to { opacity: 1; }
      }
  
      /* Loading indicator for stats */
      .stat-loading {
        display: inline-block;
        width: 12px;
        height: 12px;
        border: 2px solid rgba(255, 165, 0, 0.3);
        border-radius: 50%;
        border-top-color: #ffa500;
        animation: spin 1s ease-in-out infinite;
      }
  
  		.mute-btn {
  		  position: fixed;           /* we place it with JS */
  		  opacity: 0;                /* hidden until we show it */
  		  z-index: 110;              /* above video, below error toast */
  		  padding: 8px 10px;
  		  border: none;
  		  border-radius: 999px;
  		  background: rgba(0,0,0,0.6);
  		  color: #fff;
  		  font-size: 18px;
  		  line-height: 1;
  		  cursor: pointer;
  		  backdrop-filter: blur(8px);
  		  transition: opacity .3s ease, transform .15s ease;
  		  -webkit-tap-highlight-color: transparent;
  		  touch-action: manipulation;
  		}
  		.mute-btn.visible { opacity: 1; }
  		.mute-btn:hover   { transform: scale(1.05); }
  
  	  /* Make the whole CAPTCHA row clearly clickable on desktop */
  		.captcha-checkbox-container,
  		.captcha-checkbox,
  		.captcha-text {
  		  cursor: pointer;
  		  user-select: none;
  		}
  		
  		/* Education panel: reduce vertical gaps to shorten the panel */
  		.education-panel{ padding:12px 14px; max-width:320px; }
  		.education-title{ margin:0 0 6px 0; }
  		.warning-points{ margin:6px 0 8px 0; }
  		.warning-points li{
  		  margin:3px 0;
  		  line-height:1.25;
  		  padding-left:20px;
  		}
  		.learn-more{
  		  margin-top:4px;
  		  padding:9px 14px;
  		  font-size:12.5px;
  		}
  
  		/* === Consolidated mobile breakpoints === */
  		@media (max-width: 768px) {
  		  .stats-overlay,
  		  .education-panel {
  		    left: 12px;
  		    right: 12px;
  		    width: auto;
  		    max-width: none;
  		    min-width: 0;
  		  }
  		
  		  .stats-overlay { 
  		    top: 12px; 
  		    font-size: 12px; 
  		    padding: 10px 12px; 
  		  }
  		
  		  .education-panel { 
  		    bottom: 12px; 
  		    padding: 12px 14px; 
  		  }
  		
  		  .stat-label, 
  		  .stat-value { font-size: 12px; }
  		}
  		
  		@media (max-width: 390px) {
  		  .stats-overlay,
  		  .education-panel { 
  		    border-radius: 12px; 
  		    left: 8px; 
  		    right: 8px; 
  		  }
  		}
  
  		/* Screen-reader only utility (visually hidden) */
  		.sr-only {
  		  position: absolute !important;
  		  width: 1px;
  		  height: 1px;
  		  padding: 0;
  		  margin: -1px;
  		  overflow: hidden;
  		  clip: rect(0, 0, 0, 0);
  		  white-space: nowrap;
  		  border: 0;
  		}
  
  		.start-overlay { transition: opacity 0.5s ease; }
  		.start-overlay.is-hidden { opacity: 0; visibility: hidden; pointer-events: none; }
  		
    </style>
  </head>
  <body>
    <!-- CAPTCHA overlay -->
    <div class="start-overlay" id="startOverlay">
      <div class="captcha-container">
        <div class="captcha-header">
          <div class="captcha-logo">r</div>
          <span>reCAPTCHA</span>
        </div>
        
        <div class="captcha-checkbox-container" id="captchaBox">
          <div class="captcha-checkbox" id="checkbox"></div>
          <div class="captcha-text" id="captchaText">I'm not a robot</div>
        </div>
        
        <div class="captcha-footer">
          <div class="captcha-links">
  					<a href="/privacy" id="privacyLink" rel="noopener" target="_self">Privacy</a>
  					<a href="/terms"   id="termsLink"   rel="noopener" target="_self">Terms</a>
          </div>
          <div class="recaptcha-brand">
            <span>reCAPTCHA</span>
          </div>
        </div>
      </div>
    </div>
  
  	<!-- A11y live region for post-activation explanation -->
  	<div id="a11yAnnounce" class="sr-only" aria-live="polite" aria-atomic="true"></div>
  
  		<!-- Stats overlay -->
  	<div class="stats-overlay" id="statsOverlay" aria-live="polite" aria-label="Rickroll statistics">
  	  <div class="stats-title" role="heading" aria-level="2">🎯 Rickroll Statistics</div>
  	
  	  <div class="stat-item stat-item--primary">
  	    <span class="stat-label">You are victim #</span>
  	    <span class="stat-value" id="victimNumber" aria-describedby="victim-desc">
  	      <span class="stat-loading" aria-hidden="true"></span>
  	    </span>
  	  </div>
  	
  	  <div class="stat-item">
  	    <span class="stat-label">Total victims today</span>
  	    <span class="stat-value" id="totalVictims" aria-describedby="total-desc">
  	      <span class="stat-loading" aria-hidden="true"></span>
  	    </span>
  	  </div>
  	
  	  <div class="stat-item">
  	    <span class="stat-label">Your location</span>
  	    <span class="stat-value" id="userLocation" aria-describedby="location-desc">
  	      <span class="stat-loading" aria-hidden="true"></span>
  	    </span>
  	  </div>
  	
  	  <div class="stat-item">
  	    <span class="stat-label">Your device</span>
  	    <span class="stat-value" id="userDevice" aria-describedby="device-desc">Detecting...</span>
  	  </div>
  	
  	  <div class="stat-item">
  	    <span class="stat-label">Time rickrolled</span>
  	    <span class="stat-value" id="rickrollTime" aria-describedby="time-desc">Just now!</span>
  	  </div>
  	
  	  <div class="stat-sep" aria-hidden="true"></div>
  	
  	  <div class="stat-item">
  	    <span class="stat-label">Worst town</span>
  	    <span class="stat-value" id="worstTown">—</span>
  	  </div>
  	  <div class="stat-item">
  	    <span class="stat-label">Worst country</span>
  	    <span class="stat-value" id="worstCountry">—</span>
  	  </div>
  	  <div class="stat-item">
  	    <span class="stat-label">Worst device brand</span>
  	    <span class="stat-value" id="worstDeviceBrand">—</span>
  	  </div>
  	</div>
  	
  	<!-- Hidden descriptions -->
  	<div id="victim-desc"   class="sr-only">Your position in today’s rickroll count</div>
  	<div id="total-desc"    class="sr-only">Total number of people rickrolled today</div>
  	<div id="location-desc" class="sr-only">The detected location of your device</div>
  	<div id="device-desc"   class="sr-only">The detected device type you are using</div>
  	<div id="time-desc"     class="sr-only">The local time this page rickrolled you</div>
  
    <!-- Video container -->
    <div class="video-container" id="videoContainer">
      <video id="rickrollVideo" loop preload="metadata" playsinline muted>
        <source src="https://qr-ops.com/rickroll.webm" type="video/webm" />
        <source src="https://qr-ops.com/rickroll.mp4" type="video/mp4" />
        Your browser does not support the video tag.
      </video>
    </div>
  
    <!-- Mute toggle -->
    <button id="muteBtn" class="mute-btn" aria-label="Mute audio" title="Mute" aria-pressed="false">🔊</button>
  
  	<!-- Education panel -->
  	<div class="education-panel" id="educationPanel">
  	  <div class="education-title">🛡️ Think Before You Scan a QR Code</div>
  	  <ul class="warning-points">
  	    <li>QR codes can take you to fake websites that steal your information.</li>
  	    <li>They can secretly install harmful software on your device.</li>
  	    <li>Scammers use them to mimic trusted brands and services.</li>
  	    <li>Your device may not alert you to QR scams.</li>
  	    <li>Only scan codes from people and places you trust.</li>
  	  </ul>
  	  <a href="https://www.cyber.gov.au/threats/types-threats/quishing"
  	     target="_blank"
  	     rel="noopener noreferrer nofollow"
  	     class="learn-more"
  	     aria-describedby="external-link-desc">Learn More About QR Security →</a>
  	  <span id="external-link-desc" class="sr-only">Opens in a new tab</span>
  	</div>
  
    <script>
      // Statistics tracking with better error handling
      let stats = {
        totalVictims: 0,
        currentVictim: 0,
        location: 'Unknown',
        device: 'Unknown',
  			worstTown: '—',
  			worstCountry: '—',
  			worstDeviceBrand: '—',
        timestamp: new Date().toLocaleString('en-AU', { 
          timeZone: 'Australia/Sydney',
          hour12: true,
          hour: 'numeric',
          minute: '2-digit'
        })
      };
  
      // Enhanced device detection
      function detectDevice() {
        const userAgent = navigator.userAgent;
        
        // Mobile devices
        if (/iPhone/.test(userAgent)) return 'iPhone';
        if (/iPad/.test(userAgent)) return 'iPad';
        if (/Android/.test(userAgent)) {
          if (/Mobile/.test(userAgent)) return 'Android Phone';
          return 'Android Tablet';
        }
        
        // Desktop/Laptop
        if (/Windows/.test(userAgent)) return 'Windows PC';
        if (/Mac/.test(userAgent) && !/Mobile|iPad/.test(userAgent)) return 'Mac';
        if (/Linux/.test(userAgent)) return 'Linux PC';
        if (/CrOS/.test(userAgent)) return 'Chromebook';
        
        // Fallback
        return 'Unknown Device';
      }
  
      stats.device = detectDevice();
  
  				// Reusable fetch helper with timeout + AbortController
  		async function fetchWithTimeout(url, options = {}, ms = 8000) {
  		  const controller = new AbortController();
  		  const id = setTimeout(() => controller.abort(), ms);
  		  try {
  		    const res = await fetch(url, { ...options, signal: controller.signal });
  		    return res;
  		  } finally {
  		    clearTimeout(id);
  		  }
  		}
  
      // Fetch visitor statistics with timeout and retry
  		async function fetchStats() {
  		  const maxRetries = 3;
  		  const timeout = 5000;
  		
  		  for (let attempt = 0; attempt < maxRetries; attempt++) {
  		    try {
  		      const response = await fetchWithTimeout(
  		        'https://rickrollstats-710526860431.australia-southeast1.run.app',
  		        {
  		          headers: { 'Accept': 'application/json' },
  		          cache: 'no-cache' // avoid stale cached 200s
  		        },
  		        timeout
  		      );
  		
  		      if (!response.ok) throw new Error(`HTTP ${response.status}`);
  		
  		      const data = await response.json();
  		      if (typeof data !== 'object' || data === null) {
  		        throw new Error('Invalid response format');
  		      }
  		
  		      stats.worstTown        = data.topTown ?? data.topCity ?? '—';
  		      stats.worstCountry     = data.topCountry ?? '—';
  		      stats.worstDeviceBrand = data.topDeviceBrand ?? '—';
  		
  		      const count = Number.parseInt(data.count, 10);
  		      stats.totalVictims  = Number.isFinite(count) && count >= 0 ? count : 0;
  		      stats.currentVictim = stats.totalVictims;
  		
  		      updateStatsDisplay();
  		      return;
  		
  		    } catch (error) {
  		      console.warn(`Stats fetch attempt ${attempt + 1}/${maxRetries} failed:`, error.message || error);
  		      if (attempt === maxRetries - 1) {
  		        stats.totalVictims  = Math.floor(Math.random() * 50000) + 100000;
  		        stats.currentVictim = stats.totalVictims;
  		        stats.worstTown        = stats.worstTown ?? '—';
  		        stats.worstCountry     = stats.worstCountry ?? '—';
  		        stats.worstDeviceBrand = stats.worstDeviceBrand ?? '—';
  		        updateStatsDisplay();
  		      }
  		    }
  		  }
  		}
  
      // Get location with enhanced error handling
  		async function fetchLocation() {
  		  try {
  		    const response = await fetchWithTimeout(
  		      'https://ipapi.co/json/',
  		      { headers: { 'Accept': 'application/json' } },
  		      8000
  		    );
  		
  		    if (!response.ok) throw new Error(`HTTP ${response.status}`);
  		
  		    const data = await response.json();
  		    if (typeof data !== 'object' || data === null) {
  		      throw new Error('Invalid response format');
  		    }
  		
  		    if (data.error) {
  		      stats.location = 'Location Private';
  		    } else if (data.city && data.country_name) {
  		      const city = String(data.city).slice(0, 50);
  		      const country = String(data.country_name).slice(0, 50);
  		      stats.location = `${city}, ${country}`;
  		    } else if (data.country_name) {
  		      stats.location = String(data.country_name).slice(0, 50);
  		    } else {
  		      stats.location = 'Unknown Location';
  		    }
  		  } catch (error) {
  		    console.warn('Location fetch failed:', error.message || error);
  		    // fetchWithTimeout uses AbortController under the hood; timeout produces AbortError
  		    stats.location = (error.name === 'AbortError') ? 'Request Timeout' : 'Location Private';
  		  } finally {
  		    updateStatsDisplay();
  		  }
  		}
  
      // Send stats to backend
      async function sendStats() {
        try {
  				await fetchWithTimeout('https://rickrollstats-710526860431.australia-southeast1.run.app', {
  				  method: 'POST',
  				  headers: { 'Content-Type': 'application/json' },
  				  body: JSON.stringify({
  				    device: stats.device,
  				    location: stats.location,
  				    timestamp: stats.timestamp,
  				    userAgent: navigator.userAgent.substring(0, 200)
  				  })
  		    }, 8000);
  		  } catch (error) {
  		    console.warn('Failed to send stats:', error);
  		  }
  		}
  
      // Update stats display with loading states
      function updateStatsDisplay() {
        const elements = {
          victimNumber: document.getElementById('victimNumber'),
          totalVictims: document.getElementById('totalVictims'),
          userLocation: document.getElementById('userLocation'),
          userDevice: document.getElementById('userDevice'),
          rickrollTime: document.getElementById('rickrollTime')
        };
  
        if (elements.victimNumber) {
          elements.victimNumber.textContent = stats.currentVictim.toLocaleString();
        }
        if (elements.totalVictims) {
          elements.totalVictims.textContent = stats.totalVictims.toLocaleString();
        }
        if (elements.userLocation) {
          elements.userLocation.textContent = stats.location;
        }
        if (elements.userDevice) {
          elements.userDevice.textContent = stats.device;
        }
        if (elements.rickrollTime) {
          elements.rickrollTime.textContent = stats.timestamp;
        }
  
  		  const elWorstTown        = document.getElementById('worstTown');
  		  const elWorstCountry     = document.getElementById('worstCountry');
  		  const elWorstDeviceBrand = document.getElementById('worstDeviceBrand');
  		
  		  if (elWorstTown)        elWorstTown.textContent        = stats.worstTown ?? '—';
  		  if (elWorstCountry)     elWorstCountry.textContent     = stats.worstCountry ?? '—';
  		  if (elWorstDeviceBrand) elWorstDeviceBrand.textContent = stats.worstDeviceBrand ?? '—';
  		}
  
  				let __rrResizeTimer;
  		function scheduleMuteReposition(delay = 100) {
  		  clearTimeout(__rrResizeTimer);
  		  __rrResizeTimer = setTimeout(() => {
  		    const btn = document.getElementById('muteBtn');
  		    if (btn && btn.classList.contains('visible')) {
  		      positionMuteButton();
  		    }
  		  }, delay);
  		}
  
  		// Position the mute button just under the stats panel’s bottom-right corner
  		function positionMuteButton() {
  		  const statsOverlay = document.getElementById('statsOverlay');
  		  const btn = document.getElementById('muteBtn');
  		  if (!statsOverlay || !btn) return;
  		
  		  // Ensure the button has a size before computing
  		  const ensureMeasured = () => {
  		    if (btn.offsetWidth === 0) {
  		      const prev = btn.style.opacity;
  		      btn.style.opacity = 0;
  		      btn.classList.add('visible');
  		      void btn.offsetWidth; // force layout
  		      btn.classList.remove('visible');
  		      btn.style.opacity = prev;
  		    }
  		  };
  		  ensureMeasured();
  		
  		  const rect = statsOverlay.getBoundingClientRect();
  		  const gap = 12; // px gap below the panel
  		
  		  // Clamp into the viewport so it never renders off-screen
  		  const top  = Math.max(0, Math.min(window.innerHeight - btn.offsetHeight - 10, rect.bottom + gap));
  		  const left = Math.max(0, Math.min(window.innerWidth  - btn.offsetWidth  - 10, rect.right  - btn.offsetWidth));
  		
  		  btn.style.top  = `${top}px`;
  		  btn.style.left = `${left}px`;
  		}
  		
  		// Toggle mute/unmute and keep icon/labels in sync
  		function wireMuteButton() {
  		  const btn = document.getElementById('muteBtn');
  		  const video = document.getElementById('rickrollVideo');
  		  if (!btn || !video) return;
  		
  		  const update = () => {
  		    btn.textContent = video.muted ? '🔇' : '🔊';
  		    btn.title = video.muted ? 'Unmute' : 'Mute';
  		    btn.setAttribute('aria-label', video.muted ? 'Unmute audio' : 'Mute audio');
  		    btn.setAttribute('aria-pressed', video.muted ? 'true' : 'false');
  		  };
  		
  		  update();
  		
  		  btn.addEventListener('click', () => {
  		    video.muted = !video.muted;
  		    if (!video.muted && video.paused) {
  		      video.play().catch(() => {/* ignore autoplay block */});
  		    }
  		    update();
  		  });
  		
  			// Reposition on resize or orientation changes
  			window.addEventListener('resize', () => {
  			  scheduleMuteReposition(100);
  			});
  			window.addEventListener('orientationchange', () => {
  			  scheduleMuteReposition(150);
  			});
  		}
  
  		function handleViewportChange() {
  		  if (!window.visualViewport) return;
  		  const handler = () => scheduleMuteReposition(100);
  		  // Use passive to avoid blocking scroll
  		  window.visualViewport.addEventListener('resize', handler, { passive: true });
  		  window.visualViewport.addEventListener('scroll', handler, { passive: true });
  		}
  
      // Enhanced video handling with fallbacks
      async function triggerRickroll() {
  			if (window.__rickrollStarted) return;
  			window.__rickrollStarted = true;
  			cleanupPrewarmListeners();
  
  			// 🔊 A11y announce: post-activation, no spoiler beforehand
  		  const a11yAnnounce = document.getElementById('a11yAnnounce');
  		  if (a11yAnnounce) {
  		    // Clear first to guarantee re-announcement on repeat visits/navigation
  		    a11yAnnounce.textContent = '';
  		    a11yAnnounce.textContent = 'Verification was simulated for demonstration. A video is now playing.';
  		  }
  			
  			prewarmDone = true;
        const video = document.getElementById('rickrollVideo');
        const videoContainer = document.getElementById('videoContainer');
        const startOverlay = document.getElementById('startOverlay');
        const educationPanel = document.getElementById('educationPanel');
  
        try {
          console.log('🎵 Starting Rickroll sequence...');
  
          // Hide CAPTCHA overlay
  				startOverlay.classList.add('is-hidden');
          
          // Show video container
          videoContainer.classList.add('active');
          
          // Enhanced video preparation
          video.currentTime = 0;
          video.muted = true;
          
          // Wait for video to be ready
          if (video.readyState < 3) {
            await new Promise((resolve, reject) => {
              const timeout = setTimeout(() => reject(new Error('Video load timeout')), 10000);
              video.addEventListener('canplay', () => {
                clearTimeout(timeout);
                resolve();
              }, { once: true });
              video.load();
            });
          }
          
          // Start playback
          await video.play();
          console.log('Video started successfully');
  
  				const muteBtn = document.getElementById('muteBtn');
  				if (muteBtn) {
  				  // prepare and position now
  				  wireMuteButton();
  				  positionMuteButton();
  				
  				  // reveal exactly 10s after playback starts
  				  setTimeout(() => {
  				    positionMuteButton();             // recheck position in case layout moved
  				    muteBtn.classList.add('visible'); // CSS handles fade-in
  				  }, 10000);
  				}
  
          // Remove overlay
          setTimeout(() => {
            startOverlay.style.display = 'none';
          }, 500);
  
  				// Show overlays with stagger
  				setTimeout(() => {
  				  console.log('Showing stats overlay');
  				  document.getElementById('statsOverlay')?.classList.add('visible');
  				  if (muteBtn && muteBtn.classList.contains('visible')) {
  				    positionMuteButton();
  				  }
  				}, 2000);
          
          setTimeout(() => {
            educationPanel.classList.add('visible');
          }, 3000);
  
          // Attempt to unmute after user interaction
          setTimeout(() => {
            const attemptUnmute = () => {
              if (video.muted) {
                video.muted = false;
                video.volume = 0.7;
                console.log('Video unmuted');
              }
            };
  
            // Try immediate unmute
            attemptUnmute();
  
            // Add click handler for mobile
            document.addEventListener('click', attemptUnmute, { once: true });
            document.addEventListener('touchstart', attemptUnmute, { once: true });
          }, 2000);
  
          // Send statistics
          sendStats();
  
        } catch (error) {
          console.error('Rickroll failed:', error);
          setTimeout(() => {
            // Fallback to YouTube
  			    window.open('https://www.youtube.com/watch?v=dQw4w9WgXcQ', '_blank');
  			  }, 3000);
  			}
  		}
  
      // Initialize the prank with improved interaction handling
  		function initRickroll() {
  		  const box        = document.getElementById('captchaBox');
  		  const checkbox   = document.getElementById('checkbox');
  		  const captchaTxt = document.getElementById('captchaText');
  		  const privacy    = document.getElementById('privacyLink');
  		  const terms      = document.getElementById('termsLink');
  		
  		  console.log('[init] captcha wired:', !!box, !!checkbox, !!captchaTxt);
  		
  		  if (box && checkbox && captchaTxt) {
  		    // make the whole row a button
  		    box.setAttribute('role', 'button');
  		    box.setAttribute('tabindex', '0');
  		
  		    const activate = (e) => {
  		      e.preventDefault();
  		      e.stopPropagation();
  		      if (checkbox.classList.contains('loading') || checkbox.classList.contains('verified')) return;
  		
  		      console.log('[captcha] clicked');
  		      checkbox.classList.add('loading');
  		      captchaTxt.innerHTML = 'Verifying<span class="loading-dots"></span>';
  		
  		      setTimeout(() => {
  		        checkbox.classList.remove('loading');
  		        checkbox.classList.add('verified');
  		        captchaTxt.textContent = 'Verification complete';
  		        triggerRickroll();
  		      }, 1200);
  		    };
  		
  		    box.addEventListener('click', activate, { passive: false });
  		    box.addEventListener('keydown', (e) => {
  		      if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); activate(e); }
  		    });
  		  }
  		
  		  // Footer links should also trigger (as in the old file)
  		  privacy?.addEventListener('click', (e) => { e.preventDefault(); triggerRickroll(); });
  		  terms?.addEventListener('click',   (e) => { e.preventDefault(); triggerRickroll(); });
  		}
  
  		let prewarmDone = false;
  		let prewarmInProgress = false;
  		
  		function prewarmIfNeeded() {
  		  if (prewarmDone || prewarmInProgress) return;
  		
  		  const vc    = document.getElementById('videoContainer');
  		  const video = document.getElementById('rickrollVideo');
  		
  		  // If already active, no need to prewarm
  		  if (vc?.classList.contains('active')) {
  		    prewarmDone = true;
  		    return;
  		  }
  		
  		  prewarmInProgress = true;
  		
  		  try {
  		    video.muted = true;               // safe for autoplay
  		    video.play()
  		      .then(() => {
  		        video.pause();
  		        video.currentTime = 0.01;     // avoid black frame on some browsers
  		        prewarmDone = true;
  		        prewarmInProgress = false;
  		      })
  		      .catch(() => {
  		        // allow retry on next eligible event
  		        prewarmInProgress = false;
  		      });
  		  } catch (err) {
  		    prewarmInProgress = false;
  		    console.warn('Video prewarm failed:', err);
  		  }
  		}
  
  		// Create abort controller for event cleanup
  		const prewarmController = new AbortController();
  		const { signal } = prewarmController;
  		
  		// Set up prewarm listeners with cleanup capability
  		document.addEventListener('touchstart', prewarmIfNeeded, { once: true, passive: true, signal });
  		document.addEventListener('click',       prewarmIfNeeded, { once: true, signal });
  		document.addEventListener('keydown',     prewarmIfNeeded, { once: true, signal });
  		
  		// Cleanup function (call when rickroll starts)
  		function cleanupPrewarmListeners() {
  		  prewarmController.abort();
  		}
  
      // Initialize everything when DOM is ready
      document.addEventListener('DOMContentLoaded', () => {
        console.log('🚀 Initialising enhanced rickroll experience...');
  
        initRickroll();
        fetchStats();
        fetchLocation();
        updateStatsDisplay();
  			handleViewportChange();
      });
  
      // Handle page visibility changes (helps with mobile background behaviour)
      document.addEventListener('visibilitychange', () => {
        const video = document.getElementById('rickrollVideo');
        if (document.hidden && video && !video.paused) {
          // Page hidden, pause video to save resources
          video.pause();
        }
      });
  	  
    </script>
  </body>
  </html>
  
endpoints.html_title: Important Information
endpoints.supported_versions: HTTP/1.1
endpoints.banner: HTTP/1.1 200 OK
  Date:  <REDACTED>
  Content-Type: text/html
  Transfer-Encoding: chunked
  Connection: keep-alive
  CF-Ray: 98c718abbdac508f-ORD
  CF-Cache-Status: DYNAMIC
  Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
  Cache-Control: no-store, max-age=0
  Expires: Fri, 10 Oct 2025 15:19:31 GMT
  Last-Modified: Sun, 03 Aug 2025 11:01:47 GMT
  Server: cloudflare
  x-goog-generation: 1754218907493814
  x-goog-hash: crc32c=79RnhA==
  x-goog-hash: md5=nby7qVkK3T7exyxpnZRk/w==
  x-goog-meta-goog-reserved-file-mtime: 1754218902
  x-goog-metageneration: 2
  x-goog-storage-class: STANDARD
  x-goog-stored-content-encoding: identity
  x-goog-stored-content-length: 33464
  X-GUploader-UploadID: AAwnv3K3xxAjlV69uIw79uybUyB2PzxlBaYoUKxsOxtXPgdWuWnvIuvx_Ndj1DkRQvu2lEST
  Vary: accept-encoding
  Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=eHN4qf%2BoQ3rP6SvPCEvJPa5LgjX09t9o9r1Q4T3zSn0qRQ1U5LslC%2BMtxgszHMc4o28ejrcTY1LsS5XAp46D5BzDSxcM24t2G14%3D"}]}
  Content-Encoding: gzip
  alt-svc: h3=":443"; ma=86400
  
endpoints.ip: 172.67.198.21
[binary data, 4 values, 119 bytes]