← Retour galerie
Hero · html-css · intermediate
Cyber Grid
Hero full viewport avec grille en perspective + particles
Aperçu live
Code
:root {
--ink: #040506;
--acid: #b8ff2e;
--muted: rgba(255, 255, 255, 0.55);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
min-height: 100vh;
background: var(--ink);
font-family: "Segoe UI", system-ui, sans-serif;
color: #fff;
overflow-x: hidden;
}
.hero {
position: relative;
min-height: 100vh;
display: grid;
place-items: center;
padding: 4rem 1.5rem;
text-align: center;
isolation: isolate;
}
.grid {
position: absolute;
inset: 0;
z-index: -2;
background-image:
linear-gradient(rgba(184, 255, 46, 0.07) 1px, transparent 1px),
linear-gradient(90deg, rgba(184, 255, 46, 0.07) 1px, transparent 1px);
background-size: 56px 56px;
transform: perspective(600px) rotateX(58deg) translateY(-18%) scale(1.6);
transform-origin: center top;
mask-image: linear-gradient(to bottom, #000 10%, transparent 75%);
animation: gridDrift 18s linear infinite;
}
@keyframes gridDrift {
from { background-position: 0 0; }
to { background-position: 0 56px; }
}
.glow {
position: absolute;
width: 520px;
height: 520px;
border-radius: 50%;
background: radial-gradient(circle, rgba(184, 255, 46, 0.22), transparent 65%);
top: 35%;
left: 50%;
transform: translate(-50%, -50%);
z-index: -1;
filter: blur(10px);
animation: breath 5s ease-in-out infinite;
}
@keyframes breath {
0%, 100% { opacity: 0.7; transform: translate(-50%, -50%) scale(1); }
50% { opacity: 1; transform: translate(-50%, -50%) scale(1.12); }
}
.badge {
display: inline-flex;
align-items: center;
gap: 0.45rem;
padding: 0.4rem 0.9rem;
border-radius: 999px;
border: 1px solid rgba(184, 255, 46, 0.35);
background: rgba(184, 255, 46, 0.08);
color: var(--acid);
font-size: 0.72rem;
font-weight: 800;
letter-spacing: 0.14em;
text-transform: uppercase;
margin-bottom: 1.5rem;
animation: fadeUp 0.8s ease both;
}
.badge::before {
content: "";
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--acid);
box-shadow: 0 0 10px var(--acid);
animation: blink 1.6s ease-in-out infinite;
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0.35; }
}
h1 {
font-size: clamp(2.4rem, 8vw, 5rem);
font-weight: 950;
letter-spacing: -0.05em;
line-height: 0.98;
max-width: 14ch;
margin: 0 auto 1.25rem;
animation: fadeUp 0.9s 0.08s ease both;
}
h1 em {
font-style: normal;
background: linear-gradient(90deg, #fff 20%, var(--acid) 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
text-shadow: 0 0 60px rgba(184, 255, 46, 0.25);
}
.lead {
color: var(--muted);
font-size: clamp(1rem, 2.2vw, 1.2rem);
max-width: 36ch;
margin: 0 auto 2rem;
line-height: 1.65;
animation: fadeUp 0.9s 0.16s ease both;
}
.ctas {
display: flex;
flex-wrap: wrap;
gap: 0.85rem;
justify-content: center;
animation: fadeUp 0.9s 0.24s ease both;
}
.ctas a {
text-decoration: none;
padding: 0.95rem 1.6rem;
border-radius: 999px;
font-weight: 800;
font-size: 0.95rem;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.ctas a:hover { transform: translateY(-2px); }
.primary {
background: var(--acid);
color: #06100a;
box-shadow: 0 0 40px rgba(184, 255, 46, 0.35);
}
.secondary {
border: 1px solid rgba(255, 255, 255, 0.15);
color: #fff;
background: rgba(255, 255, 255, 0.04);
}
@keyframes fadeUp {
from { opacity: 0; transform: translateY(18px); }
to { opacity: 1; transform: none; }
}
.particles span {
position: absolute;
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--acid);
opacity: 0.4;
z-index: -1;
animation: float var(--d, 6s) ease-in-out infinite;
}
@keyframes float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-24px); }
}
Envie de tweak les tokens ? Code Studio
