From d5848e6c88897cb49cd1548f3932a0670f273787 Mon Sep 17 00:00:00 2001 From: Coder-soft Date: Mon, 5 Oct 2026 23:37:26 +0500 Subject: [PATCH] fix: center creator tools, correct Minecraft Five Bold font, fade donate near bottom, replace private tutorials - PopularTools: use a 3-column max-width grid so the cards are centered - index.css: point 'Minecraft Five Bold' at the real font file instead of minecraft.woff2 (Mojangles) - DonateButton: fade out and disable pointer events within 200px of the page bottom - Community: replace broken/private Animation & Motion Graphics entries with public, embeddable tutorials --- public/fonts/minecraft-five-bold.ttf | Bin 0 -> 47932 bytes src/components/DonateButton.tsx | 38 ++++++++++++++++++++++++--- src/components/PopularTools.tsx | 2 +- src/index.css | 2 +- src/pages/Community.tsx | 30 ++++++++++----------- 5 files changed, 52 insertions(+), 20 deletions(-) create mode 100644 public/fonts/minecraft-five-bold.ttf diff --git a/public/fonts/minecraft-five-bold.ttf b/public/fonts/minecraft-five-bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9fed182130a497a2e84f1be107d3f390a976613c GIT binary patch literal 47932 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 J6HAn?{C_Nr>H`1( literal 0 HcmV?d00001 diff --git a/src/components/DonateButton.tsx b/src/components/DonateButton.tsx index 02b5a079..0cf6ba03 100644 --- a/src/components/DonateButton.tsx +++ b/src/components/DonateButton.tsx @@ -1,17 +1,49 @@ -import { useState } from "react"; +import { useEffect, useState } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { IconHeart } from "@tabler/icons-react"; import { supporters } from "@/data/supporters"; const DonateButton = () => { const [isHovered, setIsHovered] = useState(false); + const [isNearBottom, setIsNearBottom] = useState(false); const supporterCount = supporters.length; + useEffect(() => { + const handleScroll = () => { + const scrollTop = Math.max( + document.documentElement.scrollTop, + document.body.scrollTop, + ); + const viewportHeight = window.innerHeight; + const fullHeight = Math.max( + document.documentElement.scrollHeight, + document.body.scrollHeight, + ); + setIsNearBottom(fullHeight - (scrollTop + viewportHeight) < 200); + }; + + handleScroll(); + document.addEventListener("scroll", handleScroll, true); + window.addEventListener("resize", handleScroll); + const resizeObserver = new ResizeObserver(handleScroll); + resizeObserver.observe(document.body); + return () => { + document.removeEventListener("scroll", handleScroll, true); + window.removeEventListener("resize", handleScroll); + resizeObserver.disconnect(); + }; + }, []); + return ( -
setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} + initial={false} + animate={{ opacity: isNearBottom ? 0 : 1 }} + transition={{ duration: 0.3, ease: "easeOut" }} + style={{ pointerEvents: isNearBottom ? "none" : "auto" }} + aria-hidden={isNearBottom} > { )} -
+ ); }; diff --git a/src/components/PopularTools.tsx b/src/components/PopularTools.tsx index 0c0a7c19..c1ce23c3 100644 --- a/src/components/PopularTools.tsx +++ b/src/components/PopularTools.tsx @@ -75,7 +75,7 @@ const PopularTools = () => {