Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8" /> | |
| <link rel="icon" type="image/svg+xml" href="./favicon.svg" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| <meta name="theme-color" content="#05040a" /> | |
| <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> | |
| <meta http-equiv="Pragma" content="no-cache" /> | |
| <title>Duel of Albion</title> | |
| <style> | |
| html, body { | |
| margin: 0; | |
| padding: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: #05040a; | |
| color: #f0e6d2; | |
| font-family: Cinzel, Georgia, serif; | |
| overflow: hidden; | |
| } | |
| #root { | |
| width: 100vw; | |
| height: 100vh; | |
| } | |
| /* Pre-React splash so the user always sees something even if JS fails. */ | |
| #preload { | |
| position: fixed; | |
| inset: 0; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| background: #05040a; | |
| z-index: 1; | |
| transition: opacity 0.4s ease; | |
| text-align: center; | |
| padding: 24px; | |
| } | |
| #preload .title { | |
| font-size: clamp(32px, 6vw, 64px); | |
| letter-spacing: 0.18em; | |
| color: #d4af37; | |
| text-shadow: 0 2px 18px rgba(0,0,0,0.9), 0 0 30px rgba(212,175,55,0.35); | |
| margin: 0 0 12px; | |
| } | |
| #preload .sub { | |
| font-size: clamp(14px, 1.6vw, 18px); | |
| color: #b8a88a; | |
| font-style: italic; | |
| margin: 0; | |
| } | |
| #preload.hide { opacity: 0; pointer-events: none; } | |
| .react-ready #preload { display: none; } | |
| </style> | |
| <script type="module" crossorigin src="./assets/index-CceJPvTq.js"></script> | |
| <link rel="stylesheet" crossorigin href="./assets/index-BhvJ7Twa.css"> | |
| </head> | |
| <body> | |
| <div id="preload"> | |
| <h1 class="title">DUEL OF ALBION</h1> | |
| <p class="sub">Loading the realm...</p> | |
| </div> | |
| <div id="root"></div> | |
| <script> | |
| // Hide the preload splash as soon as React mounts anything into #root. | |
| // We watch for #root to have children and then fade it out. | |
| (function () { | |
| var root = document.getElementById('root'); | |
| var pre = document.getElementById('preload'); | |
| function hidePreload() { | |
| if (pre) pre.classList.add('hide'); | |
| setTimeout(function () { | |
| document.body.classList.add('react-ready'); | |
| }, 450); | |
| } | |
| if (!root) return; | |
| var obs = new MutationObserver(function () { | |
| if (root.children.length > 0) { | |
| hidePreload(); | |
| obs.disconnect(); | |
| } | |
| }); | |
| obs.observe(root, { childList: true }); | |
| // Safety: if React never mounts within 15s, show a hint. | |
| setTimeout(function () { | |
| if (root.children.length === 0) { | |
| var hint = document.createElement('p'); | |
| hint.style.cssText = 'color:#e71d36;margin-top:24px;font-size:13px;letter-spacing:0.1em;'; | |
| hint.textContent = 'If this persists, open the browser console (F12) for details.'; | |
| pre.appendChild(hint); | |
| } | |
| }, 15000); | |
| })(); | |
| </script> | |
| </body> | |
| </html> | |