'use client' import { motion, AnimatePresence, useScroll, useTransform, useMotionTemplate, useTime, MotionValue, useSpring } from "framer-motion"; import { useState, useCallback, useEffect } from "react" import { Palette, Sparkles, Gauge, FlaskConical, TrendingUp, Users, Brain, CheckCircle2, Zap, CircleDot, XCircle } from "lucide-react"; // na górze pliku (masz już useEffect), dodaj: import { createPortal } from "react-dom"; export default function Home() { const [openIndex, setOpenIndex] = useState(null) const [activeSection, setActiveSection] = useState("PrimeCode"); const [uiVariant, setUiVariant] = useState<"A" | "B" | "C">("A"); // A = Vibrant, B = Editorial, C = Dark useEffect(() => { const sections = document.querySelectorAll("section[id]"); const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { setActiveSection(entry.target.id); } }); }, { rootMargin: "-50% 0px -50% 0px", threshold: 0 } ); sections.forEach((section) => observer.observe(section)); return () => observer.disconnect(); }, []); const navItems = [ { id: "PrimeCode", label: "O nas" }, { id: "Sytuacje", label: "Sytuacje" }, { id: "Partner", label: "Potrzebujesz partnera" }, { id: "Model", label: "Model Prime Code" }, { id: "CoPotrafimy", label: "Co potrafimy?" }, { id: "JakDzialamy", label: "Jak działamy?" }, { id: "PomogliśmyCaseStudies", label: "Pomogliśmy" }, ]; const caseStudies = [ { title: "Firma kosmetyczna", short: "Nowa strategia detaliczna i transformacja doświadczenia klientek w salonach.", details: [ "Opracowanie nowej strategii detalicznej, integrującej sprzedaż z usługami.", "Zaprojektowanie atmosfery sklepów oraz selekcja unikalnego asortymentu.", "Transformacja komunikacji – od eksperckiej wiedzy do relacji opartej na empatii.", "Redefinicja propozycji wartości – skupienie na doświadczeniu troski o zdrowie i piękno.", "Stworzenie concept store’u jako pełnego doświadczenia marki.", "Przejście z jednego formatu sklepu na trzy lepiej dopasowane formaty detaliczne.", "Zmiana podejścia operacyjnego: od 4P do 7P, z naciskiem na doświadczenie klientki." ] }, { title: "Firma paliwowa", short: "Integracja doświadczenia na stacjach z tożsamością marki i branding sensoryczny.", details: [ "Integracja strategii marki ze strategią doświadczeń klienta.", "Badania neuromarketingowe i ponad 100 rekomendacji optymalizacyjnych.", "Wielowarstwowa propozycja wartości – od tankowania po rozbudowane doświadczenie marki.", "Identyfikacja momentów prawdy i plan zarządzania nimi.", "Mapa ścieżek klienta z instrukcją optymalizacji.", "Projekt atmosfery stacji (kolorystyka, zapach, układ).", "Kompleksowy branding sensoryczny angażujący wszystkie zmysły.", "Standardy obsługi klienta odzwierciedlające wartości marki.", "Mapa wdrożenia z harmonogramem i wytycznymi operacyjnymi." ] }, { title: "Firma technologiczna", short: "Nowa architektura marki, system kompetencji i kultura klientocentryczna.", details: [ "Zaprojektowanie struktury organizacyjnej i systemu kompetencji.", "Redefinicja architektury marki (przejście z house of brands na branded house).", "System zarządzania wartością klienta – poziom strategiczny, operacyjny i personalny.", "„Playbooki” wdrażające pozycjonowanie do działań codziennych.", "Usługi o wysokiej wartości dodanej, zmieniające postrzeganie firmy.", "Model „high tech + high touch” łączący technologie z uważnością na klienta.", "Strategia CRM wspierająca długofalowe relacje i wzrost." ] } ] // --- Wspólna treść dla wszystkich wariantów sekcji "DlaczegoIntegracji" --- const why = { p1: ( <> 76% konsumentów oczekuje, że marka będzie przewidywać ich potrzeby, nie tylko reagować (Salesforce, 2023). ), p2: ( <> Pokolenie Z nie buduje lojalności przez reklamy. Buduje ją przez wartość, użyteczność i autentyczność. Aż 65% młodych konsumentów deklaruje, że lojalność wobec marki zależy od spójnych i realnych doświadczeń (McKinsey, 2023). ), bulletsIntro: "Marka nie żyje w kampaniach. Żyje w:", bullets: [ "chatbotach, landingach, mailach i pushach,", "procesach sprzedażowych i onboardingowych,", "sposobie, w jaki działa Twój model cenowy, UX i obsługa klienta.", ], p3: ( <> Jeśli to wszystko nie gra razem, marka traci moc.
I traci klientów. Według badania PwC aż 32% klientów porzuca markę po jednej złej interakcji, nawet jeśli wcześniej byli zadowoleni. ), }; const [expandedIndex, setExpandedIndex] = useState(null); // === NOWE tiles (podmień całą dotychczasową definicję) === // === KAFELKI z jednolitym punktorowaniem === const tiles = [ { title: "Brand Daily Scan™ – diagnoza w rytmie codzienności", short: "Błyskawiczna analiza punktów styku, decyzji, procesów i sygnałów marki.", output: "Mapa luk, insighty, benchmarki, rekomendacje.", efekt: "Mapa luk i niespójności, insighty z rzeczywistego użycia marki, benchmarki branżowe oraz rekomendacje naprawcze i wzmacniające.", details: ( <>

