Files
3d-homepage-zozomu/styles.css
2026-02-20 20:53:39 +00:00

461 lines
13 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;
}
/* 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 18px;
border-radius: 100px;
pointer-events: none;
}
/* ═══════════════════════════════════════════════════════════════════════
NAVBAR
z-index: 10 · 120px H padding · 20px V padding
═══════════════════════════════════════════════════════════════════════ */
.navbar {
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 10;
transition: background 0.3s ease, backdrop-filter 0.3s ease;
}
.navbar__inner {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 120px;
}
/* Left cluster: logo + nav links */
.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;
display: block;
}
/* Nav links list — 30px gap between items */
.navbar__links {
display: flex;
align-items: center;
gap: 30px;
}
/* Individual nav link */
.navbar__link {
display: inline-flex;
align-items: center;
gap: 6px; /* 6px between label and chevron (visually ~14px from text edge) */
font-size: 14px;
font-weight: 500;
color: #ffffff;
white-space: nowrap;
transition: opacity 0.2s ease;
}
.navbar__link:hover {
opacity: 0.75;
}
.navbar__chevron {
width: 14px;
height: 14px;
flex-shrink: 0;
display: block;
}
/* ═══════════════════════════════════════════════════════════════════════
PILL BUTTONS
Layered construction:
· Outer ring — box-shadow: 0 0 0 0.6px #fff
· Glow streak — radial-gradient blob at top edge, blurred
· Inner label — 14px / font-weight:500 · 29px H · 11px V padding
═══════════════════════════════════════════════════════════════════════ */
.btn-pill {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 100px;
overflow: hidden;
/* 0.6px white outer border via box-shadow */
box-shadow: 0 0 0 0.6px rgba(255, 255, 255, 1);
cursor: pointer;
transition: opacity 0.2s ease, transform 0.15s ease;
flex-shrink: 0;
}
.btn-pill:hover {
opacity: 0.88;
transform: translateY(-1px);
}
.btn-pill:active {
transform: translateY(0);
opacity: 1;
}
/* Top glow streak — white radial blob, blurred, anchored at top */
.btn-pill__glow {
position: absolute;
top: -6px;
left: 50%;
transform: translateX(-50%);
width: 70%;
height: 14px;
background: radial-gradient(ellipse at center, rgba(255, 255, 255, 0.55) 0%, rgba(255, 255, 255, 0) 75%);
filter: blur(4px);
pointer-events: none;
z-index: 1;
}
/* Label sits above the glow */
.btn-pill__label {
position: relative;
z-index: 2;
font-size: 14px;
font-weight: 500;
padding: 11px 29px;
border-radius: 100px;
white-space: nowrap;
line-height: 1;
}
/* ── Dark variant (navbar) — black bg, white text ─────────────────── */
.btn-pill--dark {
background: #000000;
}
.btn-pill--dark .btn-pill__label {
color: #ffffff;
background: #000000;
}
/* ── Light variant (hero CTA) — white bg, black text ─────────────── */
.btn-pill--light {
background: #ffffff;
}
.btn-pill--light .btn-pill__label {
color: #000000;
background: #ffffff;
}
.btn-pill--light .btn-pill__glow {
background: radial-gradient(ellipse at center, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0) 75%);
}
/* ═══════════════════════════════════════════════════════════════════════
HERO CONTENT
z-index: 3 · centered · 280px top / 102px bottom padding
All children stacked vertically with 40px gap
═══════════════════════════════════════════════════════════════════════ */
.hero__content {
position: relative;
z-index: 3;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
gap: 40px;
padding: 280px 24px 102px;
}
/* ── Badge / pill ────────────────────────────────────────────────────── */
.hero__badge {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 7px 14px;
border-radius: 20px;
background: rgba(255, 255, 255, 0.10);
border: 1px solid rgba(255, 255, 255, 0.20);
}
/* 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;
}
/* "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: 144.5deg, solid 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);
/* Pull closer to heading: gap is 40px from flex, subtract 16px = ~24px visual */
margin-top: -16px;
}
/* ═══════════════════════════════════════════════════════════════════════
RESPONSIVE
═══════════════════════════════════════════════════════════════════════ */
/* Tablet — ≤ 1024px */
@media (max-width: 1024px) {
.navbar__inner {
padding: 20px 48px;
}
}
/* Mobile — < 768px (md breakpoint) */
@media (max-width: 767px) {
/* Collapse nav links */
.navbar__links {
display: none;
}
.navbar__inner {
padding: 20px 24px;
}
.navbar__left {
gap: 0;
}
/* Hero content: 200px top on mobile */
.hero__content {
padding-top: 200px;
gap: 32px;
}
/* Heading: 36px on mobile */
.hero__heading {
font-size: 36px;
}
/* Subtitle gap adjustment */
.hero__subtitle {
margin-top: -10px;
}
}
/* Small mobile — ≤ 480px */
@media (max-width: 480px) {
.hero__heading {
font-size: 32px;
}
.hero__content {
padding-top: 180px;
padding-bottom: 80px;
}
}