Mobile responsiveness fixes based on multi-model consensus

Changes verified and validated by 4 AI models:
- google/gemini-3-flash-preview
- openai/gpt-5.2
- openai/gpt-5.1-codex-max
- google/gemini-3-pro-preview

Fixes applied:
1. _article.css: Fix clamp() formula for title scaling
   - Previous formula never scaled below 30px on mobile
   - Now uses clamp(1.5rem, 5vw + 1rem, var(--font-size-4xl))

2. _header.css: WCAG 2.5.5 touch target compliance
   - Added min-height: 44px to nav-link for both desktop and mobile
   - Ensures all navigation links meet 44x44px minimum

3. _header.css: Reduced-motion support for nav transitions
   - Added @media (prefers-reduced-motion: reduce) block
   - Disables all nav animations for motion-sensitive users

4. _variables.css: Breakpoint documentation
   - Documents canonical breakpoints for consistency
   - Notes that CSS variables cannot be used in @media queries

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-23 13:38:19 +00:00
parent 1f7099a3ed
commit 01cb13ee8b
3 changed files with 37 additions and 1 deletions

View File

@@ -150,6 +150,19 @@
/* Article Width */
--article-width: min(var(--reading-width), 100%);
/* ========================================
BREAKPOINTS (Reference Only)
NOTE: CSS custom properties cannot be used in @media queries.
These values are documented here for consistency across the codebase.
Mobile: < 768px (hamburger nav, stacked layouts)
Tablet: 768px - 1024px
Desktop: > 1024px
Large: > 1200px
Extra small: < 480px (additional mobile refinements)
======================================== */
/* ========================================
BORDERS & EFFECTS
======================================== */

View File

@@ -31,7 +31,8 @@
}
.article-title {
font-size: clamp(var(--font-size-2xl), 5vw, var(--font-size-4xl));
/* Scales from 1.5rem (24px) to 3rem (48px) - works correctly at 320px viewport */
font-size: clamp(1.5rem, 5vw + 1rem, var(--font-size-4xl));
line-height: 1.1;
margin-bottom: var(--space-4);
letter-spacing: var(--letter-spacing-tighter);

View File

@@ -112,6 +112,10 @@
padding: var(--space-2) var(--space-1);
position: relative;
transition: var(--transition-colors);
/* WCAG 2.5.5 - Minimum touch target 44x44px */
min-height: 44px;
display: inline-flex;
align-items: center;
}
.nav-link::after {
@@ -250,9 +254,27 @@
display: block;
padding: var(--space-3) var(--space-4);
font-size: var(--font-size-base);
min-height: 44px;
}
.site-tagline {
display: none;
}
}
/* ========================================
Reduced Motion
======================================== */
@media (prefers-reduced-motion: reduce) {
.site-header,
.logo-mark,
.nav-link::after,
.main-nav,
.nav-toggle-icon,
.nav-toggle-icon::before,
.nav-toggle-icon::after {
transition: none !important;
animation: none !important;
}
}