Nie patrzymy na markę z dystansu. Wchodzimy w jej codzienne tętno. Skupiamy się na tym, co naprawdę generuje doświadczenie klienta:

{/* stałe, eleganckie kropki */}
  • punkty styku (touchpointy),
  • mikrodecyzje zespołów,
  • automatyczne procesy i sygnały marki.
), }, { title: "Synchronizacja rytmu – faza pacingu", short: "Zgrywamy Twoje działania z logiką marki. Automatyzujemy. Personalizujemy.", output: "Roadmapa wdrożenia z KPI i zestawem eksperymentów.", efekt: "„Zgrane zegary” marki, marketingu, sprzedaży i obsługi; klarowne KPI oraz szybkie testy hipotez.", details: ( <>

Integrujemy markę z codzienną dynamiką operacyjną. Nie robimy rewolucji — synchronizujemy rytm:

{/* stałe, eleganckie kropki */}
  • automatyzujemy to, co można,
  • personalizujemy to, co warto,
  • urealniamy to, co obiecujesz jako marka.
), }, { title: "Wdrożenie i skalowanie", short: "Marka w akcji: od call center i e-maili po pricing, CRM i fizyczną dostępność.", output: "Efektywność, zaangażowanie, lojalność.", efekt: "Wzrost efektywności działań marketingowych, wyższe zaangażowanie użytkowników, zwiększenie lojalności i retencji — zmierzone.", details: ( <>

Marka przestaje być tylko deklaracją. Zaczyna działać w realnym czasie i miejscu:

{/* stałe, eleganckie kropki */}
  • w aplikacji i e-mailach,
  • w polityce cenowej i mechanizmach CRM,
  • w sklepie internetowym i na półce w punkcie sprzedaży.
), }, ]; const scrollToIntegration = useCallback(() => { const section = document.getElementById('DlaczegoIntegracji') section?.scrollIntoView({ behavior: 'smooth' }) }, []) return (
{/* Sticky Navbar */} {/* HERO - Nowoczesna, elegancka sekcja wprowadzająca */}
{/* Dynamiczne tło
*/} {/* Główna treść */} Prime Code Integrujemy markę w codziennych działaniach {/* Tagline */} Marka, która działa codziennie. W czasie rzeczywistym. W każdym punkcie styku. {/* Dekoracyjna linia */} W Prime Code integrujemy markę z tym, co najważniejsze – realnymi działaniami, danymi, technologią i zespołami. Nie tworzymy kampanii dla samej widoczności. Projektujemy mechanizmy wzrostu, w których marka staje się fundamentem operacyjnym: w komunikacji, sprzedaży, doświadczeniu klienta, polityce cenowej i kanałach dystrybucji. Bo marka to nie tylko opowieść. To system. Aktywny, skalowalny, zsynchronizowany z organizacją. {/* Strzałka zachęcająca do przewinięcia */}
{/* Dlaczego integracja marki to konieczność */} {uiVariant === "C" ? ( // 👉 wariant C (timeline) w całości ) : ( // 👉 warianty A i B – zostają bez zmian stylistycznych
{/* Nagłówek wspólny */} Dlaczego integracja marki to konieczność?
{/* === A === */} {uiVariant === "A" && ( {/* Akapit 1 */}
{/* Akapit 2 */}
{/* Punkt nadrzędny + podpunkty */}
{/* Akapit 4 */}
)} {/* === B (Editorial) === */} {uiVariant === "B" && (
{/* Dwa callouty */}
{[why.p1, why.p2].map((node, i) => ( ))}
{/* Lewa: „żyje w:”, Prawa: PwC */}

{why.bulletsIntro}

    {why.bullets.map((txt, i) => (
  • {txt}
  • ))}

{why.p3}

)}
{/* Strzałka do kolejnej sekcji */} document.getElementById('Sytuacje')?.scrollIntoView({ behavior: 'smooth' })} animate={{ y: [0, 15, 0] }} transition={{ repeat: Infinity, duration: 2, ease: 'easeInOut' }} className="absolute bottom-10 z-10 text-cyan-700 cursor-pointer" aria-label="Przewiń do sekcji: Czy znasz te sytuacje?" >
)} {/* Czy znasz te sytuacje? */}
{/* Dynamiczne tło */} {/*
*/} Czy znasz te sytuacje?
{[ { title: "1. Brak spójności w komunikacji", text: "Różne działy (np. marketing, sprzedaż, obsługa klienta) komunikują się w różnym tonie i z odmiennym przekazem." }, { title: "2. Realizacja działań promocyjnych bez odniesienia do tożsamości marki", text: "Firma wdraża modne działania (np. TikTok, influencerzy, AI copywriting) bez filtrowania ich przez tożsamość i wartości marki." }, { title: "3. Problemy w skalowaniu działań", text: "Przy szybkim wzroście lub ekspansji różne zespoły zaczynają prowadzić działania niespójne z tożsamością marki." }, { title: "4. Zmiany w zespole / outsourcing marketingu", text: "Nowe osoby lub agencje marketingowe nie rozumieją w pełni marki i działają według własnych schematów." }, { title: "5. Brak narzędzi lub procesów ułatwiających pracę z marką", text: "Pracownicy nie mają dostępu do aktualnych wytycznych (brand plan, key visuals, archetypy, kroki milowe)." }, { title: "6. Brak mierzalnego modelu integracji marki", text: "Firma nie ma sposobu, by sprawdzić, czy kampania, post czy oferta są zgodne z marką." } ].map((item, i) => (

{item.title}

{item.text}

))}
{/* Strzałka do sekcji Partner */} document.getElementById('Partner')?.scrollIntoView({ behavior: 'smooth' })} animate={{ y: [0, 15, 0] }} transition={{ repeat: Infinity, duration: 2, ease: 'easeInOut' }} className="absolute bottom-10 z-10 text-cyan-700 cursor-pointer" >
{/* Potrzebujesz partnera, który... */}
{/* Tło dekoracyjne */} {/*
*/}
Potrzebujesz partnera, który: {[ "myśli procesami, nie kanałami?", "łączy branding z danymi, CX i automatyzacją?", "projektuje mechanizmy wzrostu, a nie tylko „fajny content”?", "wdraża AI w obsłudze marki, zamiast tylko mówić o trendach?", "testuje i optymalizuje, zamiast zgadywać?" ].map((item, i) => (
  • {item.split(" ")[0]} {item.replace(item.split(" ")[0], "")}
  • ))}
    {/* Nowa, wizualna dekoracja bez tekstu */}
    {/* Animowany napis i strzałka przewijająca do Model */} document.getElementById('Model')?.scrollIntoView({ behavior: 'smooth' })} animate={{ y: [0, 10, 0] }} transition={{ repeat: Infinity, duration: 2, ease: 'easeInOut' }} className="absolute bottom-10 flex flex-col items-center text-cyan-700 cursor-pointer" > Spójrz na model Prime Code
    {/* Model Prime Code */} {/* Dekoracyjne tło */} {/*
    */}

    Model Prime Code: marka jako system operacyjny

    W klasycznym ujęciu marka to obietnica. W dzisiejszej rzeczywistości to{' '} system działania. Prime Code traktuje markę jak{' '} system operacyjny firmy: regulujący rytm decyzji, komunikacji i doświadczeń klienta. Spójność przestaje być tylko kwestią estetyki a staje się{' '} mierzalnym źródłem przewagi.

    {/* Siatka kafelków – bez shared layout na całej siatce */}
    {tiles.map((tile, index) => ( setExpandedIndex(index)} onClose={() => setExpandedIndex(null)} title={tile.title} short={tile.short} output={tile.output} efekt={tile.efekt} details={tile.details} /> ))}
    {/* Strzałka przewijania do następnej sekcji */} document.getElementById('CoPotrafimy')?.scrollIntoView({ behavior: 'smooth' })} animate={{ y: [0, 10, 0] }} transition={{ repeat: Infinity, duration: 2, ease: 'easeInOut' }} className="absolute bottom-10 flex flex-col items-center text-cyan-700 cursor-pointer" > Zobacz Co potrafimy? {/* Co potrafimy? */} {/* Główna zawartość wyśrodkowana pionowo */}

    Co potrafimy?

    {[ "Projektujemy marki, które rosną dzięki danym i doświadczeniu użytkownika", "Tworzymy systemy komunikacji, a nie tylko tone of voice", "Zarządzamy marką tak jak innowacyjnym produktem lub usługą: zwinnie, testy, feedback, iteracje", "Wdrażamy AI w miejscach, które mają znaczenie dla doświadczenia marki", "Projektujemy onboarding, optymalizujemy punkty styku z klientem i mechanizmy wzrostu", "Projektujemy szablony i piszemy playbooki dla marketingu, sprzedaży, HR i obsługi klienta z marką w centrum" ].map((item, i) => (
  • {item}
  • ))}
    {/* Strzałka przewijania do następnej sekcji */} document.getElementById('JakDzialamy')?.scrollIntoView({ behavior: 'smooth' })} animate={{ y: [0, 10, 0] }} transition={{ repeat: Infinity, duration: 2, ease: 'easeInOut' }} className="absolute bottom-10 flex flex-col items-center text-cyan-700 cursor-pointer" > Zobacz, jak to działa
    {/* Zobacz, jak to działa bez ryzyka */} {/* Dekoracje w tle */} {/*
    */} {/* Główna zawartość */}
    Zobacz, jak to działa bez ryzyka Brand Daily Test W 7 dni pokażemy Ci realne luki, szanse i jeden test do wdrożenia od ręki.
    {[ "mini-audyt doświadczeń i danych", "mapa punktów styku", "insighty do poprawy spójności i skuteczności", "1 eksperyment do wdrożenia natychmiast" ].map((item, i) => ( {/* kropka jak w sekcji "Potrzebujesz partnera" */} ))}
    Efekty zanim podejmiesz decyzję o dalszej współpracy.
    {/* Strzałka przewijania do następnej sekcji document.getElementById('PomogliśmyCaseStudies')?.scrollIntoView({ behavior: 'smooth' })} animate={{ y: [0, 10, 0] }} transition={{ repeat: Infinity, duration: 2, ease: 'easeInOut' }} className="absolute bottom-10 flex flex-col items-center text-cyan-700 cursor-pointer" > Zobacz komu pomogliśmy */} {/* Połączona sekcja „Pomogliśmy” + „Case Studies” (STATYCZNIE) */}
    {/* Nagłówek „Pomogliśmy” */}

    Pomogliśmy

    {/* LISTA STATYCZNA — zamiast karuzel */}
    {/* wiersz 1 */}
    {[ "Ponad 20 firmom farmaceutycznym", "Ponad 20 firmom FMCG", "Ponad 15 firmom B2B", "10 firmom technologicznym i startupom", ].map((item, i) => (

    {item}

    ))}
    {/* wiersz 2 */}
    {[ "4 bankom i 3 firmom ubezpieczeniowym", "5 instytucjom edukacyjnym", "Firmom z branży rozrywkowej, modowej, przemysłowej, wydawniczej, rolniczej i wielu innych", "Globalnym centralom koncernów z USA, Kanady, Niemiec, Wielkiej Brytanii, Hiszpanii, Węgier i Polski", ].map((item, i) => (

    {item}

    ))}
    {/* Case Studies — bez zmian, korzysta z Twojego komponentu CaseCard */}

    Case Studies

    {caseStudies.map((study, index) => ( ))}
    {/* KONTAKT – wyeksponowany baner */}
    {/* Tekst + CTA */}

    Zacznij od eksperymentu

    Zobacz, co marka może zrobić – w 7 dni.

    {/* Karta z osobą kontaktową */}
    {/* FOOTER – prosty i równy */}

    © 2025 Prime Code

    {/* Quick contact bar */} {/* STYLE SWITCHER – pływający panel */}
    ) } function CaseCard({ index, openIndex, setOpenIndex, title, short, details }: { index: number openIndex: number | null setOpenIndex: (i: number | null) => void title: string short: string details: string[] }) { const isOpen = openIndex === index return (

    {title}

    {short}

    {isOpen && ( {details.map((d, idx) => (
  • {d}
  • ))}
    )}
    ) } function Tile({ open, onOpen, onClose, title, short, output, efekt, details, }: { open: boolean; onOpen: () => void; onClose: () => void; title: string; short: string; output: string; efekt: string; details: React.ReactNode; }) { return (
    {/* Górna, widoczna część – równa wysokość przy stanie zamkniętym */}

    {title}

    {short}

    Output: {output}

    {!open && (
    )}
    {/* Rozwijana część – animujemy tylko wysokość tej sekcji */}
    {/* typografia: ten sam line-height i marginesy */}
    {details}

    Efekt: {efekt}

    ); } // KOMPONENT PRZEŁĄCZNIKA (wrzuć pod innymi komponentami w tym pliku) function StyleSwitcher({ value, onChange, }: { value: "A" | "B" | "C"; onChange: (v: "A" | "B" | "C") => void; }) { const [mounted, setMounted] = useState(false); useEffect(() => setMounted(true), []); if (!mounted) return null; return createPortal(
    Wariant
    {(["A", "B", "C"] as const).map((v) => ( ))}
    , document.body ); } function DotList({ items, className = "" }: { items: string[]; className?: string }) { return (
      {items.map((txt, i) => (
    • {/* ta sama turkusowa kropka co w innych wypunktowaniach */}
    • ))}
    ); } function DlaczegoIntegracji_Timeline({ why, }: { why: { p1: React.ReactNode; p2: React.ReactNode; bulletsIntro: string; bullets: string[]; p3: React.ReactNode; }; }) { return (
    {/* Nagłówek */} Dlaczego integracja marki to konieczność?
    {/* Oś czasu */}
    {/* pionowa linia */}
    ); } function Background({ variant }: { variant: "A" | "B" | "C" }) { const [reduce, setReduce] = useState(false); useEffect(() => { setReduce(window.matchMedia("(prefers-reduced-motion: reduce)").matches); }, []); return (
    {/* WARSTWA BAZOWA – jak na początku strony */}
    {/* === A — Aurora (oryginalna kolorystyka) === */} {variant === "A" && ( <> )} {/* === B — Editorial (pasy + shine) === */} {variant === "B" && ( <>
    {!reduce && ( )} )} {/* === C — Kinetic Grid + SCROLL-REACTIVE AURORA === */} {variant === "C" && ( <> )} {/* Ziarno (delikatne) */}
    ); } type ToneOpts = { wobbleSpeed?: number; wobbleAmpDeg?: number }; // PASTELOWE, JESZCZE JAŚNIEJSZE ODCIENIE // start: bardzo jasny błękit, end: bardzo jasny morelowy const START = { h: 208, s: 78, l: 96 }; // hsl(208 78% 96%) const END = { h: 24 + 360, s: 82, l: 94 }; // 24° + 360° => unikamy zieleni function useBrandTone({ wobbleSpeed = 0.001, wobbleAmpDeg = 0.2 }: ToneOpts = {}) { const { scrollYProgress } = useScroll(); const time = useTime() as MotionValue; // SINGLE SWEEP: 0 -> 1 tylko raz const phase = useSpring(scrollYProgress, { stiffness: 35, damping: 22, mass: 0.9 }); // H, S, L płynnie z START -> END (hue idzie po zegarze 208 -> 384) const hBase = useTransform(phase, [0, 1], [START.h, END.h]); const sBase = useTransform(phase, [0, 1], [START.s, END.s]); const lBase = useTransform(phase, [0, 1], [START.l, END.l]); // Bardzo subtelny „oddech” hue, żeby tło żyło, ale bez mrygania const wobbleRaw = useTransform(time, t => Math.sin(t * wobbleSpeed * 1000) * wobbleAmpDeg); const wobble = useSpring(wobbleRaw, { stiffness: 60, damping: 20 }); // top = baza + leciutki wobble (ułamki stopnia) const hTop = useTransform([hBase, wobble] as MotionValue[], (vals: number[]) => { const [h, w] = vals as [number, number]; return h + w; // hue może przekraczać 360° – CSS to normalizuje }); const sTop = sBase; const lTop = lBase; // dolna warstwa: odrobinkę mniej nasycona i ciut ciemniejsza (wciąż pastel) const hBot = useTransform(hTop, v => v - 4); const sBot = useTransform(sTop, v => Math.max(65, v - 8)); const lBot = useTransform(lTop, v => Math.max(88, v - 4)); // dwa środki – zawsze kilka odcieni, ale „kolor przewodni” zmienia się tylko raz const mix2 = (a: MotionValue, b: MotionValue, wa: number) => useTransform([a, b] as MotionValue[], (vals: number[]) => { const [x, y] = vals as [number, number]; return x * wa + y * (1 - wa); }); const hMid1 = mix2(hTop, hBot, 0.65); const sMid1 = mix2(sTop, sBot, 0.65); const lMid1 = mix2(lTop, lBot, 0.65); const hMid2 = useTransform([hTop, hBot, wobble] as MotionValue[], (vals: number[]) => { const [a, b, w] = vals as [number, number, number]; return a * 0.35 + b * 0.65 + w * 0.15; }); const sMid2 = mix2(sTop, sBot, 0.35); const lMid2 = mix2(lTop, lBot, 0.35); // kolory jako CSS-zmienne (bez migotania) const c1 = useMotionTemplate`hsl(${hTop} ${sTop}% ${lTop}%)`; const c2 = useMotionTemplate`hsl(${hMid1} ${sMid1}% ${lMid1}%)`; const c3 = useMotionTemplate`hsl(${hMid2} ${sMid2}% ${lMid2}%)`; const c4 = useMotionTemplate`hsl(${hBot} ${sBot}% ${lBot}%)`; const accent = useMotionTemplate`hsl(${hBot} ${sBot}% calc(${lBot} - 10%))`; const accentSoft = useMotionTemplate`hsl(${hBot} ${sBot}% calc(${lBot} - 10%) / .45)`; const gridTint = useMotionTemplate`hsl(${hTop} ${sTop}% 46% / .16)`; // ⬇⬇⬇ DODAJ scrollYProgress do return return { scrollYProgress, c1, c2, c3, c4, accent, accentSoft, gridTint }; } function ScrollToneBackground() { const { c1, c2, c3, c4 } = useBrandTone(); return ( ); } function ScrollToneDecor({ reduce = false }: { reduce?: boolean }) { const { scrollYProgress, accent, accentSoft, gridTint } = useBrandTone(); const time = useTime() as MotionValue; const x1 = useTransform(scrollYProgress, [0, 1], [15, 70]); const y1 = useTransform(scrollYProgress, [0, 1], [18, 34]); const x2 = useTransform(scrollYProgress, [0, 1], [85, 28]); const y2 = useTransform(scrollYProgress, [0, 1], [78, 62]); const wobRaw = useTransform(time, t => Math.sin(t * 0.0016) * 4); const wob = useSpring(wobRaw, { stiffness: 60, damping: 18 }); const orb1 = useMotionTemplate` radial-gradient(880px 880px at calc(${x1}% + ${wob}) ${y1}%, ${accentSoft}, transparent 60%)`; const orb2 = useMotionTemplate` radial-gradient(1040px 1040px at ${x2}% calc(${y2}% + ${wob}), ${accentSoft}, transparent 58%)`; const shineX = useSpring( useTransform(scrollYProgress, [0, 1], ["-130%", "130%"]), { stiffness: 60, damping: 20 } ); const shineBg = useMotionTemplate`linear-gradient(90deg, transparent, ${accentSoft}, transparent)`; const spin = useTransform(time, t => (t * 0.012) % 360); const rings = useMotionTemplate` conic-gradient(from 0deg, transparent 0deg, ${accentSoft} 24deg, transparent 48deg, ${accentSoft} 72deg, transparent 96deg, ${accentSoft} 120deg, transparent 360deg)`; const gridImg = useMotionTemplate` repeating-linear-gradient(0deg, transparent, transparent 23px, ${gridTint} 24px), repeating-linear-gradient(90deg, transparent, transparent 23px, ${gridTint} 24px)`; return ( <> {!reduce && ( )} ); }