diff --git a/app/animations/heroAnimations.ts b/app/animations/heroAnimations.ts new file mode 100644 index 0000000..b0e9c12 --- /dev/null +++ b/app/animations/heroAnimations.ts @@ -0,0 +1,41 @@ +import { gsap } from "gsap"; + +export const initHeroAnimations = ( + logoRef: React.RefObject, + titleRef: React.RefObject, + skylineRef: React.RefObject, + setSkylineVisible: (visible: boolean) => void +) => { + const tl = gsap.timeline(); + + tl.fromTo(logoRef.current, + { scale: 0, rotation: -180, opacity: 0 }, + { scale: 1, rotation: 0, opacity: 1, duration: 1.2, ease: "back.out(1.7)" } + ); + + tl.to(skylineRef.current, { + y: 0, + opacity: 1, + duration: 0.6, + ease: "power3.out", + onComplete: () => setSkylineVisible(true) + }, "-=0.8"); + + tl.fromTo(titleRef.current, + { x: -100, opacity: 0, scale: 0.8 }, + { x: 0, opacity: 1, scale: 1, duration: 1, ease: "power3.out" } + ); + + tl.fromTo(".animate-twinkle", + { scale: 0, opacity: 0 }, + { scale: 1, opacity: 1, duration: 2, stagger: 0.1, ease: "power2.out" } + ); + gsap.to(logoRef.current, { + y: -10, + duration: 2, + ease: "power2.inOut", + yoyo: true, + repeat: -1, + delay: 5 + }); +}; diff --git a/app/animations/introAnimations.ts b/app/animations/introAnimations.ts new file mode 100644 index 0000000..638630f --- /dev/null +++ b/app/animations/introAnimations.ts @@ -0,0 +1,181 @@ +import { gsap } from "gsap"; +import { ScrollTrigger } from "gsap/ScrollTrigger"; + + +if (typeof window !== "undefined") { + gsap.registerPlugin(ScrollTrigger); +} + + + +export const initIntroAnimations = ( + topRowRef: React.RefObject, + bottomRowRef: React.RefObject, + titleRefs: React.RefObject[], + textRefs: React.RefObject[], + imageRefs: React.RefObject[], + magneticRefs: React.RefObject[] +) => { + + const titles = titleRefs.map(ref => ref.current).filter(Boolean) as HTMLElement[]; + const texts = textRefs.map(ref => ref.current).filter(Boolean) as HTMLElement[]; + const images = imageRefs.map(ref => ref.current).filter(Boolean) as HTMLElement[]; + const magneticElements = magneticRefs.map(ref => ref.current).filter(Boolean) as HTMLElement[]; + + + console.log('Animation elements found:', { + titles: titles.length, + texts: texts.length, + images: images.length, + magneticElements: magneticElements.length + }); + + if (titles.length === 0 && texts.length === 0 && images.length === 0) { + console.log('No elements found for animation'); + return; + } + + + gsap.set([titles, texts, images], { + opacity: 0, + y: 50, + }); + + + + const topRowTl = gsap.timeline({ + scrollTrigger: { + trigger: topRowRef.current, + start: "top 80%", + end: "bottom 20%", + toggleActions: "play none none reverse", + }, + }); + + topRowTl + .to(titles[0], { + opacity: 1, + y: 0, + duration: 0.8, + ease: "power3.out", + }) + .to(texts.slice(0, 2), { + opacity: 1, + y: 0, + duration: 0.6, + stagger: 0.2, + ease: "power2.out", + }, "-=0.4") + .to(images[0], { + opacity: 1, + y: 0, + duration: 0.8, + ease: "power3.out", + }, "-=0.6"); + + + const bottomRowTl = gsap.timeline({ + scrollTrigger: { + trigger: bottomRowRef.current, + start: "top 80%", + end: "bottom 20%", + toggleActions: "play none none reverse", + }, + }); + + bottomRowTl + .to(images[1], { + opacity: 1, + y: 0, + duration: 0.8, + ease: "power3.out", + }) + .to(titles[1], { + opacity: 1, + y: 0, + duration: 0.8, + ease: "power3.out", + }, "-=0.4") + .to(texts.slice(2, 4), { + opacity: 1, + y: 0, + duration: 0.6, + stagger: 0.2, + ease: "power2.out", + }, "-=0.4"); + + + + + titles.forEach((title) => { + const chars = title.textContent?.split('') || []; + title.innerHTML = chars.map(char => + char === ' ' ? ' ' : `${char}` + ).join(''); + + const charSpans = title.querySelectorAll('.char'); + gsap.set(charSpans, { opacity: 0, y: 20 }); + + gsap.to(charSpans, { + opacity: 1, + y: 0, + duration: 0.5, + stagger: 0.03, + ease: "back.out(1.7)", + scrollTrigger: { + trigger: title, + start: "top 85%", + toggleActions: "play none none reverse", + }, + }); + }); + + + magneticElements.forEach((element) => { + const handleMouseMove = (e: MouseEvent) => { + const rect = element.getBoundingClientRect(); + const x = e.clientX - rect.left - rect.width / 2; + const y = e.clientY - rect.top - rect.height / 2; + + const distance = Math.sqrt(x * x + y * y); + const maxDistance = Math.sqrt(rect.width * rect.width + rect.height * rect.height) / 2; + const strength = Math.max(0, 1 - distance / maxDistance); + + const moveX = x * strength * 0.3; + const moveY = y * strength * 0.3; + + gsap.to(element, { + x: moveX, + y: moveY, + scale: 1 + strength * 0.05, + duration: 0.3, + ease: "power2.out", + }); + }; + + const handleMouseLeave = () => { + gsap.to(element, { + x: 0, + y: 0, + scale: 1, + duration: 0.5, + ease: "elastic.out(1, 0.3)", + }); + }; + + element.addEventListener('mousemove', handleMouseMove); + element.addEventListener('mouseleave', handleMouseLeave); + + + return () => { + element.removeEventListener('mousemove', handleMouseMove); + element.removeEventListener('mouseleave', handleMouseLeave); + }; + }); + + + return () => { + ScrollTrigger.getAll().forEach(trigger => trigger.kill()); + }; +}; + diff --git a/app/animations/openSourceAnimations.ts b/app/animations/openSourceAnimations.ts new file mode 100644 index 0000000..324e680 --- /dev/null +++ b/app/animations/openSourceAnimations.ts @@ -0,0 +1,68 @@ +import type { MutableRefObject } from "react"; +import gsap from "gsap"; +import { ScrollTrigger } from "gsap/ScrollTrigger"; + +gsap.registerPlugin(ScrollTrigger); + +type El = MutableRefObject; +type Els = MutableRefObject; + +export function initOpenSourceAnimations( + sectionRef: El, + headerRef: El, + titleRef: El, + subtitleRef: El, + projectsRef: El, + projectCardRefs: Els, + _projectImageRefs: Els, + _projectTitleRefs: Els, + _projectDescRefs: Els +) { + if (typeof window === "undefined") return () => {}; + + const sectionEl = sectionRef.current; + const headerEl = headerRef.current; + const titleEl = titleRef.current; + const subtitleEl = subtitleRef.current; + const projectsEl = projectsRef.current; + const cardEls = projectCardRefs.current.filter(Boolean); + + if (!sectionEl) return () => {}; + + const ctx = gsap.context(() => { + gsap.set([headerEl, titleEl, subtitleEl], { + clearProps: "all", + opacity: 1, + visibility: "visible", + display: "block", + }); + + const intro = gsap.timeline({ defaults: { ease: "power2.out" } }); + if (headerEl) intro.from(headerEl, { y: 16, duration: 0.4, immediateRender: false }, 0); + if (titleEl) intro.from(titleEl, { y: 10, duration: 0.35, immediateRender: false }, 0.05); + if (subtitleEl) intro.from(subtitleEl, { y: 10, duration: 0.35, immediateRender: false }, 0.12); + + if (projectsEl && cardEls.length) { + gsap.from(cardEls, { + y: 24, + autoAlpha: 0, + duration: 0.5, + stagger: 0.08, + ease: "power2.out", + immediateRender: false, + scrollTrigger: { + trigger: projectsEl, + start: "top 80%", + once: true, + }, + }); + } + + ScrollTrigger.refresh(); + }, sectionEl); + + return () => { + ctx.revert(); + [headerEl, titleEl, subtitleEl].forEach((el) => el && gsap.set(el, { clearProps: "all" })); + }; +} diff --git a/app/animations/pastHackathonsAnimations.ts b/app/animations/pastHackathonsAnimations.ts new file mode 100644 index 0000000..fec1bd1 --- /dev/null +++ b/app/animations/pastHackathonsAnimations.ts @@ -0,0 +1,69 @@ +import { gsap } from "gsap"; +import { ScrollTrigger } from "gsap/ScrollTrigger"; + +if (typeof window !== "undefined") { + gsap.registerPlugin(ScrollTrigger); +} + +export const initPastHackathonsAnimations = ( + sectionRef: React.RefObject, + trackRef: React.RefObject +) => { + const section = sectionRef.current; + const track = trackRef.current; + if (!section || !track) return; + + + try { + ScrollTrigger.normalizeScroll?.(true); + } catch {} + + const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches; + const isDesktop = () => window.innerWidth >= 1024; + let tween: gsap.core.Tween | null = null; + + const setup = () => { + if (prefersReduced || !isDesktop()) return; + + const getAmount = () => track.scrollWidth - window.innerWidth; + + tween = gsap.to(track, { + x: () => -getAmount(), + ease: 'none', + scrollTrigger: { + trigger: section, + start: 'top top', + end: () => '+=' + getAmount(), + scrub: 0.1, + pin: true, + anticipatePin: 1, + invalidateOnRefresh: true, + }, + }); + }; + + setup(); + + + const refresh = () => ScrollTrigger.refresh(); + const imgs = track.querySelectorAll('img'); + imgs.forEach((img) => { + if (!img.complete) img.addEventListener('load', refresh, { once: true }); + }); + + const onResize = () => { + ScrollTrigger.refresh(); + if (!tween && isDesktop() && !prefersReduced) setup(); + }; + window.addEventListener('resize', onResize); + + + return () => { + window.removeEventListener('resize', onResize); + if (tween) { + tween.scrollTrigger?.kill(); + tween.kill(); + } + ScrollTrigger.getAll().forEach((st) => st.kill()); + }; +}; diff --git a/app/components/SponsorCarousel.tsx b/app/components/SponsorCarousel.tsx new file mode 100644 index 0000000..4d7ce2f --- /dev/null +++ b/app/components/SponsorCarousel.tsx @@ -0,0 +1,119 @@ +"use client"; + +import { useEffect, useRef } from "react"; +import Image from "next/image"; + +export default function SponsorCarousel() { + const scrollRef = useRef(null); + + const sponsors = [ + { name: "Snowflake", logo: "/logo.svg" }, + { name: "Intel", logo: "/logo.svg" }, + { name: "AWS", logo: "/logo.svg" }, + { name: "Oracle", logo: "/logo.svg" }, + { name: "SK Telecom", logo: "/logo.svg" }, + { name: "NVIDIA", logo: "/logo.svg" }, + { name: "Meta", logo: "/logo.svg" }, + { name: "Google", logo: "/logo.svg" }, + { name: "Microsoft", logo: "/logo.svg" }, + { name: "Apple", logo: "/logo.svg" }, + ]; +// Duplicate the sponsors array for seamless infinite scroll + const duplicatedSponsors = [...sponsors, ...sponsors, ...sponsors]; + + useEffect(() => { + const scrollContainer = scrollRef.current; + if (!scrollContainer) return; + + let animationFrameId: number; + let scrollPosition = 0; + const scrollSpeed = 0.5; // Adjust speed here (lower = slower) + + const animate = () => { + scrollPosition += scrollSpeed; + + // Reset position for infinite scroll + const maxScroll = scrollContainer.scrollWidth / 3; + if (scrollPosition >= maxScroll) { + scrollPosition = 0; + } + + scrollContainer.scrollLeft = scrollPosition; + animationFrameId = requestAnimationFrame(animate); + }; + + animationFrameId = requestAnimationFrame(animate); + + // Pause on hover + const handleMouseEnter = () => { + cancelAnimationFrame(animationFrameId); + }; + + const handleMouseLeave = () => { + animationFrameId = requestAnimationFrame(animate); + }; + + scrollContainer.addEventListener("mouseenter", handleMouseEnter); + scrollContainer.addEventListener("mouseleave", handleMouseLeave); + + return () => { + cancelAnimationFrame(animationFrameId); + scrollContainer.removeEventListener("mouseenter", handleMouseEnter); + scrollContainer.removeEventListener("mouseleave", handleMouseLeave); + }; + }, []); + + return ( +
+
+
+ + Past Sponsors + +
+ +
+
+
+ +
+ {duplicatedSponsors.map((sponsor, index) => ( +
+
+
+ {sponsor.name} +
+
+
+ ))} +
+
+
+ + +
+ ); +} + diff --git a/app/components/StarryBackground.tsx b/app/components/StarryBackground.tsx new file mode 100644 index 0000000..dca716f --- /dev/null +++ b/app/components/StarryBackground.tsx @@ -0,0 +1,213 @@ +"use client"; + +import { useEffect, useState, useRef } from "react"; +import { gsap } from "gsap"; + +interface Star { + id: number; + left: number; + top: number; + delay: number; + duration: number; + color: string; + opacity: number; + shadowSize: number; + shadowSizeMedium: number; + shadowSizeLarge: number; + points: number; +} + +interface StarryBackgroundProps { + className?: string; +} + +export default function StarryBackground({ className = "" }: StarryBackgroundProps) { + const [stars, setStars] = useState<{ + smallStars: Star[]; + mediumStars: Star[]; + largeStars: Star[]; + shootingStars: Star[]; + }>({ + smallStars: [], + mediumStars: [], + largeStars: [], + shootingStars: [] + }); + + const containerRef = useRef(null); + + useEffect(() => { + // Generate stars only on client side to avoid hydration issues + const generateStars = (count: number, layer: number): Star[] => { + return Array.from({ length: count }, (_, i) => ({ + id: i + layer * 100, + left: Math.random() * 100, + top: Math.random() * 100, + delay: Math.random() * 5, + duration: 2 + Math.random() * 4, + color: Math.random() > 0.95 ? '#87CEEB' : '#FFFFFF', + opacity: 0.2 + Math.random() * 0.6, + shadowSize: 1 + Math.random() * 2, + shadowSizeMedium: 2 + Math.random() * 3, + shadowSizeLarge: 3 + Math.random() * 4, + points: Math.random() > 0.5 ? 5 : 6, // 5 or 6 pointed stars + })); + }; + + setStars({ + smallStars: generateStars(15, 1), + mediumStars: generateStars(8, 2), + largeStars: generateStars(4, 3), + shootingStars: generateStars(1, 4) + }); + }, []); + + useEffect(() => { + if (containerRef.current && stars.smallStars.length > 0) { + // GSAP animations for stars + const starElements = containerRef.current.querySelectorAll('.star-element'); + + // Initial animation - stars fade in with stagger + gsap.fromTo(starElements, + { + scale: 0, + opacity: 0, + rotation: Math.random() * 360 + }, + { + scale: 1, + opacity: 1, + rotation: 0, + duration: 2, + stagger: 0.05, + ease: "back.out(1.7)" + } + ); + + // Continuous twinkling animation + starElements.forEach((star, index) => { + gsap.to(star, { + scale: 1.2, + opacity: 0.8, + duration: 2 + Math.random() * 2, + ease: "power2.inOut", + yoyo: true, + repeat: -1, + delay: Math.random() * 2 + }); + }); + + // Shooting star animation + const shootingStar = containerRef.current.querySelector('.shooting-star'); + if (shootingStar) { + gsap.to(shootingStar, { + x: "100vw", + y: "100vh", + rotation: 45, + duration: 3, + ease: "power2.in", + repeat: -1, + repeatDelay: 5 + }); + } + } + }, [stars]); + + const StarShape = ({ star, size }: { star: Star; size: number }) => { + const isFivePointed = star.points === 5; + + // Create star shape using CSS clip-path + const starClipPath = isFivePointed + ? 'polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)' + : 'polygon(50% 0%, 60% 40%, 100% 40%, 70% 60%, 80% 100%, 50% 80%, 20% 100%, 30% 60%, 0% 40%, 40% 40%)'; + + return ( +
+ ); + }; + + return ( +
+ {/* Stars Layer 1 - Small stars */} +
+ {stars.smallStars.map((star) => ( +
+ +
+ ))} +
+ + {/* Stars Layer 2 - Medium stars */} +
+ {stars.mediumStars.map((star) => ( +
+ +
+ ))} +
+ + {/* Stars Layer 3 - Large stars */} +
+ {stars.largeStars.map((star) => ( +
+ +
+ ))} +
+ + {/* Shooting stars */} +
+ {stars.shootingStars.map((star) => ( +
+
+
+ ))} +
+
+ ); +} diff --git a/app/components/TeamCarousel.tsx b/app/components/TeamCarousel.tsx new file mode 100644 index 0000000..565f711 --- /dev/null +++ b/app/components/TeamCarousel.tsx @@ -0,0 +1,360 @@ +"use client"; + +import { useState, useRef, useEffect } from "react"; +import { gsap } from "gsap"; +import { ScrollTrigger } from "gsap/ScrollTrigger"; +import Image from "next/image"; +import { teamSlides, TeamSlide } from "../data/teamData"; + +if (typeof window !== "undefined") { + gsap.registerPlugin(ScrollTrigger); +} + +interface TeamCarouselProps { + sectionRef: React.RefObject; +} + +export default function TeamCarousel({ sectionRef }: TeamCarouselProps) { + const [currentSlide, setCurrentSlide] = useState(0); + const carouselRef = useRef(null); + const slideRefs = useRef([]); + const titleRefs = useRef([]); + const textRefs = useRef([]); + const imageRefs = useRef([]); + const magneticRefs = useRef([]); + + console.log("TeamCarousel rendering, currentSlide:", currentSlide); + console.log("teamSlides length:", teamSlides.length); + + useEffect(() => { + const slides = slideRefs.current; + const titles = titleRefs.current; + const texts = textRefs.current; + const images = imageRefs.current; + const magneticElements = magneticRefs.current; + + gsap.set([titles, texts, images], { + opacity: 0, + y: 50, + }); + + const currentSlideElement = slides[currentSlide]; + if (currentSlideElement) { + const slideTitle = currentSlideElement.querySelector('h2'); + const slideTexts = currentSlideElement.querySelectorAll('p'); + const slideImages = currentSlideElement.querySelectorAll('[data-image]'); + + gsap.to([slideTitle, ...slideTexts, ...slideImages], { + opacity: 1, + y: 0, + duration: 0.8, + stagger: 0.1, + ease: "power3.out", + }); + } + + titles.forEach((title) => { + if (title && title.textContent) { + const chars = title.textContent.split(""); + title.innerHTML = chars + .map((char) => + char === " " ? " " : `${char}` + ) + .join(""); + + const charSpans = title.querySelectorAll(".char"); + gsap.set(charSpans, { opacity: 0, y: 20 }); + + gsap.to(charSpans, { + opacity: 1, + y: 0, + duration: 0.5, + stagger: 0.03, + ease: "back.out(1.7)", + }); + } + }); + + magneticElements.forEach((element) => { + const hasTextContent = + element.textContent && element.textContent.trim().length > 0; + const isTextContainer = + element.classList.contains("text-left") || + element.classList.contains("text-right"); + + if (!hasTextContent && !isTextContainer) { + return; + } + + const handleMouseMove = (e: MouseEvent) => { + const rect = element.getBoundingClientRect(); + const x = e.clientX - rect.left - rect.width / 2; + const y = e.clientY - rect.top - rect.height / 2; + + const distance = Math.sqrt(x * x + y * y); + const maxDistance = + Math.sqrt(rect.width * rect.width + rect.height * rect.height) / 2; + const strength = Math.max(0, 1 - distance / maxDistance); + + const moveX = x * strength * 0.3; + const moveY = y * strength * 0.3; + + gsap.to(element, { + x: moveX, + y: moveY, + scale: 1 + strength * 0.05, + duration: 0.3, + ease: "power2.out", + }); + }; + + const handleMouseLeave = () => { + gsap.to(element, { + x: 0, + y: 0, + scale: 1, + duration: 0.5, + ease: "elastic.out(1, 0.3)", + }); + }; + + element.addEventListener("mousemove", handleMouseMove); + element.addEventListener("mouseleave", handleMouseLeave); + }); + + return () => { + ScrollTrigger.getAll().forEach((trigger) => trigger.kill()); + }; + }, [currentSlide]); + + const nextSlide = () => { + setCurrentSlide((prev) => (prev + 1) % teamSlides.length); + }; + + const prevSlide = () => { + setCurrentSlide((prev) => (prev - 1 + teamSlides.length) % teamSlides.length); + }; + + const goToSlide = (index: number) => { + setCurrentSlide(index); + }; + + const addTitleRef = (el: HTMLHeadingElement | null) => { + if (el && !titleRefs.current.includes(el)) { + titleRefs.current.push(el); + } + }; + + const addTextRef = (el: HTMLParagraphElement | null) => { + if (el && !textRefs.current.includes(el)) { + textRefs.current.push(el); + } + }; + + const addImageRef = (el: HTMLDivElement | null) => { + if (el && !imageRefs.current.includes(el)) { + imageRefs.current.push(el); + } + }; + + const addMagneticRef = (el: HTMLDivElement | null) => { + if (el && !magneticRefs.current.includes(el)) { + magneticRefs.current.push(el); + } + }; + + const addSlideRef = (el: HTMLDivElement | null) => { + if (el && !slideRefs.current.includes(el)) { + slideRefs.current.push(el); + } + }; + + const renderSlide = (slide: TeamSlide, index: number) => { + const isActive = index === currentSlide; + + if (slide.id === "intro") { + return ( +
+
+
+

+ + {slide.title} + +

+
+

{slide.description.split('. ')[0] + '. ' + slide.description.split('. ')[1] + '.'}

+

{slide.description.split('. ').slice(2).join('. ') + '.'}

+
+
+ +
+
+ HackUTD Team +
+
+
+
+ ); + } + + return ( +
+
+
+

+ + {slide.title} + +

+

+ {slide.description} +

+
+ +
+
+ {`${slide.title} +
+
+
+ + {slide.members.length > 0 && ( +
+ {slide.members.map((member, memberIndex) => ( +
+
+ {member.name} +
+

+ {member.name} +

+

+ {member.role} +

+
+ ))} +
+ )} +
+ ); + }; + + if (!teamSlides || teamSlides.length === 0) { + return ( +
+

Loading team data...

+
+ ); + } + + return ( +
+
+ Debug: Slide {currentSlide + 1} of {teamSlides.length} +
+ +
+ {teamSlides.map((slide, index) => renderSlide(slide, index))} + +
+ {currentSlide + 1} / {teamSlides.length} +
+
+ +
+ + +
+ {teamSlides.map((_, index) => ( +
+ + +
+
+ ); +} diff --git a/app/components/hero.tsx b/app/components/hero.tsx index aca5df5..5238856 100644 --- a/app/components/hero.tsx +++ b/app/components/hero.tsx @@ -1,27 +1,59 @@ "use client"; +import Image from "next/image"; +import Stars from "./stars"; export default function Hero() { return ( -
-
-
-
-
- {/* Replace with actual logo SVG or Image */} - {/* logo */} -
- We are +
+
+
+
+ +
+
+ {/* Logo */} + HackUTD Logo + + {/* Text Section */} +
+

We are

+

+ Hack + + UTD + +

+

+ North America's Largest 24-hour Hackathon +

+
+
+
+
+
+
+ Dallas Skyline
+
-

- Hack - - UTD - -

-

- North America's Largest 24-hour Hackathon -

); diff --git a/app/components/navbar.tsx b/app/components/navbar.tsx new file mode 100644 index 0000000..b7e664a --- /dev/null +++ b/app/components/navbar.tsx @@ -0,0 +1,242 @@ +"use client"; + +import React from "react"; + +import Link from "next/link"; +import Image from "next/image"; +import { Menu, Instagram, Linkedin, type LucideIcon } from "lucide-react"; +import { FaXTwitter, FaTiktok } from "react-icons/fa6"; +import { useState } from "react"; + +function cn(...classes: (string | undefined | null | false)[]): string { + return classes.filter(Boolean).join(" "); +} + +interface ButtonProps extends React.ButtonHTMLAttributes { + asChild?: boolean; + variant?: "default" | "outline"; + size?: "default" | "icon"; + children: React.ReactNode; +} + +function Button({ + asChild, + variant = "default", + size = "default", + className, + children, + ...props +}: ButtonProps) { + const baseClasses = + "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background"; + + const variants = { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + outline: "border border-input hover:bg-accent hover:text-accent-foreground", + }; + + const sizes = { + default: "h-10 py-2 px-4", + icon: "h-10 w-10", + }; + + const classes = cn(baseClasses, variants[variant], sizes[size], className); + + if (asChild && React.isValidElement(children)) { + return React.cloneElement(children, { + className: classes, + ...(children.props as any), + }); + } + + return ( + + ); +} + +function MobileSheet({ + children, + trigger, +}: { + children: React.ReactNode; + trigger: React.ReactNode; +}) { + const [isOpen, setIsOpen] = useState(false); + + return ( + <> +
setIsOpen(true)}>{trigger}
+ + {isOpen && ( + <> + {/* Backdrop */} +
setIsOpen(false)} + /> + + {/* Sheet */} +
+ {children} +
+ + )} + + ); +} + +export interface NavLink { + href: string; + label: string; + icon?: LucideIcon; +} + +export interface NavbarProps { + /** Brand logo source */ + logoSrc?: string; + /** Brand name */ + brandName: string; + /** Navigation links */ + links: NavLink[]; + /** CTA button text */ + ctaText?: string; + /** CTA button href */ + ctaHref?: string; + /** Custom logo width (default: 20) */ + logoWidth?: number; + /** Custom logo height (default: 20) */ + logoHeight?: number; + /** Custom container max width (default: max-w-4xl) */ + containerMaxWidth?: string; +} + +export function Navbar({ + logoSrc, + brandName, + links, + ctaText = "Get Started", + ctaHref = "#contact", + logoWidth = 20, + logoHeight = 20, + containerMaxWidth = "max-w-4xl", +}: NavbarProps) { + return ( +
+
+
+ {/* Brand Logo */} + + {logoSrc && ( + {`${brandName} + )} + + {brandName} + + + + {/* Desktop Nav */} + + + {/* Social Media Icons */} +
+ + + + + + + + + +
+ + {/* Mobile Nav */} +
+ + + Open menu + + } + > + {/* Brand Header */} +
+ {logoSrc && ( + {`${brandName} + )} + + {brandName} + +
+ + {/* Nav Links */} + + + {/* CTA Button removed from mobile sheet */} + +
+
+
+
+ ); +} + +export default Navbar; diff --git a/app/components/stars.tsx b/app/components/stars.tsx new file mode 100644 index 0000000..d81ed64 --- /dev/null +++ b/app/components/stars.tsx @@ -0,0 +1,148 @@ +"use client"; + +import { useEffect, useRef } from "react"; + +interface Star { + x: number; + y: number; + z: number; + prevZ: number; +} + +interface StarsProps { + count?: number; + speed?: number; + className?: string; + starColor?: string; + trailOpacity?: number; +} + +export default function Stars({ + count = 3000, + speed = 0.5, + className = "", + starColor = "#ffffff", + trailOpacity = 0.8, +}: StarsProps) { + const canvasRef = useRef(null); + const starsRef = useRef([]); + const animationRef = useRef(); + + useEffect(() => { + const canvas = canvasRef.current; + if (!canvas) return; + + const ctx = canvas.getContext("2d"); + if (!ctx) return; + + let currentSpeed = 100; + let lastScrollY = window.scrollY; + let lastTime = performance.now(); + + // Initialize stars + const initStars = () => { + starsRef.current = []; + for (let i = 0; i < count; i++) { + starsRef.current.push({ + x: Math.random() * 1600 - 800, + y: Math.random() * 900 - 450, + z: Math.random() * 1000, + prevZ: Math.random() * 1000, + }); + } + }; + + const resizeCanvas = () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }; + + const animate = (time: number) => { + const { width, height } = canvas; + + // --- SCROLL SPEED CALCULATION --- + const deltaTime = time - lastTime; + lastTime = time; + + const scrollDelta = window.scrollY - lastScrollY; // signed value + lastScrollY = window.scrollY; + + // Map scroll delta magnitude to speed range [0.03, 10] + const magnitude = Math.abs(scrollDelta); + let targetSpeed = Math.min(10, 0.03 + magnitude / 50); + + // Reverse if scrolling up + if (scrollDelta < 0) targetSpeed *= -1; + + if (magnitude > 0) { + // Smooth ease toward target speed + currentSpeed += (targetSpeed - currentSpeed) * 0.2; + } else { + // Ease back to base forward speed + currentSpeed += (0.03 - currentSpeed) * 0.05; + } + + // --- DRAWING --- + ctx.clearRect(0, 0, width, height); // transparent background + + starsRef.current.forEach((star) => { + star.prevZ = star.z; + star.z -= currentSpeed; + + // Wrap/reset if too close or too far + if (star.z <= 0) { + star.x = Math.random() * 1600 - 800; + star.y = Math.random() * 900 - 450; + star.z = 1000; + star.prevZ = 1000; + } + + // Clamp z to prevent negative radius errors + star.z = Math.max(1, Math.min(star.z, 1000)); + + const x = ((star.x / star.z) * width) / 2 + width / 2; + const y = ((star.y / star.z) * height) / 2 + height / 2; + const prevX = ((star.x / star.prevZ) * width) / 2 + width / 2; + const prevY = ((star.y / star.prevZ) * height) / 2 + height / 2; + + const size = Math.max(0, (1 - star.z / 1000) * 2); + const opacity = 1 - star.z / 1000; + + ctx.strokeStyle = `${starColor}${Math.floor(opacity * 255) + .toString(16) + .padStart(2, "0")}`; + ctx.lineWidth = size; + ctx.beginPath(); + ctx.moveTo(prevX, prevY); + ctx.lineTo(x, y); + ctx.stroke(); + + ctx.fillStyle = `${starColor}${Math.floor(opacity * 255) + .toString(16) + .padStart(2, "0")}`; + ctx.beginPath(); + ctx.arc(x, y, size, 0, Math.PI * 2); + ctx.fill(); + }); + + animationRef.current = requestAnimationFrame(animate); + }; + + resizeCanvas(); + initStars(); + animate(performance.now()); + + window.addEventListener("resize", resizeCanvas); + return () => { + window.removeEventListener("resize", resizeCanvas); + if (animationRef.current) cancelAnimationFrame(animationRef.current); + }; + }, [count, starColor]); + + return ( + + ); +} diff --git a/app/data/teamData.ts b/app/data/teamData.ts new file mode 100644 index 0000000..4d59f8a --- /dev/null +++ b/app/data/teamData.ts @@ -0,0 +1,55 @@ +export interface TeamMember { + name: string; + role: string; + imagePath: string; + } + + export interface TeamSlide { + id: string; + title: string; + description: string; + groupPhoto: string; + members: TeamMember[]; + } + + export const teamSlides: TeamSlide[] = [ + { + id: "intro", + title: "Who we are", + description: "We host HackUTD, Texas' largest hackathon. We also assist with other hackathons at UTD, and host helpful workshops that anyone can attend. Regardless of what we're working on, we aim to make our hackathons accessible and open to everyone. Glad to see you here!", + groupPhoto: "/Team.png", + members: [], + }, + { + id: "directors", + title: "Directors", + description: "Meet our leadership team guiding HackUTD to success.", + groupPhoto: "/assets/team/Directors.jpg", + members: [ + { name: "Kelly Zhou", role: "Co-Director", imagePath: "/assets/team/Kelly.jpg" }, + { name: "Adelaide Dunning", role: "Co-Director", imagePath: "/assets/team/Adelaide (Addy).jpg" }, + ], + }, + { + id: "experience", + title: "Experience Team", + description: "Creating memorable experiences for all participants.", + groupPhoto: "/assets/team/Experienceteam.jpg", + members: [], + }, + { + id: "marketing", + title: "Marketing Team", + description: "Spreading the word and building our community.", + groupPhoto: "/assets/team/MarketingGoats.jpg", + members: [], + }, + { + id: "logistics", + title: "Logistics Team", + description: "Ensuring everything runs smoothly behind the scenes.", + groupPhoto: "/assets/team/Logisticsteam.jpg", + members: [], + }, + ]; + \ No newline at end of file diff --git a/app/globals.css b/app/globals.css index a2dc41e..24c6d1a 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,5 +1,9 @@ +@import url('https://fonts.googleapis.com/css2?family=Kalnia&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&display=swap'); @import "tailwindcss"; + :root { --background: #ffffff; --foreground: #171717; @@ -19,8 +23,198 @@ } } -body { +@layer utilities { + .glow-bottom { + position: relative; + } + + .glow-bottom::after { + content: attr(data-text); + position: absolute; + left: 0; + top: 0; + z-index: -1; + color: white; + filter: blur(14px); + opacity: 0.5; + transform: translateY(25%); + clip-path: inset(50% 0 0 0); /* Shows only bottom half of the blurred glow */ + pointer-events: none; + } + + /* Floating animations for decorative images */ + .animate-float-slow { + animation: float-slow 8s ease-in-out infinite; + } + + .animate-float-medium { + animation: float-medium 6s ease-in-out infinite; + } + + .animate-float-fast { + animation: float-fast 5s ease-in-out infinite; + } +} + +html, body { background: var(--background); color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; + font-family: 'Inter', Arial, Helvetica, sans-serif; +} + +.animated-gradient { + background: linear-gradient(120deg, #21043a 0%, #4a185a 50%, #b05a8a 100%); + background-size: 200% 200%; + animation: gradientMove 8s ease-in-out infinite; +} + +@keyframes gradientMove { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +/* Starry Background Animations */ +@keyframes twinkle { + 0%, 100% { + opacity: 0.2; + transform: scale(1); + } + 50% { + opacity: 0.8; + transform: scale(1.1); + } +} + +@keyframes shooting-star { + 0% { + opacity: 0; + transform: translateX(-200px) translateY(0px) rotate(45deg); + } + 5% { + opacity: 1; + } + 95% { + opacity: 1; + } + 100% { + opacity: 0; + transform: translateX(calc(100vw + 200px)) translateY(calc(100vh + 200px)) rotate(45deg); + } +} + +@keyframes pulse { + 0%, 100% { + opacity: 0.4; + transform: scale(1); + } + 50% { + opacity: 1; + transform: scale(1.2); + } +} + +.animate-twinkle { + animation: twinkle 4s ease-in-out infinite; +} + +.animate-shooting-star { + animation: shooting-star 8s linear infinite; +} + +.animate-pulse { + animation: pulse 3s ease-in-out infinite; +} + +/* Star shape styles */ +.star-five { + position: relative; + display: inline-block; + clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%); +} + +.star-six { + position: relative; + display: inline-block; + clip-path: polygon(50% 0%, 60% 40%, 100% 40%, 70% 60%, 80% 100%, 50% 80%, 20% 100%, 30% 60%, 0% 40%, 40% 40%); +} + +.font-kalnia { + font-family: 'Kalnia', serif; +} + +.font-inter { + font-family: 'Inter', sans-serif; +} + +.font-DM-Sans { + font-family: 'DM Sans', sans-serif; +} + +.liquid-glass-header { + background: rgba(255, 255, 255, 0.06); + backdrop-filter: blur(20px) saturate(180%); + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08), + inset 0 1px 0 rgba(255, 255, 255, 0.15); +} + +.liquid-glass { + background: rgba(255, 255, 255, 0.08); + backdrop-filter: blur(20px) saturate(180%); + border: 1px solid rgba(255, 255, 255, 0.12); + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1), + inset 0 1px 0 rgba(255, 255, 255, 0.2); +} + +/* Floating animations for decorative images */ +@keyframes float-slow { + 0%, 100% { + transform: translateY(0px) translateX(0px) rotate(0deg); + } + 25% { + transform: translateY(-20px) translateX(10px) rotate(5deg); + } + 50% { + transform: translateY(-10px) translateX(20px) rotate(-5deg); + } + 75% { + transform: translateY(-25px) translateX(5px) rotate(3deg); + } +} + +@keyframes float-medium { + 0%, 100% { + transform: translateY(0px) translateX(0px) rotate(0deg); + } + 33% { + transform: translateY(-15px) translateX(-15px) rotate(-8deg); + } + 66% { + transform: translateY(-30px) translateX(5px) rotate(8deg); + } +} + +@keyframes float-fast { + 0%, 100% { + transform: translateY(0px) translateX(0px) rotate(0deg); + } + 20% { + transform: translateY(-25px) translateX(15px) rotate(10deg); + } + 40% { + transform: translateY(-10px) translateX(-10px) rotate(-10deg); + } + 60% { + transform: translateY(-20px) translateX(20px) rotate(5deg); + } + 80% { + transform: translateY(-30px) translateX(-5px) rotate(-5deg); + } } diff --git a/app/layout.tsx b/app/layout.tsx index f7fa87e..e10453b 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,6 +1,7 @@ import type { Metadata } from "next"; import { Geist, Geist_Mono } from "next/font/google"; import "./globals.css"; +import localFont from "next/font/local"; const geistSans = Geist({ variable: "--font-geist-sans", @@ -11,10 +12,36 @@ const geistMono = Geist_Mono({ variable: "--font-geist-mono", subsets: ["latin"], }); +// Import Cera Pro fonts +const ceraPro = localFont({ + variable: "--font-cera-pro", + src: [ + { + path: "../public/cera-pro/CeraPro-Regular.otf", + weight: "400", + style: "normal", + }, + { + path: "../public/cera-pro/CeraPro-Medium.otf", + weight: "500", + style: "normal", + }, + // { + // path: "../public/cera-pro/CeraPro-Bold.otf", + // weight: "700", + // style: "normal", + // }, + // { + // path: "../public/cera-pro/CeraPro-Black.otf", + // weight: "900", + // style: "normal", + // }, + ], +}); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "HackUTD", + description: "Home of HackUTD, the largest 24 hour hackathon in North America.", }; export default function RootLayout({ @@ -25,7 +52,7 @@ export default function RootLayout({ return ( {children} diff --git a/app/page.tsx b/app/page.tsx index 8a85080..6fdd0a0 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,12 +1,55 @@ -import Image from "next/image"; +"use client"; + import Hero from "./components/hero"; +import Navbar from "./components/navbar"; +import Intro from "./pages/intro"; +import OpenSource from "./pages/openSource"; +import PastHackathons from "./pages/pastHackathons"; +import Footer from "./pages/footer"; +import SponsorCarousel from "./components/SponsorCarousel"; export default function Home() { return ( -
-
- -
-
+
+
+
+
+ +
+
+ {/* Add padding to prevent content from being hidden under the navbar */} +
+ +
+
+
+ + + +
+
+
+ +
+
+
+ +
+
+
+
+
+
); } diff --git a/app/pages/footer.tsx b/app/pages/footer.tsx new file mode 100644 index 0000000..18d596f --- /dev/null +++ b/app/pages/footer.tsx @@ -0,0 +1,36 @@ +"use client"; + +import Image from "next/image"; + +export default function Footer() { + return ( +
+
+ +
+ © 2025 HackUTD by ACM UTD + + Get in Touch: hello@hackutd.co + +
+ +
+ + There's no HackUTD...without + + Heart U + + + +
+
+ ); +} \ No newline at end of file diff --git a/app/pages/hero.tsx b/app/pages/hero.tsx new file mode 100644 index 0000000..ed799a9 --- /dev/null +++ b/app/pages/hero.tsx @@ -0,0 +1,79 @@ +"use client"; + +import Image from "next/image"; +import { useState, useEffect, useRef } from "react"; +import StarryBackground from "../components/StarryBackground"; +import Navbar from "../components/navbar"; +import { initHeroAnimations } from "../animations/heroAnimations"; + +export default function Hero() { + const [skylineVisible, setSkylineVisible] = useState(false); + const heroRef = useRef(null); + const logoRef = useRef(null); + const titleRef = useRef(null); + const skylineRef = useRef(null); + + useEffect(() => { + initHeroAnimations(logoRef, titleRef, skylineRef, setSkylineVisible); + }, []); + + return ( +
+ + + + + + +
+
+ logo +
+
+ +
+ HackUTD +
+
+
+ +
+ Skyline +
+
+ ); +} \ No newline at end of file diff --git a/app/pages/intro.tsx b/app/pages/intro.tsx new file mode 100644 index 0000000..0351565 --- /dev/null +++ b/app/pages/intro.tsx @@ -0,0 +1,481 @@ +"use client"; + +import { useRef, useState, useEffect } from "react"; +import Image from "next/image"; +import * as XLSX from "xlsx"; +import { gsap } from "gsap"; + +interface TeamMember { + id: number; + firstName: string; + lastName: string; + fullName: string; + team: string; + linkedinUrl: string; + imagePath: string | null; + hasImage: boolean; +} + +interface ExcelRowData { + [key: string]: string | number | undefined; + "First Name"?: string; firstName?: string; First?: string; first?: string; + "Last Name"?: string; lastName?: string; Last?: string; last?: string; + Team?: string; team?: string; + linkedin_url?: string; LinkedIn_URL?: string; "LinkedIn URL"?: string; linkedinUrl?: string; LinkedIn?: string; +} + +interface TeamSlide { + id: string; + title: string; + description: string; + groupPhoto: string; + members: TeamMember[]; +} + +export default function Intro() { + const sectionRef = useRef(null); + const contentRef = useRef(null); + const [currentSlide, setCurrentSlide] = useState(0); + const [teamMembers, setTeamMembers] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); + const [isAnimating, setIsAnimating] = useState(false); + + useEffect(() => { + (async () => { + try { + setLoading(true); + setError(""); + const res = await fetch("/hackCo2025.xlsx"); + const buf = await res.arrayBuffer(); + const wb = XLSX.read(buf); + const ws = wb.Sheets[wb.SheetNames[0]]; + const raw: ExcelRowData[] = XLSX.utils.sheet_to_json(ws); + + const members: TeamMember[] = raw.map((row, i) => { + const firstName = + row["First Name"] ?? row.firstName ?? row.First ?? row.first ?? (Object.values(row)[0] as string) ?? ""; + const lastName = + row["Last Name"] ?? row.lastName ?? row.Last ?? row.last ?? (Object.values(row)[1] as string) ?? ""; + const team = row.Team ?? row.team ?? (Object.values(row)[3] as string) ?? ""; + const linkedinUrl = + row.linkedin_url ?? row["linkedin_url"] ?? row.LinkedIn_URL ?? row["LinkedIn URL"] ?? + row.linkedinUrl ?? row.LinkedIn ?? (Object.values(row)[4] as string) ?? ""; + + const imagePath = firstName ? `/assets/team/${String(firstName).toLowerCase()}.jpg` : null; + + return { + id: i + 1, + firstName: String(firstName), + lastName: String(lastName), + fullName: `${firstName} ${lastName}`.trim(), + team: String(team), + linkedinUrl: String(linkedinUrl), + imagePath, + hasImage: !!firstName, + }; + }); + + setTeamMembers(members); + + const uniqueTeams = [...new Set(members.map(m => m.team))]; + console.log("All teams found:", uniqueTeams); + } catch (e) { + console.error(e); + setError("Failed to load team members data"); + } finally { + setLoading(false); + } + })(); + }, []); + + const teamSlides: TeamSlide[] = [ + { + id: "intro", + title: "Who we are", + description: "We host HackUTD, Texas' largest hackathon. We also assist with other hackathons at UTD, and host helpful workshops that anyone can attend. Regardless of what we're working on, we aim to make our hackathons accessible and open to everyone. Glad to see you here! We inspire students to innovate and learn new technologies through hackathons, 24-hour events with challenges, free food & merch, and fun games & activities.", + groupPhoto: "/Team.png", + members: [] + }, + { + id: "directors", + title: "Directors", + description: "Our Directors lead the strategic vision and overall direction of HackUTD. They oversee all major decisions, coordinate with university administration, manage external partnerships, and ensure the organization's mission is fulfilled. They bring years of experience and passion to create the best possible hackathon experience for our participants.", + groupPhoto: "/assets/team/Directors.jpg", + members: teamMembers.filter(member => + member.team.toLowerCase().includes('director') || + member.team.toLowerCase().includes('executive') + ) + }, + { + id: "marketing", + title: "Marketing Team", + description: "Our Marketing Team creates compelling content and manages our brand presence across all platforms. They design graphics, manage social media, create promotional materials, and ensure HackUTD reaches the right audience. They're the creative force behind our visual identity and outreach efforts.", + groupPhoto: "/assets/team/group/Marketing.jpg", + members: teamMembers.filter(member => + member.team.toLowerCase().includes('marketing') || + member.team.toLowerCase().includes('social') || + member.team.toLowerCase().includes('content') + ) + }, + { + id: "logistics", + title: "Logistics Team", + description: "Our Logistics Team handles stuff.", + groupPhoto: "/assets/team/group/Logistics.jpg", + members: teamMembers.filter(member => + member.team.toLowerCase().includes('logistics') || + member.team.toLowerCase().includes('operations') || + member.team.toLowerCase().includes('venue') + ) + }, + { + id: "experience", + title: "Experience Team", + description: "Our Experience Team focuses on creating memorable moments for our participants. They plan workshops, coordinate activities, manage the participant journey, and ensure everyone has an engaging and educational experience. They're dedicated to making HackUTD more than just a coding competition.", + groupPhoto: "/assets/team/group/Experience.jpg", + members: teamMembers.filter(member => + member.team.toLowerCase().includes('experience') || + member.team.toLowerCase().includes('workshop') || + member.team.toLowerCase().includes('activities') + ) + }, + { + id: "tech", + title: "Tech Team", + description: "Our Tech Team handles all the technical aspects of our hackathons. They manage our website, develop tools and platforms, handle technical support during events, and ensure all our digital systems run smoothly. They're the backbone of our technical infrastructure.", + groupPhoto: "/assets/team/group/Tech.jpg", + members: teamMembers.filter(member => + member.team.toLowerCase().includes('tech') || + member.team.toLowerCase().includes('development') || + member.team.toLowerCase().includes('engineering') || + member.team.toLowerCase().includes('web') + ) + }, + { + id: "industry", + title: "Industry Team", + description: "Our Industry Team connects students with real-world opportunities and industry professionals. They organize networking events, coordinate industry partnerships, facilitate mentorship programs, and help bridge the gap between academic learning and professional development.", + groupPhoto: "/assets/team/group/Industry.jpg", + members: teamMembers.filter(member => + member.team.toLowerCase().includes('industry') || + member.team.toLowerCase().includes('networking') || + member.team.toLowerCase().includes('mentorship') || + member.team.toLowerCase().includes('professional') + ) + }, + { + id: "finance", + title: "Finance Team", + description: "Our Finance Team manages the financial aspects of HackUTD operations. They handle budgeting, expense tracking, financial planning, and ensure responsible stewardship of our resources. They work closely with all teams to maintain financial transparency and sustainability.", + groupPhoto: "/assets/team/group/Finance.jpg", + members: teamMembers.filter(member => + member.team.toLowerCase().includes('finance') || + member.team.toLowerCase().includes('financial') || + member.team.toLowerCase().includes('budget') || + member.team.toLowerCase().includes('treasury') + ) + } + ]; + + const animateSlideTransition = (newSlide: number) => { + if (isAnimating || !contentRef.current) return; + + setIsAnimating(true); + + gsap.to(contentRef.current, { + opacity: 0, + y: -30, + scale: 0.95, + duration: 0.3, + ease: "power2.inOut", + onComplete: () => { + setCurrentSlide(newSlide); + + // Animate in new content + gsap.fromTo(contentRef.current, + { + opacity: 0, + y: 30, + scale: 0.95 + }, + { + opacity: 1, + y: 0, + scale: 1, + duration: 0.4, + ease: "power2.out", + onComplete: () => { + setIsAnimating(false); + } + } + ); + } + }); + }; + + const nextSlide = () => { + const newSlide = (currentSlide + 1) % teamSlides.length; + animateSlideTransition(newSlide); + }; + + const prevSlide = () => { + const newSlide = (currentSlide - 1 + teamSlides.length) % teamSlides.length; + animateSlideTransition(newSlide); + }; + + const goToSlide = (index: number) => { + if (index !== currentSlide) { + animateSlideTransition(index); + } + }; + + const currentTeamSlide = teamSlides[currentSlide]; + + const getTeamQuote = (teamId: string): string => { + const quotes: { [key: string]: string } = { + "directors": "Hi! We're Addy and Kelly the Co-Directors this year. Our team has been working super hard all year and we're so excited to put on an incredible event! See you there!.", + "marketing": "Hey y'all! I'm Jordan, the marketing lead of this year and I can't wait to show y'all the amazing event that we've been putting together for y'all this year (and the fire merch that's coming 👀) Hope to see y'all there!", + "logistics": "Heyyy! I'm Anwita, the Logistics Lead this year! With my awesome team, I'll make sure you're well-fed and loaded up with cool swag so look forward to that. Can't wait to see everyone at HackUTD!", + "experience": "SUP SUP SUP! It's Daniel and I'm the HackUTD Experience Lead this year! I'm really looking forward to connecting with you all! Follow to stay up to date with all of the events we have coming up! Hope to see y'all there! 🫶", + "tech": "Hey! My name is Rayyan and I'm the Tech Lead for HackUTD this year. My team works behind the scenes to keep everything from registrations to check ins to judging running smoothly. If things feel seamless, it's because we're on deck around the clock making it that way. Can't wait to see y'all at HackUTD!", + "industry": "Hey guys I'm Ridwan and I'm the Industry lead of HackUTD this year! Along with the industry team, we work on bringing challenge statements, workshops, and other cool sponsorship opportunities to HackUTD! SUPER HYPED and excited to see all of our sponsors and hackers this year!", + "finance": "Hiiiiiii! I'm Ayusha and I'm the Finance Lead for HackUTD this year! 💸 My job is making sure we don't go broke while still making HackUTD the best it can be! Superrrr excited to see everyone at the event and can't wait for y'all to experience what we've been working on!" + }; + return quotes[teamId] || "Together we build the future, one hackathon at a time."; + }; + + const getTeamLeadName = (teamId: string): string => { + const leadNames: { [key: string]: string } = { + "directors": "Addy Dunning & Kelly Zhou", + "marketing": "Jordan Tan", + "logistics": "Anwita Gudapuri", + "experience": "Daniel Kim", + "tech": "Rayyan Waris", + "industry": "Ridwan Amin", + "finance": "Ayusha Timalsena" + }; + return leadNames[teamId] || "Team Lead"; + }; + + if (loading) { + return ( +
+
+
+ ); + } + + if (error) { + return ( +
+

{error}

+
+ ); + } + + return ( +
+ + {/* Main Content */} + {currentSlide === 0 ? ( + // Centered layout for "Who we are" slide +
+
+

+ + {currentTeamSlide.title} + +

+

+ {currentTeamSlide.description} +

+
+ +
+
+ {`${currentTeamSlide.title} +
+
+
+ ) : ( + // Side-by-side layout for team slides +
+
+

+ + {currentTeamSlide.title} + +

+

+ {currentTeamSlide.description} +

+
+ +
+
+ {`${currentTeamSlide.title} +
+
+
+ )} + + {/* Left Navigation Button */} + + + {/* Right Navigation Button */} + + + {/* Bottom Section - Individual Members and Quote */} + {currentTeamSlide.members.length > 0 && ( +
+ {/* Individual Members - Bottom Left */} +
+

+ Team Members +

+
+ {currentTeamSlide.members.map((member, index) => ( +
+
+ {member.hasImage && member.imagePath ? ( + {member.fullName} { + // Fallback to initials if image fails to load + const target = e.target as HTMLImageElement; + target.style.display = 'none'; + const parent = target.parentElement; + if (parent) { + parent.innerHTML = ` +
+ ${member.firstName ? member.firstName[0].toUpperCase() : "?"} +
+ `; + } + }} + /> + ) : ( +
+ {member.firstName ? member.firstName[0].toUpperCase() : "?"} +
+ )} + + {/* Social Media Overlay */} + {member.linkedinUrl && member.linkedinUrl !== "" && ( + + )} +
+

+ {member.fullName} + {currentTeamSlide.id !== "directors" && index === 0 && ( + Team Lead + )} +

+
+ ))} +
+
+ + {/* Quote Section - Bottom Right */} +
+
+
+ + + +
+ {getTeamQuote(currentTeamSlide.id)} +
+ + — {getTeamLeadName(currentTeamSlide.id)} + +
+
+
+
+ )} + + {/* Dot Navigation - Bottom Center */} +
+ {teamSlides.map((_, index) => ( +
+ + {/* Slide Counter */} +
+ {currentSlide + 1} / {teamSlides.length} +
+
+ ); +} diff --git a/app/pages/memberstemp.tsx b/app/pages/memberstemp.tsx new file mode 100644 index 0000000..a9c28e6 --- /dev/null +++ b/app/pages/memberstemp.tsx @@ -0,0 +1,226 @@ +"use client"; + +import React, { useState, useEffect, useRef } from "react"; +import Image from "next/image"; +import * as XLSX from "xlsx"; +import { initMembersAnimations } from "../animations/membersAnimations"; + +interface TeamMember { + id: number; + firstName: string; + lastName: string; + fullName: string; + team: string; + linkedinUrl: string; + imagePath: string | null; + hasImage: boolean; +} +interface MemberImageProps { member: TeamMember; } +interface ExcelRowData { + [key: string]: string | number | undefined; + "First Name"?: string; firstName?: string; First?: string; first?: string; + "Last Name"?: string; lastName?: string; Last?: string; last?: string; + Team?: string; team?: string; + linkedin_url?: string; LinkedIn_URL?: string; "LinkedIn URL"?: string; linkedinUrl?: string; LinkedIn?: string; +} + +const HEX_W = 120; +const HEX_H = Math.round((2 / Math.sqrt(3)) * HEX_W); +const ROW_OVERLAP = Math.round(HEX_H * 0.3); +const ODD_ROW_SHIFT = Math.round(HEX_W * 0.5); +const BORDER = 2; +const FUDGE_Y = 0; +const MAX_PER_ROW = 4; + +const Members: React.FC = () => { + const [teamMembers, setTeamMembers] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); + const membersContainerRef = useRef(null); + + useEffect(() => { + (async () => { + try { + setLoading(true); setError(""); + const res = await fetch("/hackCo2025.xlsx"); + const buf = await res.arrayBuffer(); + const wb = XLSX.read(buf); + const ws = wb.Sheets[wb.SheetNames[0]]; + const raw: ExcelRowData[] = XLSX.utils.sheet_to_json(ws); + + const members: TeamMember[] = raw.map((row, i) => { + const firstName = + row["First Name"] ?? row.firstName ?? row.First ?? row.first ?? (Object.values(row)[0] as string) ?? ""; + const lastName = + row["Last Name"] ?? row.lastName ?? row.Last ?? row.last ?? (Object.values(row)[1] as string) ?? ""; + const team = row.Team ?? row.team ?? (Object.values(row)[3] as string) ?? ""; + const linkedinUrl = + row.linkedin_url ?? row["linkedin_url"] ?? row.LinkedIn_URL ?? row["LinkedIn URL"] ?? + row.linkedinUrl ?? row.LinkedIn ?? (Object.values(row)[4] as string) ?? ""; + + const imagePath = firstName ? `/assets/team/${String(firstName).toLowerCase()}.jpg` : null; + + return { + id: i + 1, + firstName: String(firstName), + lastName: String(lastName), + fullName: `${firstName} ${lastName}`.trim(), + team: String(team), + linkedinUrl: String(linkedinUrl), + imagePath, + hasImage: !!firstName, + }; + }); + + setTeamMembers(members); + } catch (e) { + console.error(e); + setError("Failed to load team members data"); + } finally { + setLoading(false); + } + })(); + }, []); + + + useEffect(() => { + if (!loading && teamMembers.length > 0) { + const timer = setTimeout(() => { + initMembersAnimations(); + }, 100); + + return () => clearTimeout(timer); + } + }, [loading, teamMembers.length]); + + const MemberImage: React.FC = ({ member }) => { + const [imageError, setImageError] = useState(false); + + if (!member.hasImage || imageError) { + return ( +
+ {member.firstName ? member.firstName[0].toUpperCase() : "?"} +
+ ); + } + return ( + {member.fullName} setImageError(true)} + /> + ); + }; + + const chunk = (arr: T[], n: number) => + Array.from({ length: Math.ceil(arr.length / n) }, (_, i) => arr.slice(i * n, i * n + n)); + + const createAlternatingLayout = (members: TeamMember[]) => { + const rows: TeamMember[][] = []; + let currentIndex = 0; + let rowIndex = 0; + + while (currentIndex < members.length) { + const isEvenRow = rowIndex % 2 === 0; + const rowSize = isEvenRow ? 5 : 7; + const row = members.slice(currentIndex, currentIndex + rowSize); + if (row.length > 0) { + rows.push(row); + } + currentIndex += rowSize; + rowIndex++; + } + + return rows; + }; + + const rows = createAlternatingLayout(teamMembers); + + if (loading) { + return ( +
+
+
+ ); + } + if (error) { + return ( +
+

{error}

+
+ ); + } + + const hexClip = "polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%)"; + + return ( +
+
+
+

+ HackUTD Team +

+

+ {teamMembers.length} amazing members building the future +

+
+ +
+ {rows.map((row, rowIndex) => ( + + ))} +
+
+
+ ); +}; + +export default Members; diff --git a/app/pages/openSource.tsx b/app/pages/openSource.tsx new file mode 100644 index 0000000..2c1f833 --- /dev/null +++ b/app/pages/openSource.tsx @@ -0,0 +1,160 @@ +// app/components/OpenSource.tsx +"use client"; +import { useLayoutEffect, useRef } from "react"; +import hackScreenshot from "@/public/hackScreenshot.png"; +import juryScreenshot from "@/public/juryScreenshot2.png"; +import Image from "next/image"; +import Link from "next/link"; +import { initOpenSourceAnimations } from "../animations/openSourceAnimations"; + +export default function OpenSource() { + const sectionRef = useRef(null); + const headerRef = useRef(null); + const titleRef = useRef(null); + const subtitleRef = useRef(null); + const projectsRef = useRef(null); + + const projectCardRefs = useRef([]); + const projectImageRefs = useRef([]); + const projectTitleRefs = useRef([]); + const projectDescRefs = useRef([]); + + const projects = [ + { + title: "Hackportal", + description: + "A pre-built portal template made by HackUTD Developers, so you have one less thing to worry about. Used in HackTX, HACKUTA, HackUTD", + image: hackScreenshot, + url: "https://hackportal.hackutd.co/", + }, + { + title: "Jury", + description: + "A pre-built judge management tool developed by HackUTD Developers, so running judging is one less thing to worry about. Used at HackUTD, HackTX, and HACKUTA.", + image: juryScreenshot, + url: "https://jury.mikz.dev/", + }, + ]; + + useLayoutEffect(() => { + const cleanup = + initOpenSourceAnimations( + sectionRef, + headerRef, + titleRef, + subtitleRef, + projectsRef, + projectCardRefs, + projectImageRefs, + projectTitleRefs, + projectDescRefs + ) || (() => {}); + return cleanup; + }, []); + + const addCardRef = (el: HTMLDivElement | null) => { + if (el && !projectCardRefs.current.includes(el)) + projectCardRefs.current.push(el); + }; + const addImageRef = (el: HTMLDivElement | null) => { + if (el && !projectImageRefs.current.includes(el)) + projectImageRefs.current.push(el); + }; + const addTitleRef = (el: HTMLHeadingElement | null) => { + if (el && !projectTitleRefs.current.includes(el)) + projectTitleRefs.current.push(el); + }; + const addDescRef = (el: HTMLParagraphElement | null) => { + if (el && !projectDescRefs.current.includes(el)) + projectDescRefs.current.push(el); + }; + + return ( +
+
+
+

+ Our{" "} + + open source + {" "} + projects +

+ +

+ As active participants in the hackathon community, we've built + open-source tools to support and empower other organizers. +
+ Click on the projects below to learn more! +

+
+ +
+ {projects.map((project, index) => ( +
+ +
+ {`${project.title} +
+ + +
+

+ {project.title} +

+

+ {project.description} +

+
+
+ ))} +
+
+
+ ); +} diff --git a/app/pages/pastHackathons.tsx b/app/pages/pastHackathons.tsx new file mode 100644 index 0000000..4f426c1 --- /dev/null +++ b/app/pages/pastHackathons.tsx @@ -0,0 +1,365 @@ +'use client'; + +import React, { useEffect, useRef } from 'react'; +import Hack2020 from '@/public/Hack2020.svg'; +import Hack2021 from '@/public/Hack2021.svg'; +import Hack2022 from '@/public/Hack2022.svg'; +import Hack2023 from '@/public/Hack2023.svg'; +import Hack2024 from '@/public/Hack2024.svg'; +import Image from 'next/image'; +import Link from 'next/link'; +import { ScrollTrigger } from 'gsap/ScrollTrigger'; +import { initPastHackathonsAnimations } from '../animations/pastHackathonsAnimations'; + +export default function PastHackathons() { + const sectionRef = useRef(null); + const trackRef = useRef(null); + + const hackathons = [ + { + href: 'https://ripple.hackutd.co/', + src: Hack2024, + alt: 'Hack Badge 2024', + label: 'HackUTD 2024', + backgroundImage: '/hack2024-event-photo.jpg' + }, + { + href: 'https://x.hackutd.co/', + src: Hack2023, + alt: 'Hack Badge 2023', + label: 'HackUTD 2023', + backgroundImage: '/hack2023-event-photo.jpg' + }, + { + href: 'https://ix.hackutd.co/', + src: Hack2022, + alt: 'Hack Badge 2022', + label: 'HackUTD 2022', + backgroundImage: '/hack2022-event-photo.jpg' + }, + { + href: 'https://prod.hackutd.co/', + src: Hack2021, + alt: 'Hack Badge 2021', + label: 'HackUTD 2021', + backgroundImage: '/hack2021-event-photo.jpg' + }, + { + href: 'https://vii.hackutd.co/', + src: Hack2020, + alt: 'Hack Badge 2020', + label: 'HackUTD 2020', + backgroundImage: '/hack2020-event-photo.jpg' + }, + ]; + + useEffect(() => { + const cleanup = initPastHackathonsAnimations(sectionRef, trackRef); + return cleanup; + }, []); + + return ( +
+

+ Oh how far we've come... +

+

Scroll to see our past hackathons!

+ +
+
+ {hackathons.map((hackathon, index) => ( +
+
+ + {/* Floating decorative images - only on first slide */} + {index === 0 && ( + <> +
+
+ Floating duck +
+
+ +
+
+ Floating frog +
+
+ +
+
+ Floating mascot +
+
+ + )} + + {/* Floating decorative images - only on second slide */} + {index === 1 && ( + <> +
+
+ Title Gold +
+
+ +
+
+ Mascot +
+
+ +
+
+ Hero ECSW +
+
+ + )} + + {/* Floating decorative images - only on third slide */} + {index === 2 && ( + <> +
+
+ Rocket +
+
+ +
+
+ Pluwuto +
+
+ +
+
+ HackUTD IX No Sponsor Title +
+
+ + )} + + {/* Floating decorative images - only on fourth slide */} + {index === 3 && ( + <> +
+
+ White Astro +
+
+ +
+
+ Coaster Design +
+
+ +
+
+ T Shirt +
+
+ + )} + + {/* Floating decorative images - only on fifth slide */} + {index === 4 && ( + <> +
+
+ Bobo +
+
+ +
+
+ Ship +
+
+ +
+
+ Submarine +
+
+ + )} + +
+ + {hackathon.alt} { + try { ScrollTrigger.refresh(); } catch {} + }} + /> + +

{hackathon.label}

+
+
+ ))} + +
+ +
+ +
+

All HackUTD Badges

+
+ {hackathons.map((hackathon, i) => ( +
+ + {hackathon.alt} + +

{hackathon.label}

+
+ ))} +
+
+
+
+
+ + {/* Mobile: simple list (no GSAP) */} +
+

All HackUTD Badges

+
+ {hackathons.map((hackathon, index) => ( +
+ + {hackathon.alt} + +

{hackathon.label}

+
+ ))} +
+
+
+ ); +} diff --git a/package-lock.json b/package-lock.json index 77130ff..e353f4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,19 @@ "name": "hackutd-website", "version": "0.1.0", "dependencies": { + "@paper-design/shaders-react": "^0.0.53", + "@radix-ui/react-dialog": "^1.1.15", + "@types/xlsx": "^0.0.35", + "class-variance-authority": "^0.7.1", + "gsap": "^3.13.0", + "lucide-react": "^0.544.0", "next": "15.3.4", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "react-icons": "^5.5.0", + "swiper": "^11.2.10", + "tailwindcss-textshadow": "^2.1.3", + "xlsx": "^0.18.5" }, "devDependencies": { "@eslint/eslintrc": "^3", @@ -51,39 +61,6 @@ "node": ">=6.0.0" } }, - "node_modules/@emnapi/core": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", - "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.0.2", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", - "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", @@ -238,6 +215,107 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fullhuman/postcss-purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-2.3.0.tgz", + "integrity": "sha512-qnKm5dIOyPGJ70kPZ5jiz0I9foVOic0j+cOzNDoo8KoCf6HjicIZ99UfO2OmE7vCYSKAAepEwJtNzpiiZAh9xw==", + "dependencies": { + "postcss": "7.0.32", + "purgecss": "^2.3.0" + } + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + }, + "node_modules/@fullhuman/postcss-purgecss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -326,28 +404,6 @@ "@img/sharp-libvips-darwin-arm64": "1.1.0" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", - "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" - } - }, "node_modules/@img/sharp-libvips-darwin-arm64": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", @@ -364,611 +420,610 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.4.tgz", + "integrity": "sha512-ZkdYzBseS6UjYzz6ylVKPOK+//zLWvD6Ta+vpoye8cW11AjiQjGYVibF0xuvT4L0iJfAPfZLFidaEzAOywyOAQ==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.4.tgz", + "integrity": "sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.4.tgz", + "integrity": "sha512-z0qIYTONmPRbwHWvpyrFXJd5F9YWLCsw3Sjrzj2ZvMYy9NPQMPZ1NjOJh4ojr4oQzcGYwgJKfidzehaNa1BpEg==", "cpu": [ - "x64" + "arm64" ], - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "darwin" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": ">= 10" } }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "node_modules/@next/swc-darwin-x64": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.4.tgz", + "integrity": "sha512-Z0FYJM8lritw5Wq+vpHYuCIzIlEMjewG2aRkc3Hi2rcbULknYL/xqfpBL23jQnCSrDUGAo/AEv0Z+s2bff9Zkw==", "cpu": [ - "arm" + "x64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "linux" + "darwin" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": ">= 10" } }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.4.tgz", + "integrity": "sha512-l8ZQOCCg7adwmsnFm8m5q9eIPAHdaB2F3cxhufYtVo84pymwKuWfpYTKcUiFcutJdp9xGHC+F1Uq3xnFU1B/7g==", "cpu": [ "arm64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": ">= 10" } }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.4.tgz", + "integrity": "sha512-wFyZ7X470YJQtpKot4xCY3gpdn8lE9nTlldG07/kJYexCUpX1piX+MBfZdvulo+t1yADFVEuzFfVHfklfEx8kw==", "cpu": [ - "ppc64" + "arm64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": ">= 10" } }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.4.tgz", + "integrity": "sha512-gEbH9rv9o7I12qPyvZNVTyP/PWKqOp8clvnoYZQiX800KkqsaJZuOXkWgMa7ANCCh/oEN2ZQheh3yH8/kWPSEg==", "cpu": [ - "s390x" + "x64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": ">= 10" } }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.4.tgz", + "integrity": "sha512-Cf8sr0ufuC/nu/yQ76AnarbSAXcwG/wj+1xFPNbyNo8ltA6kw5d5YqO8kQuwVIxk13SBdtgXrNyom3ZosHAy4A==", "cpu": [ "x64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": ">= 10" } }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.4.tgz", + "integrity": "sha512-ay5+qADDN3rwRbRpEhTOreOn1OyJIXS60tg9WMYTWCy3fB6rGoyjLVxc4dR9PYjEdR2iDYsaF5h03NA+XuYPQQ==", "cpu": [ "arm64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "linux" + "win32" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": ">= 10" } }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.4.tgz", + "integrity": "sha512-4kDt31Bc9DGyYs41FTL1/kNpDeHyha2TC0j5sRRoKCyrhNcfZ/nRQkAUlF27mETwm8QyHqIjHJitfcza2Iykfg==", "cpu": [ "x64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", - "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" + "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", - "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", - "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", - "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", - "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", - "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + "node": ">= 10" } }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", - "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", "dependencies": { - "@emnapi/runtime": "^1.4.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", - "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", - "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", - "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">= 8" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, + "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">= 8" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 8" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=12.4.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" + "node_modules/@paper-design/shaders": { + "version": "0.0.53", + "resolved": "https://registry.npmjs.org/@paper-design/shaders/-/shaders-0.0.53.tgz", + "integrity": "sha512-ACeYUZNOGLFWXaidIf5CQ0pxPgKgSZjzCe7VJB83NcZJzkHoSppxnchhTrBxTt0OR85wIX+eQOxMJoDgqVCBGw==", + "license": "SEE LICENSE IN https://github.com/paper-design/shaders/blob/main/LICENSE" + }, + "node_modules/@paper-design/shaders-react": { + "version": "0.0.53", + "resolved": "https://registry.npmjs.org/@paper-design/shaders-react/-/shaders-react-0.0.53.tgz", + "integrity": "sha512-3WxkYrCpbIJE2l6uHbxHbuISnTM68i93fV1qIyBFUS/l01HBPM/90A9TTinyVWwOA4gIsnn+iSSmv9328z01nA==", + "license": "SEE LICENSE IN https://github.com/paper-design/shaders/blob/main/LICENSE", + "dependencies": { + "@paper-design/shaders": "0.0.53" + }, + "peerDependencies": { + "@types/react": "^18 || ^19", + "react": "^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", - "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", - "dev": true, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.9.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@next/env": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.4.tgz", - "integrity": "sha512-ZkdYzBseS6UjYzz6ylVKPOK+//zLWvD6Ta+vpoye8cW11AjiQjGYVibF0xuvT4L0iJfAPfZLFidaEzAOywyOAQ==", - "license": "MIT" + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } }, - "node_modules/@next/eslint-plugin-next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.4.tgz", - "integrity": "sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==", - "dev": true, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "license": "MIT", "dependencies": { - "fast-glob": "3.3.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.4.tgz", - "integrity": "sha512-z0qIYTONmPRbwHWvpyrFXJd5F9YWLCsw3Sjrzj2ZvMYy9NPQMPZ1NjOJh4ojr4oQzcGYwgJKfidzehaNa1BpEg==", - "cpu": [ - "arm64" - ], + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@next/swc-darwin-x64": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.4.tgz", - "integrity": "sha512-Z0FYJM8lritw5Wq+vpHYuCIzIlEMjewG2aRkc3Hi2rcbULknYL/xqfpBL23jQnCSrDUGAo/AEv0Z+s2bff9Zkw==", - "cpu": [ - "x64" - ], + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.4.tgz", - "integrity": "sha512-l8ZQOCCg7adwmsnFm8m5q9eIPAHdaB2F3cxhufYtVo84pymwKuWfpYTKcUiFcutJdp9xGHC+F1Uq3xnFU1B/7g==", - "cpu": [ - "arm64" - ], + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.4.tgz", - "integrity": "sha512-wFyZ7X470YJQtpKot4xCY3gpdn8lE9nTlldG07/kJYexCUpX1piX+MBfZdvulo+t1yADFVEuzFfVHfklfEx8kw==", - "cpu": [ - "arm64" - ], + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.4.tgz", - "integrity": "sha512-gEbH9rv9o7I12qPyvZNVTyP/PWKqOp8clvnoYZQiX800KkqsaJZuOXkWgMa7ANCCh/oEN2ZQheh3yH8/kWPSEg==", - "cpu": [ - "x64" - ], + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.4.tgz", - "integrity": "sha512-Cf8sr0ufuC/nu/yQ76AnarbSAXcwG/wj+1xFPNbyNo8ltA6kw5d5YqO8kQuwVIxk13SBdtgXrNyom3ZosHAy4A==", - "cpu": [ - "x64" - ], + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.4.tgz", - "integrity": "sha512-ay5+qADDN3rwRbRpEhTOreOn1OyJIXS60tg9WMYTWCy3fB6rGoyjLVxc4dR9PYjEdR2iDYsaF5h03NA+XuYPQQ==", - "cpu": [ - "arm64" - ], + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.4.tgz", - "integrity": "sha512-4kDt31Bc9DGyYs41FTL1/kNpDeHyha2TC0j5sRRoKCyrhNcfZ/nRQkAUlF27mETwm8QyHqIjHJitfcza2Iykfg==", - "cpu": [ - "x64" - ], + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@radix-ui/react-use-callback-ref": "1.1.1" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", "license": "MIT", - "engines": { - "node": ">=12.4.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/@rtsao/scc": { @@ -1045,23 +1100,6 @@ "@tailwindcss/oxide-win32-x64-msvc": "4.1.10" } }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.10.tgz", - "integrity": "sha512-VGLazCoRQ7rtsCzThaI1UyDu/XRYVyH4/EWiaSX6tFglE+xZB5cvtC5Omt0OQ+FfiIVP98su16jDVHDEIuH4iQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@tailwindcss/oxide-darwin-arm64": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.10.tgz", @@ -1079,189 +1117,6 @@ "node": ">= 10" } }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.10.tgz", - "integrity": "sha512-eCA4zbIhWUFDXoamNztmS0MjXHSEJYlvATzWnRiTqJkcUteSjO94PoRHJy1Xbwp9bptjeIxxBHh+zBWFhttbrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.10.tgz", - "integrity": "sha512-8/392Xu12R0cc93DpiJvNpJ4wYVSiciUlkiOHOSOQNH3adq9Gi/dtySK7dVQjXIOzlpSHjeCL89RUUI8/GTI6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.10.tgz", - "integrity": "sha512-t9rhmLT6EqeuPT+MXhWhlRYIMSfh5LZ6kBrC4FS6/+M1yXwfCtp24UumgCWOAJVyjQwG+lYva6wWZxrfvB+NhQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.10.tgz", - "integrity": "sha512-3oWrlNlxLRxXejQ8zImzrVLuZ/9Z2SeKoLhtCu0hpo38hTO2iL86eFOu4sVR8cZc6n3z7eRXXqtHJECa6mFOvA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.10.tgz", - "integrity": "sha512-saScU0cmWvg/Ez4gUmQWr9pvY9Kssxt+Xenfx1LG7LmqjcrvBnw4r9VjkFcqmbBb7GCBwYNcZi9X3/oMda9sqQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.10.tgz", - "integrity": "sha512-/G3ao/ybV9YEEgAXeEg28dyH6gs1QG8tvdN9c2MNZdUXYBaIY/Gx0N6RlJzfLy/7Nkdok4kaxKPHKJUlAaoTdA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.10.tgz", - "integrity": "sha512-LNr7X8fTiKGRtQGOerSayc2pWJp/9ptRYAa4G+U+cjw9kJZvkopav1AQc5HHD+U364f71tZv6XamaHKgrIoVzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.10.tgz", - "integrity": "sha512-d6ekQpopFQJAcIK2i7ZzWOYGZ+A6NzzvQ3ozBvWFdeyqfOZdYHU66g5yr+/HC4ipP1ZgWsqa80+ISNILk+ae/Q==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@emnapi/wasi-threads": "^1.0.2", - "@napi-rs/wasm-runtime": "^0.2.10", - "@tybys/wasm-util": "^0.9.0", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.10.tgz", - "integrity": "sha512-i1Iwg9gRbwNVOCYmnigWCCgow8nDWSFmeTUU5nbNx3rqbe4p0kRbEqLwLJbYZKmSSp23g4N6rCDmm7OuPBXhDA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.10.tgz", - "integrity": "sha512-sGiJTjcBSfGq2DVRtaSljq5ZgZS2SDHSIfhOylkBvHVjwOsodBhnb3HdmiKkVuUGKD0I7G63abMOVaskj1KpOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@tailwindcss/postcss": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.10.tgz", @@ -1270,21 +1125,10 @@ "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.1.10", - "@tailwindcss/oxide": "4.1.10", - "postcss": "^8.4.41", - "tailwindcss": "4.1.10" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "@tailwindcss/node": "4.1.10", + "@tailwindcss/oxide": "4.1.10", + "postcss": "^8.4.41", + "tailwindcss": "4.1.10" } }, "node_modules/@types/estree": { @@ -1322,7 +1166,7 @@ "version": "19.1.8", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -1332,12 +1176,18 @@ "version": "19.1.6", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", - "dev": true, + "devOptional": true, "license": "MIT", "peerDependencies": { "@types/react": "^19.0.0" } }, + "node_modules/@types/xlsx": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/xlsx/-/xlsx-0.0.35.tgz", + "integrity": "sha512-s0x3DYHZzOkxtjqOk/Nv1ezGzpbN7I8WX+lzlV/nFfTDOv7x4d8ZwGHcnaiB8UCx89omPsftQhS5II3jeWePxQ==", + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.35.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.0.tgz", @@ -1494,404 +1344,149 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz", - "integrity": "sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.35.0", - "@typescript-eslint/tsconfig-utils": "8.35.0", - "@typescript-eslint/types": "8.35.0", - "@typescript-eslint/visitor-keys": "8.35.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.0.tgz", - "integrity": "sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.35.0", - "@typescript-eslint/types": "8.35.0", - "@typescript-eslint/typescript-estree": "8.35.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.0.tgz", - "integrity": "sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.35.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.2.tgz", - "integrity": "sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.2.tgz", - "integrity": "sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.2.tgz", - "integrity": "sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.2.tgz", - "integrity": "sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.2.tgz", - "integrity": "sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.2.tgz", - "integrity": "sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.2.tgz", - "integrity": "sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.2.tgz", - "integrity": "sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.2.tgz", - "integrity": "sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.2.tgz", - "integrity": "sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.2.tgz", - "integrity": "sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.2.tgz", - "integrity": "sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg==", - "cpu": [ - "riscv64" - ], + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz", + "integrity": "sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@typescript-eslint/project-service": "8.35.0", + "@typescript-eslint/tsconfig-utils": "8.35.0", + "@typescript-eslint/types": "8.35.0", + "@typescript-eslint/visitor-keys": "8.35.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.2.tgz", - "integrity": "sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ==", - "cpu": [ - "s390x" - ], + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.2.tgz", - "integrity": "sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w==", - "cpu": [ - "x64" - ], + "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.2.tgz", - "integrity": "sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw==", - "cpu": [ - "x64" - ], + "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.2.tgz", - "integrity": "sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ==", - "cpu": [ - "wasm32" - ], + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.2.tgz", - "integrity": "sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw==", - "cpu": [ - "arm64" - ], + "node_modules/@typescript-eslint/utils": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.0.tgz", + "integrity": "sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.35.0", + "@typescript-eslint/types": "8.35.0", + "@typescript-eslint/typescript-estree": "8.35.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.2.tgz", - "integrity": "sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA==", - "cpu": [ - "ia32" - ], + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.0.tgz", + "integrity": "sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@typescript-eslint/types": "8.35.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "node_modules/@unrs/resolver-binding-darwin-arm64": { "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.2.tgz", - "integrity": "sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.2.tgz", + "integrity": "sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ] }, "node_modules/acorn": { @@ -1917,6 +1512,44 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1938,7 +1571,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -1957,6 +1589,18 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", @@ -2144,6 +1788,48 @@ "node": ">= 0.4" } }, + "node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/autoprefixer/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/autoprefixer/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -2184,14 +1870,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -2211,6 +1895,37 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.25.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -2222,6 +1937,14 @@ "node": ">=10.16.0" } }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2282,10 +2005,18 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001726", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", - "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", + "version": "1.0.30001734", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz", + "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==", "funding": [ { "type": "opencollective", @@ -2299,14 +2030,25 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2329,12 +2071,42 @@ "node": ">=18" } }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -2353,7 +2125,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2366,7 +2137,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, "license": "MIT" }, "node_modules/color-string": { @@ -2374,19 +2144,37 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "license": "MIT", - "optional": true, "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, "license": "MIT" }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2402,11 +2190,27 @@ "node": ">= 8" } }, + "node_modules/css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -2531,6 +2335,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/detect-libc": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", @@ -2541,6 +2353,28 @@ "node": ">=8" } }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2569,6 +2403,11 @@ "node": ">= 0.4" } }, + "node_modules/electron-to-chromium": { + "version": "1.5.199", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.199.tgz", + "integrity": "sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ==" + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -2767,6 +2606,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3347,11 +3194,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3413,6 +3286,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -3458,6 +3340,26 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3518,7 +3420,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -3528,6 +3429,11 @@ "dev": true, "license": "MIT" }, + "node_modules/gsap": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.13.0.tgz", + "integrity": "sha512-QL7MJ2WMjm1PHWsoFrAQH/J8wUeqZvMtHO58qdekHpCfhvhSL4gSiz6vJf5EeMP0LOn3ZCprL2ki/gjED8ghVw==" + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -3545,7 +3451,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3613,7 +3518,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -3622,6 +3526,17 @@ "node": ">= 0.4" } }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3659,6 +3574,21 @@ "node": ">=0.8.19" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -3696,8 +3626,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", @@ -3779,7 +3708,6 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -4178,6 +4106,14 @@ "json5": "lib/cli.js" } }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -4191,283 +4127,94 @@ "object.values": "^1.1.6" }, "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lightningcss": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", - "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", - "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", - "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", - "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=4.0" } }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", - "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", - "cpu": [ - "arm64" - ], + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" } }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", - "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", - "cpu": [ - "arm64" - ], + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } + "license": "CC0-1.0" }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", - "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", - "cpu": [ - "x64" - ], + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=0.10" } }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", - "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", - "cpu": [ - "x64" - ], + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/lightningcss-win32-arm64-msvc": { + "node_modules/lightningcss": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", - "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", - "cpu": [ - "arm64" - ], + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", "dev": true, "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "detect-libc": "^2.0.3" + }, "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" } }, - "node_modules/lightningcss-win32-x64-msvc": { + "node_modules/lightningcss-darwin-arm64": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", - "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MPL-2.0", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">= 12.0.0" @@ -4493,6 +4240,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4513,6 +4265,15 @@ "loose-envify": "cli.js" } }, + "node_modules/lucide-react": { + "version": "0.544.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.544.0.tgz", + "integrity": "sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", @@ -4561,7 +4322,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -4574,7 +4334,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4749,16 +4508,54 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -4872,6 +4669,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -4963,6 +4768,14 @@ "node": ">=8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4977,7 +4790,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/picocolors": { @@ -5009,35 +4821,205 @@ "node": ">= 0.4" } }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-functions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", + "integrity": "sha512-N5yWXWKA+uhpLQ9ZhBRl2bIAdM6oVJYpDojuI1nF2SzXBimJcdjFwiAouBVbO5VuOF3qA6BSFWFc3wXbbj72XQ==", + "dependencies": { + "glob": "^7.1.2", + "object-assign": "^4.1.1", + "postcss": "^6.0.9", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/postcss-functions/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-functions/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-functions/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-functions/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/postcss-functions/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/postcss-functions/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-functions/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-functions/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz", + "integrity": "sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==", + "dependencies": { + "camelcase-css": "^2.0.1", + "postcss": "^7.0.18" + } + }, + "node_modules/postcss-js/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/postcss-js/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-nested": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz", + "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==", + "dependencies": { + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2" + } + }, + "node_modules/postcss-nested/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/postcss-nested/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=4" } }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5048,6 +5030,14 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -5070,6 +5060,112 @@ "node": ">=6" } }, + "node_modules/purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", + "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "bin": { + "purgecss": "bin/purgecss" + } + }, + "node_modules/purgecss/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/purgecss/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/purgecss/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/purgecss/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/purgecss/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/purgecss/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/purgecss/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/purgecss/node_modules/postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + }, + "node_modules/purgecss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5112,6 +5208,14 @@ "react": "^19.1.0" } }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -5119,6 +5223,89 @@ "dev": true, "license": "MIT" }, + "node_modules/react-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dependencies": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -5167,7 +5354,6 @@ "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", @@ -5508,11 +5694,18 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "license": "MIT", - "optional": true, "dependencies": { "is-arrayish": "^0.3.1" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5522,6 +5715,18 @@ "node": ">=0.10.0" } }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "license": "Apache-2.0", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/stable-hash": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", @@ -5714,7 +5919,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5727,7 +5931,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5736,6 +5939,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swiper": { + "version": "11.2.10", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.10.tgz", + "integrity": "sha512-RMeVUUjTQH+6N3ckimK93oxz6Sn5la4aDlgPzB+rBrG/smPdCTicXyhxa+woIpopz+jewEloiEE3lKo1h9w2YQ==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "engines": { + "node": ">= 4.7.0" + } + }, "node_modules/tailwindcss": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.10.tgz", @@ -5743,6 +5964,93 @@ "dev": true, "license": "MIT" }, + "node_modules/tailwindcss-textshadow": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tailwindcss-textshadow/-/tailwindcss-textshadow-2.1.3.tgz", + "integrity": "sha512-FGVHfK+xnV879VSQDeRvY61Aa+b0GDiGaFBPwCOKvqIrK57GyepWJL1GydjtGOLHE9qqphFucRNj9fHramCzNg==", + "dependencies": { + "tailwindcss": "^1.2.0" + } + }, + "node_modules/tailwindcss-textshadow/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/tailwindcss-textshadow/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tailwindcss-textshadow/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/tailwindcss-textshadow/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/tailwindcss-textshadow/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/tailwindcss-textshadow/node_modules/tailwindcss": { + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-1.9.6.tgz", + "integrity": "sha512-nY8WYM/RLPqGsPEGEV2z63riyQPcHYZUJpAwdyBzVpxQHOHqHE+F/fvbCeXhdF1+TA5l72vSkZrtYCB9hRcwkQ==", + "dependencies": { + "@fullhuman/postcss-purgecss": "^2.1.2", + "autoprefixer": "^9.4.5", + "browserslist": "^4.12.0", + "bytes": "^3.0.0", + "chalk": "^3.0.0 || ^4.0.0", + "color": "^3.1.2", + "detective": "^5.2.0", + "fs-extra": "^8.0.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.20", + "node-emoji": "^1.8.1", + "normalize.css": "^8.0.1", + "object-hash": "^2.0.3", + "postcss": "^7.0.11", + "postcss-functions": "^3.0.0", + "postcss-js": "^2.0.0", + "postcss-nested": "^4.1.1", + "postcss-selector-parser": "^6.0.0", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "reduce-css-calc": "^2.1.6", + "resolve": "^1.14.2" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/tapable": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", @@ -5992,6 +6300,14 @@ "dev": true, "license": "MIT" }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/unrs-resolver": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.2.tgz", @@ -6027,6 +6343,35 @@ "@unrs/resolver-binding-win32-x64-msvc": "1.9.2" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6037,6 +6382,54 @@ "punycode": "^2.1.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6142,6 +6535,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -6152,6 +6563,39 @@ "node": ">=0.10.0" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", diff --git a/package.json b/package.json index 5354f5e..5276e0e 100644 --- a/package.json +++ b/package.json @@ -9,19 +9,29 @@ "lint": "next lint" }, "dependencies": { + "@paper-design/shaders-react": "^0.0.53", + "@radix-ui/react-dialog": "^1.1.15", + "@types/xlsx": "^0.0.35", + "class-variance-authority": "^0.7.1", + "gsap": "^3.13.0", + "lucide-react": "^0.544.0", + "next": "15.3.4", "react": "^19.0.0", "react-dom": "^19.0.0", - "next": "15.3.4" + "react-icons": "^5.5.0", + "swiper": "^11.2.10", + "tailwindcss-textshadow": "^2.1.3", + "xlsx": "^0.18.5" }, "devDependencies": { - "typescript": "^5", + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", - "@tailwindcss/postcss": "^4", - "tailwindcss": "^4", "eslint": "^9", "eslint-config-next": "15.3.4", - "@eslint/eslintrc": "^3" + "tailwindcss": "^4", + "typescript": "^5" } } diff --git a/public/Hack2020.svg b/public/Hack2020.svg new file mode 100644 index 0000000..807d333 --- /dev/null +++ b/public/Hack2020.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/Hack2021.svg b/public/Hack2021.svg new file mode 100644 index 0000000..d46e65d --- /dev/null +++ b/public/Hack2021.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/Hack2022.svg b/public/Hack2022.svg new file mode 100644 index 0000000..8559f01 --- /dev/null +++ b/public/Hack2022.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/Hack2023.svg b/public/Hack2023.svg new file mode 100644 index 0000000..8853ebc --- /dev/null +++ b/public/Hack2023.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/Hack2024.svg b/public/Hack2024.svg new file mode 100644 index 0000000..70f0906 --- /dev/null +++ b/public/Hack2024.svg @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/HackUTD Fire Logo.svg b/public/HackUTD Fire Logo.svg new file mode 100644 index 0000000..cd25fa9 --- /dev/null +++ b/public/HackUTD Fire Logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/Skyline.svg b/public/Skyline.svg new file mode 100644 index 0000000..8c74a16 --- /dev/null +++ b/public/Skyline.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/Sponsorship-Packet.pdf b/public/Sponsorship-Packet.pdf new file mode 100644 index 0000000..55328fc Binary files /dev/null and b/public/Sponsorship-Packet.pdf differ diff --git a/public/Team.png b/public/Team.png new file mode 100644 index 0000000..70de450 Binary files /dev/null and b/public/Team.png differ diff --git a/public/Title.svg b/public/Title.svg new file mode 100644 index 0000000..332c5da --- /dev/null +++ b/public/Title.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/horizontalScroll/Bobo.svg b/public/assets/horizontalScroll/Bobo.svg new file mode 100644 index 0000000..aef5fbf --- /dev/null +++ b/public/assets/horizontalScroll/Bobo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/horizontalScroll/Coaster Design.png b/public/assets/horizontalScroll/Coaster Design.png new file mode 100644 index 0000000..938869e Binary files /dev/null and b/public/assets/horizontalScroll/Coaster Design.png differ diff --git a/public/assets/horizontalScroll/Mascot.svg b/public/assets/horizontalScroll/Mascot.svg new file mode 100644 index 0000000..004093a --- /dev/null +++ b/public/assets/horizontalScroll/Mascot.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/horizontalScroll/Pluwuto.png b/public/assets/horizontalScroll/Pluwuto.png new file mode 100644 index 0000000..988e59b Binary files /dev/null and b/public/assets/horizontalScroll/Pluwuto.png differ diff --git a/public/assets/horizontalScroll/Rocket.webp b/public/assets/horizontalScroll/Rocket.webp new file mode 100644 index 0000000..b8fa836 Binary files /dev/null and b/public/assets/horizontalScroll/Rocket.webp differ diff --git a/public/assets/horizontalScroll/T Shirt.png b/public/assets/horizontalScroll/T Shirt.png new file mode 100644 index 0000000..680e337 Binary files /dev/null and b/public/assets/horizontalScroll/T Shirt.png differ diff --git a/public/assets/horizontalScroll/Title-Gold.svg b/public/assets/horizontalScroll/Title-Gold.svg new file mode 100644 index 0000000..b77f84b --- /dev/null +++ b/public/assets/horizontalScroll/Title-Gold.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/horizontalScroll/WhiteAstro.svg b/public/assets/horizontalScroll/WhiteAstro.svg new file mode 100644 index 0000000..fc15998 --- /dev/null +++ b/public/assets/horizontalScroll/WhiteAstro.svg @@ -0,0 +1,492 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/horizontalScroll/duck.png b/public/assets/horizontalScroll/duck.png new file mode 100644 index 0000000..0fb24cc Binary files /dev/null and b/public/assets/horizontalScroll/duck.png differ diff --git a/public/assets/horizontalScroll/frog.png b/public/assets/horizontalScroll/frog.png new file mode 100644 index 0000000..9725d2c Binary files /dev/null and b/public/assets/horizontalScroll/frog.png differ diff --git a/public/assets/horizontalScroll/hackutdix-nosponsortitle.png b/public/assets/horizontalScroll/hackutdix-nosponsortitle.png new file mode 100644 index 0000000..3d21aa9 Binary files /dev/null and b/public/assets/horizontalScroll/hackutdix-nosponsortitle.png differ diff --git a/public/assets/horizontalScroll/hero-ecsw.svg b/public/assets/horizontalScroll/hero-ecsw.svg new file mode 100644 index 0000000..09c02c9 --- /dev/null +++ b/public/assets/horizontalScroll/hero-ecsw.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/assets/horizontalScroll/mascot.gif b/public/assets/horizontalScroll/mascot.gif new file mode 100644 index 0000000..0b5c67b Binary files /dev/null and b/public/assets/horizontalScroll/mascot.gif differ diff --git a/public/assets/horizontalScroll/ship.svg b/public/assets/horizontalScroll/ship.svg new file mode 100644 index 0000000..873dc47 --- /dev/null +++ b/public/assets/horizontalScroll/ship.svg @@ -0,0 +1,3723 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/horizontalScroll/submarine.svg b/public/assets/horizontalScroll/submarine.svg new file mode 100644 index 0000000..779614b --- /dev/null +++ b/public/assets/horizontalScroll/submarine.svg @@ -0,0 +1,2221 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/svgs/backgroundforteam.svg b/public/assets/svgs/backgroundforteam.svg new file mode 100644 index 0000000..c8e8dbb --- /dev/null +++ b/public/assets/svgs/backgroundforteam.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/assets/svgs/profhex.svg b/public/assets/svgs/profhex.svg new file mode 100644 index 0000000..224594a --- /dev/null +++ b/public/assets/svgs/profhex.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/team/Abdala.jpg b/public/assets/team/Abdala.jpg new file mode 100644 index 0000000..8fc53cf Binary files /dev/null and b/public/assets/team/Abdala.jpg differ diff --git a/public/assets/team/Abhiram.jpg b/public/assets/team/Abhiram.jpg new file mode 100644 index 0000000..767f41e Binary files /dev/null and b/public/assets/team/Abhiram.jpg differ diff --git a/public/assets/team/Adelaide (Addy).jpg b/public/assets/team/Adelaide (Addy).jpg new file mode 100644 index 0000000..3eb5765 Binary files /dev/null and b/public/assets/team/Adelaide (Addy).jpg differ diff --git a/public/assets/team/Alan.jpg b/public/assets/team/Alan.jpg new file mode 100644 index 0000000..e7042e6 Binary files /dev/null and b/public/assets/team/Alan.jpg differ diff --git a/public/assets/team/Andrew.jpg b/public/assets/team/Andrew.jpg new file mode 100644 index 0000000..189b08b Binary files /dev/null and b/public/assets/team/Andrew.jpg differ diff --git a/public/assets/team/Ann.jpg b/public/assets/team/Ann.jpg new file mode 100644 index 0000000..0514581 Binary files /dev/null and b/public/assets/team/Ann.jpg differ diff --git a/public/assets/team/Anwita.jpg b/public/assets/team/Anwita.jpg new file mode 100644 index 0000000..aec10b4 Binary files /dev/null and b/public/assets/team/Anwita.jpg differ diff --git a/public/assets/team/Ayro.jpg b/public/assets/team/Ayro.jpg new file mode 100644 index 0000000..2118e49 Binary files /dev/null and b/public/assets/team/Ayro.jpg differ diff --git a/public/assets/team/Ayusha.jpg b/public/assets/team/Ayusha.jpg new file mode 100644 index 0000000..516f256 Binary files /dev/null and b/public/assets/team/Ayusha.jpg differ diff --git a/public/assets/team/Bryan.jpg b/public/assets/team/Bryan.jpg new file mode 100644 index 0000000..aa1c417 Binary files /dev/null and b/public/assets/team/Bryan.jpg differ diff --git a/public/assets/team/Caleb.jpg b/public/assets/team/Caleb.jpg new file mode 100644 index 0000000..e3cbc21 Binary files /dev/null and b/public/assets/team/Caleb.jpg differ diff --git a/public/assets/team/Daniel.jpg b/public/assets/team/Daniel.jpg new file mode 100644 index 0000000..b7aae4c Binary files /dev/null and b/public/assets/team/Daniel.jpg differ diff --git a/public/assets/team/Dhivyesh.jpg b/public/assets/team/Dhivyesh.jpg new file mode 100644 index 0000000..94ccc4c Binary files /dev/null and b/public/assets/team/Dhivyesh.jpg differ diff --git a/public/assets/team/Faith.jpg b/public/assets/team/Faith.jpg new file mode 100644 index 0000000..4806573 Binary files /dev/null and b/public/assets/team/Faith.jpg differ diff --git a/public/assets/team/Fletcher.jpg b/public/assets/team/Fletcher.jpg new file mode 100644 index 0000000..22f5cf0 Binary files /dev/null and b/public/assets/team/Fletcher.jpg differ diff --git a/public/assets/team/John.jpg b/public/assets/team/John.jpg new file mode 100644 index 0000000..6eb031a Binary files /dev/null and b/public/assets/team/John.jpg differ diff --git a/public/assets/team/Jordan.jpg b/public/assets/team/Jordan.jpg new file mode 100644 index 0000000..cd04418 Binary files /dev/null and b/public/assets/team/Jordan.jpg differ diff --git a/public/assets/team/Kavi.jpg b/public/assets/team/Kavi.jpg new file mode 100644 index 0000000..e6df99a Binary files /dev/null and b/public/assets/team/Kavi.jpg differ diff --git a/public/assets/team/Kelly.jpg b/public/assets/team/Kelly.jpg new file mode 100644 index 0000000..0646e01 Binary files /dev/null and b/public/assets/team/Kelly.jpg differ diff --git a/public/assets/team/Leeza.jpg b/public/assets/team/Leeza.jpg new file mode 100644 index 0000000..cdead7b Binary files /dev/null and b/public/assets/team/Leeza.jpg differ diff --git a/public/assets/team/Liana.jpg b/public/assets/team/Liana.jpg new file mode 100644 index 0000000..93002d3 Binary files /dev/null and b/public/assets/team/Liana.jpg differ diff --git a/public/assets/team/Mitchell.jpg b/public/assets/team/Mitchell.jpg new file mode 100644 index 0000000..8233125 Binary files /dev/null and b/public/assets/team/Mitchell.jpg differ diff --git a/public/assets/team/Nandini.jpg b/public/assets/team/Nandini.jpg new file mode 100644 index 0000000..e5a01b3 Binary files /dev/null and b/public/assets/team/Nandini.jpg differ diff --git a/public/assets/team/Rayyan.jpg b/public/assets/team/Rayyan.jpg new file mode 100644 index 0000000..0c2244e Binary files /dev/null and b/public/assets/team/Rayyan.jpg differ diff --git a/public/assets/team/Ridwan.jpg b/public/assets/team/Ridwan.jpg new file mode 100644 index 0000000..44917a0 Binary files /dev/null and b/public/assets/team/Ridwan.jpg differ diff --git a/public/assets/team/Sahishnu.jpg b/public/assets/team/Sahishnu.jpg new file mode 100644 index 0000000..5cf3ad3 Binary files /dev/null and b/public/assets/team/Sahishnu.jpg differ diff --git a/public/assets/team/Sarah.jpg b/public/assets/team/Sarah.jpg new file mode 100644 index 0000000..39c49c5 Binary files /dev/null and b/public/assets/team/Sarah.jpg differ diff --git a/public/assets/team/Shaswat (Shaz).jpg b/public/assets/team/Shaswat (Shaz).jpg new file mode 100644 index 0000000..e5060f6 Binary files /dev/null and b/public/assets/team/Shaswat (Shaz).jpg differ diff --git a/public/assets/team/Shraddha.jpg b/public/assets/team/Shraddha.jpg new file mode 100644 index 0000000..18d6010 Binary files /dev/null and b/public/assets/team/Shraddha.jpg differ diff --git a/public/assets/team/Shreya.jpg b/public/assets/team/Shreya.jpg new file mode 100644 index 0000000..ac55eb4 Binary files /dev/null and b/public/assets/team/Shreya.jpg differ diff --git a/public/assets/team/Sofia.jpg b/public/assets/team/Sofia.jpg new file mode 100644 index 0000000..77805f3 Binary files /dev/null and b/public/assets/team/Sofia.jpg differ diff --git a/public/assets/team/Soumika.jpg b/public/assets/team/Soumika.jpg new file mode 100644 index 0000000..8be0a7d Binary files /dev/null and b/public/assets/team/Soumika.jpg differ diff --git a/public/assets/team/Sree Aatish.jpg b/public/assets/team/Sree Aatish.jpg new file mode 100644 index 0000000..176c0ef Binary files /dev/null and b/public/assets/team/Sree Aatish.jpg differ diff --git a/public/assets/team/Sreevasan.jpg b/public/assets/team/Sreevasan.jpg new file mode 100644 index 0000000..017a33f Binary files /dev/null and b/public/assets/team/Sreevasan.jpg differ diff --git a/public/assets/team/Sunay.jpg b/public/assets/team/Sunay.jpg new file mode 100644 index 0000000..a5429a4 Binary files /dev/null and b/public/assets/team/Sunay.jpg differ diff --git a/public/assets/team/Tien.jpg b/public/assets/team/Tien.jpg new file mode 100644 index 0000000..ff08e20 Binary files /dev/null and b/public/assets/team/Tien.jpg differ diff --git a/public/assets/team/Uy (Wei).jpg b/public/assets/team/Uy (Wei).jpg new file mode 100644 index 0000000..4a2a09d Binary files /dev/null and b/public/assets/team/Uy (Wei).jpg differ diff --git a/public/assets/team/group/Directors.jpg b/public/assets/team/group/Directors.jpg new file mode 100644 index 0000000..ca72eb9 Binary files /dev/null and b/public/assets/team/group/Directors.jpg differ diff --git a/public/assets/team/group/Experience.jpg b/public/assets/team/group/Experience.jpg new file mode 100644 index 0000000..cd2c895 Binary files /dev/null and b/public/assets/team/group/Experience.jpg differ diff --git a/public/assets/team/group/Finance.jpg b/public/assets/team/group/Finance.jpg new file mode 100644 index 0000000..264c6e0 Binary files /dev/null and b/public/assets/team/group/Finance.jpg differ diff --git a/public/assets/team/group/Industry.jpg b/public/assets/team/group/Industry.jpg new file mode 100644 index 0000000..2afb948 Binary files /dev/null and b/public/assets/team/group/Industry.jpg differ diff --git a/public/assets/team/group/Leads.jpg b/public/assets/team/group/Leads.jpg new file mode 100644 index 0000000..b7b7eb8 Binary files /dev/null and b/public/assets/team/group/Leads.jpg differ diff --git a/public/assets/team/group/Logistics.jpg b/public/assets/team/group/Logistics.jpg new file mode 100644 index 0000000..2049d1f Binary files /dev/null and b/public/assets/team/group/Logistics.jpg differ diff --git a/public/assets/team/group/Marketing.jpg b/public/assets/team/group/Marketing.jpg new file mode 100644 index 0000000..7b68696 Binary files /dev/null and b/public/assets/team/group/Marketing.jpg differ diff --git a/public/assets/team/group/Tech.jpg b/public/assets/team/group/Tech.jpg new file mode 100644 index 0000000..51db34b Binary files /dev/null and b/public/assets/team/group/Tech.jpg differ diff --git a/public/cera-pro/Cera Pro Black Italic.otf b/public/cera-pro/Cera Pro Black Italic.otf new file mode 100644 index 0000000..c7345ca Binary files /dev/null and b/public/cera-pro/Cera Pro Black Italic.otf differ diff --git a/public/cera-pro/Cera Pro Black.otf b/public/cera-pro/Cera Pro Black.otf new file mode 100644 index 0000000..85bbc5d Binary files /dev/null and b/public/cera-pro/Cera Pro Black.otf differ diff --git a/public/cera-pro/Cera Pro Bold Italic.otf b/public/cera-pro/Cera Pro Bold Italic.otf new file mode 100644 index 0000000..2d2d345 Binary files /dev/null and b/public/cera-pro/Cera Pro Bold Italic.otf differ diff --git a/public/cera-pro/Cera Pro Bold.otf b/public/cera-pro/Cera Pro Bold.otf new file mode 100644 index 0000000..4b39b72 Binary files /dev/null and b/public/cera-pro/Cera Pro Bold.otf differ diff --git a/public/cera-pro/Cera Pro Light Italic.otf b/public/cera-pro/Cera Pro Light Italic.otf new file mode 100644 index 0000000..abe6b15 Binary files /dev/null and b/public/cera-pro/Cera Pro Light Italic.otf differ diff --git a/public/cera-pro/Cera Pro Light.otf b/public/cera-pro/Cera Pro Light.otf new file mode 100644 index 0000000..e109acb Binary files /dev/null and b/public/cera-pro/Cera Pro Light.otf differ diff --git a/public/cera-pro/Cera Pro Medium Italic.otf b/public/cera-pro/Cera Pro Medium Italic.otf new file mode 100644 index 0000000..9f1a80c Binary files /dev/null and b/public/cera-pro/Cera Pro Medium Italic.otf differ diff --git a/public/cera-pro/Cera Pro Regular Italic.otf b/public/cera-pro/Cera Pro Regular Italic.otf new file mode 100644 index 0000000..e465d3f Binary files /dev/null and b/public/cera-pro/Cera Pro Regular Italic.otf differ diff --git a/public/cera-pro/Cera Pro Thin Italic.otf b/public/cera-pro/Cera Pro Thin Italic.otf new file mode 100644 index 0000000..d1b1698 Binary files /dev/null and b/public/cera-pro/Cera Pro Thin Italic.otf differ diff --git a/public/cera-pro/Cera Pro Thin.otf b/public/cera-pro/Cera Pro Thin.otf new file mode 100644 index 0000000..ffaa49f Binary files /dev/null and b/public/cera-pro/Cera Pro Thin.otf differ diff --git a/public/cera-pro/CeraPro-Medium.otf b/public/cera-pro/CeraPro-Medium.otf new file mode 100644 index 0000000..04094e3 Binary files /dev/null and b/public/cera-pro/CeraPro-Medium.otf differ diff --git a/public/cera-pro/CeraPro-Regular.otf b/public/cera-pro/CeraPro-Regular.otf new file mode 100644 index 0000000..4b6c749 Binary files /dev/null and b/public/cera-pro/CeraPro-Regular.otf differ diff --git a/public/dallas_skyline.svg b/public/dallas_skyline.svg new file mode 100644 index 0000000..383a0a6 --- /dev/null +++ b/public/dallas_skyline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/hackCo2025.xlsx b/public/hackCo2025.xlsx new file mode 100644 index 0000000..d57e124 Binary files /dev/null and b/public/hackCo2025.xlsx differ diff --git a/public/hackScreenshot.png b/public/hackScreenshot.png new file mode 100644 index 0000000..36e5098 Binary files /dev/null and b/public/hackScreenshot.png differ diff --git a/public/heart.svg b/public/heart.svg new file mode 100644 index 0000000..2b908ad --- /dev/null +++ b/public/heart.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/juryScreenshot.png b/public/juryScreenshot.png new file mode 100644 index 0000000..e9e8237 Binary files /dev/null and b/public/juryScreenshot.png differ diff --git a/public/juryScreenshot2.png b/public/juryScreenshot2.png new file mode 100644 index 0000000..f4dd27f Binary files /dev/null and b/public/juryScreenshot2.png differ diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..cd25fa9 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,9 @@ + + + + + + + + +