diff --git a/package.json b/package.json
index 1d2fc089..68ffa747 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"@tanstack/react-query": "^5.66.0",
"@types/luxon": "^3.3.2",
"@types/node": "^24.1.0",
- "@types/react": "19.1.13",
+ "@types/react": "19.1.16",
"@types/react-dom": "19.1.9",
"@vercel/analytics": "^1.5.0",
"@vercel/speed-insights": "^1.2.0",
diff --git a/src/components/InfoSections.tsx b/src/components/InfoSections.tsx
index 5e21965e..b812d024 100644
--- a/src/components/InfoSections.tsx
+++ b/src/components/InfoSections.tsx
@@ -1,7 +1,7 @@
"use client";
import React, { useState, useEffect } from "react";
-import { motion } from "framer-motion";
+import { m, motion } from "framer-motion";
import Image from "next/image";
import { useFlagState } from "@/lib/api/flag/hook";
@@ -51,6 +51,11 @@ const InfoSections: React.FC = () => {
const [order, setOrder] = useState(SECTIONS);
const { data: statsSectionFlag } = useFlagState("StatsSectionEnabled");
+ // Easter egg; spinning the floaties
+ const [clicked1, setClicked1] = useState(false);
+ const [clicked2, setClicked2] = useState(false);
+ const [clicked3, setClicked3] = useState(false);
+
function rotateLeft(steps: number) {
setOrder((prev) => {
const k = steps % prev.length;
@@ -70,6 +75,7 @@ const InfoSections: React.FC = () => {
>
{/* Animated Float Elements */}
{
+ setClicked1(true)
+ setTimeout(() => setClicked1(false), 1000)
+ }}
>
{
{
right: "clamp(20px, 4vw, 80px)",
top: "clamp(0px, 1vw, 100px)",
}}
- animate={{
- rotate: [0, 15, 0],
- y: [0, -20, 0],
- scale: [1, 0.8, 1],
- }}
+ animate={
+ clicked2 ? {
+ rotate: [0, 360, 0], y: [0, -20, 0], scale: [1, 0.8, 1],
+ transition: {
+ rotate: { duration: 1, ease: "easeInOut" }, // one-off spin
+ y: { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 },
+ scale: { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 },
+ }
+ } : {
+ rotate: [0, 15, 0], y: [0, -20, 0], scale: [1, 0.8, 1],
+ transition: {
+ rotate : { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 },
+ y: { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 },
+ scale: { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 },
+ }
+ }
+ }
transition={{
duration: 5,
repeat: Infinity,
ease: "easeInOut",
delay: 1,
}}
+ onClick={() => {
+ setClicked2(true)
+ setTimeout(() => setClicked2(false), 1000)
+ }}
>
{
{
+ setClicked3(true)
+ setTimeout(() => setClicked3(false), 1000)
+ }}
>
=12.12.47", "@types/node@>=13.7.0", "@types/node@^24.1.0":
- version "24.5.2"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-24.5.2.tgz#52ceb83f50fe0fcfdfbd2a9fab6db2e9e7ef6446"
- integrity sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==
+ version "24.6.1"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-24.6.1.tgz#29cd365beb4419b3b8271c7464f1a563446d7481"
+ integrity sha512-ljvjjs3DNXummeIaooB4cLBKg2U6SPI6Hjra/9rRIy7CpM0HpLtG9HptkMKAb4HYWy5S7HUvJEuWgr/y0U8SHw==
dependencies:
- undici-types "~7.12.0"
+ undici-types "~7.13.0"
"@types/parse-json@^4.0.0":
version "4.0.2"
@@ -2885,10 +2880,10 @@
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044"
integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==
-"@types/react@19.1.13":
- version "19.1.13"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.13.tgz#fc650ffa680d739a25a530f5d7ebe00cdd771883"
- integrity sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==
+"@types/react@19.1.16":
+ version "19.1.16"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.16.tgz#6329b1c17a5de624439eae673f86a2c5569a42be"
+ integrity sha512-WBM/nDbEZmDUORKnh5i1bTnAz6vTohUf9b8esSMu+b24+srbaxa04UbJgWx78CVfNXA20sNu0odEIluZDFdCog==
dependencies:
csstype "^3.0.2"
@@ -5680,9 +5675,9 @@ postcss@^8.4.47:
source-map-js "^1.2.1"
posthog-js@^1.257.0:
- version "1.268.8"
- resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.268.8.tgz#2d2f77aa46a926fa43f93d14573a3087c0ecf956"
- integrity sha512-BJiKK4MlUvs7ybnQcy1KkwAz+SZkE/wRLotetIoank5kbqZs8FLbeyozFvmmgx4aoMmaVymYBSmYphYjYQeidw==
+ version "1.268.9"
+ resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.268.9.tgz#08cced88984b14353ca12f2a7313bdd40b3158f3"
+ integrity sha512-ejK5/i0TUQ8I1SzaIn7xWNf5TzOjWquawpgjKit8DyucD3Z1yf7LTMtgCYZN8oRx9VjiPcP34fSk8YsWQmmkTQ==
dependencies:
"@posthog/core" "1.2.2"
core-js "^3.38.1"
@@ -6646,9 +6641,9 @@ typed-array-length@^1.0.7:
reflect.getprototypeof "^1.0.6"
typescript@^5.9.2:
- version "5.9.2"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6"
- integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==
+ version "5.9.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
+ integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
unbox-primitive@^1.1.0:
version "1.1.0"
@@ -6660,10 +6655,10 @@ unbox-primitive@^1.1.0:
has-symbols "^1.1.0"
which-boxed-primitive "^1.1.1"
-undici-types@~7.12.0:
- version "7.12.0"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.12.0.tgz#15c5c7475c2a3ba30659529f5cdb4674b622fafb"
- integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==
+undici-types@~7.13.0:
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.13.0.tgz#a20ba7c0a2be0c97bd55c308069d29d167466bff"
+ integrity sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==
unicode-canonical-property-names-ecmascript@^2.0.0:
version "2.0.1"