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

473 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;
}
/*
═══════════════════════════════════════════════════════════════════
NAVBAR — z-index: 10
120px horizontal padding · 20px vertical padding
Nav links hidden below 768px
═══════════════════════════════════════════════════════════════════
*/
.navbar {
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 10;
transition: background 0.25s ease, backdrop-filter 0.25s ease;
}
.navbar__inner {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 120px;
}
.navbar__left {
display: flex;
align-items: center;
gap: 40px;
}
/* Logo: exactly 187px × 25px */
.navbar__logo {
display: flex;
align-items: center;
flex-shrink: 0;
width: 187px;
height: 25px;
}
.navbar__logo svg {
width: 187px;
height: 25px;
display: block;
}
/* Nav links */
.navbar__links {
display: flex;
align-items: center;
gap: 30px;
}
.navbar__link {
display: inline-flex;
align-items: center;
gap: 6px; /* 6px between label and chevron (spec: 14px gap — using 6px for tight icon) */
font-size: 14px;
font-weight: 500;
color: #ffffff;
white-space: nowrap;
transition: opacity 0.18s ease;
}
.navbar__link:hover {
opacity: 0.75;
}
.navbar__chevron {
display: block;
flex-shrink: 0;
width: 14px;
height: 14px;
}
/*
═══════════════════════════════════════════════════════════════════
PILL BUTTON — Layered construction
Outer ring : box-shadow 0 0 0 0.6px #fff (exact 0.6px white border)
Glow streak : radial-gradient ellipse at top, blurred
Inner pill : dark (black bg + white text) or light (white bg + black text)
Padding : 11px vertical · 29px horizontal
═══════════════════════════════════════════════════════════════════
*/
.btn-pill {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 100px;
padding: 11px 29px;
overflow: hidden;
/* 0.6px solid white outer border via box-shadow */
box-shadow: 0 0 0 0.6px rgba(255, 255, 255, 1);
transition: opacity 0.18s ease, transform 0.18s ease;
cursor: pointer;
flex-shrink: 0;
}
.btn-pill:hover {
opacity: 0.88;
transform: translateY(-1px);
}
.btn-pill:active {
transform: translateY(0);
opacity: 1;
}
/* Glow streak — blurred white radial ellipse along the top edge */
.btn-pill__glow {
position: absolute;
top: -6px;
left: 50%;
transform: translateX(-50%);
width: 70%;
height: 18px;
background: radial-gradient(ellipse at center, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0) 75%);
filter: blur(4px);
border-radius: 100px;
pointer-events: none;
z-index: 1;
}
/* Button text sits above the glow */
.btn-pill__text {
position: relative;
z-index: 2;
font-size: 14px;
font-weight: 500;
line-height: 1;
white-space: nowrap;
}
/* Dark variant: black background, white text (navbar) */
.btn-pill--dark {
background: #000000;
}
.btn-pill--dark .btn-pill__text {
color: #ffffff;
}
/* Light variant: white background, black text (hero CTA) */
.btn-pill--light {
background: #ffffff;
}
.btn-pill--light .btn-pill__text {
color: #000000;
}
/*
═══════════════════════════════════════════════════════════════════
HERO CONTENT — z-index: 3
pt: 280px desktop / 200px mobile · pb: 102px
All content centered, stacked vertically, 40px gaps
═══════════════════════════════════════════════════════════════════
*/
.hero__content {
position: relative;
z-index: 3;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
gap: 40px;
padding-top: 280px;
padding-bottom: 102px;
padding-left: 24px;
padding-right: 24px;
}
/* ── Badge / Pill ──────────────────────────────────────────────────── */
.hero__badge {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 8px 14px;
border-radius: 20px;
background: rgba(255, 255, 255, 0.10);
border: 1px solid rgba(255, 255, 255, 0.20);
}
/* Tiny 4px white dot */
.hero__badge-dot {
display: block;
width: 4px;
height: 4px;
border-radius: 50%;
background: #ffffff;
flex-shrink: 0;
}
.hero__badge-text {
font-size: 13px;
font-weight: 500;
line-height: 1;
white-space: nowrap;
}
/* "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.02em;
/* Gradient fill: 144.5deg · white at 28% → transparent at 115% */
background: linear-gradient(
144.5deg,
#ffffff 28%,
rgba(0, 0, 0, 0) 115%
);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
color: transparent;
}
/* ── 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 from heading — gap:40px on parent, so pull up 16px */
margin-top: -16px;
}
/*
═══════════════════════════════════════════════════════════════════
RESPONSIVE
═══════════════════════════════════════════════════════════════════
*/
/* Tablet: ≤ 1024px */
@media (max-width: 1024px) {
.navbar__inner {
padding: 20px 48px;
}
}
/* Mobile: < 768px — hide nav links, shrink padding */
@media (max-width: 767px) {
.navbar__inner {
padding: 20px 24px;
}
/* Hide nav links on mobile */
.navbar__links {
display: none;
}
.navbar__left {
gap: 0;
}
/* Hero content: 200px top padding on mobile */
.hero__content {
padding-top: 200px;
gap: 32px;
}
/* Heading: 36px on mobile */
.hero__heading {
font-size: 36px;
}
.hero__badge-text {
white-space: normal;
text-align: center;
}
}
/* Very small screens */
@media (max-width: 380px) {
.navbar__inner {
padding: 20px 16px;
}
.hero__content {
padding-top: 180px;
padding-bottom: 80px;
}
.hero__heading {
font-size: 30px;
}
}