Zusatzleistung
CNC-Bearbeitung
In Zusammenarbeit mit zertifizierten Partnern in der Schweiz. Wird nicht über das automatische Angebotstool abgewickelt. Kontaktieren Sie uns für eine Bewertung.
CNC-Bewertung anfragen
.nm-fx-sweep {
--nm-bg: #06172A;
--nm-cyan: 0, 168, 232;
--nm-mx: 72%;
--nm-my: 48%;
--nm-line-opacity: 0.14;
--nm-glow-opacity: 0.52;
--nm-cursor-opacity: 0;
position: relative;
isolation: isolate;
overflow: hidden;
background-color: var(--nm-bg);
}
.nm-fx-sweep > * {
position: relative;
z-index: 3;
}
.nm-fx-sweep::before,
.nm-fx-sweep::after {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
z-index: 1;
}
.nm-fx-sweep::before {
opacity: var(--nm-line-opacity);
background-image:
radial-gradient(
ellipse at var(--nm-mx) var(--nm-my),
rgba(var(--nm-cyan), 0.24) 0%,
rgba(var(--nm-cyan), 0.08) 26%,
transparent 58%
),
repeating-radial-gradient(
ellipse at 78% 52%,
rgba(190, 225, 240, 0.45) 0px,
rgba(190, 225, 240, 0.45) 1px,
transparent 2px,
transparent 13px
);
transform: rotate(-13deg) scale(1.38);
transform-origin: 70% 50%;
mask-image: linear-gradient(
90deg,
transparent 0%,
rgba(0,0,0,0.22) 30%,
rgba(0,0,0,1) 58%,
rgba(0,0,0,0.9) 100%
);
transition: opacity 220ms ease;
}
.nm-fx-sweep::after {
opacity: var(--nm-glow-opacity);
background:
linear-gradient(
105deg,
transparent 0%,
transparent 39%,
rgba(var(--nm-cyan), 0.00) 44%,
rgba(var(--nm-cyan), 0.56) 48%,
rgba(225, 248, 255, 0.38) 50%,
rgba(var(--nm-cyan), 0.28) 53%,
transparent 60%,
transparent 100%
);
mix-blend-mode: screen;
filter: blur(17px);
transform: translateX(-68%) skewX(-8deg);
animation: nmSweepMove 12s ease-in-out infinite;
}
.nm-fx-sweep .nm-sweep-grain,
.nm-fx-sweep .nm-sweep-cursor {
position: absolute;
inset: 0;
pointer-events: none;
z-index: 1;
}
.nm-fx-sweep .nm-sweep-grain {
opacity: 0.22;
background-image:
linear-gradient(rgba(255,255,255,0.035) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px);
background-size: 64px 64px;
mask-image: linear-gradient(
90deg,
transparent 0%,
rgba(0,0,0,0.22) 42%,
rgba(0,0,0,0.8) 100%
);
}
.nm-fx-sweep .nm-sweep-cursor {
opacity: var(--nm-cursor-opacity);
background:
radial-gradient(
circle at var(--nm-mx) var(--nm-my),
rgba(var(--nm-cyan), 0.26) 0%,
rgba(var(--nm-cyan), 0.13) 9%,
rgba(var(--nm-cyan), 0.045) 22%,
transparent 44%
);
mix-blend-mode: screen;
filter: blur(10px);
transition: opacity 260ms ease;
}
.nm-fx-sweep.is-pointer-active {
--nm-cursor-opacity: 1;
--nm-line-opacity: 0.18;
}
@keyframes nmSweepMove {
0% {
transform: translateX(-72%) skewX(-8deg);
opacity: 0;
}
12% {
opacity: var(--nm-glow-opacity);
}
48% {
transform: translateX(46%) skewX(-8deg);
opacity: var(--nm-glow-opacity);
}
64% {
opacity: 0;
}
100% {
transform: translateX(46%) skewX(-8deg);
opacity: 0;
}
}
@media (max-width: 1024px) {
.nm-fx-sweep {
--nm-line-opacity: 0.11;
--nm-glow-opacity: 0.38;
}
.nm-fx-sweep::before {
transform: rotate(-12deg) scale(1.65);
mask-image: linear-gradient(
90deg,
transparent 0%,
rgba(0,0,0,0.12) 20%,
rgba(0,0,0,0.72) 55%,
rgba(0,0,0,0.95) 100%
);
}
}
@media (max-width: 767px) {
.nm-fx-sweep {
--nm-line-opacity: 0.08;
--nm-glow-opacity: 0.28;
--nm-cursor-opacity: 0;
}
.nm-fx-sweep::before {
transform: rotate(-10deg) scale(2);
mask-image: linear-gradient(
180deg,
transparent 0%,
rgba(0,0,0,0.16) 25%,
rgba(0,0,0,0.68) 100%
);
}
.nm-fx-sweep::after {
animation-duration: 15s;
filter: blur(22px);
}
.nm-fx-sweep .nm-sweep-grain {
opacity: 0.12;
}
.nm-fx-sweep .nm-sweep-cursor {
display: none;
}
}
@media (prefers-reduced-motion: reduce) {
.nm-fx-sweep::after {
animation: none;
opacity: 0.18;
transform: translateX(8%) skewX(-8deg);
}
.nm-fx-sweep .nm-sweep-cursor {
display: none;
}
}
(() => {
const sections = document.querySelectorAll('.nm-fx-sweep');
sections.forEach((section) => {
if (!section.querySelector(':scope > .nm-sweep-grain')) {
const grain = document.createElement('div');
grain.className = 'nm-sweep-grain';
grain.setAttribute('aria-hidden', 'true');
section.prepend(grain);
}
if (!section.querySelector(':scope > .nm-sweep-cursor')) {
const cursor = document.createElement('div');
cursor.className = 'nm-sweep-cursor';
cursor.setAttribute('aria-hidden', 'true');
section.prepend(cursor);
}
let frame = null;
const updatePointer = (event) => {
if (frame) return;
frame = requestAnimationFrame(() => {
const rect = section.getBoundingClientRect();
const x = ((event.clientX - rect.left) / rect.width) * 100;
const y = ((event.clientY - rect.top) / rect.height) * 100;
section.style.setProperty('--nm-mx', `${x}%`);
section.style.setProperty('--nm-my', `${y}%`);
section.classList.add('is-pointer-active');
frame = null;
});
};
const resetPointer = () => {
section.classList.remove('is-pointer-active');
section.style.setProperty('--nm-mx', '72%');
section.style.setProperty('--nm-my', '48%');
};
section.addEventListener('pointermove', updatePointer, { passive: true });
section.addEventListener('pointerleave', resetPointer);
});
})();