Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8" /> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
<title>CTRL + ALT + HEAL</title> | |
<script src="https://cdn.tailwindcss.com"></script> | |
<link | |
href="https://fonts.googleapis.com/css2?family=Rubik:wght@400;700&display=swap" | |
rel="stylesheet" | |
/> | |
<style> | |
:root { | |
--tropical-indigo: rgb(120, 187, 242); | |
--wisteria: rgb(197, 217, 251); | |
--latte-cream: #ffffff; | |
} | |
body { | |
font-family: "Rubik", sans-serif; | |
background-color: var(--latte-cream); | |
color: #333; | |
} | |
.fade-in { | |
opacity: 0; | |
transform: translateY(30px); | |
transition: all 0.8s ease-out; | |
} | |
.fade-in.show { | |
opacity: 1; | |
transform: translateY(0); | |
} | |
.glass-card { | |
background: rgba(162, 160, 160, 0.075); | |
backdrop-filter: blur(12px); | |
border-radius: 1rem; | |
border: 1px solid rgba(255, 255, 255, 0.3); | |
padding: 2rem; | |
text-align: center; | |
transition: transform 0.3s ease, box-shadow 0.3s ease; | |
} | |
.glass-card:hover { | |
transform: translateY(-5px); | |
box-shadow: 0 15px 25px rgba(0, 0, 0, 0.2); | |
} | |
.nav-link { | |
position: relative; | |
padding-bottom: 4px; | |
transition: color 0.3s; | |
} | |
.nav-link::after { | |
content: ""; | |
position: absolute; | |
width: 0%; | |
height: 2px; | |
bottom: 0; | |
left: 0; | |
background-color: var(--tropical-indigo); | |
transition: width 0.3s ease; | |
} | |
.nav-link:hover::after { | |
width: 100%; | |
} | |
.parallax { | |
background-attachment: fixed; | |
background-size: cover; | |
background-position: center; | |
position: relative; | |
} | |
/* Typing effect styles */ | |
#typed-heading, | |
#typed-paragraph { | |
overflow: hidden; | |
white-space: nowrap; | |
border-right: 2px solid var(--tropical-indigo); | |
} | |
</style> | |
</head> | |
<body> | |
<!-- NAVBAR --> | |
<nav | |
class="fixed top-0 left-0 w-full z-50 backdrop-blur-md bg-white/20 border-b border-white/30 shadow-md" | |
> | |
<div | |
class="max-w-6xl mx-auto px-6 py-4 flex justify-between items-center" | |
> | |
<!-- Logo --> | |
<a | |
href="index.html" | |
class="text-2xl font-bold text-[#FOE3CE hover:text-[var(--tropical-indigo)] transition" | |
> | |
CTRL + ALT + HEAL | |
</a> | |
<!-- Desktop Menu --> | |
<ul class="hidden md:flex space-x-6 font-medium text-gray-800"> | |
<li><a href="index.html" class="nav-link">Home</a></li> | |
<li><a href="analyzer.html" class="nav-link">Analyzer</a></li> | |
<li><a href="past_data.html" class="nav-link">Past Reports</a></li> | |
<li><a href="profile.html" class="nav-link">Profile</a></li> | |
<li id="authNavItem"><a href="login.html" class="nav-link">Login</a></li> | |
</ul> | |
<!-- Hamburger Menu --> | |
<button | |
id="hamburger" | |
class="md:hidden text-[var(--latte-cream)] text-2xl" | |
> | |
☰ | |
</button> | |
</div> | |
<!-- Mobile Menu --> | |
<ul | |
id="mobile-menu" | |
class="hidden flex-col space-y-4 bg-white/30 backdrop-blur-lg border border-white/20 rounded-xl shadow-lg mt-2 p-4 mx-6 md:hidden" | |
> | |
<li> | |
<a | |
href="index.html" | |
class="block text-gray-800 hover:text-[var(--neon-green)]" | |
>Home</a | |
> | |
</li> | |
<li> | |
<a | |
href="analyzer.html" | |
class="block text-gray-800 hover:text-[var(--neon-green)]" | |
>Analyzer</a | |
> | |
</li> | |
<li> | |
<a | |
href="profile.html" | |
class="block text-gray-800 hover:text-[var(--neon-green)]" | |
>Profile</a | |
> | |
</li> | |
<li> | |
<a | |
href="login.html" | |
class="block text-gray-800 hover:text-[var(--neon-green)]" | |
>Login</a | |
> | |
</li> | |
<li> | |
<a | |
href="about.html" | |
class="block text-gray-800 hover:text-[var(--neon-green)]" | |
>About</a | |
> | |
</li> | |
</ul> | |
</nav> | |
<script> | |
const hamburger = document.getElementById("hamburger"); | |
const mobileMenu = document.getElementById("mobile-menu"); | |
hamburger.addEventListener("click", () => { | |
mobileMenu.classList.toggle("hidden"); | |
}); | |
</script> | |
<!-- HERO SECTION --> | |
<section | |
class="relative min-h-[600px] flex items-center justify-center" | |
style=" | |
background-image: url('https://videos.openai.com/vg-assets/assets%2Ftask_01k2qzfsscev8vmftcka1wp2et%2F1755299042_img_1.webp?st=2025-08-15T21%3A17%3A52Z&se=2025-08-21T22%3A17%3A52Z&sks=b&skt=2025-08-15T21%3A17%3A52Z&ske=2025-08-21T22%3A17%3A52Z&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skoid=3d249c53-07fa-4ba4-9b65-0bf8eb4ea46a&skv=2019-02-02&sv=2018-11-09&sr=b&sp=r&spr=https%2Chttp&sig=j0aFWc%2BchHFLtaa8JPylXkDFsrtP8zazpKyO8Edy5n8%3D&az=oaivgprodscus'); | |
background-size: cover; | |
background-position: center; | |
" | |
> | |
<div class="absolute inset-0 bg-black/40"></div> | |
<div class="relative z-10 text-center px-6 fade-in"> | |
<h1 class="text-5xl md:text-6xl font-bold text-white mb-4"> | |
CTRL + ALT + HEAL | |
</h1> | |
<p class="text-lg text-gray-200 mb-2"> | |
From medical chaos to clarity. Upload your report, get real answers — | |
fast. | |
</p> | |
<p class="text-sm text-gray-300 mb-6"> | |
No stress, no spiraling. Just answers that feel human. | |
</p> | |
<a href="login.html" | |
><button | |
class="bg-[var(--tropical-indigo)] hover:bg-[var(--wisteria)] text-white px-8 py-3 rounded-lg shadow-lg transition" | |
> | |
Sign Up / Login | |
</button></a | |
> | |
</div> | |
</section> | |
<!-- FEATURES --> | |
<section class="py-20 bg-[var(--latte-cream)]"> | |
<div class="max-w-6xl mx-auto px-6 grid md:grid-cols-3 gap-8 fade-in"> | |
<div class="glass-card"> | |
<h3 class="text-2xl font-bold text-[var(--tropical-indigo)] mb-2"> | |
Fast Results | |
</h3> | |
<p>Upload your report and get human-readable answers instantly.</p> | |
</div> | |
<div class="glass-card"> | |
<h3 class="text-2xl font-bold text-[var(--tropical-indigo)] mb-2"> | |
Clear Language | |
</h3> | |
<p>No medical jargon, just plain language you can understand.</p> | |
</div> | |
<div class="glass-card"> | |
<h3 class="text-2xl font-bold text-[var(--tropical-indigo)] mb-2"> | |
Actionable Steps | |
</h3> | |
<p>Know what to do next without the stress and confusion.</p> | |
</div> | |
</div> | |
</section> | |
<!-- PARALLAX INFO SECTION --> | |
<section | |
class="relative h-[200px] flex items-center justify-center text-center text-white parallax" | |
> | |
<div class="absolute inset-0 bg-black/40"></div> | |
<div class="relative z-10 px-6 fade-in"> | |
<h2 id="typed-heading" class="text-4xl font-bold mb-4"></h2> | |
<p id="typed-paragraph" class="text-lg max-w-xl mx-auto"></p> | |
</div> | |
</section> | |
<!-- BEEN THERE --> | |
<section class="py-20 bg-[var(--latte-cream)] fade-in"> | |
<div | |
class="max-w-6xl mx-auto px-6 grid md:grid-cols-2 gap-12 items-center" | |
> | |
<div> | |
<h3 class="text-3xl font-bold text-[var(--tropical-indigo)] mb-4"> | |
Been There. | |
</h3> | |
<p class="mb-4"> | |
That’s exactly why we built this app — to stop the health spiral | |
before it even starts. We know what it’s like to open a medical | |
report and immediately feel overwhelmed. Weird abbreviations. | |
Numbers with no context. Pages that feel like they were written for | |
robots, not real people. It’s confusing, it’s stressful, and it’s | |
usually a late‐night Google rabbit hole that somehow ends in you | |
thinking you’ve got 3 rare conditions and a 2-day countdown. | |
</p> | |
<p> | |
So we made something better. Just upload your report. We’ll break it | |
down into plain, human language. We’ll highlight what actually | |
matters, skip the jargon, and explain everything in a way that | |
actually makes sense. Most importantly, we’ll give you real, | |
practical steps — no guessing, no spiraling. You don’t need a | |
medical degree to understand your own health. You just need the | |
right guide. That’s us. | |
</p> | |
</div> | |
<div class="w-full h-80 rounded-lg overflow-hidden shadow-lg"> | |
<img | |
src="https://i.pinimg.com/originals/44/c7/c1/44c7c1f3fbd68b2151c37af5f08198f1.gif" | |
class="object-cover w-full h-full rounded-lg" | |
/> | |
</div> | |
</div> | |
</section> | |
<!-- FOOTER --> | |
<footer class="py-12 bg-[var(--wisteria)] text-white fade-in"> | |
<div | |
class="max-w-6xl mx-auto px-6 flex flex-col md:flex-row justify-between items-center" | |
> | |
<p>© 2025 CTRL + ALT + HEAL. All rights reserved.</p> | |
<div class="flex space-x-4 mt-4 md:mt-0"> | |
<a href="#" class="hover:underline">Privacy Policy</a> | |
<a href="#" class="hover:underline">Terms of Service</a> | |
</div> | |
</div> | |
</footer> | |
<script type="module"> | |
import { initializeApp } from 'https://www.gstatic.com/firebasejs/9.22.0/firebase-app.js'; | |
import { getAuth, onAuthStateChanged, signOut } from 'https://www.gstatic.com/firebasejs/9.22.0/firebase-auth.js'; | |
import { getFirestore, doc, getDoc, updateDoc } from 'https://www.gstatic.com/firebasejs/9.22.0/firebase-firestore.js'; | |
const firebaseConfig = { | |
apiKey: "AIzaSyAPhM_Ee7cLzyKHs5zyFy8g5ZOk9-pubRI", | |
authDomain: "login-tutorial-7a9e1.firebaseapp.com", | |
projectId: "login-tutorial-7a9e1", | |
storageBucket: "login-tutorial-7a9e1.firebasestorage.app", | |
messagingSenderId: "491093197824", | |
appId: "1:491093197824:web:9f866..." | |
}; | |
const app = initializeApp(firebaseConfig); | |
const auth = getAuth(app); | |
const db = getFirestore(app); | |
let currentUser = null; | |
onAuthStateChanged(auth, (user) => { | |
const authNavItem = document.getElementById('authNavItem'); | |
if (authNavItem) { | |
if (user) { | |
authNavItem.innerHTML = '<button onclick="logout()" class="hover:text-[#6B9080] text-red-600">Logout</button>'; | |
} else { | |
authNavItem.innerHTML = '<a href="login.html" class="hover:text-[#6B9080]">Login</a>'; | |
} | |
} | |
}); | |
window.logout = async () => { | |
try { | |
await signOut(auth); | |
localStorage.clear(); | |
window.location.href = 'login.html'; | |
} catch (error) { | |
console.error("Error signing out:", error); | |
} | |
}; | |
// Fade-in on scroll | |
const fadeObserver = new IntersectionObserver( | |
(entries) => { | |
entries.forEach((entry) => { | |
if (entry.isIntersecting) entry.target.classList.add("show"); | |
}); | |
}, | |
{ threshold: 0.1 } | |
); | |
document | |
.querySelectorAll(".fade-in") | |
.forEach((el) => fadeObserver.observe(el)); | |
// Typing effect on scroll | |
const typeObserver = new IntersectionObserver( | |
(entries) => { | |
entries.forEach((entry) => { | |
if (entry.isIntersecting) { | |
typeText("typed-heading", "Your Health, Your Clarity", 80); | |
typeText( | |
"typed-paragraph", | |
"We make complex medical reports simple and easy to understand.", | |
30 | |
); | |
typeObserver.unobserve(entry.target); | |
} | |
}); | |
}, | |
{ threshold: 0.5 } | |
); | |
typeObserver.observe( | |
document.querySelector("#typed-heading").parentElement | |
); | |
function typeText(id, text, speed) { | |
const el = document.getElementById(id); | |
let i = 0; | |
function type() { | |
if (i < text.length) { | |
el.innerHTML += text.charAt(i); | |
i++; | |
setTimeout(type, speed); | |
} | |
} | |
type(); | |
} | |
</script> | |
</body> | |
</html> | |