hypertwist/website/index.html
2026-06-24 08:12:56 +00:00

89 lines
3.8 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="description"
content="HyperTwist is a native cube and hypercube training environment for recognition, replay, coaching, higher-dimensional runtime ownership, and desktop-first operator workflows."
/>
<meta property="og:site_name" content="HyperTwist" />
<meta property="og:type" content="website" />
<meta property="og:title" content="HyperTwist" />
<meta
property="og:description"
content="HyperTwist is a native cube and hypercube training environment for recognition, replay, coaching, higher-dimensional runtime ownership, and desktop-first operator workflows."
/>
<meta property="og:url" content="https://hypertwist.app/" />
<meta property="og:image" content="https://hypertwist.app/branding/hypertwist-3d-symbol.png" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="HyperTwist" />
<meta
name="twitter:description"
content="HyperTwist is a native cube and hypercube training environment for recognition, replay, coaching, higher-dimensional runtime ownership, and desktop-first operator workflows."
/>
<meta name="twitter:image" content="https://hypertwist.app/branding/hypertwist-3d-symbol.png" />
<meta name="theme-color" content="#0b1020" />
<meta name="hypertwist-site-shell" content="first-party-website-v1" />
<link rel="canonical" href="https://hypertwist.app/" />
<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=IBM+Plex+Sans:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;700&display=swap"
rel="stylesheet"
/>
<title>HyperTwist</title>
</head>
<body>
<div id="root"></div>
<script>
(function () {
const BACKDROP_ID = 'hypertwist-auth-shell-backdrop';
function isAuthRoute(pathname) {
return pathname === '/login'
|| pathname.startsWith('/login/')
|| pathname === '/register'
|| pathname.startsWith('/register/')
|| pathname.startsWith('/auth/');
}
function syncAuthChrome() {
const shouldRender = isAuthRoute(window.location.pathname);
const existingBackdrop = document.getElementById(BACKDROP_ID);
if (!shouldRender) {
if (existingBackdrop) existingBackdrop.remove();
return;
}
if (!existingBackdrop) {
const backdrop = document.createElement('div');
backdrop.id = BACKDROP_ID;
backdrop.setAttribute('data-testid', 'supertokens-auth-backdrop');
backdrop.setAttribute('aria-hidden', 'true');
backdrop.style.position = 'fixed';
backdrop.style.inset = '0';
backdrop.style.zIndex = '0';
backdrop.style.pointerEvents = 'none';
backdrop.style.background = 'radial-gradient(circle at top, rgba(216,203,175,0.12), transparent 40%), linear-gradient(180deg, rgba(18,20,24,0.97), rgba(10,12,17,0.99))';
document.body.appendChild(backdrop);
}
}
function startAuthChromeObserver() {
syncAuthChrome();
window.addEventListener('popstate', syncAuthChrome);
window.addEventListener('hashchange', syncAuthChrome);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', startAuthChromeObserver, { once: true });
} else {
startAuthChromeObserver();
}
})();
</script>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>