From 820e2348def6dd6f4b57f54cade8d14bd9ddab68 Mon Sep 17 00:00:00 2001 From: Bot Date: Sat, 11 Jul 2026 22:16:57 +0530 Subject: [PATCH] fix(landing): comprehensive mobile responsiveness for all viewport sizes - Add hamburger menu with animated dropdown for mobile nav (<640px) - Reduce hero/CTA font clamp minimums to prevent text overflow on 320px screens - Stack tool grid to single-column on very small screens (<400px), 2-col on small - Add custom Tailwind 'xs' breakpoint (400px) for fine-grained mobile control - Stack CTA buttons vertically on mobile for better tap targets - Center-align footer content on mobile with vertical stacking - Scale crystal prism visual responsively with min(340px, 70vw) - Reduce section padding on mobile for better content density - Adjust horizontal padding from px-6 to px-4 on mobile viewports Fixes #3 --- frontend/src/pages/LandingPage.tsx | 84 +++++++++++++++++++++++------- frontend/tailwind.config.js | 3 ++ 2 files changed, 68 insertions(+), 19 deletions(-) diff --git a/frontend/src/pages/LandingPage.tsx b/frontend/src/pages/LandingPage.tsx index baede37..6a86c98 100644 --- a/frontend/src/pages/LandingPage.tsx +++ b/frontend/src/pages/LandingPage.tsx @@ -1,3 +1,4 @@ +import { useState } from 'react' import { Link } from 'react-router-dom' import { Scissors, @@ -14,6 +15,8 @@ import { Gem, Pen, FileOutput, + Menu, + X, } from 'lucide-react' const tools = [ @@ -34,6 +37,8 @@ const steps = [ ] export default function LandingPage() { + const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + return (
{/* ── CSS ─────────────────────────────────────────────── */} @@ -66,10 +71,19 @@ export default function LandingPage() { background-size: 24px 24px; } + /* Mobile menu animation */ + .mobile-menu-enter { + animation: slideDown .25s ease both; + } + @keyframes slideDown { + from { opacity: 0; transform: translateY(-8px); } + to { opacity: 1; transform: translateY(0); } + } + /* Crystal prism */ .prism { - width: 340px; - height: 340px; + width: min(340px, 70vw); + height: min(340px, 70vw); position: relative; } .prism::before { @@ -142,17 +156,19 @@ export default function LandingPage() { {/* ── Nav ────────────────────────────────────────────── */} {/* ── Hero ───────────────────────────────────────────── */} -
+
{/* Text column */}

+ text-[clamp(1.75rem,5.5vw,4.8rem)] text-white anim-reveal"> Every
PDF tool
you'll ever{' '} need.

@@ -216,7 +262,7 @@ export default function LandingPage() { {/* ── Tools grid ─────────────────────────────────────── */}
-
+
{/* Section header */}

@@ -232,7 +278,7 @@ export default function LandingPage() {

{/* Grid */} -
+
{tools.map((t) => (
-
+

How it works @@ -309,7 +355,7 @@ export default function LandingPage() { {/* ── CTA ────────────────────────────────────────────── */}

-
+
{/* Soft top glow */}
@@ -317,12 +363,12 @@ export default function LandingPage() {

Free to use. No credit card required.

-

+

Start working with
your PDFs today.

-
+
-
+
CrystalPDF diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index ccdf9b5..c0514a3 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -7,6 +7,9 @@ export default { darkMode: 'class', theme: { extend: { + screens: { + 'xs': '400px', + }, colors: { // Semantic tokens mapped to CSS variables surface: 'var(--color-surface)',