/* ============================================================================ MoonBite — THE FILM The entire homepage is one continuous, scroll-driven cinematic shot: a single sticky stage holds a persistent starfield + flying moon, and content chapters cross-fade over it as you scroll. No stacked sections. Loaded on / after home-cinematic.css (reuses its moon, chip, buttons, shine, keyframes and the always-dark .mb-home palette). Motion-safe fallback below. ========================================================================== */ /* ---------------------------------------------------------------- BASE / FALLBACK With no JS (or reduced motion) the page is a simple, readable vertical stack: the moon sits up top, chapters flow normally and are fully visible. */ .film { position: relative; } .film-stage { position: relative; } .film-cosmos { display: flex; justify-content: center; padding: 5rem 1rem 0; } .film-moonwrap { position: relative; width: min(340px, 66vw); height: min(340px, 66vw); display: grid; place-items: center; } .film-chapters { position: relative; z-index: 2; } .chapter { position: relative; display: grid; place-items: center; text-align: center; padding: 5.5rem 1.25rem; } .chapter-inner { width: 100%; max-width: 900px; display: grid; justify-items: center; gap: 1.35rem; } .chapter-inner.film-wide { max-width: 1080px; } .film-cue { display: none; } /* ---------------------------------------------------------------- CINEMATIC MODE Added by JS: the film track grows tall, the stage sticks to the viewport, and chapters become absolutely-stacked cross-fading "shots". */ .film.is-film { height: var(--film-h, 800vh); } .is-film .film-stage { position: sticky; top: 0; height: 100vh; height: 100svh; overflow: hidden; isolation: isolate; } .is-film .cine-starfield { position: absolute; inset: 0; z-index: 0; } /* Persistent moon layer — JS "flies" it (translate + scale + rotate). */ .is-film .film-cosmos { position: absolute; inset: 0; display: grid; place-items: center; padding: 0; z-index: 1; pointer-events: none; } .is-film .film-moonwrap { width: min(560px, 82vw); height: min(560px, 82vw); will-change: transform; transform-origin: center center; } /* soft readability scrim so chapter copy stays legible over the moon */ .is-film .film-stage::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: radial-gradient(120% 90% at 50% 50%, transparent 38%, rgba(2, 3, 8, 0.72) 100%); } /* Chapters become full-viewport cross-fading shots. */ .is-film .film-chapters { position: absolute; inset: 0; z-index: 2; } .is-film .chapter { position: absolute; inset: 0; padding: clamp(4.5rem, 9vh, 7rem) 1.25rem 4rem; opacity: 0; pointer-events: none; will-change: opacity, transform; align-content: center; } .is-film .chapter.is-active { pointer-events: auto; } /* Scroll cue (only in film mode, fades out once you move). */ .is-film .film-cue { display: grid; position: absolute; bottom: 1.5rem; left: 50%; transform: translateX(-50%); z-index: 4; justify-items: center; gap: 0.5rem; color: var(--text-secondary); font-size: 0.7rem; letter-spacing: 0.18em; text-transform: uppercase; transition: opacity 0.4s ease; } /* --------------------------------------------------------------- TYPOGRAPHY */ .film-h1 { font-size: clamp(3rem, 10vw, 7rem); line-height: 0.94; font-weight: 800; letter-spacing: -0.04em; margin: 0; text-shadow: 0 0 80px rgba(124, 92, 255, 0.35); } .film-h1-sm { font-size: clamp(2.6rem, 8vw, 5rem); } .film-h2 { font-size: clamp(2.2rem, 6.4vw, 4.6rem); line-height: 0.98; font-weight: 800; letter-spacing: -0.035em; margin: 0; text-shadow: 0 0 70px rgba(124, 92, 255, 0.3); } .film-lead { font-size: clamp(1.05rem, 2.1vw, 1.4rem); color: var(--text-secondary); max-width: 60ch; line-height: 1.6; margin: 0; } .film-fine { font-size: 0.82rem; color: var(--text-secondary); max-width: 56ch; opacity: 0.85; } .film-eyebrow { display: inline-flex; align-items: center; gap: 0.55rem; padding: 0.42rem 1rem; border-radius: 999px; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.16em; text-transform: uppercase; color: var(--primary-color-2); background: rgba(124, 92, 255, 0.10); border: 1px solid rgba(124, 92, 255, 0.32); box-shadow: 0 0 26px rgba(124, 92, 255, 0.16); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); } .film-eyebrow::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--gradient-primary); box-shadow: 0 0 10px rgba(52, 211, 255, 0.85); } .film-link { font-weight: 700; color: var(--primary-color-2); text-decoration: none; transition: gap 0.25s ease, color 0.25s ease; } .film-link:hover { color: var(--text-primary); } .film-cta { display: flex; flex-wrap: wrap; gap: 1rem; justify-content: center; margin-top: 0.3rem; } /* --------------------------------------------------------------- LIVE STATS */ .film-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; width: 100%; max-width: 780px; margin-top: 0.4rem; } .film-stat { padding: 1.1rem 1rem; border-radius: 1rem; background: rgba(14, 18, 32, 0.5); border: 1px solid var(--border-color); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); box-shadow: 0 20px 50px -30px rgba(0, 0, 0, 0.9); } .film-stat-v { font-family: var(--font-mono); font-weight: 800; font-size: clamp(1.4rem, 3.4vw, 2.4rem); letter-spacing: -0.02em; background: var(--gradient-primary); -webkit-background-clip: text; background-clip: text; color: transparent; } .film-stat-k { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.09em; color: var(--text-secondary); margin-top: 0.2rem; } /* --------------------------------------------------------------- GET: LANES */ .film-lanes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.2rem; width: 100%; max-width: 820px; margin-top: 0.4rem; } .film-lane { display: grid; justify-items: start; gap: 0.55rem; text-align: left; padding: 1.6rem; border-radius: var(--border-radius-lg); text-decoration: none; color: var(--text-primary); background: linear-gradient(180deg, rgba(124,92,255,0.10), rgba(14,18,32,0.6)); border: 1px solid rgba(124, 92, 255, 0.28); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); box-shadow: 0 24px 60px -34px rgba(0, 0, 0, 0.9); transition: transform 0.3s cubic-bezier(.2,.8,.2,1), border-color 0.3s ease, box-shadow 0.3s ease; } .film-lane.is-soon { background: linear-gradient(180deg, rgba(52,211,255,0.08), rgba(14,18,32,0.6)); border-color: rgba(52,211,255,0.24); } .film-lane:hover { transform: translateY(-6px); border-color: rgba(124,92,255,0.7); box-shadow: 0 40px 70px -34px rgba(124,92,255,0.5), var(--glow-primary); } .film-lane-ic { width: 54px; height: 54px; display: grid; place-items: center; font-size: 1.6rem; border-radius: 15px; background: linear-gradient(150deg, rgba(124,92,255,0.32), rgba(52,211,255,0.16)); border: 1px solid rgba(124,92,255,0.3); box-shadow: inset 0 1px 0 rgba(255,255,255,0.16); } .film-lane b { font-size: 1.25rem; } .film-lane span { color: var(--text-secondary); line-height: 1.5; } .film-lane i { font-style: normal; font-weight: 700; color: var(--primary-color-2); } /* --------------------------------------------------------------- TOOLKIT ORBS */ .film-orbits { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; width: 100%; max-width: 980px; margin-top: 0.5rem; } .film-orb { display: grid; justify-items: center; gap: 0.5rem; padding: 1.7rem 1rem; text-align: center; text-decoration: none; color: var(--text-primary); border-radius: var(--border-radius-lg); background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(14,18,32,0.55)); border: 1px solid var(--border-color); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); transition: transform 0.3s cubic-bezier(.2,.8,.2,1), border-color 0.3s ease, box-shadow 0.3s ease; } .film-orb span { font-size: 2rem; } .film-orb b { font-size: 1.1rem; } .film-orb i { font-style: normal; font-size: 0.85rem; color: var(--text-secondary); line-height: 1.45; } .film-orb:hover { transform: translateY(-6px); border-color: rgba(124,92,255,0.6); box-shadow: 0 34px 64px -36px rgba(124,92,255,0.5), var(--glow-primary); } /* --------------------------------------------------------------- PILLARS */ .film-pillars { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.1rem; width: 100%; max-width: 1000px; margin-top: 0.4rem; text-align: left; } .film-pillar { display: grid; gap: 0.5rem; padding: 1.6rem; border-radius: var(--border-radius-lg); background: linear-gradient(180deg, rgba(255,255,255,0.045), rgba(14,18,32,0.55)); border: 1px solid var(--border-color); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); } .film-pillar span { font-size: 1.8rem; } .film-pillar b { font-size: 1.15rem; } .film-pillar p { color: var(--text-secondary); line-height: 1.55; margin: 0; } /* --------------------------------------------------------------- EMISSION */ .film-emission { display: grid; grid-template-columns: 1.3fr 1fr; gap: clamp(1.2rem, 3vw, 2.4rem); align-items: center; width: 100%; margin-top: 0.4rem; } .film-emission .cine-chart { box-shadow: 0 30px 70px -38px rgba(0,0,0,0.95), 0 0 0 1px rgba(124,92,255,0.08); } .film-emission-stats { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.75rem; } .film-estat { padding: 0.95rem 1rem; border-radius: 0.9rem; background: rgba(14, 18, 32, 0.55); border: 1px solid var(--border-color); text-align: left; } .film-estat .v { font-family: var(--font-mono); font-weight: 800; font-size: 1.1rem; background: var(--gradient-primary); -webkit-background-clip: text; background-clip: text; color: transparent; } .film-estat .k { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-secondary); margin-top: 0.15rem; } /* --------------------------------------------------------------- ROADMAP */ .film-timeline { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; width: 100%; max-width: 1040px; margin-top: 0.5rem; text-align: left; } .film-phase { position: relative; padding: 1.4rem 1.2rem; border-radius: var(--border-radius-lg); background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(14,18,32,0.55)); border: 1px solid var(--border-color); display: grid; gap: 0.4rem; } .film-phase b { font-size: 0.95rem; } .film-phase i { font-style: normal; font-size: 0.9rem; color: var(--text-secondary); line-height: 1.45; } .film-phase-dot { width: 12px; height: 12px; border-radius: 50%; background: var(--text-secondary); box-shadow: 0 0 0 4px rgba(255,255,255,0.05); } .film-phase.is-done .film-phase-dot { background: var(--success-color); box-shadow: 0 0 14px rgba(34,229,168,0.7); } .film-phase.is-now .film-phase-dot { background: var(--primary-color); box-shadow: 0 0 14px rgba(124,92,255,0.8); } /* --------------------------------------------------------------- RESPONSIVE */ @media (max-width: 900px) { .film-emission { grid-template-columns: 1fr; } .film-orbits { grid-template-columns: repeat(2, 1fr); } .film-timeline { grid-template-columns: repeat(2, 1fr); } .film-pillars { grid-template-columns: 1fr; max-width: 560px; } .film-lanes { grid-template-columns: 1fr; max-width: 480px; } } @media (max-width: 620px) { .film-stats { grid-template-columns: repeat(2, 1fr); } .is-film .chapter { padding-left: 1rem; padding-right: 1rem; } .film-h1 { text-shadow: 0 0 50px rgba(124,92,255,0.3); } } /* --------------------------------------------------------------- MOTION SAFETY In fallback flow, give chapters gentle breathing room and hide the moon's duplicate haze so the stack reads cleanly. */ @media (prefers-reduced-motion: reduce) { .film.is-film { height: auto; } .is-film .film-stage { position: relative; height: auto; overflow: visible; } .is-film .film-cosmos { position: relative; } .is-film .film-chapters { position: relative; } .is-film .chapter { position: relative; opacity: 1 !important; transform: none !important; pointer-events: auto; } .is-film .film-stage::after { display: none; } .is-film .cine-starfield { position: absolute; } }