← Retour galerie
Cards · html-css · intermediate
Holographique
Carte produit bot en 3D tilt + reflet holographique
Aperçu live
Code
:root {
--ink: #060708;
--acid: #b8ff2e;
--card: #0e1014;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
min-height: 100vh;
display: grid;
place-items: center;
background: var(--ink);
font-family: "Segoe UI", system-ui, sans-serif;
color: #fff;
padding: 2rem;
perspective: 1200px;
}
.card {
--rx: 0deg;
--ry: 0deg;
--mx: 50%;
--my: 50%;
width: min(100%, 340px);
border-radius: 22px;
background: var(--card);
border: 1px solid rgba(255, 255, 255, 0.08);
padding: 1.25rem;
position: relative;
transform: rotateX(var(--rx)) rotateY(var(--ry));
transition: transform 0.15s ease-out;
transform-style: preserve-3d;
box-shadow:
0 30px 60px rgba(0, 0, 0, 0.55),
0 0 0 1px rgba(184, 255, 46, 0.06);
overflow: hidden;
cursor: pointer;
}
.card::before {
content: "";
position: absolute;
inset: 0;
background:
radial-gradient(circle at var(--mx) var(--my), rgba(184, 255, 46, 0.22), transparent 40%),
linear-gradient(115deg, transparent 30%, rgba(255, 255, 255, 0.08) 45%, transparent 60%);
opacity: 0.85;
pointer-events: none;
mix-blend-mode: screen;
z-index: 2;
}
.card::after {
content: "";
position: absolute;
inset: -1px;
border-radius: inherit;
background: linear-gradient(135deg, rgba(184, 255, 46, 0.5), transparent 40%, rgba(100, 180, 255, 0.35));
opacity: 0.35;
z-index: 0;
pointer-events: none;
mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
padding: 1px;
-webkit-mask-composite: xor;
mask-composite: exclude;
}
.preview {
position: relative;
z-index: 1;
height: 160px;
border-radius: 14px;
background:
linear-gradient(160deg, #141820 0%, #0a0c10 100%);
border: 1px solid rgba(255, 255, 255, 0.06);
display: grid;
place-items: center;
overflow: hidden;
margin-bottom: 1.1rem;
transform: translateZ(30px);
}
.preview .orb {
width: 72px;
height: 72px;
border-radius: 50%;
background: radial-gradient(circle at 35% 30%, #e8ff9a, var(--acid) 45%, #3d6b00);
box-shadow:
0 0 40px rgba(184, 255, 46, 0.55),
inset 0 -8px 20px rgba(0, 0, 0, 0.35);
animation: pulse 2.8s ease-in-out infinite;
}
.preview .scan {
position: absolute;
inset: 0;
background: repeating-linear-gradient(
0deg,
transparent,
transparent 3px,
rgba(184, 255, 46, 0.03) 3px,
rgba(184, 255, 46, 0.03) 4px
);
pointer-events: none;
}
@keyframes pulse {
0%, 100% { transform: scale(1); filter: brightness(1); }
50% { transform: scale(1.06); filter: brightness(1.15); }
}
.meta {
position: relative;
z-index: 1;
transform: translateZ(40px);
}
.badge {
display: inline-flex;
align-items: center;
gap: 0.35rem;
padding: 0.28rem 0.65rem;
border-radius: 999px;
background: rgba(88, 101, 242, 0.18);
color: #aab0ff;
font-size: 0.68rem;
font-weight: 800;
letter-spacing: 0.08em;
text-transform: uppercase;
border: 1px solid rgba(88, 101, 242, 0.35);
margin-bottom: 0.7rem;
}
.badge::before {
content: "";
width: 6px;
height: 6px;
border-radius: 50%;
background: #5865f2;
box-shadow: 0 0 8px #5865f2;
}
h2 {
font-size: 1.35rem;
font-weight: 850;
letter-spacing: -0.02em;
margin-bottom: 0.4rem;
}
p {
color: rgba(255, 255, 255, 0.5);
font-size: 0.9rem;
line-height: 1.55;
margin-bottom: 1.15rem;
}
.row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
}
.price {
font-size: 1.6rem;
font-weight: 900;
color: var(--acid);
text-shadow: 0 0 24px rgba(184, 255, 46, 0.35);
}
.price small {
font-size: 0.75rem;
font-weight: 600;
color: rgba(255, 255, 255, 0.4);
margin-left: 0.15rem;
}
.btn {
padding: 0.65rem 1.2rem;
border: none;
border-radius: 999px;
background: var(--acid);
color: #06100a;
font-weight: 800;
font-size: 0.88rem;
cursor: pointer;
box-shadow: 0 0 24px rgba(184, 255, 46, 0.3);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.btn:hover {
transform: translateY(-2px);
box-shadow: 0 0 36px rgba(184, 255, 46, 0.5);
}
Envie de tweak les tokens ? Code Studio
