Responsive Breakpoint Specifications
40 Days of Existential Threats - Interactive Experience Collection
Property Value Project 40 Days of Existential Threats Document Type Technical Specification Version 1.0 Design Approach Mobile-First
1. Breakpoint Overview
Breakpoint Architecture
Breakpoint Name Range Primary Use Case Design Philosophy Mobile 0 - 767px Smartphones, portrait orientation Touch-first, single column, maximum content density Tablet 768px - 1023px Tablets, large phones landscape Balanced touch/mouse, 2-column layouts Desktop 1024px - 1439px Laptops, small desktops Hover-enabled, multi-column, persistent navigation Large Desktop 1440px+ Large monitors, ultrawide Maximum whitespace, enhanced visual impact
Breakpoint Rationale
Mobile (0-767px)
βββ Target: iPhone SE (375px), iPhone 14 (390px), iPhone 14 Pro Max (430px)
βββ Android: Common range 360px - 414px
βββ Rationale: Covers 95% of smartphone viewport widths
Tablet (768px-1023px)
βββ Target: iPad Mini (768px), iPad (810px), iPad Air (820px)
βββ Android tablets: 800px - 1024px
βββ Rationale: iPad portrait is the dominant tablet breakpoint
Desktop (1024px-1439px)
βββ Target: iPad landscape (1024px), Small laptops (1280px-1366px)
βββ Common: 1366px (most popular laptop resolution)
βββ Rationale: Covers laptop and small desktop range
Large Desktop (1440px+)
βββ Target: 1440px, 1920px, 2560px+
βββ Ultrawide: 2560px, 3440px
βββ Rationale: High-end displays with ample screen real estate
Exact Pixel Values
Property Value Purpose Mobile max 767px Last mobile breakpoint before tablet Tablet min 768px iPad portrait standard width Tablet max 1023px Just before iPad landscape Desktop min 1024px iPad landscape, small laptop Desktop max 1439px Before large desktop territory Large Desktop min 1440px MacBook Pro 15β, common large display Content max-width 1400px Optimal reading width for content
2. Mobile Specifications (0-767px)
Touch Target Requirements
Element Minimum Size Recommended Size Notes Primary buttons 44x44px 48x48px WCAG 2.1 AA compliance Secondary buttons 44x44px 44x44px Minimum acceptable Navigation items 44x44px 48x48px Bottom nav touch areas Cards/tiles 88x88px 96x96px For grid items Form inputs 44px height 48px height Comfortable typing Checkboxes/radio 24x24px 32x32px Visual + touch area Close buttons 44x44px 48x48px Easy dismissal Progress indicators 44px diameter 48px diameter Easy tapping
Touch Target Spacing
/* Minimum spacing between touch targets */
.touch-target {
min-height : 44 px ;
min-width : 44 px ;
}
/* Recommended spacing */
.touch-target-recommended {
min-height : 48 px ;
min-width : 48 px ;
}
/* Touch target margin (prevents accidental taps) */
.touch-target + .touch-target {
margin-left : 8 px ;
}
Font Size Adjustments
Element Size Line Height Weight Notes H1 (Experience Title) 28px 1.2 700 Maximum impact H2 (Section Headers) 24px 1.3 600 Clear hierarchy H3 (Card Titles) 20px 1.3 600 Readable at distance H4 (Subsection) 18px 1.4 600 Secondary emphasis Body Large 18px 1.6 400 Primary reading text Body 16px 1.6 400 Standard content Body Small 14px 1.5 400 Captions, metadata Caption 12px 1.4 400 Fine print, labels Button Text 16px 1 500 Action clarity Navigation 14px 1 500 Compact nav labels
Font Size Code
/* Mobile Typography Scale */
--font-size-h1: 1.75rem; /* 28px */
--font-size-h2: 1.5rem; /* 24px */
--font-size-h3: 1.25rem; /* 20px */
--font-size-h4: 1.125rem; /* 18px */
--font-size-body-lg: 1.125rem; /* 18px */
--font-size-body: 1rem; /* 16px */
--font-size-body-sm: 0.875rem; /* 14px */
--font-size-caption: 0.75rem; /* 12px */
Single Column Layouts
Mobile Layout Structure (0-767px)
βββββββββββββββββββββββββββββββββββ
β Header (56px) β
βββββββββββββββββββββββββββββββββββ€
β β
β Progress Indicator β
β (Full Width) β
β β
βββββββββββββββββββββββββββββββββββ€
β β
β Main Content β
β (Single Column, 100%) β
β β
β βββββββββββββββββββββββ β
β β Experience Card β β
β β (Full Width - β β
β β 16px margins) β β
β βββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββ β
β β Experience Card β β
β βββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββ€
β Bottom Navigation β
β (Fixed, 56-64px height) β
βββββββββββββββββββββββββββββββββββ
Layout Specifications
Property Value Notes Container padding 16px (1rem) Horizontal padding Section spacing 24px Between major sections Card margin 16px Card outer margin Card padding 16px Card internal padding Element spacing 12px Between related elements Compact spacing 8px Tight groupings
Bottom Navigation Patterns
Bottom Navigation (Mobile)
βββββββββββββββββββββββββββββββββββββββ
β ββββββ ββββββ ββββββ ββββββ β
β β π β β π β β βοΈ β β π€ β β
β βHomeβ βProgβ βSettβ βProfβ β
β ββββββ ββββββ ββββββ ββββββ β
βββββββββββββββββββββββββββββββββββββββ
Specifications:
- Height: 56px (minimum), 64px (recommended)
- Icon size: 24px
- Label size: 12px
- Touch target: 48x48px per item
- Background: Surface color with shadow
- Safe area: env(safe-area-inset-bottom)
Bottom Navigation Code
.mobile-bottom-nav {
position : fixed ;
bottom : 0 ;
left : 0 ;
right : 0 ;
height : 56 px ;
padding-bottom : env(safe-area-inset-bottom, 0 );
display : flex ;
justify-content : space-around ;
align-items : center ;
background : var ( --color-surface );
box-shadow : 0 -2 px 10 px rgba ( 0 , 0 , 0 , 0.3 );
z-index : 100 ;
}
.mobile-bottom-nav__item {
display : flex ;
flex-direction : column ;
align-items : center ;
justify-content : center ;
min-width : 48 px ;
min-height : 48 px ;
color : var ( --color-text-secondary );
}
.mobile-bottom-nav__item--active {
color : var ( --color-accent );
}
Swipe Gesture Areas
Gesture Area Behavior Threshold Swipe Left Card/Content Next experience 50px Swipe Right Card/Content Previous experience 50px Swipe Up Experience list Load more 100px Swipe Down Content Refresh/close modal 100px Edge Swipe Left edge Open navigation 20px from edge
Swipe Implementation
/* Swipeable container */
.swipe-container {
touch-action : pan-y ; /* Allow vertical scroll, handle horizontal in JS */
user-select : none ;
}
/* Visual feedback during swipe */
.swipe-container--swiping {
cursor : grabbing ;
}
/* Minimum swipe distance */
:root {
--swipe-threshold : 50 px ;
--swipe-velocity : 0.3 ;
}
Reduced Padding/Spacing Scale
Token Value Usage βspace-xs 4px Tightest spacing βspace-sm 8px Compact elements βspace-md 12px Default element spacing βspace-lg 16px Section padding βspace-xl 24px Major section breaks βspace-2xl 32px Large separations βspace-3xl 48px Hero/major sections
Mobile Button Patterns
βββββββββββββββββββββββββββββββββββ
β βββββββββββββββββββββββββββ β
β β Primary Action β β
β β (Full Width) β β
β βββββββββββββββββββββββββββ β
β β
β ββββββββββββββ ββββββββββββββ β
β β Secondary β β Secondary β β
β ββββββββββββββ ββββββββββββββ β
β β
β βββββββββββββββββββββββββββ β
β β Destructive Action β β
β β (Full Width) β β
β βββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββ
Type Width Height Padding Margin Primary 100% 48px 16px 24px 8px 0 Secondary 100% or 48% 44px 12px 20px 8px 0 Tertiary auto 44px 12px 16px 8px Icon Button 48px 48px 12px 8px
Modal Behavior (Full Screen)
Mobile Modal (Full Screen)
βββββββββββββββββββββββββββββββββββ
β β Modal Title β β Header: 56px
βββββββββββββββββββββββββββββββββββ€
β β
β β
β Modal Content Area β
β (Scrollable) β
β β
β β
β β
βββββββββββββββββββββββββββββββββββ€
β βββββββββββββββββββββββββββ β
β β Primary Action β β
β βββββββββββββββββββββββββββ β Footer: 80px
βββββββββββββββββββββββββββββββββββ
Modal Specifications (Mobile)
Property Value Notes Position Fixed, full viewport Cover entire screen Animation Slide up from bottom 300ms ease-out Header height 56px Consistent with app header Footer height 80px Space for actions Content padding 16px Comfortable reading Close button 44x44px Top right corner Back button 44x44px Top left (if needed) Backdrop None (full screen) Focus on content
3. Tablet Specifications (768px-1023px)
2-Column Grid Layouts
Tablet Layout Structure (768px-1023px)
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Header (64px) β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Progress Indicator β
β (Full Width) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β Experience 1 β β Experience 2 β β
β β (2-col grid) β β β β
β β β β β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β Experience 3 β β Experience 4 β β
β β β β β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Bottom/Side Navigation β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
Grid Specifications (Tablet)
Property Value Notes Grid columns 2 Primary layout Column gap 16px Between cards Row gap 16px Between rows Container padding 24px Horizontal padding Card aspect ratio 4:3 or auto Content-dependent
Side Navigation Options
Tablet Side Navigation (Optional)
ββββββ¬βββββββββββββββββββββββββββββββββββββββββββ
β β β
β π β β
β β Main Content Area β
β π β β
β β (2-column grid) β
β βοΈ β β
β β β
β π€ β β
β β β
ββββββ΄βββββββββββββββββββββββββββββββββββββββββββ
Side Nav: 72px width
- Icon only (no labels)
- Active indicator
- Hover states enabled
Navigation Patterns (Tablet)
Pattern Width Use Case Bottom nav Full width Portrait orientation Side nav (icon) 72px Landscape, more content Side nav (full) 240px When space allows Collapsible 72px β 240px Expand on hover/tap
Increased Touch Targets
Element Mobile Tablet Increase Primary buttons 48px 52px +4px Navigation items 48px 56px +8px Cards 88px 96px +8px Form inputs 48px 52px +4px Close buttons 48px 52px +4px
Medium Padding Scale
Token Mobile Tablet Increase βspace-xs 4px 4px - βspace-sm 8px 8px - βspace-md 12px 16px +4px βspace-lg 16px 24px +8px βspace-xl 24px 32px +8px βspace-2xl 32px 48px +16px βspace-3xl 48px 64px +16px
Split-View Considerations
Tablet Split-View (iPad Multitasking)
ββββββββββββββββββββββ¬βββββββββββββββββββββ
β β β
β Experience β Experience β
β List (50%) β Detail (50%) β
β β β
β ββββββββββββ β ββββββββββββ β
β β Item 1 β β β Content β β
β ββββββββββββ β β β β
β ββββββββββββ β β β β
β β Item 2 β β β β β
β ββββββββββββ β ββββββββββββ β
β β β
ββββββββββββββββββββββ΄βββββββββββββββββββββ
Minimum width per pane: 320px
Handle 50/50, 66/33, 33/66 splits
4. Desktop Specifications (1024px-1439px)
Multi-Column Grids (3-4 Columns)
Desktop Layout Structure (1024px-1439px)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Logo Nav Item Nav Item Nav Item Search Profile β
β (Header: 64px) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ β
β β Day 1 β Day 2 β Day 3 β Day 4 β β
β β Card β Card β Card β Card β 4-column grid β
β β β β β β at 1200px+ β
β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ β
β β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ β
β β Day 5 β Day 6 β Day 7 β Day 8 β β
β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Footer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Grid Specifications (Desktop)
Viewport Columns Column Gap Row Gap Notes 1024px - 1199px 3 20px 20px Compact desktop 1200px - 1439px 4 24px 24px Standard desktop
Grid Code
/* Desktop Grid System */
.desktop-grid {
display : grid ;
gap : var ( --grid-gap );
}
/* 1024px - 1199px: 3 columns */
@media ( min-width : 1024 px ) and ( max-width : 1199 px ) {
.desktop-grid {
grid-template-columns : repeat ( 3 , 1 fr );
--grid-gap : 20 px ;
}
}
/* 1200px - 1439px: 4 columns */
@media ( min-width : 1200 px ) and ( max-width : 1439 px ) {
.desktop-grid {
grid-template-columns : repeat ( 4 , 1 fr );
--grid-gap : 24 px ;
}
}
Hover States Enabled
Element Hover Effect Transition Notes Cards Scale 1.02, shadow increase 200ms ease Subtle lift Buttons Background lighten 10% 150ms ease Clear feedback Links Underline, color shift 150ms ease Standard pattern Navigation Background highlight 150ms ease Active state Images Slight zoom (1.05) 300ms ease Reveal detail
Hover State Code
/* Card hover effect */
.experience-card {
transition : transform 200 ms ease , box-shadow 200 ms ease ;
}
.experience-card:hover {
transform : translateY ( -4 px ) scale ( 1.02 );
box-shadow : 0 8 px 24 px rgba ( 0 , 0 , 0 , 0.4 );
}
/* Button hover effect */
.btn-primary {
transition : background-color 150 ms ease , transform 150 ms ease ;
}
.btn-primary:hover {
background-color : var ( --color-primary-light );
transform : translateY ( -2 px );
}
/* Link hover effect */
.link {
transition : color 150 ms ease ;
}
.link:hover {
color : var ( --color-accent );
text-decoration : underline ;
}
Persistent Navigation
Desktop Top Navigation (Persistent)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Logo β Home β Progress β Settings β Profile β β Search πβ
β 120pxβ 80px β 80px β 80px β 80px β β 200px β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Navigation remains visible on scroll
Optional: Shrink header on scroll (64px β 48px)
Navigation Specifications (Desktop)
Property Value Notes Header height 64px Standard height Shrunk header 48px On scroll Logo width 120px Brand presence Nav item spacing 32px Between items Search width 200px Expandable Profile button 40px Circular
Full Spacing Scale
Token Mobile Tablet Desktop Notes βspace-xs 4px 4px 4px - βspace-sm 8px 8px 8px - βspace-md 12px 16px 16px - βspace-lg 16px 24px 24px - βspace-xl 24px 32px 32px - βspace-2xl 32px 48px 48px - βspace-3xl 48px 64px 64px - βspace-4xl - - 96px Hero sections βspace-5xl - - 128px Major breaks
Modal Centering
Desktop Modal (Centered)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Backdrop β
β (rgba(0,0,0,0.7)) β
β β
β βββββββββββββββββββββββββββββββββββββββ β
β β Modal Header β β β
β βββββββββββββββββββββββββββββββββββββββ€ β
β β β β
β β Modal Content β β
β β (Max-width: 600px) β β
β β β β
β βββββββββββββββββββββββββββββββββββββββ€ β
β β [Cancel] [Confirm] β β
β βββββββββββββββββββββββββββββββββββββββ β
β β
β Max-width: 600px β
β Max-height: 80vh β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Modal Specifications (Desktop)
Property Value Notes Position Fixed, centered Both axes Max-width 600px Comfortable reading Max-height 80vh Scroll if needed Margin Auto Center alignment Border radius 12px Rounded corners Backdrop rgba(0,0,0,0.7) Focus content Animation Fade + scale 250ms ease-out Shadow Large Elevation
Max-Width Containers
/* Container system for desktop */
.container {
width : 100 % ;
margin-left : auto ;
margin-right : auto ;
padding-left : var ( --container-padding );
padding-right : var ( --container-padding );
}
/* Desktop container */
@media ( min-width : 1024 px ) {
.container {
max-width : 1200 px ;
--container-padding : 32 px ;
}
}
/* Large desktop container */
@media ( min-width : 1440 px ) {
.container {
max-width : 1400 px ;
--container-padding : 48 px ;
}
}
5. Large Desktop Specifications (1440px+)
Wide Layouts
Large Desktop Layout (1440px+)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Logo β Nav β Nav β Nav β Nav β β Search β Profile β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ β β
β β β Day 1 β β Day 2 β β Day 3 β β Day 4 β β Day 5 β β Day 6 β β β
β β β β β β β β β β β β β β β β
β β ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ β β
β β β β
β β ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ β β
β β β Day 7 β β Day 8 β β Day 9 β β Day 10 β β Day 11 β β Day 12 β β β
β β ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ ββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Max Width: 1400px β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Grid Specifications (Large Desktop)
Viewport Columns Column Gap Row Gap Notes 1440px - 1919px 5-6 24px 24px Wide desktop 1920px+ 6-8 24px 24px Ultrawide
Increased Whitespace
Property Desktop Large Desktop Increase Section padding 64px 96px +50% Container padding 32px 48px +50% Card padding 24px 32px +33% Hero spacing 96px 128px +33% Between sections 64px 96px +50%
Side Panels Possible
Large Desktop with Side Panel
ββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββ
β β β β
β Side β β Side β
β Panel β Main Content Area β Panel β
β (ads/ β (Max-width: 1400px) β (info/β
β nav) β β stats)β
β 200px β β 200px β
β β β β
ββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄βββββββββ
Side panels: 200px max
Only visible at 1800px+
Collapsible on smaller viewports
Maximum Content Width
/* Large desktop container constraints */
@media ( min-width : 1440 px ) {
.container {
max-width : 1400 px ;
}
.container--wide {
max-width : 1600 px ;
}
.container--full {
max-width : none ;
padding-left : 48 px ;
padding-right : 48 px ;
}
}
/* Content width constraints for readability */
.content-readable {
max-width : 75 ch ; /* Optimal reading width */
}
.content-wide {
max-width : 100 ch ;
}
6. Grid System
12-Column Grid Specifications
12-Column Grid Visualization
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1 ββ 2 ββ 3 ββ 4 ββ 5 ββ 6 ββ 7 ββ 8 ββ 9 ββ 10 ββ 11 ββ 12 β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β col-12 β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β col-6 ββ col-6 β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β col-3 ββ col-3 ββ col-3 ββ col-3 β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β col-2 ββ col-2 ββ col-2 ββ col-2 ββ col-2 ββ col-2 ββ col-2 β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Grid Column Classes
Class Width Common Use .col-1 8.33% Small elements .col-2 16.66% Icon groups .col-3 25% 4-column layouts .col-4 33.33% 3-column layouts .col-5 41.66% Asymmetric layouts .col-6 50% 2-column layouts .col-7 58.33% Content-heavy .col-8 66.66% Main content area .col-9 75% Primary content .col-10 83.33% Wide content .col-11 91.66% Near full-width .col-12 100% Full width
Grid Code
/* 12-Column Grid System */
.grid {
display : grid ;
grid-template-columns : repeat ( 12 , 1 fr );
gap : var ( --grid-gap );
}
/* Column spans */
.col-1 { grid-column : span 1 ; }
.col-2 { grid-column : span 2 ; }
.col-3 { grid-column : span 3 ; }
.col-4 { grid-column : span 4 ; }
.col-5 { grid-column : span 5 ; }
.col-6 { grid-column : span 6 ; }
.col-7 { grid-column : span 7 ; }
.col-8 { grid-column : span 8 ; }
.col-9 { grid-column : span 9 ; }
.col-10 { grid-column : span 10 ; }
.col-11 { grid-column : span 11 ; }
.col-12 { grid-column : span 12 ; }
/* Responsive columns */
@media ( max-width : 767 px ) {
.col-sm-6 { grid-column : span 6 ; }
.col-sm-12 { grid-column : span 12 ; }
}
@media ( min-width : 768 px ) and ( max-width : 1023 px ) {
.col-md-4 { grid-column : span 4 ; }
.col-md-6 { grid-column : span 6 ; }
}
@media ( min-width : 1024 px ) {
.col-lg-3 { grid-column : span 3 ; }
.col-lg-4 { grid-column : span 4 ; }
}
Gutters at Each Breakpoint
Breakpoint Gutter Size Notes Mobile (0-767px) 12px Compact, touch-friendly Tablet (768px-1023px) 16px Balanced spacing Desktop (1024px-1439px) 20-24px Comfortable gaps Large Desktop (1440px+) 24px Premium feel
Gutter Code
:root {
/* Gutter scale */
--gutter-mobile : 12 px ;
--gutter-tablet : 16 px ;
--gutter-desktop : 20 px ;
--gutter-large : 24 px ;
}
/* Responsive gutters */
.grid {
gap : var ( --gutter-mobile );
}
@media ( min-width : 768 px ) {
.grid {
gap : var ( --gutter-tablet );
}
}
@media ( min-width : 1024 px ) {
.grid {
gap : var ( --gutter-desktop );
}
}
@media ( min-width : 1440 px ) {
.grid {
gap : var ( --gutter-large );
}
}
Container Max-Widths
Container Type Mobile Tablet Desktop Large Desktop Default 100% 100% 1200px 1400px Wide 100% 100% 1400px 1600px Full 100% 100% 100% 100% Narrow 100% 100% 800px 800px
Container Code
/* Container system */
.container {
width : 100 % ;
margin-left : auto ;
margin-right : auto ;
padding-left : var ( --container-padding );
padding-right : var ( --container-padding );
}
/* Container sizes */
.container--default {
--container-max-width : 1400 px ;
}
.container--wide {
--container-max-width : 1600 px ;
}
.container--narrow {
--container-max-width : 800 px ;
}
/* Apply max-width on larger screens */
@media ( min-width : 1024 px ) {
.container {
max-width : var ( --container-max-width , 1400 px );
}
}
Margin/Padding Scales
:root {
/* Spacing scale (8px base) */
--space-0 : 0 ;
--space-1 : 4 px ; /* 0.25rem */
--space-2 : 8 px ; /* 0.5rem */
--space-3 : 12 px ; /* 0.75rem */
--space-4 : 16 px ; /* 1rem */
--space-5 : 20 px ; /* 1.25rem */
--space-6 : 24 px ; /* 1.5rem */
--space-8 : 32 px ; /* 2rem */
--space-10 : 40 px ; /* 2.5rem */
--space-12 : 48 px ; /* 3rem */
--space-16 : 64 px ; /* 4rem */
--space-20 : 80 px ; /* 5rem */
--space-24 : 96 px ; /* 6rem */
--space-32 : 128 px ; /* 8rem */
}
/* Utility classes */
.m-4 { margin : var ( --space-4 ); }
.mt-4 { margin-top : var ( --space-4 ); }
.mb-4 { margin-bottom : var ( --space-4 ); }
.ml-4 { margin-left : var ( --space-4 ); }
.mr-4 { margin-right : var ( --space-4 ); }
.mx-4 { margin-left : var ( --space-4 ); margin-right : var ( --space-4 ); }
.my-4 { margin-top : var ( --space-4 ); margin-bottom : var ( --space-4 ); }
.p-4 { padding : var ( --space-4 ); }
.pt-4 { padding-top : var ( --space-4 ); }
.pb-4 { padding-bottom : var ( --space-4 ); }
.pl-4 { padding-left : var ( --space-4 ); }
.pr-4 { padding-right : var ( --space-4 ); }
.px-4 { padding-left : var ( --space-4 ); padding-right : var ( --space-4 ); }
.py-4 { padding-top : var ( --space-4 ); padding-bottom : var ( --space-4 ); }
7. Component Behavior by Breakpoint
Breakpoint Pattern Height Behavior Mobile Bottom nav 56-64px Fixed bottom, 4-5 items Tablet Bottom or side 56-72px Context-dependent Desktop Top horizontal 64px Persistent, hover states Large Desktop Top horizontal 64px Same as desktop
/* Mobile navigation */
@media ( max-width : 767 px ) {
.nav--mobile {
position : fixed ;
bottom : 0 ;
left : 0 ;
right : 0 ;
height : 56 px ;
display : flex ;
justify-content : space-around ;
padding-bottom : env(safe-area-inset-bottom);
}
.nav--desktop {
display : none ;
}
}
/* Desktop navigation */
@media ( min-width : 1024 px ) {
.nav--mobile {
display : none ;
}
.nav--desktop {
display : flex ;
position : sticky ;
top : 0 ;
height : 64 px ;
align-items : center ;
gap : 32 px ;
}
}
Card Grid Changes
Breakpoint Columns Card Size Gap Mobile 1 Full width - 32px 12px Tablet 2 50% - 16px 16px Desktop (1024-1199) 3 33.33% - 20px 20px Desktop (1200-1439) 4 25% - 24px 24px Large Desktop 5-6 20% - 24px 24px
Card Grid Code
/* Card grid */
.card-grid {
display : grid ;
gap : var ( --card-gap );
}
/* Responsive columns */
@media ( max-width : 767 px ) {
.card-grid {
grid-template-columns : 1 fr ;
--card-gap : 12 px ;
}
}
@media ( min-width : 768 px ) and ( max-width : 1023 px ) {
.card-grid {
grid-template-columns : repeat ( 2 , 1 fr );
--card-gap : 16 px ;
}
}
@media ( min-width : 1024 px ) and ( max-width : 1199 px ) {
.card-grid {
grid-template-columns : repeat ( 3 , 1 fr );
--card-gap : 20 px ;
}
}
@media ( min-width : 1200 px ) and ( max-width : 1439 px ) {
.card-grid {
grid-template-columns : repeat ( 4 , 1 fr );
--card-gap : 24 px ;
}
}
@media ( min-width : 1440 px ) {
.card-grid {
grid-template-columns : repeat ( 5 , 1 fr );
--card-gap : 24 px ;
}
}
@media ( min-width : 1920 px ) {
.card-grid {
grid-template-columns : repeat ( 6 , 1 fr );
}
}
Breakpoint Primary Secondary Icon Only Mobile 100% x 48px 48% x 44px 48x48px Tablet auto x 52px auto x 48px 52x52px Desktop auto x 48px auto x 44px 44x44px Large Desktop auto x 48px auto x 44px 44x44px
/* Base button styles */
.btn {
display : inline-flex ;
align-items : center ;
justify-content : center ;
border-radius : 8 px ;
font-weight : 500 ;
transition : all 150 ms ease ;
cursor : pointer ;
}
/* Mobile buttons */
@media ( max-width : 767 px ) {
.btn--primary {
width : 100 % ;
height : 48 px ;
padding : 0 24 px ;
font-size : 16 px ;
}
.btn--secondary {
width : calc ( 50 % - 8 px );
height : 44 px ;
padding : 0 20 px ;
font-size : 14 px ;
}
.btn--icon {
width : 48 px ;
height : 48 px ;
padding : 12 px ;
}
}
/* Desktop buttons */
@media ( min-width : 1024 px ) {
.btn--primary {
width : auto ;
height : 48 px ;
padding : 0 24 px ;
}
.btn--secondary {
width : auto ;
height : 44 px ;
padding : 0 20 px ;
}
.btn--icon {
width : 44 px ;
height : 44 px ;
padding : 10 px ;
}
}
Typography Scaling
Element Mobile Tablet Desktop Large Desktop H1 28px 32px 40px 48px H2 24px 28px 32px 36px H3 20px 24px 28px 32px H4 18px 20px 22px 24px Body 16px 16px 16px 16px Body Large 18px 18px 18px 20px Caption 12px 12px 12px 14px
Typography Code
/* Fluid typography using clamp() */
:root {
/* Mobile-first with fluid scaling */
--font-size-h1 : clamp ( 1.75 rem , 4 vw + 1 rem , 3 rem ); /* 28px - 48px */
--font-size-h2 : clamp ( 1.5 rem , 3 vw + 0.75 rem , 2.25 rem ); /* 24px - 36px */
--font-size-h3 : clamp ( 1.25 rem , 2 vw + 0.5 rem , 2 rem ); /* 20px - 32px */
--font-size-h4 : clamp ( 1.125 rem , 1 vw + 0.5 rem , 1.5 rem ); /* 18px - 24px */
--font-size-body : 1 rem ; /* 16px fixed */
--font-size-body-lg : clamp ( 1.125 rem , 0.5 vw + 1 rem , 1.25 rem ); /* 18px - 20px */
}
/* Traditional breakpoint approach */
@media ( min-width : 768 px ) {
h1 { font-size : 32 px ; }
h2 { font-size : 28 px ; }
h3 { font-size : 24 px ; }
}
@media ( min-width : 1024 px ) {
h1 { font-size : 40 px ; }
h2 { font-size : 32 px ; }
h3 { font-size : 28 px ; }
}
@media ( min-width : 1440 px ) {
h1 { font-size : 48 px ; }
h2 { font-size : 36 px ; }
h3 { font-size : 32 px ; }
}
Progress Indicator Sizing
Breakpoint Size Stroke Width Position Mobile 48px diameter 4px Below header Tablet 56px diameter 5px Below header Desktop 64px diameter 6px Side or below header Large Desktop 72px diameter 6px Side panel
Progress Indicator Code
/* Progress indicator */
.progress-indicator {
position : relative ;
border-radius : 50 % ;
}
/* Mobile */
@media ( max-width : 767 px ) {
.progress-indicator {
width : 48 px ;
height : 48 px ;
}
.progress-indicator__circle {
stroke-width : 4 px ;
}
}
/* Tablet */
@media ( min-width : 768 px ) and ( max-width : 1023 px ) {
.progress-indicator {
width : 56 px ;
height : 56 px ;
}
.progress-indicator__circle {
stroke-width : 5 px ;
}
}
/* Desktop */
@media ( min-width : 1024 px ) {
.progress-indicator {
width : 64 px ;
height : 64 px ;
}
.progress-indicator__circle {
stroke-width : 6 px ;
}
}
/* Large Desktop */
@media ( min-width : 1440 px ) {
.progress-indicator {
width : 72 px ;
height : 72 px ;
}
}
Modal Sizing
Breakpoint Width Height Position Mobile 100% 100% Full screen Tablet 90% auto, max 80% Centered Desktop 600px max auto, max 80vh Centered Large Desktop 700px max auto, max 80vh Centered
Modal Code
/* Modal base */
.modal {
position : fixed ;
background : var ( --color-surface );
border-radius : var ( --modal-radius );
box-shadow : var ( --shadow-xl );
z-index : 1000 ;
}
/* Mobile modal (full screen) */
@media ( max-width : 767 px ) {
.modal {
top : 0 ;
left : 0 ;
right : 0 ;
bottom : 0 ;
width : 100 % ;
height : 100 % ;
border-radius : 0 ;
}
.modal__backdrop {
display : none ;
}
}
/* Tablet modal */
@media ( min-width : 768 px ) and ( max-width : 1023 px ) {
.modal {
top : 50 % ;
left : 50 % ;
transform : translate ( -50 % , -50 % );
width : 90 % ;
max-width : 600 px ;
max-height : 80 % ;
border-radius : 12 px ;
}
.modal__backdrop {
position : fixed ;
inset : 0 ;
background : rgba ( 0 , 0 , 0 , 0.7 );
}
}
/* Desktop modal */
@media ( min-width : 1024 px ) {
.modal {
top : 50 % ;
left : 50 % ;
transform : translate ( -50 % , -50 % );
width : 100 % ;
max-width : 600 px ;
max-height : 80 vh ;
border-radius : 12 px ;
}
}
/* Large desktop modal */
@media ( min-width : 1440 px ) {
.modal {
max-width : 700 px ;
}
}
8. Touch vs Mouse Considerations
Hover State Fallbacks
Element Hover State Touch Fallback Implementation Cards Lift + shadow Active state (press) :hover + :active Buttons Brighten Ripple effect CSS + JS Links Underline Highlight :focus-visible Images Zoom Tap to expand Modal/lightbox Navigation Background Active indicator CSS classes
Hover Fallback Code
/* Hover with touch fallback */
.interactive-element {
transition : transform 200 ms ease , box-shadow 200 ms ease ;
}
/* Hover for mouse users */
@media ( hover : hover ) and (pointer: fine) {
.interactive-element:hover {
transform : translateY ( -4 px );
box-shadow : 0 8 px 24 px rgba ( 0 , 0 , 0 , 0.4 );
}
}
/* Active state for touch */
.interactive-element:active {
transform : scale ( 0.98 );
}
/* Focus for keyboard navigation */
.interactive-element:focus-visible {
outline : 2 px solid var ( --color-accent );
outline-offset : 2 px ;
}
Touch Gesture Zones
Gesture Zone Size Location Purpose Swipe left/right 100% width Card/content area Navigate experiences Swipe up 100% width List area Load more Pull to refresh 80px from top Top of scroll Refresh content Edge swipe 20px from edge Left edge Open navigation Double tap 44x44px Image/media Zoom/expand Long press 44x44px Cards/items Context menu
Touch Zone Code
/* Swipe zones */
.swipe-zone {
touch-action : pan-y ; /* Allow vertical scroll */
user-select : none ;
}
/* Edge swipe detection area */
.edge-swipe-zone {
position : fixed ;
left : 0 ;
top : 0 ;
width : 20 px ;
height : 100 vh ;
z-index : 50 ;
}
/* Pull to refresh area */
.pull-refresh-zone {
position : absolute ;
top : -80 px ;
left : 0 ;
right : 0 ;
height : 80 px ;
display : flex ;
align-items : center ;
justify-content : center ;
}
Right-Click Behaviors
Element Right-Click Action Notes Experience cards Context menu Options: Start, Add to favorites, Share Images Context menu Options: View full, Download, Share Progress indicator Context menu Options: Jump to day, Reset progress Links Standard browser Open in new tab, Copy link
Right-Click Code
// Custom context menu for experience cards
document. querySelectorAll ( '.experience-card' ). forEach ( card => {
card. addEventListener ( 'contextmenu' , ( e ) => {
e. preventDefault ();
showContextMenu (e, {
items: [
{ label: 'Start Experience' , action : () => startExperience (card) },
{ label: 'Add to Favorites' , action : () => addToFavorites (card) },
{ label: 'Share' , action : () => shareExperience (card) },
{ type: 'separator' },
{ label: 'View Details' , action : () => viewDetails (card) }
]
});
});
});
Behavior Mobile Desktop Implementation Smooth scroll Native Native scroll-behavior: smooth Momentum scroll Native N/A -webkit-overflow-scrolling: touch Scroll snap Optional Optional scroll-snap-type Parallax Limited Full transform + scroll event Infinite scroll Common Optional Intersection Observer
/* Smooth scrolling */
html {
scroll-behavior : smooth ;
}
/* Momentum scrolling for iOS */
.scroll-container {
-webkit-overflow-scrolling : touch ;
overflow-y : auto ;
}
/* Scroll snap for carousels */
.scroll-snap-container {
scroll-snap-type : x mandatory ;
overflow-x : auto ;
display : flex ;
}
.scroll-snap-item {
scroll-snap-align : start ;
flex-shrink : 0 ;
width : 100 % ;
}
/* Hide scrollbar but keep functionality */
.hide-scrollbar {
-ms-overflow-style : none ;
scrollbar-width : none ;
}
.hide-scrollbar::-webkit-scrollbar {
display : none ;
}
<!-- Standard viewport meta -->
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes" >
<!-- For standalone/PWA mode -->
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, viewport-fit=cover" >
<!-- Complete viewport setup -->
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, maximum-scale=5.0, minimum-scale=1.0, user-scalable=yes, viewport-fit=cover" >
Property Value Purpose width device-width Match device width initial-scale 1.0 No initial zoom maximum-scale 5.0 Allow zoom for accessibility minimum-scale 1.0 Prevent over-zooming out user-scalable yes Allow user zoom viewport-fit cover Handle notches/safe areas
/* ============================================
RESPONSIVE BREAKPOINTS
Mobile-first approach
============================================ */
/* ----------------------------------------
MOBILE (0 - 767px)
Default styles - no media query needed
---------------------------------------- */
/* Base styles for mobile */
:root {
/* Mobile spacing */
--space-xs : 4 px ;
--space-sm : 8 px ;
--space-md : 12 px ;
--space-lg : 16 px ;
--space-xl : 24 px ;
--space-2xl : 32 px ;
--space-3xl : 48 px ;
/* Mobile typography */
--font-size-h1 : 1.75 rem ; /* 28px */
--font-size-h2 : 1.5 rem ; /* 24px */
--font-size-h3 : 1.25 rem ; /* 20px */
--font-size-h4 : 1.125 rem ; /* 18px */
--font-size-body : 1 rem ; /* 16px */
--font-size-caption : 0.75 rem ; /* 12px */
/* Mobile grid */
--grid-columns : 1 ;
--grid-gap : 12 px ;
/* Mobile container */
--container-padding : 16 px ;
}
/* ----------------------------------------
TABLET (768px - 1023px)
---------------------------------------- */
@media ( min-width : 768 px ) {
:root {
/* Tablet spacing */
--space-md : 16 px ;
--space-lg : 24 px ;
--space-xl : 32 px ;
--space-2xl : 48 px ;
--space-3xl : 64 px ;
/* Tablet typography */
--font-size-h1 : 2 rem ; /* 32px */
--font-size-h2 : 1.75 rem ; /* 28px */
--font-size-h3 : 1.5 rem ; /* 24px */
/* Tablet grid */
--grid-columns : 2 ;
--grid-gap : 16 px ;
/* Tablet container */
--container-padding : 24 px ;
}
}
/* ----------------------------------------
DESKTOP (1024px - 1439px)
---------------------------------------- */
@media ( min-width : 1024 px ) {
:root {
/* Desktop spacing */
--space-md : 16 px ;
--space-lg : 24 px ;
--space-xl : 32 px ;
--space-2xl : 48 px ;
--space-3xl : 64 px ;
--space-4xl : 96 px ;
/* Desktop typography */
--font-size-h1 : 2.5 rem ; /* 40px */
--font-size-h2 : 2 rem ; /* 32px */
--font-size-h3 : 1.75 rem ; /* 28px */
--font-size-h4 : 1.375 rem ; /* 22px */
/* Desktop grid */
--grid-columns : 3 ;
--grid-gap : 20 px ;
/* Desktop container */
--container-padding : 32 px ;
--container-max-width : 1200 px ;
}
}
/* Desktop - Large (1200px - 1439px) */
@media ( min-width : 1200 px ) {
:root {
--grid-columns : 4 ;
--grid-gap : 24 px ;
--container-max-width : 1200 px ;
}
}
/* ----------------------------------------
LARGE DESKTOP (1440px+)
---------------------------------------- */
@media ( min-width : 1440 px ) {
:root {
/* Large desktop spacing */
--space-lg : 24 px ;
--space-xl : 32 px ;
--space-2xl : 48 px ;
--space-3xl : 64 px ;
--space-4xl : 96 px ;
--space-5xl : 128 px ;
/* Large desktop typography */
--font-size-h1 : 3 rem ; /* 48px */
--font-size-h2 : 2.25 rem ; /* 36px */
--font-size-h3 : 2 rem ; /* 32px */
--font-size-h4 : 1.5 rem ; /* 24px */
--font-size-body-lg : 1.25 rem ; /* 20px */
/* Large desktop grid */
--grid-columns : 5 ;
--grid-gap : 24 px ;
/* Large desktop container */
--container-padding : 48 px ;
--container-max-width : 1400 px ;
}
}
/* Large Desktop - Ultrawide (1920px+) */
@media ( min-width : 1920 px ) {
:root {
--grid-columns : 6 ;
--container-max-width : 1600 px ;
}
}
/* ----------------------------------------
ORIENTATION SPECIFIC
---------------------------------------- */
/* Landscape orientation on mobile */
@media ( max-width : 767 px ) and ( orientation : landscape ) {
.hide-on-landscape {
display : none ;
}
.mobile-bottom-nav {
height : 48 px ; /* Smaller in landscape */
}
}
/* Portrait orientation on tablets */
@media ( min-width : 768 px ) and ( max-width : 1023 px ) and ( orientation : portrait ) {
:root {
--grid-columns : 2 ;
}
}
/* ----------------------------------------
HIGH-DPI / RETINA DISPLAYS
---------------------------------------- */
@media ( -webkit-min-device-pixel-ratio : 2 ), ( min-resolution : 192 dpi ) {
/* Use higher resolution images */
.hero-image {
background-image : url ( '[email protected] ' );
}
}
/* ----------------------------------------
REDUCED MOTION
---------------------------------------- */
@media (prefers-reduced-motion: reduce) {
* ,
* ::before ,
* ::after {
animation-duration : 0.01 ms !important ;
animation-iteration-count : 1 !important ;
transition-duration : 0.01 ms !important ;
}
html {
scroll-behavior : auto ;
}
}
/* ----------------------------------------
DARK MODE (if needed)
---------------------------------------- */
@media (prefers-color-scheme: dark) {
:root {
--color-background : #0a0a0f ;
--color-surface : #14141a ;
--color-text : #ffffff ;
--color-text-secondary : #a0a0b0 ;
}
}
/* ----------------------------------------
PRINT STYLES
---------------------------------------- */
@media print {
.no-print {
display : none !important ;
}
body {
background : white ;
color : black ;
}
}
Container Query Suggestions
/* ============================================
CONTAINER QUERIES
Component-level responsiveness
============================================ */
/* Define container contexts */
.card-container {
container-type : inline-size;
container-name : card;
}
.sidebar-container {
container-type : inline-size;
container-name : sidebar;
}
/* Card component responsive to its container */
@container card (max-width: 300px) {
.experience-card {
flex-direction : column ;
}
.experience-card__image {
width : 100 % ;
height : 150 px ;
}
.experience-card__title {
font-size : 16 px ;
}
}
@container card (min-width: 301px) and (max-width: 500px) {
.experience-card {
flex-direction : row ;
}
.experience-card__image {
width : 120 px ;
height : 100 % ;
}
.experience-card__title {
font-size : 18 px ;
}
}
@container card (min-width: 501px) {
.experience-card {
flex-direction : column ;
}
.experience-card__image {
width : 100 % ;
height : 200 px ;
}
.experience-card__title {
font-size : 20 px ;
}
}
/* Sidebar responsive behavior */
@container sidebar (max-width: 200px) {
.sidebar-nav__label {
display : none ;
}
.sidebar-nav__icon {
margin : 0 ;
}
}
@container sidebar (min-width: 201px) {
.sidebar-nav__label {
display : inline ;
}
}
10. Device-Specific Notes
iPhone SE Considerations
Property Value Notes Viewport width 375px Smallest modern iPhone Viewport height 667px Limited vertical space Safe area top 20px No notch Safe area bottom 0px Home button Touch targets Critical Must be 44px minimum Font sizes Minimum 14px Readable at this size
iPhone SE Code
/* iPhone SE specific adjustments */
@media ( max-width : 375 px ) {
:root {
--font-size-h1 : 1.5 rem ; /* 24px */
--font-size-h2 : 1.25 rem ; /* 20px */
--font-size-h3 : 1.125 rem ; /* 18px */
--space-lg : 12 px ;
--space-xl : 16 px ;
}
.experience-card {
padding : 12 px ;
}
.mobile-bottom-nav {
height : 52 px ;
}
.mobile-bottom-nav__label {
font-size : 10 px ;
}
}
iPad Landscape/Portrait
Orientation Width Height Grid Columns Notes Portrait 768px 1024px 2 Standard tablet Landscape 1024px 768px 3 Desktop-like
iPad Code
/* iPad portrait */
@media ( min-width : 768 px ) and ( max-width : 1023 px ) and ( orientation : portrait ) {
.card-grid {
grid-template-columns : repeat ( 2 , 1 fr );
}
.nav--tablet {
display : flex ;
position : fixed ;
bottom : 0 ;
height : 64 px ;
}
}
/* iPad landscape */
@media ( min-width : 1024 px ) and ( max-width : 1366 px ) and ( orientation : landscape ) {
.card-grid {
grid-template-columns : repeat ( 3 , 1 fr );
}
.nav--desktop {
display : flex ;
position : sticky ;
top : 0 ;
}
.nav--tablet {
display : none ;
}
}
/* iPad Pro 12.9" */
@media ( min-width : 1024 px ) and ( min-height : 1366 px ) {
:root {
--font-size-h1 : 2.75 rem ;
--font-size-h2 : 2.25 rem ;
}
}
Common Android Sizes
Device Width Height Density Notes Small phones 360px 640px 1.0-2.0 Moto G, etc. Medium phones 393px 786px 2.5-3.0 Pixel 5, etc. Large phones 412px 915px 3.0-3.5 Galaxy S21+ XL phones 448px 997px 3.5+ Galaxy S21 Ultra Small tablets 600px 960px 1.0-1.5 Nexus 7 Large tablets 800px 1280px 1.5-2.0 Galaxy Tab
Android Code
/* Small Android phones */
@media ( max-width : 360 px ) {
:root {
--font-size-h1 : 1.5 rem ;
--container-padding : 12 px ;
}
}
/* Medium Android phones (most common) */
@media ( min-width : 361 px ) and ( max-width : 414 px ) {
/* Default mobile styles apply */
}
/* Large Android phones */
@media ( min-width : 415 px ) and ( max-width : 599 px ) {
:root {
--font-size-h1 : 1.875 rem ; /* 30px */
--grid-columns : 2 ;
}
.card-grid {
grid-template-columns : repeat ( 2 , 1 fr );
}
}
/* Android tablets (small) */
@media ( min-width : 600 px ) and ( max-width : 767 px ) {
:root {
--grid-columns : 2 ;
--container-padding : 20 px ;
}
.card-grid {
grid-template-columns : repeat ( 2 , 1 fr );
}
}
Notch/Safe Area Handling
/* ============================================
SAFE AREA INSETS (Notch/Dynamic Island)
============================================ */
/* iOS safe area support */
@supports ( padding-top : env(safe-area-inset-top)) {
.app-header {
padding-top : env(safe-area-inset-top);
height : calc ( 56 px + env(safe-area-inset-top));
}
.mobile-bottom-nav {
padding-bottom : env(safe-area-inset-bottom);
height : calc ( 56 px + env(safe-area-inset-bottom));
}
.modal--fullscreen {
padding-top : env(safe-area-inset-top);
padding-bottom : env(safe-area-inset-bottom);
padding-left : env(safe-area-inset-left);
padding-right : env(safe-area-inset-right);
}
}
/* Fallback for non-notch devices */
@supports not ( padding-top : env(safe-area-inset-top)) {
.app-header {
height : 56 px ;
}
.mobile-bottom-nav {
height : 56 px ;
}
}
/* Landscape safe areas */
@media ( orientation : landscape ) {
@supports ( padding-left : env(safe-area-inset-left)) {
.app-content {
padding-left : env(safe-area-inset-left);
padding-right : env(safe-area-inset-right);
}
}
}
Safe Area Visual Reference
Safe Area Insets Visualization
βββββββββββββββββββββββββββββββββββββββ
β safe-area-inset-top β
β βββββββββββββββββββββββββββββββ β
β β β β
β β β β
βs β β s β
βa β USABLE CONTENT β a β
βf β β f β
βe β β e β
β- β β - β
βa β β a β
βr β β r β
βe β β e β
βa β β a β
β β β β
β βββββββββββββββββββββββββββββββ β
β safe-area-inset-bottom β
βββββββββββββββββββββββββββββββββββββββ
Notch area (top): env(safe-area-inset-top)
Home indicator (bottom): env(safe-area-inset-bottom)
Side areas (landscape): env(safe-area-inset-left/right)
Device Detection (CSS Only)
/* ============================================
DEVICE-SPECIFIC DETECTION
============================================ */
/* iOS devices */
@supports ( -webkit-touch-callout : none ) {
/* iOS specific styles */
.ios-only {
display : block ;
}
/* Fix for iOS momentum scrolling */
.scroll-container {
-webkit-overflow-scrolling : touch ;
}
/* Fix for iOS 100vh issue */
.full-height {
height : -webkit-fill-available ;
}
}
/* Non-iOS devices */
@supports not ( -webkit-touch-callout : none ) {
.ios-only {
display : none ;
}
}
/* Touch devices */
@media ( hover : none) and (pointer: coarse) {
.touch-device {
/* Touch-specific styles */
}
/* Remove hover effects */
.no-hover-on-touch:hover {
transform : none ;
box-shadow : none ;
}
}
/* Mouse/trackpad devices */
@media ( hover : hover ) and (pointer: fine) {
.mouse-device {
/* Mouse-specific styles */
}
/* Enable hover effects */
.hover-enabled:hover {
transform : translateY ( -2 px );
}
}
/* Stylus devices */
@media (pointer: fine) and ( hover : none) {
.stylus-device {
/* Stylus-specific styles */
}
}
Quick Reference Tables
Breakpoint Summary
Breakpoint Min Max Grid Container Mobile 0 767px 1 col 100% - 32px Tablet 768px 1023px 2 col 100% - 48px Desktop 1024px 1439px 3-4 col 1200px max Large Desktop 1440px β 5-6 col 1400px max
Touch Target Summary
Element Mobile Tablet Desktop Primary button 48x48px 52x52px 48x48px Secondary button 44x44px 48x48px 44x44px Navigation item 48x48px 56x56px 44x44px Card Full width 50% - 16px 25% - 24px Close button 48x48px 52x52px 44x44px
Typography Summary
Element Mobile Tablet Desktop Large H1 28px 32px 40px 48px H2 24px 28px 32px 36px H3 20px 24px 28px 32px Body 16px 16px 16px 16px Caption 12px 12px 12px 14px
Spacing Summary
Token Mobile Tablet Desktop Large xs 4px 4px 4px 4px sm 8px 8px 8px 8px md 12px 16px 16px 16px lg 16px 24px 24px 24px xl 24px 32px 32px 32px 2xl 32px 48px 48px 48px 3xl 48px 64px 64px 64px
Implementation Checklist
Mobile-First Development
Responsive Images
Accessibility
File Location
Document Path: /mnt/okcomputer/output/responsive-breakpoints.md
This specification provides comprehensive responsive breakpoint guidelines for the β40 Days of Existential Threatsβ interactive experience collection. All pixel values, percentages, and code examples are ready for implementation.