<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Kairos — Reclaim Your Morning</title>
<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=Cormorant+Garamond:ital,wght@0,300;0,400;0,600;1,300;1,400&family=Syne:wght@400;500;700;800&display=swap" rel="stylesheet" />
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0e0e0e;
--surface: #161616;
--surface2: #1e1e1e;
--gold: #c9a84c;
--gold-dim: rgba(201,168,76,0.15);
--gold-border: rgba(201,168,76,0.2);
--white: #ffffff;
--muted: rgba(255,255,255,0.4);
--muted2: rgba(255,255,255,0.12);
}
html { scroll-behavior: smooth; }
body { background: var(--bg); color: var(--white); font-family: 'Syne', sans-serif; overflow-x: hidden; cursor: none; }
.cursor { position: fixed; width: 8px; height: 8px; background: var(--gold); border-radius: 50%; pointer-events: none; z-index: 9999; transform: translate(-50%,-50%); transition: width 0.3s, height 0.3s; mix-blend-mode: screen; }
.cursor-ring { position: fixed; width: 36px; height: 36px; border: 1px solid rgba(201,168,76,0.4); border-radius: 50%; pointer-events: none; z-index: 9998; transform: translate(-50%,-50%); transition: width 0.3s, height 0.3s; }
.cursor.hover { width: 16px; height: 16px; }
.cursor-ring.hover { width: 56px; height: 56px; }
body::before { content: ''; position: fixed; inset: 0; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E"); opacity: 0.35; pointer-events: none; z-index: 1000; }
nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 28px 60px; background: linear-gradient(to bottom, rgba(14,14,14,0.95), transparent); }
.nav-logo { font-weight: 800; font-size: 13px; letter-spacing: 0.35em; }
.nav-cta { font-size: 11px; font-weight: 700; letter-spacing: 0.2em; color: var(--gold); text-decoration: none; border: 1px solid var(--gold-border); padding: 10px 22px; transition: background 0.2s, color 0.2s; }
.nav-cta:hover { background: var(--gold); color: #000; }
.hero { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 120px 40px 80px; position: relative; overflow: hidden; }
.hero-glow { position: absolute; width: 700px; height: 700px; border-radius: 50%; background: radial-gradient(circle, rgba(201,168,76,0.07) 0%, transparent 70%); top: 50%; left: 50%; transform: translate(-50%,-60%); pointer-events: none; }
.hero-eyebrow { font-size: 10px; font-weight: 700; letter-spacing: 0.4em; color: var(--gold); margin-bottom: 32px; opacity: 0; transform: translateY(10px); animation: fadeUp 0.8s ease forwards 0.2s; }
.hero-title { font-family: 'Cormorant Garamond', serif; font-weight: 300; font-size: clamp(64px, 10vw, 120px); line-height: 0.95; letter-spacing: -0.02em; margin-bottom: 12px; opacity: 0; transform: translateY(20px); animation: fadeUp 1s ease forwards 0.4s; }
.hero-title em { font-style: italic; color: var(--gold); }
.hero-subtitle { font-family: 'Cormorant Garamond', serif; font-size: clamp(18px, 2.5vw, 26px); font-weight: 300; color: var(--muted); max-width: 540px; line-height: 1.7; margin: 28px auto 56px; opacity: 0; transform: translateY(16px); animation: fadeUp 1s ease forwards 0.6s; }
.hero-form { display: flex; max-width: 420px; width: 100%; opacity: 0; transform: translateY(16px); animation: fadeUp 1s ease forwards 0.8s; }
.hero-form input { flex: 1; background: var(--surface); border: 1px solid var(--muted2); border-right: none; color: var(--white); font-family: 'Syne', sans-serif; font-size: 12px; letter-spacing: 0.05em; padding: 16px 20px; outline: none; transition: border-color 0.2s; }
.hero-form input::placeholder { color: var(--muted); }
.hero-form input:focus { border-color: var(--gold-border); }
.hero-form button { background: var(--gold); color: #000; border: none; font-family: 'Syne', sans-serif; font-size: 11px; font-weight: 700; letter-spacing: 0.2em; padding: 16px 28px; cursor: none; transition: opacity 0.2s; white-space: nowrap; }
.hero-form button:hover { opacity: 0.85; }
.hero-note { font-size: 10px; letter-spacing: 0.1em; color: var(--muted); margin-top: 16px; opacity: 0; animation: fadeUp 1s ease forwards 1s; }
.hero-scroll { position: absolute; bottom: 40px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 10px; opacity: 0; animation: fadeUp 1s ease forwards 1.4s; }
.hero-scroll span { font-size: 9px; letter-spacing: 0.3em; color: var(--muted); }
.scroll-line { width: 1px; height: 40px; background: linear-gradient(to bottom, var(--gold), transparent); animation: scrollPulse 2s ease-in-out infinite; }
.divider { width: 1px; height: 80px; background: linear-gradient(to bottom, transparent, var(--gold-border), transparent); margin: 0 auto; }
.about { padding: 120px 60px; max-width: 1100px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: 100px; align-items: center; }
.about-label { font-size: 10px; font-weight: 700; letter-spacing: 0.4em; color: var(--gold); margin-bottom: 24px; }
.about-title { font-family: 'Cormorant Garamond', serif; font-size: clamp(36px, 4vw, 52px); font-weight: 300; line-height: 1.2; margin-bottom: 28px; }
.about-title em { font-style: italic; color: var(--gold); }
.about-body { font-family: 'Cormorant Garamond', serif; font-size: 19px; font-weight: 300; line-height: 1.8; color: var(--muted); }
.about-body p + p { margin-top: 20px; }
.about-visual { position: relative; display: flex; align-items: center; justify-content: center; }
.phone-glow { position: absolute; width: 300px; height: 300px; border-radius: 50%; background: radial-gradient(circle, rgba(201,168,76,0.1) 0%, transparent 70%); pointer-events: none; }
.phone-mockup { width: 220px; height: 440px; background: var(--surface); border: 1px solid var(--muted2); border-radius: 36px; position: relative; overflow: hidden; box-shadow: 0 40px 80px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.04); }
.phone-mockup::before { content: ''; position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 90px; height: 28px; background: var(--bg); border-radius: 0 0 18px 18px; z-index: 2; }
.phone-screen { padding: 48px 20px 24px; height: 100%; display: flex; flex-direction: column; gap: 12px; }
.phone-tag { align-self: center; font-size: 7px; font-weight: 700; letter-spacing: 0.2em; color: var(--gold); border: 1px solid var(--gold-border); padding: 4px 10px; border-radius: 100px; }
.phone-heading { font-family: 'Cormorant Garamond', serif; font-size: 22px; font-weight: 300; color: var(--white); text-align: center; line-height: 1.2; }
.phone-text { font-family: 'Cormorant Garamond', serif; font-size: 11px; color: var(--muted); text-align: center; line-height: 1.6; }
.phone-btn { background: var(--white); color: #000; font-family: 'Syne', sans-serif; font-size: 8px; font-weight: 700; letter-spacing: 0.2em; padding: 10px; text-align: center; margin-top: auto; }
.phone-stat { display: flex; align-items: center; justify-content: space-between; background: var(--surface2); border: 1px solid var(--muted2); padding: 10px 14px; font-size: 8px; letter-spacing: 0.15em; color: var(--muted); font-weight: 600; }
.features { padding: 80px 60px 140px; max-width: 1100px; margin: 0 auto; }
.features-header { text-align: center; margin-bottom: 80px; }
.features-label { font-size: 10px; font-weight: 700; letter-spacing: 0.4em; color: var(--gold); margin-bottom: 20px; }
.features-title { font-family: 'Cormorant Garamond', serif; font-size: clamp(36px, 4vw, 54px); font-weight: 300; line-height: 1.15; }
.features-title em { font-style: italic; color: var(--gold); }
.features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2px; }
.feature-card { background: var(--surface); padding: 48px 40px; border: 1px solid var(--muted2); position: relative; overflow: hidden; transition: border-color 0.3s, transform 0.3s; }
.feature-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(to right, transparent, var(--gold-border), transparent); opacity: 0; transition: opacity 0.3s; }
.feature-card:hover { border-color: var(--gold-border); transform: translateY(-2px); }
.feature-card:hover::before { opacity: 1; }
.feature-number { font-size: 10px; font-weight: 700; letter-spacing: 0.3em; color: var(--gold); opacity: 0.5; margin-bottom: 32px; }
.feature-icon { width: 40px; height: 40px; margin-bottom: 24px; }
.feature-name { font-family: 'Cormorant Garamond', serif; font-size: 26px; font-weight: 400; margin-bottom: 16px; line-height: 1.1; }
.feature-desc { font-family: 'Cormorant Garamond', serif; font-size: 17px; font-weight: 300; color: var(--muted); line-height: 1.7; }
.waitlist { padding: 120px 60px; text-align: center; position: relative; overflow: hidden; }
.waitlist::before { content: ''; position: absolute; inset: 0; background: linear-gradient(to bottom, transparent, rgba(201,168,76,0.04), transparent); pointer-events: none; }
.waitlist-inner { max-width: 560px; margin: 0 auto; position: relative; }
.waitlist-label { font-size: 10px; font-weight: 700; letter-spacing: 0.4em; color: var(--gold); margin-bottom: 24px; }
.waitlist-title { font-family: 'Cormorant Garamond', serif; font-size: clamp(40px, 6vw, 72px); font-weight: 300; line-height: 1.05; margin-bottom: 20px; }
.waitlist-title em { font-style: italic; color: var(--gold); }
.waitlist-sub { font-family: 'Cormorant Garamond', serif; font-size: 19px; font-weight: 300; color: var(--muted); line-height: 1.7; margin-bottom: 48px; }
.waitlist-form { display: flex; max-width: 420px; margin: 0 auto; }
.waitlist-form input { flex: 1; background: var(--surface); border: 1px solid var(--muted2); border-right: none; color: var(--white); font-family: 'Syne', sans-serif; font-size: 12px; letter-spacing: 0.05em; padding: 16px 20px; outline: none; transition: border-color 0.2s; }
.waitlist-form input::placeholder { color: var(--muted); }
.waitlist-form input:focus { border-color: var(--gold-border); }
.waitlist-form button { background: var(--gold); color: #000; border: none; font-family: 'Syne', sans-serif; font-size: 11px; font-weight: 700; letter-spacing: 0.2em; padding: 16px 28px; cursor: none; transition: opacity 0.2s; white-space: nowrap; }
.waitlist-form button:hover { opacity: 0.85; }
.waitlist-note { font-size: 10px; letter-spacing: 0.1em; color: var(--muted); margin-top: 16px; }
.form-success { display: none; font-family: 'Cormorant Garamond', serif; font-size: 18px; font-weight: 300; color: var(--gold); letter-spacing: 0.05em; padding: 16px; border: 1px solid var(--gold-border); margin-top: 16px; }
footer { border-top: 1px solid var(--muted2); padding: 40px 60px; display: flex; align-items: center; justify-content: space-between; }
.footer-logo { font-weight: 800; font-size: 12px; letter-spacing: 0.35em; color: var(--muted); }
.footer-copy { font-size: 10px; letter-spacing: 0.1em; color: var(--muted); opacity: 0.5; }
@keyframes fadeUp { to { opacity: 1; transform: translateY(0); } }
@keyframes scrollPulse { 0%,100% { opacity: 0.3; } 50% { opacity: 1; } }
.reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.8s ease, transform 0.8s ease; }
.reveal.visible { opacity: 1; transform: translateY(0); }
.reveal-delay-1 { transition-delay: 0.1s; }
.reveal-delay-2 { transition-delay: 0.2s; }
.reveal-delay-3 { transition-delay: 0.3s; }
.reveal-delay-4 { transition-delay: 0.4s; }
.reveal-delay-5 { transition-delay: 0.5s; }
@media (max-width: 900px) {
nav { padding: 24px 30px; }
.about { grid-template-columns: 1fr; gap: 60px; padding: 80px 30px; }
.about-visual { order: -1; }
.features { padding: 60px 30px 100px; }
.features-grid { grid-template-columns: 1fr; }
.waitlist { padding: 80px 30px; }
footer { flex-direction: column; gap: 16px; padding: 30px; text-align: center; }
}
@media (max-width: 600px) {
.hero-form, .waitlist-form { flex-direction: column; }
.hero-form input, .waitlist-form input { border-right: 1px solid var(--muted2); border-bottom: none; }
}
</style>
</head>
<body>
<div class="cursor" id="cursor"></div>
<div class="cursor-ring" id="cursorRing"></div>
<nav>
<div class="nav-logo">KAIROS</div>
<a href="#waitlist" class="nav-cta">JOIN WAITLIST</a>
</nav>
<section class="hero">
<div class="hero-glow"></div>
<p class="hero-eyebrow">COMING SOON TO IOS</p>
<h1 class="hero-title">Reclaim<br>your <em>morning.</em></h1>
<p class="hero-subtitle">A daily devotional app that keeps your phone locked until you've spent time in stillness. Not productivity. Presence.</p>
<form class="hero-form" id="heroForm">
<input type="email" placeholder="YOUR EMAIL" required />
<button type="submit">NOTIFY ME</button>
</form>
<p class="hero-note">No spam. Just a quiet note when we launch.</p>
<div class="form-success" id="heroSuccess">You're on the list. We'll be in touch.</div>
<div class="hero-scroll">
<div class="scroll-line"></div>
<span>SCROLL</span>
</div>
</section>
<div class="divider"></div>
<section class="about">
<div>
<p class="about-label reveal">ABOUT KAIROS</p>
<h2 class="about-title reveal reveal-delay-1">The ancient word for <em>the right moment.</em></h2>
<div class="about-body reveal reveal-delay-2">
<p>Kairos isn't a productivity app. It's a discipline. Every morning, your most distracting apps stay locked until you've read the day's devotional and sat in reflection.</p>
<p>Built on Apple's native Screen Time API, the lock is real. The devotionals are brief, honest, and written for people who want faith woven into their actual day — not relegated to Sunday.</p>
<p>No streaks for streaks' sake. No gamification. Just a quiet rhythm of morning stillness.</p>
</div>
</div>
<div class="about-visual reveal reveal-delay-3">
<div class="phone-glow"></div>
<div class="phone-mockup">
<div class="phone-screen">
<div class="phone-tag">PSALM 46:10</div>
<div class="phone-heading">Be Still<br>and Know</div>
<div class="phone-text">In the noise of every morning, there is a still small voice asking you to pause before you perform.</div>
<div class="phone-stat">
<span>🔒 APPS BLOCKED</span>
<span style="color:var(--gold)">●</span>
</div>
<div class="phone-btn">BEGIN READING →</div>
</div>
</div>
</div>
</section>
<div class="divider"></div>
<section class="features">
<div class="features-header">
<p class="features-label reveal">HOW IT WORKS</p>
<h2 class="features-title reveal reveal-delay-1">Designed for <em>discipline,</em><br>not willpower.</h2>
</div>
<div class="features-grid">
<div class="feature-card reveal">
<div class="feature-number">01</div>
<svg class="feature-icon" viewBox="0 0 40 40" fill="none">
<circle cx="20" cy="20" r="18" stroke="#c9a84c" stroke-width="1" stroke-opacity="0.4"/>
<path d="M20 8L20 20L28 28" stroke="#c9a84c" stroke-width="1.5" stroke-linecap="round"/>
</svg>
<h3 class="feature-name">The Daily Lock</h3>
<p class="feature-desc">At a time you set, Kairos locks your chosen apps via Apple's Screen Time API. The lock is native — not a workaround.</p>
</div>
<div class="feature-card reveal reveal-delay-1">
<div class="feature-number">02</div>
<svg class="feature-icon" viewBox="0 0 40 40" fill="none">
<rect x="8" y="10" width="24" height="22" rx="2" stroke="#c9a84c" stroke-width="1" stroke-opacity="0.4"/>
<line x1="13" y1="17" x2="27" y2="17" stroke="#c9a84c" stroke-width="1.5" stroke-linecap="round"/>
<line x1="13" y1="22" x2="22" y2="22" stroke="#c9a84c" stroke-width="1.5" stroke-linecap="round"/>
</svg>
<h3 class="feature-name">Daily Devotional</h3>
<p class="feature-desc">3–6 pages of original content, date-matched. Scripture, reflection, and a question. Read at your pace with a 15-second cooldown per page.</p>
</div>
<div class="feature-card reveal reveal-delay-2">
<div class="feature-number">03</div>
<svg class="feature-icon" viewBox="0 0 40 40" fill="none">
<circle cx="20" cy="20" r="8" stroke="#c9a84c" stroke-width="1.5"/>
<circle cx="20" cy="20" r="2" fill="#c9a84c"/>
<path d="M20 6V12M20 28V34M6 20H12M28 20H34" stroke="#c9a84c" stroke-width="1" stroke-opacity="0.4" stroke-linecap="round"/>
</svg>
<h3 class="feature-name">The Unlock</h3>
<p class="feature-desc">Complete the reading and your apps unlock for the rest of the day. The cycle resets quietly at the same time tomorrow.</p>
</div>
<div class="feature-card reveal reveal-delay-3">
<div class="feature-number">04</div>
<svg class="feature-icon" viewBox="0 0 40 40" fill="none">
<path d="M14 20L18 24L26 16" stroke="#c9a84c" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<circle cx="20" cy="20" r="14" stroke="#c9a84c" stroke-width="1" stroke-opacity="0.4"/>
</svg>
<h3 class="feature-name">Streak Tracking</h3>
<p class="feature-desc">A quiet count of consecutive days. Stored locally, no account required. Not a leaderboard — just a mirror.</p>
</div>
<div class="feature-card reveal reveal-delay-4">
<div class="feature-number">05</div>
<svg class="feature-icon" viewBox="0 0 40 40" fill="none">
<path d="M12 14C12 10 28 10 28 14L28 26C28 30 20 34 20 34C20 34 12 30 12 26Z" stroke="#c9a84c" stroke-width="1" stroke-opacity="0.4"/>
<path d="M16 20L18 22L24 17" stroke="#c9a84c" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<h3 class="feature-name">Private by Design</h3>
<p class="feature-desc">No account needed. Journaling is local-only. No behavioral tracking. Apple handles the lock — we never see your data.</p>
</div>
<div class="feature-card reveal reveal-delay-5">
<div class="feature-number">06</div>
<svg class="feature-icon" viewBox="0 0 40 40" fill="none">
<path d="M20 8C28 8 32 14 32 20C32 26 28 32 20 32C12 32 8 26 8 20C8 14 12 8 20 8Z" stroke="#c9a84c" stroke-width="1" stroke-opacity="0.4"/>
<path d="M15 20Q20 14 25 20Q20 26 15 20Z" stroke="#c9a84c" stroke-width="1.5"/>
</svg>
<h3 class="feature-name">Subtly Christian</h3>
<p class="feature-desc">Faith-rooted but not churchy. Written for people who want their spirituality integrated — not performed.</p>
</div>
</div>
</section>
<section class="waitlist" id="waitlist">
<div class="waitlist-inner">
<p class="waitlist-label reveal">EARLY ACCESS</p>
<h2 class="waitlist-title reveal reveal-delay-1">The morning<br>is <em>waiting.</em></h2>
<p class="waitlist-sub reveal reveal-delay-2">Kairos is in development. Join the waitlist and be first to know when it's ready for iOS.</p>
<form class="waitlist-form reveal reveal-delay-3" id="waitlistForm">
<input type="email" placeholder="YOUR EMAIL" required />
<button type="submit">JOIN</button>
</form>
<p class="waitlist-note reveal reveal-delay-4">iOS only · No spam · Ever.</p>
<div class="form-success" id="waitlistSuccess">You're on the list. We'll be in touch.</div>
</div>
</section>
<footer>
<div class="footer-logo">KAIROS</div>
<div class="footer-copy">© 2026 Kairos. All rights reserved.</div>
</footer>
<script>
// Cursor
const cursor = document.getElementById('cursor');
const ring = document.getElementById('cursorRing');
let mx = 0, my = 0, rx = 0, ry = 0;
document.addEventListener('mousemove', e => {
mx = e.clientX; my = e.clientY;
cursor.style.left = mx + 'px';
cursor.style.top = my + 'px';
});
(function animateRing() {
rx += (mx - rx) * 0.12;
ry += (my - ry) * 0.12;
ring.style.left = rx + 'px';
ring.style.top = ry + 'px';
requestAnimationFrame(animateRing);
})();
document.querySelectorAll('a, button, input').forEach(el => {
el.addEventListener('mouseenter', () => { cursor.classList.add('hover'); ring.classList.add('hover'); });
el.addEventListener('mouseleave', () => { cursor.classList.remove('hover'); ring.classList.remove('hover'); });
});
// Scroll reveal
const observer = new IntersectionObserver(entries => {
entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('visible'); });
}, { threshold: 0.1 });
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
// Brevo
const BREVO_API_KEY = 'YOUR_BREVO_API_KEY'; // ← paste your key here
const BREVO_LIST_ID = 3;
async function submitToBrevo(email) {
try {
const res = await fetch('https://api.brevo.com/v3/contacts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'api-key': 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
},
body: JSON.stringify({
email: email,
listIds: [BREVO_LIST_ID],
updateEnabled: true
})
});
if (!res.ok) {
const err = await res.json();
console.error('Brevo error:', err);
}
} catch (e) {
console.error('Network error:', e);
}
}
function handleForm(formId, successId) {
const form = document.getElementById(formId);
const success = document.getElementById(successId);
if (!form) return;
form.addEventListener('submit', async e => {
e.preventDefault();
const email = form.querySelector('input').value;
const btn = form.querySelector('button');
btn.textContent = '...';
btn.disabled = true;
await submitToBrevo(email);
form.style.display = 'none';
success.style.display = 'block';
});
}
handleForm('heroForm', 'heroSuccess');
handleForm('waitlistForm', 'waitlistSuccess');
</script>
</body>
</html>