diff --git a/app/archive/page.tsx b/app/archive/page.tsx index 7cfffbc..1f25497 100644 --- a/app/archive/page.tsx +++ b/app/archive/page.tsx @@ -4,7 +4,7 @@ import ArchiveBrowser from '@/components/ArchiveBrowser'; export default function ArchivePage() { return ( -
+
{/* Gradient Background */}
{/* Radial Vignette */} @@ -18,7 +18,7 @@ export default function ArchivePage() {
{/* Content */} -
+
{/* Header */}
{/* Back Button */} @@ -29,8 +29,8 @@ export default function ArchivePage() { - {/* Logo and Title - Centered */} -
+ {/* Logo and Title - Centered, clickable to return home */} +
Radiordle -
+ {/* Spacer for centering */}
diff --git a/components/FeedbackModal.tsx b/components/FeedbackModal.tsx index a11a244..e0bb7aa 100644 --- a/components/FeedbackModal.tsx +++ b/components/FeedbackModal.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState } from 'react'; +import { useState, useEffect } from 'react'; import Link from 'next/link'; interface FeedbackModalProps { @@ -25,6 +25,14 @@ export default function FeedbackModal({ isOpen, onClose, pageContext }: Feedback const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle'); const [errorMessage, setErrorMessage] = useState(''); + // Lock background scroll while modal is open + useEffect(() => { + if (isOpen) { + document.body.style.overflow = 'hidden'; + return () => { document.body.style.overflow = ''; }; + } + }, [isOpen]); + if (!isOpen) return null; const handleSubmit = async (e: React.FormEvent) => { @@ -91,7 +99,7 @@ export default function FeedbackModal({ isOpen, onClose, pageContext }: Feedback return (
{ + document.body.style.overflow = 'hidden'; + return () => { document.body.style.overflow = ''; }; + }, []); + const stats = getStatistics(); const [globalStats, setGlobalStats] = useState(null); const [percentileBeat, setPercentileBeat] = useState(null); @@ -527,11 +533,12 @@ function ResultsModal({ return (
e.stopPropagation()} >

@@ -570,7 +577,10 @@ function ResultsModal({ {/* Statistics */}
-

Statistics

+

Statistics

+ {isArchive && ( +

Archive puzzles are not included in your statistics.

+ )}

{stats.gamesPlayed}

diff --git a/components/LegalModals.tsx b/components/LegalModals.tsx index fb75e5c..6bcd2da 100644 --- a/components/LegalModals.tsx +++ b/components/LegalModals.tsx @@ -1,11 +1,19 @@ 'use client'; -import { useState } from 'react'; +import { useState, useEffect } from 'react'; export default function LegalModals() { const [showPrivacyPolicy, setShowPrivacyPolicy] = useState(false); const [showTermsOfService, setShowTermsOfService] = useState(false); + // Lock background scroll while any legal modal is open + useEffect(() => { + if (showPrivacyPolicy || showTermsOfService) { + document.body.style.overflow = 'hidden'; + return () => { document.body.style.overflow = ''; }; + } + }, [showPrivacyPolicy, showTermsOfService]); + return ( <> {/* Legal Section Buttons */} @@ -28,8 +36,8 @@ export default function LegalModals() { {/* Privacy Policy Modal */} {showPrivacyPolicy && ( -
-
+
setShowPrivacyPolicy(false)}> +
e.stopPropagation()}>

Privacy Policy