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

460 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
z-index: 10 · fixed to top · 120px H padding · 20px V padding
═══════════════════════════════════════════════════════════════════
*/
.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 bounding box */
.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 — 14px, font-medium, white */
.navbar__link {
display: flex;
align-items: center;
gap: 6px; /* gap between label and chevron */
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 ring : box-shadow 0 0 0 0.6px white
Inner pill : background (black or white)
Glow streak: radial-gradient ellipse at top, blur(4px)
Padding : 11px top/bottom · 29px left/right
Text : 14px · font-medium
═══════════════════════════════════════════════════════════════════
*/
.pill-btn {
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;
overflow: hidden;
transition: opacity 0.2s ease, transform 0.15s ease;
}
.pill-btn:hover {
opacity: 0.88;
transform: translateY(-1px);
}
.pill-btn:active {
transform: translateY(0);
}
/* Dark variant — navbar button (black bg, white text, white outer ring) */
.pill-btn--dark {
background: #000000;
color: #ffffff;
box-shadow: 0 0 0 0.6px rgba(255, 255, 255, 1);
}
/* Light variant — hero CTA button (white bg, black text, white outer ring) */
.pill-btn--light {
background: #ffffff;
color: #000000;
box-shadow: 0 0 0 0.6px rgba(255, 255, 255, 1);
}
/* Glow streak — blurred white radial gradient at the top edge */
.pill-btn__glow {
position: absolute;
top: -6px;
left: 50%;
transform: translateX(-50%);
width: 70%;
height: 18px;
background: radial-gradient(
ellipse 60% 100% at 50% 0%,
rgba(255, 255, 255, 0.55) 0%,
rgba(255, 255, 255, 0.0) 100%
);
filter: blur(4px);
pointer-events: none;
z-index: 1;
}
/* Label sits above the glow */
.pill-btn__label {
position: relative;
z-index: 2;
}
/*
═══════════════════════════════════════════════════════════════════
HERO CONTENT
z-index: 3 · centered · 280px top padding desktop / 200px mobile
102px bottom padding · flex column · 40px gap
═══════════════════════════════════════════════════════════════════
*/
.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;
white-space: nowrap;
}
/* "Early access available from" — 60% opacity */
.hero__badge-dim {
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 fill: 144.5deg · white 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;
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);
margin-top: -16px; /* net 24px gap from heading (40px gap - 16px) */
}
/*
═══════════════════════════════════════════════════════════════════
RESPONSIVE
═══════════════════════════════════════════════════════════════════
*/
/* Tablet — hide nav links, reduce padding */
@media (max-width: 1024px) {
.navbar {
padding: 20px 48px;
}
}
/* Mobile — hide nav links, reduce padding further, scale heading */
@media (max-width: 767px) {
.navbar {
padding: 20px 24px;
}
.navbar__links {
display: none;
}
.navbar__left {
gap: 0;
}
.hero__content {
padding-top: 200px;
gap: 32px;
}
.hero__heading {
font-size: 36px;
}
.hero__badge-text {
white-space: normal;
text-align: center;
}
}
/* Very small screens */
@media (max-width: 380px) {
.navbar {
padding: 20px 16px;
}
.hero__heading {
font-size: 30px;
}
}