<!DOCTYPE html>
<!-- iconys.digital - Version 2.0.0 - Released 2026-02-16 -->
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="version" content="2.0.0">
    <!-- Favicon -->
    <link rel="icon" type="image/x-icon" href="/favicon.ico" sizes="any">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png">
    
    <!-- Apple Touch Icon -->
    <link rel="apple-touch-icon" sizes="180x180" href="/favicon-180x180.png">
    
    <!-- Android/Chrome Icons -->
    <link rel="icon" type="image/png" sizes="192x192" href="/favicon-192x192.png">
    <link rel="icon" type="image/png" sizes="512x512" href="/favicon-512x512.png">
    
    <!-- PWA Manifest -->
    <link rel="manifest" href="/manifest.json">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    
    <!-- Security Meta Tags -->
    <meta name="referrer" content="strict-origin-when-cross-origin">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="generator" content="iconys.digital">
    
    <!-- DNS Prefetch Control -->
    <meta http-equiv="x-dns-prefetch-control" content="off">
    
    <!-- Preconnect for fonts -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
    
    <!-- Base Meta Tags -->
    <title>iconys.digital - Built by a Solo Founder, for Solo Founders</title>
    <meta name="description" content="Authentic productivity tools built by a solo developer. Ghost themes, Odoo solutions, and AI-powered Android apps. No investors. No team. Just code.">
    <meta name="theme-color" content="#0A0A12">
    
    <!-- Open Graph -->
    <meta property="og:title" content="iconys.digital - Built by a Solo Founder, for Solo Founders">
    <meta property="og:description" content="Authentic productivity tools built by a solo developer. Ghost themes, Odoo solutions, and AI-powered Android apps.">
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://iconys.digital">
    
    <!-- Twitter -->
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="iconys.digital - Built by a Solo Founder">
    <meta name="twitter:description" content="Authentic productivity tools built by a solo developer. Ghost themes, Odoo solutions, and AI-powered Android apps.">
    
    <style>
      /* Critical CSS for initial load */
      body {
        margin: 0;
        background: #0A0A12;
        color: #fff;
        font-family: 'Inter', sans-serif;
      }
      
      #root {
        min-height: 100vh;
      }
      
      /* Hide content until React loads */
      .loading {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: #0A0A12;
        display: flex;
        align-items: center;
        justify-content: center;
        z-index: 9999;
      }
      
      .loading-spinner {
        width: 40px;
        height: 40px;
        border: 3px solid rgba(0, 240, 255, 0.3);
        border-top-color: #00F0FF;
        border-radius: 50%;
        animation: spin 1s linear infinite;
      }
      
      @keyframes spin {
        to { transform: rotate(360deg); }
      }
    </style>
    <script type="module" crossorigin src="/assets/index-g3H8rIQh.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-KNGLfaHi.css">
  </head>
  <body>
    <div id="root"></div>
    <div id="error-box" style="display:none;position:fixed;top:0;left:0;right:0;background:#ff4444;color:white;padding:20px;z-index:99999;font-family:monospace;white-space:pre-wrap;"></div>
    <script>
      window.onerror = function(msg, url, line, col, err) {
        var box = document.getElementById('error-box');
        box.style.display = 'block';
        box.textContent += 'ERROR: ' + msg + '\nLine: ' + line + '\n' + (err && err.stack) + '\n\n';
      };
    </script>
  </body>
</html>
