From 39d3fa23bda219a3d0c0936a0c9f4376fba276c6 Mon Sep 17 00:00:00 2001 From: Kishan Asokan Date: Tue, 24 Feb 2026 22:21:30 -0600 Subject: [PATCH 1/3] Archive page improvements: viewport fix, logo nav, and stats disclaimer - Fix empty blue bar on large screens by using --full-vh viewport compensation - Make Radiordle logo/title clickable to navigate home from archive - Remove max-height cap on post-puzzle modal for desktop screens - Add archive stats disclaimer under Statistics heading in results modal Co-Authored-By: Claude Opus 4.6 --- app/archive/page.tsx | 10 +++++----- components/GameClient.tsx | 7 +++++-- 2 files changed, 10 insertions(+), 7 deletions(-) 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/GameClient.tsx b/components/GameClient.tsx index f8783f7..5e7fb58 100644 --- a/components/GameClient.tsx +++ b/components/GameClient.tsx @@ -531,7 +531,7 @@ function ResultsModal({ onClick={onClose} >
e.stopPropagation()} >

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

Statistics

+

Statistics

+ {isArchive && ( +

Archive puzzles are not included in your statistics.

+ )}

{stats.gamesPlayed}

From f1d9b143f04b2e3e5e1402e0d1cf423fc7f28e30 Mon Sep 17 00:00:00 2001 From: Kishan Asokan Date: Tue, 24 Feb 2026 22:41:42 -0600 Subject: [PATCH 2/3] Modal UX improvements: transparent backdrop, scroll lock, click-outside-to-close - Replace opaque black backdrop with semi-transparent bg-black/50 on all modals - Lock background scroll when any modal is open (body overflow: hidden) - Add click-outside-to-close to Legal modals (Privacy Policy, Terms of Service) - Remove desktop max-height cap on Stats modal to match Results modal Co-Authored-By: Claude Opus 4.6 --- components/FeedbackModal.tsx | 12 ++++++++++-- components/GameClient.tsx | 8 +++++++- components/LegalModals.tsx | 18 +++++++++++++----- components/StatsModal.tsx | 12 ++++++++++-- 4 files changed, 40 insertions(+), 10 deletions(-) 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,7 +533,7 @@ function ResultsModal({ return (
{ + 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