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

456 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;
}
/* 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 · position: absolute at top of hero
Padding: 20px 120px desktop → 20px 48px tablet → 20px 24px mobile
═══════════════════════════════════════════════════════════════════ */
.navbar {
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 10;
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 120px;
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: 30px gap between items */
.navbar__links {
display: flex;
align-items: center;
gap: 30px;
}
/* Each nav link: white, 14px, font-medium */
.navbar__link {
display: flex;
align-items: center;
gap: 6px; /* 6px gap between label and chevron (visually ~14px total with icon) */
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
─────────────────────────────────────────────────────────────────
Outer shell : box-shadow 0 0 0 0.6px #fff (the thin white ring)
Inner body : border-radius 100px pill
Glow streak : radial-gradient ellipse at top, blurred
Padding : 11px 29px
Font : 14px / font-weight 500
─────────────────────────────────────────────────────────────────
Dark variant (navbar) : background #000, text #fff
Light variant (CTA) : background #fff, text #000
═══════════════════════════════════════════════════════════════════ */
.btn-pill {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 11px 29px;
border-radius: 100px;
font-size: 14px;
font-weight: 500;
font-family: 'General Sans', system-ui, -apple-system, sans-serif;
line-height: 1;
overflow: hidden;
cursor: pointer;
transition: opacity 0.2s ease, transform 0.15s ease;
/* 0.6px white outer ring via box-shadow */
box-shadow: 0 0 0 0.6px rgba(255, 255, 255, 1);
}
.btn-pill:hover {
opacity: 0.88;
transform: translateY(-1px);
}
.btn-pill:active {
transform: translateY(0);
}
/* Glow streak — blurred white 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.65) 0%, rgba(255,255,255,0) 75%);
filter: blur(4px);
pointer-events: none;
border-radius: 50%;
}
/* Label sits above the glow */
.btn-pill__label {
position: relative;
z-index: 1;
}
/* Dark variant: black background, white text */
.btn-pill--dark {
background: #000000;
color: #ffffff;
}
/* Light variant: white background, black text */
.btn-pill--light {
background: #ffffff;
color: #000000;
}
/* ═══════════════════════════════════════════════════════════════════
HERO CONTENT
z-index: 3 · centered column
Top padding: 280px desktop / 200px mobile
Bottom padding: 102px
Gap between items: 40px
═══════════════════════════════════════════════════════════════════ */
.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: 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:
linear-gradient(144.5deg, #fff 28%, rgba(0,0,0,0) 115%)
Applied as background-clip: text so the gradient shows through the letterforms.
*/
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;
/* Fallback for browsers that don't support background-clip: text */
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 visual gap from heading — offset the 40px stack gap */
margin-top: -16px;
}
/* ═══════════════════════════════════════════════════════════════════
RESPONSIVE
═══════════════════════════════════════════════════════════════════ */
/* Tablet: 768px 1199px */
@media (max-width: 1199px) {
.navbar {
padding: 20px 48px;
}
}
/* Mobile: < 768px */
@media (max-width: 767px) {
/* Navbar */
.navbar {
padding: 20px 24px;
}
/* Hide nav links on mobile */
.navbar__links {
display: none;
}
.navbar__left {
gap: 0;
}
/* Hero content */
.hero__content {
padding-top: 200px;
gap: 40px;
}
/* Heading scales down */
.hero__heading {
font-size: 36px;
}
}
/* Extra-small: < 480px */
@media (max-width: 479px) {
.hero__heading {
font-size: 32px;
}
.hero__subtitle {
font-size: 14px;
}
.btn-pill {
padding: 11px 24px;
}
}