Files
3d-homepage-zozomu/styles.css
2026-02-20 21:06:19 +00:00

463 lines
12 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
═══════════════════════════════════════════════════════════════════
LUMEREL — 3D Hero Page
Font : General Sans (Fontshare)
Theme : Pure black · Web3 · Spline-ready
═══════════════════════════════════════════════════════════════════
*/
/* ── Reset & Base ──────────────────────────────────────────────────── */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html, body {
width: 100%;
height: 100%;
background: #000000;
color: #ffffff;
font-family: 'General Sans', system-ui, -apple-system, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow-x: hidden;
}
a {
text-decoration: none;
color: inherit;
}
ul {
list-style: none;
}
button {
cursor: pointer;
border: none;
background: none;
font-family: inherit;
}
/*
═══════════════════════════════════════════════════════════════════
HERO SECTION
Full-screen · layers: video → 3D → navbar → content
═══════════════════════════════════════════════════════════════════
*/
.hero {
position: relative;
width: 100%;
min-height: 100dvh;
background: #000000;
overflow: hidden;
}
/* ── Layer 0 · Background Video ────────────────────────────────────── */
.hero__video-wrap {
position: absolute;
inset: 0;
z-index: 0;
}
.hero__video {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Exactly 50% black overlay */
.hero__overlay {
position: absolute;
inset: 0;
background: rgba(0, 0, 0, 0.50);
}
/* ── Layer 1 · 3D / Spline ──────────────────────────────────────────
Above video (z-index: 1), below all UI (z-index: 2+).
pointer-events: none keeps buttons & links fully clickable.
Call window.Lumerel.enableSpline() for interactive scenes.
──────────────────────────────────────────────────────────────────── */
.hero__3d-layer {
position: absolute;
inset: 0;
z-index: 1;
pointer-events: none;
}
/* Spline viewer fills the full layer */
.hero__3d-layer spline-viewer {
width: 100%;
height: 100%;
display: block;
}
/* ── 3D Placeholder Orbs ──────────────────────────────────────────────
Animated ambient orbs simulate depth until Spline assets arrive.
Delete .spline-placeholder when adding <spline-viewer>.
──────────────────────────────────────────────────────────────────── */
.spline-placeholder {
position: relative;
width: 100%;
height: 100%;
}
.orb {
position: absolute;
border-radius: 50%;
filter: blur(80px);
opacity: 0.18;
}
.orb--violet {
width: 520px;
height: 520px;
background: radial-gradient(circle, #7c3aed 0%, #4f46e5 55%, transparent 100%);
top: 8%;
right: 5%;
animation: orbDrift 11s ease-in-out infinite;
}
.orb--cyan {
width: 360px;
height: 360px;
background: radial-gradient(circle, #06b6d4 0%, #3b82f6 55%, transparent 100%);
bottom: 14%;
left: 4%;
animation: orbDrift 13s ease-in-out infinite reverse;
animation-delay: -5s;
}
.orb--pink {
width: 260px;
height: 260px;
background: radial-gradient(circle, #f0abfc 0%, #a78bfa 55%, transparent 100%);
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
animation: orbDriftCenter 9s ease-in-out infinite;
animation-delay: -3s;
}
@keyframes orbDrift {
0%, 100% { transform: translate(0, 0) scale(1); }
33% { transform: translate(-20px, -30px) scale(1.06); }
66% { transform: translate(16px, 22px) scale(0.95); }
}
@keyframes orbDriftCenter {
0%, 100% { transform: translate(-50%, -50%) scale(1); }
40% { transform: translate(-50%, -60%) scale(1.08); }
75% { transform: translate(-50%, -44%) scale(0.94); }
}
/* Placeholder label */
.spline-placeholder__label {
position: absolute;
bottom: 32px;
left: 50%;
transform: translateX(-50%);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.10em;
text-transform: uppercase;
color: rgba(255, 255, 255, 0.20);
white-space: nowrap;
border: 1px solid rgba(255, 255, 255, 0.08);
padding: 6px 14px;
border-radius: 100px;
pointer-events: none;
}
/*
═══════════════════════════════════════════════════════════════════
NAVBAR
Layer 2 · Fixed to top · 120px h-padding · 20px v-padding
═══════════════════════════════════════════════════════════════════
*/
.navbar {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 10;
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 120px;
background: transparent;
transition: background 0.3s ease, backdrop-filter 0.3s ease;
}
.navbar__left {
display: flex;
align-items: center;
gap: 40px;
}
/* Logo: exactly 187×25px */
.navbar__logo {
display: flex;
align-items: center;
flex-shrink: 0;
width: 187px;
height: 25px;
}
.navbar__logo svg {
width: 187px;
height: 25px;
}
/* Nav links list — hidden on mobile */
.navbar__links {
display: flex;
align-items: center;
gap: 30px;
}
/* Each nav link */
.navbar__link {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 14px;
font-weight: 500;
color: #ffffff;
white-space: nowrap;
transition: opacity 0.2s ease;
}
.navbar__link:hover {
opacity: 0.75;
}
.navbar__chevron {
flex-shrink: 0;
width: 14px;
height: 14px;
}
.navbar__right {
display: flex;
align-items: center;
}
/*
═══════════════════════════════════════════════════════════════════
PILL BUTTON — Layered Construction
─────────────────────────────────────────────────────────────────
Structure:
.pill-btn → outer container with 0.6px white box-shadow ring
.pill-btn__glow → blurred white gradient streak at top edge
.pill-btn__label → the text label
Variants:
--dark → black background, white text (navbar)
--light → white background, black text (hero CTA)
═══════════════════════════════════════════════════════════════════
*/
.pill-btn {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 100px;
padding: 11px 29px;
font-family: 'General Sans', system-ui, sans-serif;
font-size: 14px;
font-weight: 500;
line-height: 1;
overflow: hidden;
cursor: pointer;
transition: opacity 0.2s ease, transform 0.15s ease;
/* 0.6px white outer border via box-shadow */
box-shadow: 0 0 0 0.6px rgba(255, 255, 255, 1);
}
.pill-btn:hover {
opacity: 0.88;
transform: translateY(-1px);
}
.pill-btn:active {
transform: translateY(0);
opacity: 1;
}
/* Dark variant: black bg, white text — used in navbar */
.pill-btn--dark {
background: #000000;
color: #ffffff;
}
/* Light variant: white bg, black text — used in hero CTA */
.pill-btn--light {
background: #ffffff;
color: #000000;
}
/* Glow streak — blurred white radial gradient along the top edge */
.pill-btn__glow {
position: absolute;
top: -4px;
left: 50%;
transform: translateX(-50%);
width: 60%;
height: 14px;
background: radial-gradient(ellipse at center top, rgba(255, 255, 255, 0.70) 0%, rgba(255, 255, 255, 0) 80%);
filter: blur(4px);
border-radius: 100px;
pointer-events: none;
z-index: 1;
}
/* Label sits above the glow */
.pill-btn__label {
position: relative;
z-index: 2;
}
/*
═══════════════════════════════════════════════════════════════════
HERO CONTENT
Layer 3 · Centered · 280px top padding desktop / 200px mobile
═══════════════════════════════════════════════════════════════════
*/
.hero__content {
position: relative;
z-index: 3;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding-top: 280px;
padding-bottom: 102px;
padding-left: 24px;
padding-right: 24px;
gap: 40px;
}
/* ── Badge / Pill ───────────────────────────────────────────────────── */
.hero__badge {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 14px;
border-radius: 20px;
background: rgba(255, 255, 255, 0.10);
border: 1px solid rgba(255, 255, 255, 0.20);
font-size: 13px;
font-weight: 500;
line-height: 1;
}
/* 4px white dot */
.hero__badge-dot {
display: inline-block;
width: 4px;
height: 4px;
border-radius: 50%;
background: #ffffff;
flex-shrink: 0;
}
.hero__badge-text {
display: inline;
}
/* "Early access available from" — 60% opacity */
.hero__badge-muted {
color: rgba(255, 255, 255, 0.60);
}
/* " May 1, 2026" — solid white */
.hero__badge-date {
color: #ffffff;
}
/* ── Heading ────────────────────────────────────────────────────────── */
.hero__heading {
max-width: 613px;
font-size: 56px;
font-weight: 500;
line-height: 1.28;
letter-spacing: -0.01em;
/*
Gradient text effect:
linear-gradient at 144.5deg
white (solid) at 28% → transparent black at 115%
*/
background: linear-gradient(144.5deg, #ffffff 28%, rgba(0, 0, 0, 0) 115%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* ── Subtitle ───────────────────────────────────────────────────────── */
.hero__subtitle {
max-width: 680px;
font-size: 15px;
font-weight: 400;
line-height: 1.65;
color: rgba(255, 255, 255, 0.70);
/* 24px gap between heading and subtitle (40px gap - 16px visual correction) */
margin-top: -16px;
}
/*
═══════════════════════════════════════════════════════════════════
RESPONSIVE
═══════════════════════════════════════════════════════════════════
*/
/* Tablet — ≤1024px */
@media (max-width: 1024px) {
.navbar {
padding: 20px 48px;
}
}
/* Mobile — ≤767px */
@media (max-width: 767px) {
/* Navbar */
.navbar {
padding: 20px 24px;
}
/* Hide nav links entirely on mobile */
.navbar__links {
display: none;
}
/* Hero content */
.hero__content {
padding-top: 200px;
gap: 32px;
}
/* Heading scales down to 36px */
.hero__heading {
font-size: 36px;
}
/* Subtitle */
.hero__subtitle {
font-size: 14px;
margin-top: -8px;
}
}
/* Very small screens */
@media (max-width: 380px) {
.navbar {
padding: 18px 20px;
}
.hero__heading {
font-size: 30px;
}
}