From 40f266f8da809f12eaa4a68302a2a387e7ee5684 Mon Sep 17 00:00:00 2001
From: Thatsaphorn Atchariyaphap
Date: Sun, 13 Apr 2025 20:12:11 +0000
Subject: [PATCH] Merge branch 'dev' into 'production'
Merge dev into production
See merge request rheinsw/website!27
---
.gitlab-ci.yml | 4 +-
Dockerfile | 6 +-
app/{ => (root)}/favicon.ico | Bin
app/(root)/layout.tsx | 35 +
app/(root)/page.tsx | 12 +
app/contact/layout.tsx | 35 +
app/contact/page.tsx | 12 +
app/globals.css | 58 +-
app/layout.tsx | 34 -
app/legal/imprint/page.tsx | 12 +
app/legal/layout.tsx | 35 +
app/legal/page.tsx | 10 +
app/legal/privacy/page.tsx | 12 +
app/legal/revocation/page.tsx | 12 +
app/legal/terms-of-use/page.tsx | 12 +
app/page.tsx | 103 --
app/services/layout.tsx | 35 +
app/services/page.tsx | 12 +
components/Contact/Contact.tsx | 100 ++
components/Footer/Footer.tsx | 97 ++
components/Helper/SectionDivider.tsx | 24 +
components/Helper/SmallHero.tsx | 40 +
components/Helper/Theme.ts | 18 +
components/Helper/ThemeColors.ts | 28 +
components/Home/About/About.tsx | 82 ++
components/Home/Contact/ContactCTA.tsx | 57 +
components/Home/Hero/Hero.tsx | 100 ++
components/Home/Home.tsx | 27 +
components/Home/HomeServices.tsx | 115 ++
components/Home/Offer/FullStack.tsx | 75 ++
components/Home/Offer/ManagedServices.tsx | 57 +
components/Home/Offer/Offer.tsx | 28 +
components/Home/TechStack.tsx | 150 +++
components/Legal/ImprintComp.tsx | 99 ++
components/Legal/PrivacyComp.tsx | 99 ++
components/Legal/RevocationComp.tsx | 98 ++
components/Legal/TermsOfUseComp.tsx | 99 ++
components/Navbar/DesktopNav.tsx | 114 ++
components/Navbar/MobileNav.tsx | 62 +
components/Navbar/Nav.tsx | 24 +
components/provider/ThemeProvider.tsx | 54 +
constant/Constant.ts | 17 +
package-lock.json | 1478 +++++++++++++++++++--
package.json | 23 +-
postcss.config.mjs | 5 +-
public/file.svg | 1 -
public/globe.svg | 1 -
public/images/About_Picture.png | Bin 0 -> 1918715 bytes
public/images/contact.png | Bin 0 -> 2321721 bytes
public/images/dart_logo.png | Bin 0 -> 16252 bytes
public/images/flutter_logo.png | Bin 0 -> 3333 bytes
public/images/hero.png | Bin 0 -> 1027469 bytes
public/images/home_hero.jpg | Bin 0 -> 1806666 bytes
public/images/java_logo.png | Bin 0 -> 144520 bytes
public/images/nextjs_logo.png | Bin 0 -> 11079 bytes
public/images/software_dev.jpg | Bin 0 -> 226534 bytes
public/images/svg/bootstrap.svg | 10 +
public/images/svg/css.svg | 6 +
public/images/svg/dart.svg | 18 +
public/images/svg/debian.svg | 4 +
public/images/svg/docker.svg | 2 +
public/images/svg/flutter.svg | 24 +
public/images/svg/gitlab-ci.svg | 20 +
public/images/svg/gitlab.svg | 2 +
public/images/svg/html.svg | 6 +
public/images/svg/java.svg | 11 +
public/images/svg/kotlin.svg | 2 +
public/images/svg/macos.svg | 8 +
public/images/svg/nextjs.svg | 4 +
public/images/svg/outline.svg | 1 +
public/images/svg/proxmox.svg | 5 +
public/images/svg/spring.svg | 8 +
public/images/svg/typescript.svg | 2 +
public/images/svg/ubuntu.svg | 5 +
public/next.svg | 1 -
public/vercel.svg | 1 -
public/window.svg | 1 -
tailwind.config.ts | 11 +
tsconfig.json | 2 +
79 files changed, 3477 insertions(+), 288 deletions(-)
rename app/{ => (root)}/favicon.ico (100%)
create mode 100644 app/(root)/layout.tsx
create mode 100644 app/(root)/page.tsx
create mode 100644 app/contact/layout.tsx
create mode 100644 app/contact/page.tsx
delete mode 100644 app/layout.tsx
create mode 100644 app/legal/imprint/page.tsx
create mode 100644 app/legal/layout.tsx
create mode 100644 app/legal/page.tsx
create mode 100644 app/legal/privacy/page.tsx
create mode 100644 app/legal/revocation/page.tsx
create mode 100644 app/legal/terms-of-use/page.tsx
delete mode 100644 app/page.tsx
create mode 100644 app/services/layout.tsx
create mode 100644 app/services/page.tsx
create mode 100644 components/Contact/Contact.tsx
create mode 100644 components/Footer/Footer.tsx
create mode 100644 components/Helper/SectionDivider.tsx
create mode 100644 components/Helper/SmallHero.tsx
create mode 100644 components/Helper/Theme.ts
create mode 100644 components/Helper/ThemeColors.ts
create mode 100644 components/Home/About/About.tsx
create mode 100644 components/Home/Contact/ContactCTA.tsx
create mode 100644 components/Home/Hero/Hero.tsx
create mode 100644 components/Home/Home.tsx
create mode 100644 components/Home/HomeServices.tsx
create mode 100644 components/Home/Offer/FullStack.tsx
create mode 100644 components/Home/Offer/ManagedServices.tsx
create mode 100644 components/Home/Offer/Offer.tsx
create mode 100644 components/Home/TechStack.tsx
create mode 100644 components/Legal/ImprintComp.tsx
create mode 100644 components/Legal/PrivacyComp.tsx
create mode 100644 components/Legal/RevocationComp.tsx
create mode 100644 components/Legal/TermsOfUseComp.tsx
create mode 100644 components/Navbar/DesktopNav.tsx
create mode 100644 components/Navbar/MobileNav.tsx
create mode 100644 components/Navbar/Nav.tsx
create mode 100644 components/provider/ThemeProvider.tsx
create mode 100644 constant/Constant.ts
delete mode 100644 public/file.svg
delete mode 100644 public/globe.svg
create mode 100644 public/images/About_Picture.png
create mode 100644 public/images/contact.png
create mode 100644 public/images/dart_logo.png
create mode 100644 public/images/flutter_logo.png
create mode 100644 public/images/hero.png
create mode 100644 public/images/home_hero.jpg
create mode 100644 public/images/java_logo.png
create mode 100644 public/images/nextjs_logo.png
create mode 100644 public/images/software_dev.jpg
create mode 100644 public/images/svg/bootstrap.svg
create mode 100644 public/images/svg/css.svg
create mode 100644 public/images/svg/dart.svg
create mode 100644 public/images/svg/debian.svg
create mode 100644 public/images/svg/docker.svg
create mode 100644 public/images/svg/flutter.svg
create mode 100644 public/images/svg/gitlab-ci.svg
create mode 100644 public/images/svg/gitlab.svg
create mode 100644 public/images/svg/html.svg
create mode 100644 public/images/svg/java.svg
create mode 100644 public/images/svg/kotlin.svg
create mode 100644 public/images/svg/macos.svg
create mode 100644 public/images/svg/nextjs.svg
create mode 100644 public/images/svg/outline.svg
create mode 100644 public/images/svg/proxmox.svg
create mode 100644 public/images/svg/spring.svg
create mode 100644 public/images/svg/typescript.svg
create mode 100644 public/images/svg/ubuntu.svg
delete mode 100644 public/next.svg
delete mode 100644 public/vercel.svg
delete mode 100644 public/window.svg
create mode 100644 tailwind.config.ts
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d1c277d..589e155 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: node:20@sha256:735b1ba7e4550c415f98568efbf527e3f75828ac4f10692e490ca78e11d89f6e
+image: node:22@sha256:f6b9c31ace05502dd98ef777aaa20464362435dcc5e312b0e213121dcf7d8b95
workflow:
rules:
@@ -17,7 +17,7 @@ cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
- policy: pull
+ - .next/cache/
variables:
NEXT_PUBLIC_ENV: "production"
diff --git a/Dockerfile b/Dockerfile
index 9c017d9..f89869b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
# Use lightweight Node.js 20 base image
-FROM node:20-alpine as builder
+FROM node:20-alpine@sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944 as builder
# Set working directory
WORKDIR /app
@@ -8,7 +8,7 @@ WORKDIR /app
COPY package.json package-lock.json ./
# Install dependencies
-RUN npm install
+RUN npm ci
# Copy entire project
COPY . .
@@ -17,7 +17,7 @@ COPY . .
RUN npm run build
# Use a minimal base image for running the app
-FROM node:20-alpine
+FROM node:20-alpine@sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944
WORKDIR /app
diff --git a/app/favicon.ico b/app/(root)/favicon.ico
similarity index 100%
rename from app/favicon.ico
rename to app/(root)/favicon.ico
diff --git a/app/(root)/layout.tsx b/app/(root)/layout.tsx
new file mode 100644
index 0000000..4a3ccb9
--- /dev/null
+++ b/app/(root)/layout.tsx
@@ -0,0 +1,35 @@
+import type {Metadata} from "next";
+import "../globals.css";
+
+import Nav from "@/components/Navbar/Nav";
+import Footer from "@/components/Footer/Footer";
+import {ThemeProvider} from "@/components/provider/ThemeProvider";
+import React from "react";
+import {cookies} from "next/headers";
+
+export const metadata: Metadata = {
+ title: "Rhein Software",
+ description: "Rhein Software Development",
+};
+
+export default async function RootLayout({
+ children,
+ }: Readonly<{
+ children: React.ReactNode;
+}>) {
+ const cookieStore = await cookies();
+ const theme = cookieStore.get("theme")?.value === "dark" ? "dark" : "light";
+
+ return (
+
+
+
+
+
+ {children}
+
+
+
+
+ );
+}
diff --git a/app/(root)/page.tsx b/app/(root)/page.tsx
new file mode 100644
index 0000000..f6440ee
--- /dev/null
+++ b/app/(root)/page.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import Home from "@/components/Home/Home";
+
+const HomePage = () => {
+ return (
+
+
+
+ );
+};
+
+export default HomePage;
\ No newline at end of file
diff --git a/app/contact/layout.tsx b/app/contact/layout.tsx
new file mode 100644
index 0000000..4a3ccb9
--- /dev/null
+++ b/app/contact/layout.tsx
@@ -0,0 +1,35 @@
+import type {Metadata} from "next";
+import "../globals.css";
+
+import Nav from "@/components/Navbar/Nav";
+import Footer from "@/components/Footer/Footer";
+import {ThemeProvider} from "@/components/provider/ThemeProvider";
+import React from "react";
+import {cookies} from "next/headers";
+
+export const metadata: Metadata = {
+ title: "Rhein Software",
+ description: "Rhein Software Development",
+};
+
+export default async function RootLayout({
+ children,
+ }: Readonly<{
+ children: React.ReactNode;
+}>) {
+ const cookieStore = await cookies();
+ const theme = cookieStore.get("theme")?.value === "dark" ? "dark" : "light";
+
+ return (
+
+
+
+
+ {children}
+
+
+
+
+ );
+}
diff --git a/app/contact/page.tsx b/app/contact/page.tsx
new file mode 100644
index 0000000..ed96214
--- /dev/null
+++ b/app/contact/page.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import Contact from "@/components/Contact/Contact";
+
+const ContactPage = () => {
+ return (
+
+
+
+ );
+};
+
+export default ContactPage;
\ No newline at end of file
diff --git a/app/globals.css b/app/globals.css
index a2dc41e..6771639 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -1,26 +1,48 @@
-@import "tailwindcss";
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
-:root {
- --background: #ffffff;
- --foreground: #171717;
+@layer utilities {
+ .nav__link {
+ @apply relative text-base font-medium w-fit block after:block after:content-[''] after:absolute after:h-[3px] after:bg-pink-600 after:w-full after:scale-x-0 after:hover:scale-x-100 after:transition after:duration-300 after:origin-right;
+ }
}
-@theme inline {
- --color-background: var(--background);
- --color-foreground: var(--foreground);
- --font-sans: var(--font-geist-sans);
- --font-mono: var(--font-geist-mono);
+/* Global theme transition */
+.transition-theme {
+ transition: background-color 0.7s ease, color 0.7s ease;
}
-@media (prefers-color-scheme: dark) {
- :root {
- --background: #0a0a0a;
- --foreground: #ededed;
- }
+/* Light mode */
+/* Light mode */
+[data-theme="light"] {
+ --primary-bg: #FAFAFA; /* Soft off-white background */
+ --secondary-bg: #F5F5F7; /* Gentle off-white for subtle separation */
+ --primary-text: #2E2E2E; /* Dark grey text for clear readability */
+ --secondary-text: #595959; /* Medium grey for less prominent text */
+ --nav-bg: #F8F8F8; /* Light grey navigation background */
+ --footer-bg: #E0E0E0; /* Slightly darker grey for footer contrast */
}
-body {
- background: var(--background);
- color: var(--foreground);
- font-family: Arial, Helvetica, sans-serif;
+/* Dark mode */
+[data-theme="dark"] {
+ --primary-bg: #2C2C2C; /* Modern dark grey background */
+ --secondary-bg: #333333; /* A touch lighter grey for section differentiation */
+ --primary-text: #E0E0E0; /* Light grey text for optimal readability */
+ --secondary-text: #B0B0B0; /* Medium grey for secondary text elements */
+ --nav-bg: #272727; /* Subtle variation for the navigation area */
+ --footer-bg: #242424; /* Deep grey footer to add visual depth */
+}
+
+@keyframes float {
+ 0%, 100% {
+ transform: translateY(0);
+ }
+ 50% {
+ transform: translateY(-6px);
+ }
+}
+
+.animate-float {
+ animation: float 3.5s ease-in-out infinite;
}
diff --git a/app/layout.tsx b/app/layout.tsx
deleted file mode 100644
index f7fa87e..0000000
--- a/app/layout.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import type { Metadata } from "next";
-import { Geist, Geist_Mono } from "next/font/google";
-import "./globals.css";
-
-const geistSans = Geist({
- variable: "--font-geist-sans",
- subsets: ["latin"],
-});
-
-const geistMono = Geist_Mono({
- variable: "--font-geist-mono",
- subsets: ["latin"],
-});
-
-export const metadata: Metadata = {
- title: "Create Next App",
- description: "Generated by create next app",
-};
-
-export default function RootLayout({
- children,
-}: Readonly<{
- children: React.ReactNode;
-}>) {
- return (
-
-
- {children}
-
-
- );
-}
diff --git a/app/legal/imprint/page.tsx b/app/legal/imprint/page.tsx
new file mode 100644
index 0000000..792e437
--- /dev/null
+++ b/app/legal/imprint/page.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import ImprintComp from "@/components/Legal/ImprintComp";
+
+const ImprintPage = () => {
+ return (
+
+
+
+ );
+};
+
+export default ImprintPage;
\ No newline at end of file
diff --git a/app/legal/layout.tsx b/app/legal/layout.tsx
new file mode 100644
index 0000000..4a3ccb9
--- /dev/null
+++ b/app/legal/layout.tsx
@@ -0,0 +1,35 @@
+import type {Metadata} from "next";
+import "../globals.css";
+
+import Nav from "@/components/Navbar/Nav";
+import Footer from "@/components/Footer/Footer";
+import {ThemeProvider} from "@/components/provider/ThemeProvider";
+import React from "react";
+import {cookies} from "next/headers";
+
+export const metadata: Metadata = {
+ title: "Rhein Software",
+ description: "Rhein Software Development",
+};
+
+export default async function RootLayout({
+ children,
+ }: Readonly<{
+ children: React.ReactNode;
+}>) {
+ const cookieStore = await cookies();
+ const theme = cookieStore.get("theme")?.value === "dark" ? "dark" : "light";
+
+ return (
+
+
+
+
+ {children}
+
+
+
+
+ );
+}
diff --git a/app/legal/page.tsx b/app/legal/page.tsx
new file mode 100644
index 0000000..c6e4b8c
--- /dev/null
+++ b/app/legal/page.tsx
@@ -0,0 +1,10 @@
+import React from 'react';
+
+const LegalPage = () => {
+ return (
+
+
+ );
+};
+
+export default LegalPage;
\ No newline at end of file
diff --git a/app/legal/privacy/page.tsx b/app/legal/privacy/page.tsx
new file mode 100644
index 0000000..79a30b3
--- /dev/null
+++ b/app/legal/privacy/page.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import PrivacyComp from "@/components/Legal/PrivacyComp";
+
+const PrivacyPage = () => {
+ return (
+
+ );
+};
+
+export default PrivacyPage;
\ No newline at end of file
diff --git a/app/legal/revocation/page.tsx b/app/legal/revocation/page.tsx
new file mode 100644
index 0000000..4560fc2
--- /dev/null
+++ b/app/legal/revocation/page.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import RevocationComp from "@/components/Legal/RevocationComp";
+
+const RevocationPage = () => {
+ return (
+
+
+
+ );
+};
+
+export default RevocationPage;
\ No newline at end of file
diff --git a/app/legal/terms-of-use/page.tsx b/app/legal/terms-of-use/page.tsx
new file mode 100644
index 0000000..140972a
--- /dev/null
+++ b/app/legal/terms-of-use/page.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import TermsOfUseComp from "@/components/Legal/TermsOfUseComp";
+
+const TermsOfUsePage = () => {
+ return (
+
+
+
+ );
+};
+
+export default TermsOfUsePage;
\ No newline at end of file
diff --git a/app/page.tsx b/app/page.tsx
deleted file mode 100644
index 13b3b2d..0000000
--- a/app/page.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-import Image from "next/image";
-
-export default function Home() {
- return (
-
-
-
-
-
- Get started by editing{" "}-From Feature Branch
-
- app/page.tsx
-
- .
-
-
- Save and see your changes instantly.
-
-
-
-
-
-
-
- );
-}
diff --git a/app/services/layout.tsx b/app/services/layout.tsx
new file mode 100644
index 0000000..4a3ccb9
--- /dev/null
+++ b/app/services/layout.tsx
@@ -0,0 +1,35 @@
+import type {Metadata} from "next";
+import "../globals.css";
+
+import Nav from "@/components/Navbar/Nav";
+import Footer from "@/components/Footer/Footer";
+import {ThemeProvider} from "@/components/provider/ThemeProvider";
+import React from "react";
+import {cookies} from "next/headers";
+
+export const metadata: Metadata = {
+ title: "Rhein Software",
+ description: "Rhein Software Development",
+};
+
+export default async function RootLayout({
+ children,
+ }: Readonly<{
+ children: React.ReactNode;
+}>) {
+ const cookieStore = await cookies();
+ const theme = cookieStore.get("theme")?.value === "dark" ? "dark" : "light";
+
+ return (
+
+
+
+
+ {children}
+
+
+
+
+ );
+}
diff --git a/app/services/page.tsx b/app/services/page.tsx
new file mode 100644
index 0000000..ed96214
--- /dev/null
+++ b/app/services/page.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import Contact from "@/components/Contact/Contact";
+
+const ContactPage = () => {
+ return (
+
+
+
+ );
+};
+
+export default ContactPage;
\ No newline at end of file
diff --git a/components/Contact/Contact.tsx b/components/Contact/Contact.tsx
new file mode 100644
index 0000000..01e9d67
--- /dev/null
+++ b/components/Contact/Contact.tsx
@@ -0,0 +1,100 @@
+"use client";
+
+import React, {useEffect, useContext} from "react";
+import AOS from "aos";
+import "aos/dist/aos.css";
+import SmallHero from "@/components/Helper/SmallHero";
+import {ThemeContext} from "@/components/provider/ThemeProvider";
+import {themeColors} from "@/components/Helper/ThemeColors";
+
+const Contact = () => {
+ const {theme} = useContext(ThemeContext);
+ const colors = themeColors[theme];
+
+ useEffect(() => {
+ AOS.init({
+ duration: 1000,
+ easing: "ease",
+ once: true,
+ anchorPlacement: "top-bottom",
+ });
+ }, []);
+
+ return (
+
+
+ {/* Hero Section */}
+
+
+
+
+
+ {/* Contact Form */}
+
+
+ Schreib uns eine Nachricht
+
+
+ Wir melden uns schnellstmöglich bei dir!
+
+
+
+
+
+ );
+};
+
+export default Contact;
diff --git a/components/Footer/Footer.tsx b/components/Footer/Footer.tsx
new file mode 100644
index 0000000..3bcb1df
--- /dev/null
+++ b/components/Footer/Footer.tsx
@@ -0,0 +1,97 @@
+'use client';
+
+import React from 'react';
+import Link from 'next/link';
+import {motion} from 'framer-motion';
+
+const Footer = () => {
+ return (
+
+
+
+ {/* Logo and description */}
+
+
+ R hein Software
+
+
+
+ {/* Informationen */}
+
+
Informationen
+
+
+
+
+ Kontakt
+
+
+
+
+
+
+ Zahlung und Versand
+
+
+
+
+
+
+ {/* Rechtliches */}
+
+
Rechtliches
+
+
+
+
+ AGB
+
+
+
+
+
+
+ Widerruf
+
+
+
+
+
+
+ Datenschutz
+
+
+
+
+
+
+ Impressum
+
+
+
+
+
+
+
+ {/* Bottom Section */}
+
+
+ © 2025 Rhein Software Development. All rights reserved.
+
+
+
+
+ );
+};
+
+export default Footer;
diff --git a/components/Helper/SectionDivider.tsx b/components/Helper/SectionDivider.tsx
new file mode 100644
index 0000000..3896af9
--- /dev/null
+++ b/components/Helper/SectionDivider.tsx
@@ -0,0 +1,24 @@
+
+export const SectionDivider1 = () => {
+
+ return (
+
+ );
+};
+
+export const SectionDivider2 = () => {
+
+ return (
+
+ );
+};
diff --git a/components/Helper/SmallHero.tsx b/components/Helper/SmallHero.tsx
new file mode 100644
index 0000000..9b2e9ce
--- /dev/null
+++ b/components/Helper/SmallHero.tsx
@@ -0,0 +1,40 @@
+import React from "react";
+
+type SmallHeroProps = {
+ title: string;
+ subtitle?: string;
+ backgroundImage?: string; // Optional background image
+};
+
+const SmallHero = ({title, subtitle, backgroundImage}: SmallHeroProps) => {
+ return (
+
+
+ {title}
+
+ {subtitle &&
+
+ {subtitle}
+
+ }
+
+ );
+};
+
+export default SmallHero;
diff --git a/components/Helper/Theme.ts b/components/Helper/Theme.ts
new file mode 100644
index 0000000..42dd678
--- /dev/null
+++ b/components/Helper/Theme.ts
@@ -0,0 +1,18 @@
+"use server";
+
+import {cookies} from "next/headers";
+
+// ✅ Get theme from cookies OR detect system preference
+export async function getInitialTheme(): Promise<"dark" | "light"> {
+ const themeCookie = (await cookies()).get("theme")?.value;
+
+ if (themeCookie === "dark" || themeCookie === "light") {
+ return themeCookie;
+ }
+
+ // Detect system preference
+ const prefersDarkMode =
+ typeof window !== "undefined" && window.matchMedia("(prefers-color-scheme: dark)").matches;
+
+ return prefersDarkMode ? "dark" : "light";
+}
diff --git a/components/Helper/ThemeColors.ts b/components/Helper/ThemeColors.ts
new file mode 100644
index 0000000..8086cf9
--- /dev/null
+++ b/components/Helper/ThemeColors.ts
@@ -0,0 +1,28 @@
+export const themeColors: Record<
+ "light" | "dark",
+ {
+ primaryBg: string;
+ secondaryBg: string;
+ primaryText: string;
+ secondaryText: string;
+ inputFieldBg: string;
+ inputBorder: string;
+ }
+> = {
+ dark: {
+ primaryBg: "#121212", // Dark gray/black background (closer to true dark mode)
+ secondaryBg: "#1e1e1e", // Slightly lighter gray for contrast
+ primaryText: "#e0e0e0", // Light gray for good readability
+ secondaryText: "#b0b0b0", // Muted gray for subtle contrast
+ inputFieldBg: "#252525", // Dark but slightly distinguishable from primaryBg
+ inputBorder: "#3a3a3a", // Slightly lighter gray for a soft contrast
+ },
+ light: {
+ primaryBg: "#f7f6fb",
+ secondaryBg: "#ffffff",
+ primaryText: "#1a1a2e",
+ secondaryText: "#4a4a4a", // Muted text color
+ inputFieldBg: "#ffffff", // White input field (same as secondaryBg)
+ inputBorder: "#dcdcdc", // Light gray border for subtle visibility
+ },
+};
diff --git a/components/Home/About/About.tsx b/components/Home/About/About.tsx
new file mode 100644
index 0000000..a1c299e
--- /dev/null
+++ b/components/Home/About/About.tsx
@@ -0,0 +1,82 @@
+'use client';
+
+import Link from 'next/link';
+import {FiArrowRight} from 'react-icons/fi';
+import {motion} from 'framer-motion';
+
+const About = () => {
+ return (
+
+
+
+ {/* Title */}
+
+ Über uns
+
+
+
+
+ {/* Text */}
+
+
+ Wir sind Rhein-Software – ein Team, das sich auf individuelle Softwarelösungen und digitale
+ Services spezialisiert hat. Unsere Anwendungen sind technisch solide, skalierbar und
+ durchdacht – gebaut für
+ langfristigen Erfolg.
+
+
+
+ Von der ersten Idee bis zum Go-Live begleiten wir Unternehmen und Startups mit einem
+ flexiblen Netzwerk, klarer Kommunikation und einem hohen Anspruch an Qualität. Unsere
+ Lösungen sind
+ intuitiv, effizient – und genau auf deine Anforderungen zugeschnitten.
+
+
+
+ {/* CTA Button */}
+
+
+
+ Mehr über uns
+
+
+
+
+
+
+ );
+};
+
+export default About;
diff --git a/components/Home/Contact/ContactCTA.tsx b/components/Home/Contact/ContactCTA.tsx
new file mode 100644
index 0000000..ab8403c
--- /dev/null
+++ b/components/Home/Contact/ContactCTA.tsx
@@ -0,0 +1,57 @@
+'use client';
+
+import Link from 'next/link';
+import { motion } from 'framer-motion';
+import { FiArrowRight } from 'react-icons/fi';
+
+const ContactCTA = () => {
+ return (
+
+
+ {/* Headline */}
+
+ Interesse geweckt?
+
+
+ {/* Description */}
+
+ Lass uns über dein Projekt sprechen. Wir freuen uns darauf, deine Ideen in die Realität umzusetzen.
+
+
+ {/* CTA Button */}
+
+
+
+ Jetzt Kontakt aufnehmen
+
+
+
+
+
+ );
+};
+
+export default ContactCTA;
diff --git a/components/Home/Hero/Hero.tsx b/components/Home/Hero/Hero.tsx
new file mode 100644
index 0000000..2ecf7d7
--- /dev/null
+++ b/components/Home/Hero/Hero.tsx
@@ -0,0 +1,100 @@
+'use client';
+
+import Image from 'next/image';
+import {Typewriter} from 'react-simple-typewriter';
+import {motion} from 'framer-motion';
+
+const Hero = () => {
+ return (
+
+ {/* Background Image */}
+
+
+ {/* Main content */}
+
+
+ {/* Text Content */}
+
+
+ Rhein-Software Development
+
+
+
+ Digitale Lösungen für dein Unternehmen.
+
+
+
+
+
+
+
+ {/* Floating Image */}
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Hero;
diff --git a/components/Home/Home.tsx b/components/Home/Home.tsx
new file mode 100644
index 0000000..5785fd0
--- /dev/null
+++ b/components/Home/Home.tsx
@@ -0,0 +1,27 @@
+'use client';
+
+import React from "react";
+import Hero from "./Hero/Hero";
+import About from "@/components/Home/About/About";
+import ContactCTA from "@/components/Home/Contact/ContactCTA";
+import {SectionDivider1, SectionDivider2} from "@/components/Helper/SectionDivider";
+import HomeServices from "@/components/Home/HomeServices";
+import TechStack from "@/components/Home/TechStack";
+
+const Home = () => {
+ return (
+
+ );
+};
+
+export default Home;
diff --git a/components/Home/HomeServices.tsx b/components/Home/HomeServices.tsx
new file mode 100644
index 0000000..0aa0349
--- /dev/null
+++ b/components/Home/HomeServices.tsx
@@ -0,0 +1,115 @@
+'use client';
+
+import {
+ FiServer,
+ FiTool,
+ FiMonitor,
+ FiZap,
+ FiArrowRight,
+} from 'react-icons/fi';
+import {motion} from 'framer-motion';
+
+const services = [
+ {
+ title: 'Beratung',
+ icon: ,
+ description:
+ 'Strategische und technische Beratung rund um digitale Produkte und Prozesse. Wir analysieren bestehende Systeme, identifizieren Potenziale und helfen dir, die passende Architektur für dein Projekt zu finden.',
+ },
+ {
+ title: 'Entwicklung',
+ icon: ,
+ description:
+ 'Individuelle Softwareentwicklung – skalierbar, wartbar, zukunftssicher. Ob Web-App, API oder internes Tool: Wir setzen moderne Technologien ein, um genau die Lösung zu bauen, die du brauchst.',
+ },
+ {
+ title: 'Managed Services',
+ icon: ,
+ description:
+ 'Wir betreuen Infrastruktur, Server und Systeme – verlässlich und performant. Unser Team kümmert sich um Hosting, Monitoring, Backups und sorgt für einen reibungslosen Betrieb deiner Plattform.',
+ },
+ {
+ title: 'Fehlerbehebung',
+ icon: ,
+ description:
+ 'Schnelle Hilfe bei Bugs, Performance-Problemen oder Sicherheitslücken. Wir analysieren Probleme, beheben sie gezielt und sorgen dafür, dass dein System wieder stabil läuft – langfristig und zuverlässig.',
+ },
+];
+
+const HomeServices = () => {
+ return (
+
+
+ {/* Heading */}
+
+ Leistungen
+
+
+
+
+ {/* Service Cards */}
+
+ {services.map((service, index) => (
+
+ {service.icon}
+
+ {service.title}
+
+
+ {service.description}
+
+
+ ))}
+
+
+ {/* Weitere Leistungen */}
+
+
+ Weitere Leistungen
+
+
+
+
+ );
+};
+
+export default HomeServices;
diff --git a/components/Home/Offer/FullStack.tsx b/components/Home/Offer/FullStack.tsx
new file mode 100644
index 0000000..a77f53d
--- /dev/null
+++ b/components/Home/Offer/FullStack.tsx
@@ -0,0 +1,75 @@
+import React from "react";
+import Image from "next/image";
+
+const FullStack = () => {
+ return (
+
+
+
+ 💻 Full-Stack Entwicklung
+
+
+
+ Wir entwickeln skalierbare Backends, performante Frontends und native Apps – genau auf deine
+ Anforderungen zugeschnitten. Dabei setzen wir auf neueste und modernste Technologien, um
+ flexible
+ und zukunftssichere Lösungen zu schaffen.
+
+ {/* Technology Logos Section */}
+
+ 🔧 Tech Stack
+
+
+ Programmiersprachen und Frameworks, die wir für unsere Lösungen einsetzen.
+
+
+ {/* Tech Stack Logos */}
+ {[
+ {src: "/images/flutter_logo.png", label: "Flutter", width: 30, height: 30},
+ {src: "/images/dart_logo.png", label: "Dart", width: 40, height: 40},
+ {src: "/images/java_logo.png", label: "Java", width: 40, height: 40},
+ {src: "/images/nextjs_logo.png", label: "NextJS", width: 40, height: 40},
+ ].map(({src, label, width, height}) => (
+
+
+
+ {label}
+
+
+ ))}
+
+
+
+
+
+
+
+ );
+};
+
+export default FullStack;
diff --git a/components/Home/Offer/ManagedServices.tsx b/components/Home/Offer/ManagedServices.tsx
new file mode 100644
index 0000000..9ece168
--- /dev/null
+++ b/components/Home/Offer/ManagedServices.tsx
@@ -0,0 +1,57 @@
+import React from "react";
+import Image from "next/image";
+import {TiChevronRightOutline} from "react-icons/ti";
+
+const ManagedServices = () => {
+ return (
+
+ {/* Image Section */}
+
+
+
+ {/* Text Content */}
+
+
+ ☁️ Managed Services
+
+
+ Wir übernehmen das Hosting und Management deiner Server, damit du dich auf dein
+ Business konzentrieren kannst. Egal ob Cloud-Hosting, dedizierte Server oder hybride Lösungen – wir
+ sorgen für eine sichere, performante und skalierbare Infrastruktur.
+
+
+ {[
+ "Web- & Cloud-Hosting",
+ "Mailserver-Management",
+ "Webserver-Administration",
+ ].map((item, index) => (
+
+
+ {item}
+
+ ))}
+
+
+
+ );
+};
+
+export default ManagedServices;
diff --git a/components/Home/Offer/Offer.tsx b/components/Home/Offer/Offer.tsx
new file mode 100644
index 0000000..ed18c45
--- /dev/null
+++ b/components/Home/Offer/Offer.tsx
@@ -0,0 +1,28 @@
+import React from "react";
+import FullStack from "@/components/Home/Offer/FullStack";
+import ManagedServices from "@/components/Home/Offer/ManagedServices";
+
+const Offer = () => {
+ return (
+
+
+
+ Was bieten wir?
+
+
+
+
+
+ );
+};
+
+export default Offer;
diff --git a/components/Home/TechStack.tsx b/components/Home/TechStack.tsx
new file mode 100644
index 0000000..031c768
--- /dev/null
+++ b/components/Home/TechStack.tsx
@@ -0,0 +1,150 @@
+'use client';
+
+import Image from 'next/image';
+import {motion} from 'framer-motion';
+
+const techStack = {
+ row1: [
+ {
+ category: 'Programmiersprachen & Frameworks – Backend',
+ items: [
+ {id: 'java', label: 'Java'},
+ {id: 'dart', label: 'Dart'},
+ {id: 'kotlin', label: 'Kotlin'},
+ {id: 'spring', label: 'Spring'},
+ ],
+ },
+ {
+ category: 'Programmiersprachen & Frameworks – Frontend',
+ items: [
+ {id: 'html', label: 'HTML'},
+ {id: 'css', label: 'CSS'},
+ {id: 'bootstrap', label: 'Bootstrap'},
+ {id: 'nextjs', label: 'Next.js'},
+ {id: 'typescript', label: 'TypeScript'},
+ {id: 'flutter', label: 'Flutter'},
+ ],
+ },
+ ],
+ row2: [
+ {
+ category: 'Betriebssysteme',
+ items: [
+ {id: 'macos', label: 'macOS'},
+ {id: 'debian', label: 'Debian'},
+ {id: 'ubuntu', label: 'Ubuntu'},
+ ],
+ },
+ {
+ category: 'Version Control & Collaboration',
+ items: [
+ {id: 'gitlab', label: 'GitLab'},
+ {id: 'outline', label: 'Outline'},
+ ],
+ },
+ {
+ category: 'DevOps & Infrastruktur',
+ items: [
+ {id: 'gitlab-ci', label: 'GitLab CI'},
+ {id: 'docker', label: 'Docker'},
+ {id: 'proxmox', label: 'Proxmox'},
+ ],
+ },
+ ],
+};
+
+const TechStack = () => {
+ return (
+
+
+
+ Technologien
+
+
+
+
+
+ Mit diesen Technologien realisieren wir moderne, leistungsstarke Softwarelösungen.
+
+
+ {/* Row 1 */}
+
+ {techStack.row1.map((group, index) => (
+
+ ))}
+
+
+ {/* Row 2 */}
+
+ {techStack.row2.map((group, index) => (
+
+ ))}
+
+
+
+ );
+};
+
+const TechCard = ({
+ group,
+ delay,
+ }: {
+ group: { category: string; items: { id: string; label: string }[] };
+ delay: number;
+}) => (
+
+
+ {group.category}
+
+
+ {group.items.map(({id, label}) => (
+
+
+
+ {label}
+
+
+ ))}
+
+
+);
+
+export default TechStack;
diff --git a/components/Legal/ImprintComp.tsx b/components/Legal/ImprintComp.tsx
new file mode 100644
index 0000000..c23af79
--- /dev/null
+++ b/components/Legal/ImprintComp.tsx
@@ -0,0 +1,99 @@
+"use client";
+
+import SmallHero from "@/components/Helper/SmallHero";
+import React, {useContext, useEffect} from "react";
+import {ThemeContext} from "@/components/provider/ThemeProvider";
+import {themeColors} from "@/components/Helper/ThemeColors";
+import AOS from "aos";
+
+const ImprintComp = () => {
+ const {theme} = useContext(ThemeContext);
+ const colors = themeColors[theme];
+
+ useEffect(() => {
+ AOS.init({
+ duration: 1000,
+ easing: "ease",
+ once: true,
+ anchorPlacement: "top-bottom",
+ });
+ }, []);
+
+ return (
+
+
+ {/* Hero Section */}
+
+
+
+
+
+ {/* Contact Form */}
+
+
+ Schreib uns eine Nachricht
+
+
+ Wir melden uns schnellstmöglich bei dir!
+
+
+
+ {/* Name & Email */}
+
+ {["Dein Name", "Deine E-Mail"].map((label, index) => (
+
+ {label}
+
+
+ ))}
+
+
+ {/* Message */}
+
+ Deine Nachricht
+
+
+
+ {/* Submit Button */}
+
+
+ 📩 Nachricht senden
+
+
+
+
+
+ );
+};
+
+export default ImprintComp;
\ No newline at end of file
diff --git a/components/Legal/PrivacyComp.tsx b/components/Legal/PrivacyComp.tsx
new file mode 100644
index 0000000..313dd14
--- /dev/null
+++ b/components/Legal/PrivacyComp.tsx
@@ -0,0 +1,99 @@
+"use client";
+
+import SmallHero from "@/components/Helper/SmallHero";
+import React, {useContext, useEffect} from "react";
+import {ThemeContext} from "@/components/provider/ThemeProvider";
+import {themeColors} from "@/components/Helper/ThemeColors";
+import AOS from "aos";
+
+const PrivacyComp = () => {
+ const {theme} = useContext(ThemeContext);
+ const colors = themeColors[theme];
+
+ useEffect(() => {
+ AOS.init({
+ duration: 1000,
+ easing: "ease",
+ once: true,
+ anchorPlacement: "top-bottom",
+ });
+ }, []);
+
+ return (
+
+
+ {/* Hero Section */}
+
+
+
+
+
+ {/* Contact Form */}
+
+
+ Schreib uns eine Nachricht
+
+
+ Wir melden uns schnellstmöglich bei dir!
+
+
+
+ {/* Name & Email */}
+
+ {["Dein Name", "Deine E-Mail"].map((label, index) => (
+
+ {label}
+
+
+ ))}
+
+
+ {/* Message */}
+
+ Deine Nachricht
+
+
+
+ {/* Submit Button */}
+
+
+ 📩 Nachricht senden
+
+
+
+
+
+ );
+};
+
+export default PrivacyComp;
\ No newline at end of file
diff --git a/components/Legal/RevocationComp.tsx b/components/Legal/RevocationComp.tsx
new file mode 100644
index 0000000..756b799
--- /dev/null
+++ b/components/Legal/RevocationComp.tsx
@@ -0,0 +1,98 @@
+"use client";
+
+import SmallHero from "@/components/Helper/SmallHero";
+import React, {useContext, useEffect} from "react";
+import {ThemeContext} from "@/components/provider/ThemeProvider";
+import {themeColors} from "@/components/Helper/ThemeColors";
+import AOS from "aos";
+
+const RevocationComp = () => {
+ const {theme} = useContext(ThemeContext);
+ const colors = themeColors[theme];
+
+ useEffect(() => {
+ AOS.init({
+ duration: 1000,
+ easing: "ease",
+ once: true,
+ anchorPlacement: "top-bottom",
+ });
+ }, []);
+
+ return (
+
+
+ {/* Hero Section */}
+
+
+
+
+
+ {/* Contact Form */}
+
+
+ Schreib uns eine Nachricht
+
+
+ Wir melden uns schnellstmöglich bei dir!
+
+
+
+ {/* Name & Email */}
+
+ {["Dein Name", "Deine E-Mail"].map((label, index) => (
+
+ {label}
+
+
+ ))}
+
+
+ {/* Message */}
+
+ Deine Nachricht
+
+
+
+ {/* Submit Button */}
+
+
+ 📩 Nachricht senden
+
+
+
+
+
+ );};
+
+export default RevocationComp;
\ No newline at end of file
diff --git a/components/Legal/TermsOfUseComp.tsx b/components/Legal/TermsOfUseComp.tsx
new file mode 100644
index 0000000..ad8117b
--- /dev/null
+++ b/components/Legal/TermsOfUseComp.tsx
@@ -0,0 +1,99 @@
+"use client";
+
+import SmallHero from "@/components/Helper/SmallHero";
+import React, {useContext, useEffect} from "react";
+import {ThemeContext} from "@/components/provider/ThemeProvider";
+import {themeColors} from "@/components/Helper/ThemeColors";
+import AOS from "aos";
+
+const TermsOfUseComp = () => {
+ const {theme} = useContext(ThemeContext);
+ const colors = themeColors[theme];
+
+ useEffect(() => {
+ AOS.init({
+ duration: 1000,
+ easing: "ease",
+ once: true,
+ anchorPlacement: "top-bottom",
+ });
+ }, []);
+
+ return (
+
+
+ {/* Hero Section */}
+
+
+
+
+
+ {/* Contact Form */}
+
+
+ Schreib uns eine Nachricht
+
+
+ Wir melden uns schnellstmöglich bei dir!
+
+
+
+ {/* Name & Email */}
+
+ {["Dein Name", "Deine E-Mail"].map((label, index) => (
+
+ {label}
+
+
+ ))}
+
+
+ {/* Message */}
+
+ Deine Nachricht
+
+
+
+ {/* Submit Button */}
+
+
+ 📩 Nachricht senden
+
+
+
+
+
+ );
+};
+
+export default TermsOfUseComp;
\ No newline at end of file
diff --git a/components/Navbar/DesktopNav.tsx b/components/Navbar/DesktopNav.tsx
new file mode 100644
index 0000000..4761101
--- /dev/null
+++ b/components/Navbar/DesktopNav.tsx
@@ -0,0 +1,114 @@
+"use client";
+
+import {usePathname} from "next/navigation";
+import {navLinks} from "@/constant/Constant";
+import Link from "next/link";
+import React, {useContext, useEffect, useState} from "react";
+import {HiBars3BottomRight} from "react-icons/hi2";
+import {ThemeContext} from "@/components/provider/ThemeProvider";
+import {themeColors} from "@/components/Helper/ThemeColors";
+
+type Props = {
+ openNav: () => void;
+};
+
+const Nav = ({openNav}: Props) => {
+ const [navBg, setNavBg] = useState(false);
+ const [navHeight, setNavHeight] = useState("h-[10vh]");
+ const [contentSize, setContentSize] = useState("text-base md:text-lg");
+ const [buttonSize, setButtonSize] = useState("md:px-6 md:py-2 px-4 py-1 text-sm");
+ const {theme, toggleTheme} = useContext(ThemeContext);
+ const colors = themeColors[theme];
+ const pathname = usePathname();
+
+ const navColorClass = theme === "dark" || !navBg ? "text-white" : "text-black";
+
+ useEffect(() => {
+ const handler = () => {
+ if (window.scrollY >= 90) {
+ setNavBg(true);
+ setNavHeight("h-[8vh]");
+ setContentSize("text-sm md:text-base");
+ setButtonSize("md:px-5 md:py-1.5 px-3 py-1 text-xs");
+ } else {
+ setNavBg(false);
+ setNavHeight("h-[10vh]");
+ setContentSize("text-base md:text-lg");
+ setButtonSize("md:px-6 md:py-2 px-4 py-1 text-sm");
+ }
+ };
+
+ window.addEventListener("scroll", handler);
+ return () => window.removeEventListener("scroll", handler);
+ }, []);
+
+ return (
+
+
+ {/* LOGO */}
+
+ R hein Software
+
+
+ {/* Desktop Nav Links */}
+
+ {navLinks.map((link) => (
+
+
+ {link.label}
+ {pathname !== link.url && (
+
+ )}
+
+
+ ))}
+
+
+ {/* Right Side Buttons */}
+
+ {/* Contact Button */}
+
+
+ Kontakt
+
+
+
+ {/* Theme Toggle Button */}
+
+ {theme === "dark" ? "🌙" : "☀️"}
+
+
+ {/* Burger Menu (for mobile) */}
+
+
+
+
+ );
+};
+
+export default Nav;
diff --git a/components/Navbar/MobileNav.tsx b/components/Navbar/MobileNav.tsx
new file mode 100644
index 0000000..2d9ed07
--- /dev/null
+++ b/components/Navbar/MobileNav.tsx
@@ -0,0 +1,62 @@
+import { navLinks } from "@/constant/Constant";
+import Link from "next/link";
+import React, { useContext } from "react";
+import { CgClose } from "react-icons/cg";
+import { ThemeContext } from "@/components/provider/ThemeProvider";
+import { themeColors } from "@/components/Helper/ThemeColors";
+
+type Props = {
+ showNav: boolean;
+ closeNav: () => void;
+};
+
+const MobileNav = ({ closeNav, showNav }: Props) => {
+ const navOpen = showNav ? "translate-y-0 opacity-100" : "-translate-y-20 opacity-0 pointer-events-none";
+ const { theme, toggleTheme } = useContext(ThemeContext);
+ const colors = themeColors[theme];
+ return (
+
+ {/* overlay background */}
+
+
+ {/* nav menu */}
+
+
+ {/* Close icon */}
+
+
+ {navLinks.map((link) => (
+
+
+ {link.label}
+
+
+ ))}
+
+ {/* Theme toggle button */}
+
+ {theme === "dark" ? "🌙" : "☀️"}
+
+
+
+
+ );
+};
+
+export default MobileNav;
diff --git a/components/Navbar/Nav.tsx b/components/Navbar/Nav.tsx
new file mode 100644
index 0000000..a353eaf
--- /dev/null
+++ b/components/Navbar/Nav.tsx
@@ -0,0 +1,24 @@
+"use client";
+
+import React, {useState} from "react";
+import DesktopNav from "./DesktopNav";
+import MobileNav from "./MobileNav";
+
+const Nav = () => {
+ const [showNav, setShowNav] = useState(false);
+ const handleNavShow = () => {
+ setShowNav(true);
+ };
+ const handleNavHide = () => {
+ setShowNav(false);
+ };
+
+ return (
+
+
+
+
+ );
+};
+
+export default Nav;
diff --git a/components/provider/ThemeProvider.tsx b/components/provider/ThemeProvider.tsx
new file mode 100644
index 0000000..cd8936a
--- /dev/null
+++ b/components/provider/ThemeProvider.tsx
@@ -0,0 +1,54 @@
+"use client";
+
+import { createContext, useEffect, useState } from "react";
+import Cookies from "js-cookie";
+
+// Define theme options
+type ThemeType = "light" | "dark";
+
+export const ThemeContext = createContext<{
+ theme: ThemeType;
+ toggleTheme: () => void;
+}>({
+ theme: "light",
+ toggleTheme: () => {},
+});
+
+export const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
+ const [theme, setTheme] = useState("light");
+
+ useEffect(() => {
+ // Get theme from cookies or system preference
+ const savedTheme = Cookies.get("theme") as ThemeType | undefined;
+ if (savedTheme === "dark" || savedTheme === "light") {
+ setTheme(savedTheme);
+ } else {
+ // Detect system preference
+ const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
+ setTheme(prefersDark ? "dark" : "light");
+ Cookies.set("theme", prefersDark ? "dark" : "light", { expires: 365 });
+ }
+ }, []);
+
+ // Apply the transition effect when theme changes
+ useEffect(() => {
+ document.documentElement.classList.add("transition-theme");
+ document.documentElement.setAttribute("data-theme", theme);
+
+ return () => {
+ document.documentElement.classList.remove("transition-theme");
+ };
+ }, [theme]);
+
+ const toggleTheme = () => {
+ const newTheme: ThemeType = theme === "dark" ? "light" : "dark";
+ setTheme(newTheme);
+ Cookies.set("theme", newTheme, { expires: 365 });
+ };
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/constant/Constant.ts b/constant/Constant.ts
new file mode 100644
index 0000000..64dd8e4
--- /dev/null
+++ b/constant/Constant.ts
@@ -0,0 +1,17 @@
+export const navLinks = [
+ {
+ id: 1,
+ url: '/',
+ label: 'Home',
+ },
+ {
+ id: 2,
+ url: '#',
+ label: 'Über uns',
+ },
+ {
+ id: 3,
+ url: '/services',
+ label: 'Leistungen',
+ }
+];
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 744124f..c27636f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,26 +1,35 @@
{
- "name": "website",
+ "name": "web",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "website",
+ "name": "web",
"version": "0.1.0",
"dependencies": {
- "next": "15.2.4",
+ "aos": "^2.3.4",
+ "framer-motion": "^12.6.5",
+ "js-cookie": "^3.0.5",
+ "next": "15.1.7",
"react": "^19.0.0",
- "react-dom": "^19.0.0"
+ "react-dom": "^19.0.0",
+ "react-icons": "^5.4.0",
+ "react-simple-typewriter": "^5.0.1"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
- "@tailwindcss/postcss": "^4",
+ "@tailwindcss/postcss": "^4.0.17",
+ "@types/aos": "^3.0.7",
+ "@types/js-cookie": "^3.0.6",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
+ "autoprefixer": "^10.4.21",
"eslint": "^9",
- "eslint-config-next": "15.2.4",
- "tailwindcss": "^4",
+ "eslint-config-next": "15.1.7",
+ "postcss": "^8.5.3",
+ "tailwindcss": "^3.4.17",
"typescript": "^5"
}
},
@@ -635,6 +644,77 @@
"url": "https://opencollective.com/libvips"
}
},
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "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/@napi-rs/wasm-runtime": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz",
@@ -649,15 +729,15 @@
}
},
"node_modules/@next/env": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz",
- "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.7.tgz",
+ "integrity": "sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==",
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.4.tgz",
- "integrity": "sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.7.tgz",
+ "integrity": "sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -665,9 +745,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz",
- "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.7.tgz",
+ "integrity": "sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==",
"cpu": [
"arm64"
],
@@ -681,9 +761,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz",
- "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.7.tgz",
+ "integrity": "sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==",
"cpu": [
"x64"
],
@@ -697,9 +777,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz",
- "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.7.tgz",
+ "integrity": "sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==",
"cpu": [
"arm64"
],
@@ -713,9 +793,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz",
- "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.7.tgz",
+ "integrity": "sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==",
"cpu": [
"arm64"
],
@@ -729,9 +809,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz",
- "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.7.tgz",
+ "integrity": "sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==",
"cpu": [
"x64"
],
@@ -745,9 +825,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz",
- "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.7.tgz",
+ "integrity": "sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==",
"cpu": [
"x64"
],
@@ -761,9 +841,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz",
- "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.7.tgz",
+ "integrity": "sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==",
"cpu": [
"arm64"
],
@@ -777,9 +857,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz",
- "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.7.tgz",
+ "integrity": "sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==",
"cpu": [
"x64"
],
@@ -840,6 +920,17 @@
"node": ">=12.4.0"
}
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -870,44 +961,52 @@
}
},
"node_modules/@tailwindcss/node": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.17.tgz",
- "integrity": "sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.3.tgz",
+ "integrity": "sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA==",
"dev": true,
"license": "MIT",
"dependencies": {
"enhanced-resolve": "^5.18.1",
"jiti": "^2.4.2",
- "tailwindcss": "4.0.17"
+ "lightningcss": "1.29.2",
+ "tailwindcss": "4.1.3"
}
},
+ "node_modules/@tailwindcss/node/node_modules/tailwindcss": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.3.tgz",
+ "integrity": "sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@tailwindcss/oxide": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.17.tgz",
- "integrity": "sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.3.tgz",
+ "integrity": "sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10"
},
"optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.0.17",
- "@tailwindcss/oxide-darwin-arm64": "4.0.17",
- "@tailwindcss/oxide-darwin-x64": "4.0.17",
- "@tailwindcss/oxide-freebsd-x64": "4.0.17",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.17",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.0.17",
- "@tailwindcss/oxide-linux-arm64-musl": "4.0.17",
- "@tailwindcss/oxide-linux-x64-gnu": "4.0.17",
- "@tailwindcss/oxide-linux-x64-musl": "4.0.17",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.0.17",
- "@tailwindcss/oxide-win32-x64-msvc": "4.0.17"
+ "@tailwindcss/oxide-android-arm64": "4.1.3",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.3",
+ "@tailwindcss/oxide-darwin-x64": "4.1.3",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.3",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.3",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.3",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.3",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.3",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.3",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.3",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.3"
}
},
"node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.17.tgz",
- "integrity": "sha512-3RfO0ZK64WAhop+EbHeyxGThyDr/fYhxPzDbEQjD2+v7ZhKTb2svTWy+KK+J1PHATus2/CQGAGp7pHY/8M8ugg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.3.tgz",
+ "integrity": "sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g==",
"cpu": [
"arm64"
],
@@ -922,9 +1021,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.17.tgz",
- "integrity": "sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.3.tgz",
+ "integrity": "sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw==",
"cpu": [
"arm64"
],
@@ -939,9 +1038,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.17.tgz",
- "integrity": "sha512-d6z7HSdOKfXQ0HPlVx1jduUf/YtBuCCtEDIEFeBCzgRRtDsUuRtofPqxIVaSCUTOk5+OfRLonje6n9dF6AH8wQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.3.tgz",
+ "integrity": "sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg==",
"cpu": [
"x64"
],
@@ -956,9 +1055,9 @@
}
},
"node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.17.tgz",
- "integrity": "sha512-EjrVa6lx3wzXz3l5MsdOGtYIsRjgs5Mru6lDv4RuiXpguWeOb3UzGJ7vw7PEzcFadKNvNslEQqoAABeMezprxQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.3.tgz",
+ "integrity": "sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w==",
"cpu": [
"x64"
],
@@ -973,9 +1072,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.17.tgz",
- "integrity": "sha512-65zXfCOdi8wuaY0Ye6qMR5LAXokHYtrGvo9t/NmxvSZtCCitXV/gzJ/WP5ksXPhff1SV5rov0S+ZIZU+/4eyCQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.3.tgz",
+ "integrity": "sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg==",
"cpu": [
"arm"
],
@@ -990,9 +1089,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.17.tgz",
- "integrity": "sha512-+aaq6hJ8ioTdbJV5IA1WjWgLmun4T7eYLTvJIToiXLHy5JzUERRbIZjAcjgK9qXMwnvuu7rqpxzej+hGoEcG5g==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.3.tgz",
+ "integrity": "sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg==",
"cpu": [
"arm64"
],
@@ -1007,9 +1106,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.17.tgz",
- "integrity": "sha512-/FhWgZCdUGAeYHYnZKekiOC0aXFiBIoNCA0bwzkICiMYS5Rtx2KxFfMUXQVnl4uZRblG5ypt5vpPhVaXgGk80w==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.3.tgz",
+ "integrity": "sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ==",
"cpu": [
"arm64"
],
@@ -1024,9 +1123,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.17.tgz",
- "integrity": "sha512-gELJzOHK6GDoIpm/539Golvk+QWZjxQcbkKq9eB2kzNkOvrP0xc5UPgO9bIMNt1M48mO8ZeNenCMGt6tfkvVBg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.3.tgz",
+ "integrity": "sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA==",
"cpu": [
"x64"
],
@@ -1041,9 +1140,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.17.tgz",
- "integrity": "sha512-68NwxcJrZn94IOW4TysMIbYv5AlM6So1luTlbYUDIGnKma1yTFGBRNEJ+SacJ3PZE2rgcTBNRHX1TB4EQ/XEHw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.3.tgz",
+ "integrity": "sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw==",
"cpu": [
"x64"
],
@@ -1058,9 +1157,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.17.tgz",
- "integrity": "sha512-AkBO8efP2/7wkEXkNlXzRD4f/7WerqKHlc6PWb5v0jGbbm22DFBLbIM19IJQ3b+tNewQZa+WnPOaGm0SmwMNjw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.3.tgz",
+ "integrity": "sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg==",
"cpu": [
"arm64"
],
@@ -1075,9 +1174,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.17.tgz",
- "integrity": "sha512-7/DTEvXcoWlqX0dAlcN0zlmcEu9xSermuo7VNGX9tJ3nYMdo735SHvbrHDln1+LYfF6NhJ3hjbpbjkMOAGmkDg==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.3.tgz",
+ "integrity": "sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA==",
"cpu": [
"x64"
],
@@ -1092,20 +1191,26 @@
}
},
"node_modules/@tailwindcss/postcss": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.17.tgz",
- "integrity": "sha512-qeJbRTB5FMZXmuJF+eePd235EGY6IyJZF0Bh0YM6uMcCI4L9Z7dy+lPuLAhxOJzxnajsbjPoDAKOuAqZRtf1PQ==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.3.tgz",
+ "integrity": "sha512-6s5nJODm98F++QT49qn8xJKHQRamhYHfMi3X7/ltxiSQ9dyRsaFSfFkfaMsanWzf+TMYQtbk8mt5f6cCVXJwfg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
- "@tailwindcss/node": "4.0.17",
- "@tailwindcss/oxide": "4.0.17",
- "lightningcss": "1.29.2",
+ "@tailwindcss/node": "4.1.3",
+ "@tailwindcss/oxide": "4.1.3",
"postcss": "^8.4.41",
- "tailwindcss": "4.0.17"
+ "tailwindcss": "4.1.3"
}
},
+ "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.3.tgz",
+ "integrity": "sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@tybys/wasm-util": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
@@ -1117,6 +1222,13 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@types/aos": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@types/aos/-/aos-3.0.7.tgz",
+ "integrity": "sha512-sEhyFqvKauUJZDbvAB3Pggynrq6g+2PS4XB3tmUr+mDL1gfDJnwslUC4QQ7/l8UD+LWpr3RxZVR/rHoZrLqZVg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
@@ -1124,6 +1236,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/js-cookie": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz",
+ "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -1657,6 +1776,19 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -1673,6 +1805,45 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/aos": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/aos/-/aos-2.3.4.tgz",
+ "integrity": "sha512-zh/ahtR2yME4I51z8IttIt4lC1Nw0ktsFtmeDzID1m9naJnWXhCoARaCgNOGXb5CLy3zm+wqmRAEgMYB5E2HUw==",
+ "license": "MIT",
+ "dependencies": {
+ "classlist-polyfill": "^1.0.3",
+ "lodash.debounce": "^4.0.6",
+ "lodash.throttle": "^4.0.1"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -1865,6 +2036,44 @@
"node": ">= 0.4"
}
},
+ "node_modules/autoprefixer": {
+ "version": "10.4.21",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.24.4",
+ "caniuse-lite": "^1.0.30001702",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -1908,6 +2117,19 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1932,6 +2154,39 @@
"node": ">=8"
}
},
+ "node_modules/browserslist": {
+ "version": "4.24.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
+ "dev": true,
+ "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"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
+ },
+ "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",
@@ -2003,6 +2258,16 @@
"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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/caniuse-lite": {
"version": "1.0.30001707",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz",
@@ -2040,6 +2305,50 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/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/classlist-polyfill": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz",
+ "integrity": "sha512-GzIjNdcEtH4ieA2S8NmrSxv7DfEV5fmixQeyTmqmRmRJPGpRBaSnA2a0VrCjyT8iW8JjEdMbKzDotAJf+ajgaQ==",
+ "license": "Unlicense"
+ },
"node_modules/client-only": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
@@ -2091,6 +2400,16 @@
"simple-swizzle": "^0.2.2"
}
},
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2113,6 +2432,19 @@
"node": ">= 8"
}
},
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "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",
@@ -2252,6 +2584,20 @@
"node": ">=8"
}
},
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -2280,6 +2626,20 @@
"node": ">= 0.4"
}
},
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.129",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.129.tgz",
+ "integrity": "sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@@ -2475,6 +2835,16 @@
"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==",
+ "dev": true,
+ "license": "MIT",
+ "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",
@@ -2550,13 +2920,13 @@
}
},
"node_modules/eslint-config-next": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.2.4.tgz",
- "integrity": "sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.7.tgz",
+ "integrity": "sha512-zXoMnYUIy3XHaAoOhrcYkT9UQWvXqWju2K7NNsmb5wd/7XESDwof61eUdW4QhERr3eJ9Ko/vnXqIrj8kk/drYw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@next/eslint-plugin-next": "15.2.4",
+ "@next/eslint-plugin-next": "15.1.7",
"@rushstack/eslint-patch": "^1.10.3",
"@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
@@ -3055,6 +3425,79 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "12.6.5",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.6.5.tgz",
+ "integrity": "sha512-MKvnWov0paNjvRJuIy6x418w23tFqRfS6CXHhZrCiSEpXVlo/F+usr8v4/3G6O0u7CpsaO1qop+v4Ip7PRCBqQ==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^12.6.5",
+ "motion-utils": "^12.6.5",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -3166,6 +3609,27 @@
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
+ "node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "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",
@@ -3179,6 +3643,32 @@
"node": ">=10.13.0"
}
},
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/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/globals": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
@@ -3443,6 +3933,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-boolean-object": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
@@ -3560,6 +4063,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-generator-function": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
@@ -3809,6 +4322,22 @@
"node": ">= 0.4"
}
},
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"node_modules/jiti": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
@@ -3819,6 +4348,15 @@
"jiti": "lib/jiti-cli.mjs"
}
},
+ "node_modules/js-cookie": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
+ "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -4172,6 +4710,26 @@
"url": "https://opencollective.com/parcel"
}
},
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -4188,6 +4746,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "license": "MIT"
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -4195,6 +4759,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
+ "license": "MIT"
+ },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -4208,6 +4778,13 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -4265,6 +4842,31 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/motion-dom": {
+ "version": "12.6.5",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.6.5.tgz",
+ "integrity": "sha512-jpM9TQLXzYMWMJ7Ec7sAj0iis8oIuu6WvjI3yNKJLdrZyrsI/b2cRInDVL8dCl683zQQq19DpL9cSMP+k8T1NA==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^12.6.5"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "12.6.5",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.6.5.tgz",
+ "integrity": "sha512-IsOeKsOF+FWBhxQEDFBO6ZYC8/jlidmVbbLpe9/lXSA9j9kzGIMUuIBx2SZY+0reAS0DjZZ1i7dJp4NHrjocPw==",
+ "license": "MIT"
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -4272,6 +4874,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
"node_modules/nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
@@ -4298,12 +4912,12 @@
"license": "MIT"
},
"node_modules/next": {
- "version": "15.2.4",
- "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz",
- "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==",
+ "version": "15.1.7",
+ "resolved": "https://registry.npmjs.org/next/-/next-15.1.7.tgz",
+ "integrity": "sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==",
"license": "MIT",
"dependencies": {
- "@next/env": "15.2.4",
+ "@next/env": "15.1.7",
"@swc/counter": "0.1.3",
"@swc/helpers": "0.5.15",
"busboy": "1.6.0",
@@ -4318,14 +4932,14 @@
"node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "15.2.4",
- "@next/swc-darwin-x64": "15.2.4",
- "@next/swc-linux-arm64-gnu": "15.2.4",
- "@next/swc-linux-arm64-musl": "15.2.4",
- "@next/swc-linux-x64-gnu": "15.2.4",
- "@next/swc-linux-x64-musl": "15.2.4",
- "@next/swc-win32-arm64-msvc": "15.2.4",
- "@next/swc-win32-x64-msvc": "15.2.4",
+ "@next/swc-darwin-arm64": "15.1.7",
+ "@next/swc-darwin-x64": "15.1.7",
+ "@next/swc-linux-arm64-gnu": "15.1.7",
+ "@next/swc-linux-arm64-musl": "15.1.7",
+ "@next/swc-linux-x64-gnu": "15.1.7",
+ "@next/swc-linux-x64-musl": "15.1.7",
+ "@next/swc-win32-arm64-msvc": "15.1.7",
+ "@next/swc-win32-x64-msvc": "15.1.7",
"sharp": "^0.33.5"
},
"peerDependencies": {
@@ -4379,6 +4993,33 @@
"node": "^10 || ^12 || >=14"
}
},
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -4389,6 +5030,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.13.4",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
@@ -4570,6 +5221,13 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -4610,6 +5268,23 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -4629,6 +5304,26 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/possible-typed-array-names": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
@@ -4668,6 +5363,127 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -4742,6 +5558,15 @@
"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==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -4749,6 +5574,42 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/react-simple-typewriter": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/react-simple-typewriter/-/react-simple-typewriter-5.0.1.tgz",
+ "integrity": "sha512-vA5HkABwJKL/DJ4RshSlY/igdr+FiVY4MLsSQYJX6FZG/f1/VwN4y1i3mPXRyfaswrvI8xii1kOVe1dYtO2Row==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=18.0.0",
+ "react-dom": ">=18.0.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/reflect.getprototypeof": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -5131,6 +5992,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
@@ -5165,6 +6039,70 @@
"node": ">=10.0.0"
}
},
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/string.prototype.includes": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
@@ -5278,6 +6216,46 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
@@ -5324,6 +6302,29 @@
}
}
},
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -5351,11 +6352,82 @@
}
},
"node_modules/tailwindcss": {
- "version": "4.0.17",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.17.tgz",
- "integrity": "sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw==",
+ "version": "3.4.17",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
+ "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.6",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss/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/tailwindcss/node_modules/fast-glob/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/tailwindcss/node_modules/jiti": {
+ "version": "1.21.7",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
},
"node_modules/tapable": {
"version": "2.2.1",
@@ -5367,6 +6439,29 @@
"node": ">=6"
}
},
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/tinyglobby": {
"version": "0.2.12",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
@@ -5438,6 +6533,13 @@
"typescript": ">=4.8.4"
}
},
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/tsconfig-paths": {
"version": "3.15.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
@@ -5615,6 +6717,37 @@
"@unrs/resolver-binding-win32-x64-msvc": "1.3.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==",
+ "dev": true,
+ "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"
+ }
+ ],
+ "license": "MIT",
+ "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",
@@ -5625,6 +6758,13 @@
"punycode": "^2.1.0"
}
},
+ "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==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -5740,6 +6880,114 @@
"node": ">=0.10.0"
}
},
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/yaml": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz",
+ "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index 5120cd0..d828a0c 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "name": "website",
+ "name": "web",
"version": "0.1.0",
"private": true,
"scripts": {
@@ -9,19 +9,28 @@
"lint": "next lint"
},
"dependencies": {
+ "aos": "^2.3.4",
+ "framer-motion": "^12.6.5",
+ "js-cookie": "^3.0.5",
+ "next": "15.1.7",
"react": "^19.0.0",
"react-dom": "^19.0.0",
- "next": "15.2.4"
+ "react-icons": "^5.4.0",
+ "react-simple-typewriter": "^5.0.1"
},
"devDependencies": {
- "typescript": "^5",
+ "@eslint/eslintrc": "^3",
+ "@tailwindcss/postcss": "^4.0.17",
+ "@types/aos": "^3.0.7",
+ "@types/js-cookie": "^3.0.6",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
- "@tailwindcss/postcss": "^4",
- "tailwindcss": "^4",
+ "autoprefixer": "^10.4.21",
"eslint": "^9",
- "eslint-config-next": "15.2.4",
- "@eslint/eslintrc": "^3"
+ "eslint-config-next": "15.1.7",
+ "postcss": "^8.5.3",
+ "tailwindcss": "^3.4.17",
+ "typescript": "^5"
}
}
diff --git a/postcss.config.mjs b/postcss.config.mjs
index c7bcb4b..1a69fd2 100644
--- a/postcss.config.mjs
+++ b/postcss.config.mjs
@@ -1,5 +1,8 @@
+/** @type {import('postcss-load-config').Config} */
const config = {
- plugins: ["@tailwindcss/postcss"],
+ plugins: {
+ tailwindcss: {},
+ },
};
export default config;
diff --git a/public/file.svg b/public/file.svg
deleted file mode 100644
index 004145c..0000000
--- a/public/file.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/globe.svg b/public/globe.svg
deleted file mode 100644
index 567f17b..0000000
--- a/public/globe.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/images/About_Picture.png b/public/images/About_Picture.png
new file mode 100644
index 0000000000000000000000000000000000000000..624ff66041ff0ff8ee74b8b07da93a42dcf6542d
GIT binary patch
literal 1918715
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