# Responsive Design Guide - KLZ Cables
This guide documents the responsive design patterns and utilities implemented for the KLZ Cables Next.js application.
## Overview
The responsive design system follows a **mobile-first** approach with comprehensive breakpoints, fluid typography, and optimized touch interactions.
## Breakpoints
| Breakpoint | Width | Use Case |
|------------|-------|----------|
| `xs` | 475px | Extra small phones |
| `sm` | 640px | Small phones (landscape) |
| `md` | 768px | Tablets (portrait) |
| `lg` | 1024px | Tablets (landscape) / Small desktops |
| `xl` | 1280px | Desktops |
| `2xl` | 1400px | Large desktops |
| `3xl` | 1600px | Very large desktops |
## Core Utilities
### 1. Responsive Utilities (`lib/responsive.ts`)
```typescript
import {
getViewport,
checkBreakpoint,
resolveResponsiveProp,
generateImageSizes,
getResponsiveGrid,
clamp
} from '@/lib/responsive';
// Get current viewport information
const viewport = getViewport();
// Check specific breakpoint
const isMobile = checkBreakpoint('mobile', viewport);
// Resolve responsive prop
const spacing = resolveResponsiveProp({
mobile: '1rem',
tablet: '1.5rem',
desktop: '2rem'
}, viewport);
```
### 2. Responsive Components
#### Button Component
```tsx
```
#### Container Component
```tsx
{content}
```
#### Grid Component
```tsx
{items}
```
#### FeaturedImage Component
```tsx
```
### 3. Responsive Layout Patterns
#### ResponsiveWrapper
```tsx
{content}
```
#### ResponsiveGrid
```tsx
{items}
```
#### ResponsiveSection
```tsx
{content}
```
## Mobile-First Design Principles
### 1. Touch Targets
- **Minimum**: 44px × 44px (WCAG requirement)
- **Recommended**: 48px × 48px
- **Large**: 56px × 56px (for important actions)
### 2. Typography
- **Fluid typography** using CSS `clamp()`
- **Minimum font size**: 16px (WCAG requirement)
- **Optimized line heights**: 1.4-1.6
- **Mobile**: tighter line height for readability
### 3. Spacing
- **Mobile**: smaller spacing (0.5-1rem)
- **Tablet**: medium spacing (1-1.5rem)
- **Desktop**: larger spacing (1.5-2rem)
### 4. Images
- **Mobile**: 75% quality, smaller dimensions
- **Tablet**: 85% quality, medium dimensions
- **Desktop**: 90% quality, full dimensions
- **Lazy loading**: enabled by default
- **Placeholder blur**: for better UX
### 5. Navigation
- **Mobile**: hamburger menu with full-screen drawer
- **Tablet**: hybrid approach
- **Desktop**: full navigation bar
## Testing Utilities
### 1. Viewport Testing
```typescript
import { ResponsiveTestUtils } from '@/lib/responsive-test';
// Simulate different viewports
ResponsiveTestUtils.simulateMobile();
ResponsiveTestUtils.simulateTablet();
ResponsiveTestUtils.simulateDesktop();
```
### 2. Validation
```typescript
import { validateResponsiveDesign } from '@/lib/responsive-test';
const result = validateResponsiveDesign();
console.log(result.passed); // true/false
console.log(result.warnings); // []
console.log(result.errors); // []
```
### 3. Generate Report
```typescript
import { generateResponsiveReport } from '@/lib/responsive-test';
const report = generateResponsiveReport();
console.log(report);
```
## Responsive Checklist
### Layout
- [ ] Content stacks properly on mobile (1 column)
- [ ] Grid layouts adapt to screen size (2-4 columns)
- [ ] No horizontal scrolling at any breakpoint
- [ ] Content remains within safe areas
- [ ] Padding and margins scale appropriately
### Typography
- [ ] Text remains readable at all sizes
- [ ] Line height is optimized for mobile
- [ ] Headings scale appropriately
- [ ] No text overflow or clipping
- [ ] Font size meets WCAG guidelines (16px minimum)
### Navigation
- [ ] Mobile menu is accessible (44px touch targets)
- [ ] Desktop navigation hides on mobile
- [ ] Menu items are properly spaced
- [ ] Active states are visible
- [ ] Back/forward navigation works
### Images
- [ ] Images load with appropriate sizes
- [ ] Aspect ratios are maintained
- [ ] No layout shift during loading
- [ ] Lazy loading works correctly
- [ ] Placeholder blur is applied
### Forms
- [ ] Input fields are 44px minimum touch target
- [ ] Labels remain visible
- [ ] Error messages are readable
- [ ] Form submits on mobile
- [ ] Keyboard navigation works
### Performance
- [ ] Images are properly sized for viewport
- [ ] No unnecessary large assets on mobile
- [ ] Critical CSS is loaded
- [ ] Touch interactions are smooth
- [ ] No layout thrashing
### Accessibility
- [ ] Touch targets are 44px minimum
- [ ] Focus indicators are visible
- [ ] Screen readers work correctly
- [ ] Color contrast meets WCAG AA
- [ ] Zoom is not restricted
## Common Patterns
### 1. Mobile-First Grid
```tsx
{items}
```
### 2. Stacked to Row
```tsx
Left
Right
```
### 3. Hide on Mobile
```tsx
Desktop only content
```
### 4. Show on Mobile Only
```tsx
Mobile only content
```
## Performance Optimization
### 1. Image Optimization
- Use `quality="auto"` for automatic optimization
- Implement responsive `src` sets
- Enable lazy loading
- Use blur placeholders
### 2. Component Optimization
- Use `React.memo()` for expensive components
- Implement proper key props
- Avoid unnecessary re-renders
- Use dynamic imports for heavy components
### 3. CSS Optimization
- Use Tailwind's JIT compiler
- Minimize custom CSS
- Leverage CSS containment
- Implement proper z-index layers
## Browser Support
- **iOS Safari**: 12+
- **Chrome**: 90+
- **Firefox**: 88+
- **Edge**: 90+
- **Samsung Internet**: 13+
## Accessibility Standards
- **WCAG 2.1 AA** compliance
- **Keyboard navigation** support
- **Screen reader** compatibility
- **Color contrast** 4.5:1 minimum
- **Focus indicators** visible
## Testing Strategy
### 1. Manual Testing
- Test on real devices
- Check all breakpoints
- Verify touch interactions
- Test with screen readers
### 2. Automated Testing
- Use responsive test utilities
- Validate design rules
- Generate reports
- Monitor performance
### 3. Browser DevTools
- Use device emulation
- Test network throttling
- Check accessibility
- Audit performance
## Migration Guide
### From Static to Responsive
1. **Update components** with responsive props
2. **Add breakpoint** classes
3. **Implement fluid** typography
4. **Optimize images** for responsive
5. **Test on all** devices
### Legacy Support
For older components:
```tsx
// Wrap with ResponsiveWrapper
```
## Troubleshooting
### Common Issues
1. **Horizontal scrolling**
- Check for fixed widths
- Verify container padding
- Test with `overflow-x: hidden`
2. **Layout shift**
- Add width/height to images
- Use CSS aspect-ratio
- Implement proper loading
3. **Touch target too small**
- Increase padding
- Use touch-target utilities
- Check minimum 44px
4. **Text too small**
- Use fluid typography
- Check clamp() values
- Verify base font size
## Resources
- [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
- [Next.js Image Optimization](https://nextjs.org/docs/api-reference/next/image)
- [Tailwind Responsive Design](https://tailwindcss.com/docs/responsive-design)
- [Mobile First Design](https://www.smashingmagazine.com/2016/01/progressive-enhancement-mobile-first/)
---
**Last Updated**: 2025-12-29
**Version**: 1.0.0
**Maintainer**: KLZ Cables Development Team