:root { --spotlight-color: 210, 100%, 60%; --spotlight-gradient-1: 210, 100%, 60%;
--spotlight-gradient-2: 280, 100%, 60%;
--spotlight-gradient-3: none;
--spotlight-gradient-4: none;
--spotlight-gradient-5: none;
--spotlight-gradient-count: 2; --spotlight-card-bg: rgba(15, 15, 15, 0.9);
--spotlight-card-border: rgba(255, 255, 255, 0.1);
--spotlight-card-radius: 16px; --spotlight-size: 350px;
--spotlight-opacity: 0.15;
--spotlight-border-opacity: 0.5; --spotlight-transition: opacity 0.3s ease;
} .spotlight-card {
position: relative;
overflow: hidden;
isolation: isolate;
} .spotlight-card::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(
var(--spotlight-size) var(--spotlight-size) at var(--mouse-x, 50%)
var(--mouse-y, 50%),
hsla(var(--spotlight-color), var(--spotlight-opacity)),
transparent 100%
);
opacity: 0;
transition: var(--spotlight-transition);
pointer-events: none;
z-index: 1;
border-radius: inherit;
} .spotlight-card::after {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(
calc(var(--spotlight-size) * 0.8) calc(var(--spotlight-size) * 0.8) at
var(--mouse-x, 50%) var(--mouse-y, 50%),
hsla(var(--spotlight-color), var(--spotlight-border-opacity)),
transparent 100%
);
border-radius: inherit;
opacity: 0;
transition: var(--spotlight-transition);
pointer-events: none;
z-index: 0; -webkit-mask:
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
mask:
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
padding: 2px;
} .spotlight-card:hover::before,
.spotlight-card:hover::after {
opacity: 1;
} .spotlight-card-content {
position: relative;
z-index: 2;
padding: 24px;
height: 100%;
} .spotlight-card[data-variant="border"],
.spotlight-card--border {
--spotlight-opacity: 0;
}
.spotlight-card[data-variant="border"]::before,
.spotlight-card--border::before {
display: none;
}
.spotlight-card[data-variant="border"]::after,
.spotlight-card--border::after {
--spotlight-border-opacity: 0.8;
padding: 2px;
} .spotlight-card[data-variant="gradient"]::before,
.spotlight-card--gradient::before {
background: radial-gradient(
var(--spotlight-size) var(--spotlight-size) at var(--mouse-x, 50%)
var(--mouse-y, 50%),
hsla(var(--spotlight-gradient-1), var(--spotlight-opacity)),
hsla(var(--spotlight-gradient-2), calc(var(--spotlight-opacity) * 0.5)),
transparent 100%
);
}
.spotlight-card[data-variant="gradient"]::after,
.spotlight-card--gradient::after {
background: radial-gradient(
calc(var(--spotlight-size) * 0.8) calc(var(--spotlight-size) * 0.8) at
var(--mouse-x, 50%) var(--mouse-y, 50%),
hsla(var(--spotlight-gradient-1), var(--spotlight-border-opacity)),
hsla(
var(--spotlight-gradient-2),
calc(var(--spotlight-border-opacity) * 0.7)
),
transparent 100%
);
} .spotlight-card[data-variant="gradient-border"]::before,
.spotlight-card--gradient-border::before {
display: none;
}
.spotlight-card[data-variant="gradient-border"]::after,
.spotlight-card--gradient-border::after {
background: radial-gradient(
calc(var(--spotlight-size) * 0.8) calc(var(--spotlight-size) * 0.8) at
var(--mouse-x, 50%) var(--mouse-y, 50%),
hsla(var(--spotlight-gradient-1), 0.9),
hsla(var(--spotlight-gradient-2), 0.7),
transparent 100%
);
padding: 2px;
} .spotlight-card[data-size="sm"] {
--spotlight-size: 200px;
}
.spotlight-card[data-size="md"] {
--spotlight-size: 350px;
}
.spotlight-card[data-size="lg"] {
--spotlight-size: 500px;
}
.spotlight-card[data-size="xl"] {
--spotlight-size: 700px;
} .spotlight-card[data-intensity="low"] {
--spotlight-opacity: 0.08;
--spotlight-border-opacity: 0.25;
}
.spotlight-card[data-intensity="medium"] {
--spotlight-opacity: 0.15;
--spotlight-border-opacity: 0.5;
}
.spotlight-card[data-intensity="high"] {
--spotlight-opacity: 0.25;
--spotlight-border-opacity: 0.75;
} .spotlight-card[data-autoplay="true"],
.spotlight-card--autoplay {
--mouse-x: 50%;
--mouse-y: 50%;
}
.spotlight-card[data-autoplay="true"]::before,
.spotlight-card[data-autoplay="true"]::after,
.spotlight-card--autoplay::before,
.spotlight-card--autoplay::after {
opacity: 1;
} .spotlight-card[data-mode="proximity"]::before,
.spotlight-card[data-mode="proximity"]::after,
.spotlight-card--proximity::before,
.spotlight-card--proximity::after {
opacity: 1;
} .spotlight-card-grid {
display: grid;
gap: 16px;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
} .spotlight-card[data-disabled="true"]::before,
.spotlight-card[data-disabled="true"]::after,
.spotlight-card--disabled::before,
.spotlight-card--disabled::after {
display: none;
} .spotlight-card:focus-visible {
outline: 2px solid hsla(var(--spotlight-color), 0.8);
outline-offset: 2px;
}
.spotlight-card:focus-visible::before,
.spotlight-card:focus-visible::after {
opacity: 1;
} @media (prefers-reduced-motion: reduce) {
.spotlight-card::before,
.spotlight-card::after {
transition: none;
}
.spotlight-card[data-autoplay="true"]::before,
.spotlight-card[data-autoplay="true"]::after,
.spotlight-card--autoplay::before,
.spotlight-card--autoplay::after {
animation: none;
opacity: 1;
--mouse-x: 50%;
--mouse-y: 50%;
}
}