Responsive Breakpoint Specifications

40 Days of Existential Threats - Interactive Experience Collection


Document Information

PropertyValue
Project40 Days of Existential Threats
Document TypeTechnical Specification
Version1.0
Design ApproachMobile-First

1. Breakpoint Overview

Breakpoint Architecture

Breakpoint NameRangePrimary Use CaseDesign Philosophy
Mobile0 - 767pxSmartphones, portrait orientationTouch-first, single column, maximum content density
Tablet768px - 1023pxTablets, large phones landscapeBalanced touch/mouse, 2-column layouts
Desktop1024px - 1439pxLaptops, small desktopsHover-enabled, multi-column, persistent navigation
Large Desktop1440px+Large monitors, ultrawideMaximum 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

PropertyValuePurpose
Mobile max767pxLast mobile breakpoint before tablet
Tablet min768pxiPad portrait standard width
Tablet max1023pxJust before iPad landscape
Desktop min1024pxiPad landscape, small laptop
Desktop max1439pxBefore large desktop territory
Large Desktop min1440pxMacBook Pro 15”, common large display
Content max-width1400pxOptimal reading width for content

2. Mobile Specifications (0-767px)

Touch Target Requirements

ElementMinimum SizeRecommended SizeNotes
Primary buttons44x44px48x48pxWCAG 2.1 AA compliance
Secondary buttons44x44px44x44pxMinimum acceptable
Navigation items44x44px48x48pxBottom nav touch areas
Cards/tiles88x88px96x96pxFor grid items
Form inputs44px height48px heightComfortable typing
Checkboxes/radio24x24px32x32pxVisual + touch area
Close buttons44x44px48x48pxEasy dismissal
Progress indicators44px diameter48px diameterEasy tapping

Touch Target Spacing

/* Minimum spacing between touch targets */
.touch-target {
  min-height: 44px;
  min-width: 44px;
}
 
/* Recommended spacing */
.touch-target-recommended {
  min-height: 48px;
  min-width: 48px;
}
 
/* Touch target margin (prevents accidental taps) */
.touch-target + .touch-target {
  margin-left: 8px;
}

Font Size Adjustments

ElementSizeLine HeightWeightNotes
H1 (Experience Title)28px1.2700Maximum impact
H2 (Section Headers)24px1.3600Clear hierarchy
H3 (Card Titles)20px1.3600Readable at distance
H4 (Subsection)18px1.4600Secondary emphasis
Body Large18px1.6400Primary reading text
Body16px1.6400Standard content
Body Small14px1.5400Captions, metadata
Caption12px1.4400Fine print, labels
Button Text16px1500Action clarity
Navigation14px1500Compact 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

PropertyValueNotes
Container padding16px (1rem)Horizontal padding
Section spacing24pxBetween major sections
Card margin16pxCard outer margin
Card padding16pxCard internal padding
Element spacing12pxBetween related elements
Compact spacing8pxTight 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: 56px;
  padding-bottom: env(safe-area-inset-bottom, 0);
  display: flex;
  justify-content: space-around;
  align-items: center;
  background: var(--color-surface);
  box-shadow: 0 -2px 10px 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: 48px;
  min-height: 48px;
  color: var(--color-text-secondary);
}
 
.mobile-bottom-nav__item--active {
  color: var(--color-accent);
}

Swipe Gesture Areas

GestureAreaBehaviorThreshold
Swipe LeftCard/ContentNext experience50px
Swipe RightCard/ContentPrevious experience50px
Swipe UpExperience listLoad more100px
Swipe DownContentRefresh/close modal100px
Edge SwipeLeft edgeOpen navigation20px 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: 50px;
  --swipe-velocity: 0.3;
}

Reduced Padding/Spacing Scale

TokenValueUsage
β€”space-xs4pxTightest spacing
β€”space-sm8pxCompact elements
β€”space-md12pxDefault element spacing
β€”space-lg16pxSection padding
β€”space-xl24pxMajor section breaks
β€”space-2xl32pxLarge separations
β€”space-3xl48pxHero/major sections

Full-Width Buttons

Mobile Button Patterns
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚    Primary Action       β”‚    β”‚
β”‚  β”‚    (Full Width)         β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Secondary  β”‚ β”‚ Secondary  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚    Destructive Action   β”‚    β”‚
β”‚  β”‚    (Full Width)         β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Button Specifications (Mobile)

TypeWidthHeightPaddingMargin
Primary100%48px16px 24px8px 0
Secondary100% or 48%44px12px 20px8px 0
Tertiaryauto44px12px 16px8px
Icon Button48px48px12px8px
Mobile Modal (Full Screen)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ←  Modal Title              βœ•  β”‚  Header: 56px
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                 β”‚
β”‚                                 β”‚
β”‚      Modal Content Area         β”‚
β”‚      (Scrollable)               β”‚
β”‚                                 β”‚
β”‚                                 β”‚
β”‚                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚      Primary Action     β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚  Footer: 80px
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
PropertyValueNotes
PositionFixed, full viewportCover entire screen
AnimationSlide up from bottom300ms ease-out
Header height56pxConsistent with app header
Footer height80pxSpace for actions
Content padding16pxComfortable reading
Close button44x44pxTop right corner
Back button44x44pxTop left (if needed)
BackdropNone (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)

PropertyValueNotes
Grid columns2Primary layout
Column gap16pxBetween cards
Row gap16pxBetween rows
Container padding24pxHorizontal padding
Card aspect ratio4:3 or autoContent-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
PatternWidthUse Case
Bottom navFull widthPortrait orientation
Side nav (icon)72pxLandscape, more content
Side nav (full)240pxWhen space allows
Collapsible72px β†’ 240pxExpand on hover/tap

Increased Touch Targets

ElementMobileTabletIncrease
Primary buttons48px52px+4px
Navigation items48px56px+8px
Cards88px96px+8px
Form inputs48px52px+4px
Close buttons48px52px+4px

Medium Padding Scale

TokenMobileTabletIncrease
β€”space-xs4px4px-
β€”space-sm8px8px-
β€”space-md12px16px+4px
β€”space-lg16px24px+8px
β€”space-xl24px32px+8px
β€”space-2xl32px48px+16px
β€”space-3xl48px64px+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)

ViewportColumnsColumn GapRow GapNotes
1024px - 1199px320px20pxCompact desktop
1200px - 1439px424px24pxStandard desktop

Grid Code

/* Desktop Grid System */
.desktop-grid {
  display: grid;
  gap: var(--grid-gap);
}
 
/* 1024px - 1199px: 3 columns */
@media (min-width: 1024px) and (max-width: 1199px) {
  .desktop-grid {
    grid-template-columns: repeat(3, 1fr);
    --grid-gap: 20px;
  }
}
 
/* 1200px - 1439px: 4 columns */
@media (min-width: 1200px) and (max-width: 1439px) {
  .desktop-grid {
    grid-template-columns: repeat(4, 1fr);
    --grid-gap: 24px;
  }
}

Hover States Enabled

ElementHover EffectTransitionNotes
CardsScale 1.02, shadow increase200ms easeSubtle lift
ButtonsBackground lighten 10%150ms easeClear feedback
LinksUnderline, color shift150ms easeStandard pattern
NavigationBackground highlight150ms easeActive state
ImagesSlight zoom (1.05)300ms easeReveal detail

Hover State Code

/* Card hover effect */
.experience-card {
  transition: transform 200ms ease, box-shadow 200ms ease;
}
 
.experience-card:hover {
  transform: translateY(-4px) scale(1.02);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
}
 
/* Button hover effect */
.btn-primary {
  transition: background-color 150ms ease, transform 150ms ease;
}
 
.btn-primary:hover {
  background-color: var(--color-primary-light);
  transform: translateY(-2px);
}
 
/* Link hover effect */
.link {
  transition: color 150ms 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)
PropertyValueNotes
Header height64pxStandard height
Shrunk header48pxOn scroll
Logo width120pxBrand presence
Nav item spacing32pxBetween items
Search width200pxExpandable
Profile button40pxCircular

Full Spacing Scale

TokenMobileTabletDesktopNotes
β€”space-xs4px4px4px-
β€”space-sm8px8px8px-
β€”space-md12px16px16px-
β€”space-lg16px24px24px-
β€”space-xl24px32px32px-
β€”space-2xl32px48px48px-
β€”space-3xl48px64px64px-
β€”space-4xl--96pxHero sections
β€”space-5xl--128pxMajor breaks
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                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
PropertyValueNotes
PositionFixed, centeredBoth axes
Max-width600pxComfortable reading
Max-height80vhScroll if needed
MarginAutoCenter alignment
Border radius12pxRounded corners
Backdroprgba(0,0,0,0.7)Focus content
AnimationFade + scale250ms ease-out
ShadowLargeElevation

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: 1024px) {
  .container {
    max-width: 1200px;
    --container-padding: 32px;
  }
}
 
/* Large desktop container */
@media (min-width: 1440px) {
  .container {
    max-width: 1400px;
    --container-padding: 48px;
  }
}

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)

ViewportColumnsColumn GapRow GapNotes
1440px - 1919px5-624px24pxWide desktop
1920px+6-824px24pxUltrawide

Increased Whitespace

PropertyDesktopLarge DesktopIncrease
Section padding64px96px+50%
Container padding32px48px+50%
Card padding24px32px+33%
Hero spacing96px128px+33%
Between sections64px96px+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: 1440px) {
  .container {
    max-width: 1400px;
  }
  
  .container--wide {
    max-width: 1600px;
  }
  
  .container--full {
    max-width: none;
    padding-left: 48px;
    padding-right: 48px;
  }
}
 
/* Content width constraints for readability */
.content-readable {
  max-width: 75ch; /* Optimal reading width */
}
 
.content-wide {
  max-width: 100ch;
}

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

ClassWidthCommon Use
.col-18.33%Small elements
.col-216.66%Icon groups
.col-325%4-column layouts
.col-433.33%3-column layouts
.col-541.66%Asymmetric layouts
.col-650%2-column layouts
.col-758.33%Content-heavy
.col-866.66%Main content area
.col-975%Primary content
.col-1083.33%Wide content
.col-1191.66%Near full-width
.col-12100%Full width

Grid Code

/* 12-Column Grid System */
.grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  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: 767px) {
  .col-sm-6 { grid-column: span 6; }
  .col-sm-12 { grid-column: span 12; }
}
 
@media (min-width: 768px) and (max-width: 1023px) {
  .col-md-4 { grid-column: span 4; }
  .col-md-6 { grid-column: span 6; }
}
 
@media (min-width: 1024px) {
  .col-lg-3 { grid-column: span 3; }
  .col-lg-4 { grid-column: span 4; }
}

Gutters at Each Breakpoint

BreakpointGutter SizeNotes
Mobile (0-767px)12pxCompact, touch-friendly
Tablet (768px-1023px)16pxBalanced spacing
Desktop (1024px-1439px)20-24pxComfortable gaps
Large Desktop (1440px+)24pxPremium feel

Gutter Code

:root {
  /* Gutter scale */
  --gutter-mobile: 12px;
  --gutter-tablet: 16px;
  --gutter-desktop: 20px;
  --gutter-large: 24px;
}
 
/* Responsive gutters */
.grid {
  gap: var(--gutter-mobile);
}
 
@media (min-width: 768px) {
  .grid {
    gap: var(--gutter-tablet);
  }
}
 
@media (min-width: 1024px) {
  .grid {
    gap: var(--gutter-desktop);
  }
}
 
@media (min-width: 1440px) {
  .grid {
    gap: var(--gutter-large);
  }
}

Container Max-Widths

Container TypeMobileTabletDesktopLarge Desktop
Default100%100%1200px1400px
Wide100%100%1400px1600px
Full100%100%100%100%
Narrow100%100%800px800px

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: 1400px;
}
 
.container--wide {
  --container-max-width: 1600px;
}
 
.container--narrow {
  --container-max-width: 800px;
}
 
/* Apply max-width on larger screens */
@media (min-width: 1024px) {
  .container {
    max-width: var(--container-max-width, 1400px);
  }
}

Margin/Padding Scales

:root {
  /* Spacing scale (8px base) */
  --space-0: 0;
  --space-1: 4px;    /* 0.25rem */
  --space-2: 8px;    /* 0.5rem */
  --space-3: 12px;   /* 0.75rem */
  --space-4: 16px;   /* 1rem */
  --space-5: 20px;   /* 1.25rem */
  --space-6: 24px;   /* 1.5rem */
  --space-8: 32px;   /* 2rem */
  --space-10: 40px;  /* 2.5rem */
  --space-12: 48px;  /* 3rem */
  --space-16: 64px;  /* 4rem */
  --space-20: 80px;  /* 5rem */
  --space-24: 96px;  /* 6rem */
  --space-32: 128px; /* 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

BreakpointPatternHeightBehavior
MobileBottom nav56-64pxFixed bottom, 4-5 items
TabletBottom or side56-72pxContext-dependent
DesktopTop horizontal64pxPersistent, hover states
Large DesktopTop horizontal64pxSame as desktop
/* Mobile navigation */
@media (max-width: 767px) {
  .nav--mobile {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    height: 56px;
    display: flex;
    justify-content: space-around;
    padding-bottom: env(safe-area-inset-bottom);
  }
  
  .nav--desktop {
    display: none;
  }
}
 
/* Desktop navigation */
@media (min-width: 1024px) {
  .nav--mobile {
    display: none;
  }
  
  .nav--desktop {
    display: flex;
    position: sticky;
    top: 0;
    height: 64px;
    align-items: center;
    gap: 32px;
  }
}

Card Grid Changes

BreakpointColumnsCard SizeGap
Mobile1Full width - 32px12px
Tablet250% - 16px16px
Desktop (1024-1199)333.33% - 20px20px
Desktop (1200-1439)425% - 24px24px
Large Desktop5-620% - 24px24px

Card Grid Code

/* Card grid */
.card-grid {
  display: grid;
  gap: var(--card-gap);
}
 
/* Responsive columns */
@media (max-width: 767px) {
  .card-grid {
    grid-template-columns: 1fr;
    --card-gap: 12px;
  }
}
 
@media (min-width: 768px) and (max-width: 1023px) {
  .card-grid {
    grid-template-columns: repeat(2, 1fr);
    --card-gap: 16px;
  }
}
 
@media (min-width: 1024px) and (max-width: 1199px) {
  .card-grid {
    grid-template-columns: repeat(3, 1fr);
    --card-gap: 20px;
  }
}
 
@media (min-width: 1200px) and (max-width: 1439px) {
  .card-grid {
    grid-template-columns: repeat(4, 1fr);
    --card-gap: 24px;
  }
}
 
@media (min-width: 1440px) {
  .card-grid {
    grid-template-columns: repeat(5, 1fr);
    --card-gap: 24px;
  }
}
 
@media (min-width: 1920px) {
  .card-grid {
    grid-template-columns: repeat(6, 1fr);
  }
}

Button Sizing

BreakpointPrimarySecondaryIcon Only
Mobile100% x 48px48% x 44px48x48px
Tabletauto x 52pxauto x 48px52x52px
Desktopauto x 48pxauto x 44px44x44px
Large Desktopauto x 48pxauto x 44px44x44px

Button Code

/* Base button styles */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 8px;
  font-weight: 500;
  transition: all 150ms ease;
  cursor: pointer;
}
 
/* Mobile buttons */
@media (max-width: 767px) {
  .btn--primary {
    width: 100%;
    height: 48px;
    padding: 0 24px;
    font-size: 16px;
  }
  
  .btn--secondary {
    width: calc(50% - 8px);
    height: 44px;
    padding: 0 20px;
    font-size: 14px;
  }
  
  .btn--icon {
    width: 48px;
    height: 48px;
    padding: 12px;
  }
}
 
/* Desktop buttons */
@media (min-width: 1024px) {
  .btn--primary {
    width: auto;
    height: 48px;
    padding: 0 24px;
  }
  
  .btn--secondary {
    width: auto;
    height: 44px;
    padding: 0 20px;
  }
  
  .btn--icon {
    width: 44px;
    height: 44px;
    padding: 10px;
  }
}

Typography Scaling

ElementMobileTabletDesktopLarge Desktop
H128px32px40px48px
H224px28px32px36px
H320px24px28px32px
H418px20px22px24px
Body16px16px16px16px
Body Large18px18px18px20px
Caption12px12px12px14px

Typography Code

/* Fluid typography using clamp() */
:root {
  /* Mobile-first with fluid scaling */
  --font-size-h1: clamp(1.75rem, 4vw + 1rem, 3rem);      /* 28px - 48px */
  --font-size-h2: clamp(1.5rem, 3vw + 0.75rem, 2.25rem); /* 24px - 36px */
  --font-size-h3: clamp(1.25rem, 2vw + 0.5rem, 2rem);    /* 20px - 32px */
  --font-size-h4: clamp(1.125rem, 1vw + 0.5rem, 1.5rem); /* 18px - 24px */
  --font-size-body: 1rem;                                 /* 16px fixed */
  --font-size-body-lg: clamp(1.125rem, 0.5vw + 1rem, 1.25rem); /* 18px - 20px */
}
 
/* Traditional breakpoint approach */
@media (min-width: 768px) {
  h1 { font-size: 32px; }
  h2 { font-size: 28px; }
  h3 { font-size: 24px; }
}
 
@media (min-width: 1024px) {
  h1 { font-size: 40px; }
  h2 { font-size: 32px; }
  h3 { font-size: 28px; }
}
 
@media (min-width: 1440px) {
  h1 { font-size: 48px; }
  h2 { font-size: 36px; }
  h3 { font-size: 32px; }
}

Progress Indicator Sizing

BreakpointSizeStroke WidthPosition
Mobile48px diameter4pxBelow header
Tablet56px diameter5pxBelow header
Desktop64px diameter6pxSide or below header
Large Desktop72px diameter6pxSide panel

Progress Indicator Code

/* Progress indicator */
.progress-indicator {
  position: relative;
  border-radius: 50%;
}
 
/* Mobile */
@media (max-width: 767px) {
  .progress-indicator {
    width: 48px;
    height: 48px;
  }
  
  .progress-indicator__circle {
    stroke-width: 4px;
  }
}
 
/* Tablet */
@media (min-width: 768px) and (max-width: 1023px) {
  .progress-indicator {
    width: 56px;
    height: 56px;
  }
  
  .progress-indicator__circle {
    stroke-width: 5px;
  }
}
 
/* Desktop */
@media (min-width: 1024px) {
  .progress-indicator {
    width: 64px;
    height: 64px;
  }
  
  .progress-indicator__circle {
    stroke-width: 6px;
  }
}
 
/* Large Desktop */
@media (min-width: 1440px) {
  .progress-indicator {
    width: 72px;
    height: 72px;
  }
}
BreakpointWidthHeightPosition
Mobile100%100%Full screen
Tablet90%auto, max 80%Centered
Desktop600px maxauto, max 80vhCentered
Large Desktop700px maxauto, max 80vhCentered
/* 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: 767px) {
  .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: 768px) and (max-width: 1023px) {
  .modal {
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 90%;
    max-width: 600px;
    max-height: 80%;
    border-radius: 12px;
  }
  
  .modal__backdrop {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.7);
  }
}
 
/* Desktop modal */
@media (min-width: 1024px) {
  .modal {
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 100%;
    max-width: 600px;
    max-height: 80vh;
    border-radius: 12px;
  }
}
 
/* Large desktop modal */
@media (min-width: 1440px) {
  .modal {
    max-width: 700px;
  }
}

8. Touch vs Mouse Considerations

Hover State Fallbacks

ElementHover StateTouch FallbackImplementation
CardsLift + shadowActive state (press):hover + :active
ButtonsBrightenRipple effectCSS + JS
LinksUnderlineHighlight:focus-visible
ImagesZoomTap to expandModal/lightbox
NavigationBackgroundActive indicatorCSS classes

Hover Fallback Code

/* Hover with touch fallback */
.interactive-element {
  transition: transform 200ms ease, box-shadow 200ms ease;
}
 
/* Hover for mouse users */
@media (hover: hover) and (pointer: fine) {
  .interactive-element:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 24px 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: 2px solid var(--color-accent);
  outline-offset: 2px;
}

Touch Gesture Zones

GestureZone SizeLocationPurpose
Swipe left/right100% widthCard/content areaNavigate experiences
Swipe up100% widthList areaLoad more
Pull to refresh80px from topTop of scrollRefresh content
Edge swipe20px from edgeLeft edgeOpen navigation
Double tap44x44pxImage/mediaZoom/expand
Long press44x44pxCards/itemsContext 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: 20px;
  height: 100vh;
  z-index: 50;
}
 
/* Pull to refresh area */
.pull-refresh-zone {
  position: absolute;
  top: -80px;
  left: 0;
  right: 0;
  height: 80px;
  display: flex;
  align-items: center;
  justify-content: center;
}

Right-Click Behaviors

ElementRight-Click ActionNotes
Experience cardsContext menuOptions: Start, Add to favorites, Share
ImagesContext menuOptions: View full, Download, Share
Progress indicatorContext menuOptions: Jump to day, Reset progress
LinksStandard browserOpen 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) }
      ]
    });
  });
});

Scroll Behaviors

BehaviorMobileDesktopImplementation
Smooth scrollNativeNativescroll-behavior: smooth
Momentum scrollNativeN/A-webkit-overflow-scrolling: touch
Scroll snapOptionalOptionalscroll-snap-type
ParallaxLimitedFulltransform + scroll event
Infinite scrollCommonOptionalIntersection Observer

Scroll Code

/* 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;
}

9. Viewport Meta & CSS

<!-- 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">

Viewport Meta Properties

PropertyValuePurpose
widthdevice-widthMatch device width
initial-scale1.0No initial zoom
maximum-scale5.0Allow zoom for accessibility
minimum-scale1.0Prevent over-zooming out
user-scalableyesAllow user zoom
viewport-fitcoverHandle notches/safe areas

CSS Breakpoint Media Queries

/* ============================================
   RESPONSIVE BREAKPOINTS
   Mobile-first approach
   ============================================ */
 
/* ----------------------------------------
   MOBILE (0 - 767px)
   Default styles - no media query needed
   ---------------------------------------- */
 
/* Base styles for mobile */
:root {
  /* Mobile spacing */
  --space-xs: 4px;
  --space-sm: 8px;
  --space-md: 12px;
  --space-lg: 16px;
  --space-xl: 24px;
  --space-2xl: 32px;
  --space-3xl: 48px;
  
  /* Mobile typography */
  --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: 1rem;       /* 16px */
  --font-size-caption: 0.75rem; /* 12px */
  
  /* Mobile grid */
  --grid-columns: 1;
  --grid-gap: 12px;
  
  /* Mobile container */
  --container-padding: 16px;
}
 
/* ----------------------------------------
   TABLET (768px - 1023px)
   ---------------------------------------- */
@media (min-width: 768px) {
  :root {
    /* Tablet spacing */
    --space-md: 16px;
    --space-lg: 24px;
    --space-xl: 32px;
    --space-2xl: 48px;
    --space-3xl: 64px;
    
    /* Tablet typography */
    --font-size-h1: 2rem;    /* 32px */
    --font-size-h2: 1.75rem; /* 28px */
    --font-size-h3: 1.5rem;  /* 24px */
    
    /* Tablet grid */
    --grid-columns: 2;
    --grid-gap: 16px;
    
    /* Tablet container */
    --container-padding: 24px;
  }
}
 
/* ----------------------------------------
   DESKTOP (1024px - 1439px)
   ---------------------------------------- */
@media (min-width: 1024px) {
  :root {
    /* Desktop spacing */
    --space-md: 16px;
    --space-lg: 24px;
    --space-xl: 32px;
    --space-2xl: 48px;
    --space-3xl: 64px;
    --space-4xl: 96px;
    
    /* Desktop typography */
    --font-size-h1: 2.5rem;  /* 40px */
    --font-size-h2: 2rem;    /* 32px */
    --font-size-h3: 1.75rem; /* 28px */
    --font-size-h4: 1.375rem; /* 22px */
    
    /* Desktop grid */
    --grid-columns: 3;
    --grid-gap: 20px;
    
    /* Desktop container */
    --container-padding: 32px;
    --container-max-width: 1200px;
  }
}
 
/* Desktop - Large (1200px - 1439px) */
@media (min-width: 1200px) {
  :root {
    --grid-columns: 4;
    --grid-gap: 24px;
    --container-max-width: 1200px;
  }
}
 
/* ----------------------------------------
   LARGE DESKTOP (1440px+)
   ---------------------------------------- */
@media (min-width: 1440px) {
  :root {
    /* Large desktop spacing */
    --space-lg: 24px;
    --space-xl: 32px;
    --space-2xl: 48px;
    --space-3xl: 64px;
    --space-4xl: 96px;
    --space-5xl: 128px;
    
    /* Large desktop typography */
    --font-size-h1: 3rem;      /* 48px */
    --font-size-h2: 2.25rem;   /* 36px */
    --font-size-h3: 2rem;      /* 32px */
    --font-size-h4: 1.5rem;    /* 24px */
    --font-size-body-lg: 1.25rem; /* 20px */
    
    /* Large desktop grid */
    --grid-columns: 5;
    --grid-gap: 24px;
    
    /* Large desktop container */
    --container-padding: 48px;
    --container-max-width: 1400px;
  }
}
 
/* Large Desktop - Ultrawide (1920px+) */
@media (min-width: 1920px) {
  :root {
    --grid-columns: 6;
    --container-max-width: 1600px;
  }
}
 
/* ----------------------------------------
   ORIENTATION SPECIFIC
   ---------------------------------------- */
 
/* Landscape orientation on mobile */
@media (max-width: 767px) and (orientation: landscape) {
  .hide-on-landscape {
    display: none;
  }
  
  .mobile-bottom-nav {
    height: 48px; /* Smaller in landscape */
  }
}
 
/* Portrait orientation on tablets */
@media (min-width: 768px) and (max-width: 1023px) and (orientation: portrait) {
  :root {
    --grid-columns: 2;
  }
}
 
/* ----------------------------------------
   HIGH-DPI / RETINA DISPLAYS
   ---------------------------------------- */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
  /* Use higher resolution images */
  .hero-image {
    background-image: url('[email protected]');
  }
}
 
/* ----------------------------------------
   REDUCED MOTION
   ---------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !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: 150px;
  }
  
  .experience-card__title {
    font-size: 16px;
  }
}
 
@container card (min-width: 301px) and (max-width: 500px) {
  .experience-card {
    flex-direction: row;
  }
  
  .experience-card__image {
    width: 120px;
    height: 100%;
  }
  
  .experience-card__title {
    font-size: 18px;
  }
}
 
@container card (min-width: 501px) {
  .experience-card {
    flex-direction: column;
  }
  
  .experience-card__image {
    width: 100%;
    height: 200px;
  }
  
  .experience-card__title {
    font-size: 20px;
  }
}
 
/* 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

PropertyValueNotes
Viewport width375pxSmallest modern iPhone
Viewport height667pxLimited vertical space
Safe area top20pxNo notch
Safe area bottom0pxHome button
Touch targetsCriticalMust be 44px minimum
Font sizesMinimum 14pxReadable at this size

iPhone SE Code

/* iPhone SE specific adjustments */
@media (max-width: 375px) {
  :root {
    --font-size-h1: 1.5rem;    /* 24px */
    --font-size-h2: 1.25rem;   /* 20px */
    --font-size-h3: 1.125rem;  /* 18px */
    --space-lg: 12px;
    --space-xl: 16px;
  }
  
  .experience-card {
    padding: 12px;
  }
  
  .mobile-bottom-nav {
    height: 52px;
  }
  
  .mobile-bottom-nav__label {
    font-size: 10px;
  }
}

iPad Landscape/Portrait

OrientationWidthHeightGrid ColumnsNotes
Portrait768px1024px2Standard tablet
Landscape1024px768px3Desktop-like

iPad Code

/* iPad portrait */
@media (min-width: 768px) and (max-width: 1023px) and (orientation: portrait) {
  .card-grid {
    grid-template-columns: repeat(2, 1fr);
  }
  
  .nav--tablet {
    display: flex;
    position: fixed;
    bottom: 0;
    height: 64px;
  }
}
 
/* iPad landscape */
@media (min-width: 1024px) and (max-width: 1366px) and (orientation: landscape) {
  .card-grid {
    grid-template-columns: repeat(3, 1fr);
  }
  
  .nav--desktop {
    display: flex;
    position: sticky;
    top: 0;
  }
  
  .nav--tablet {
    display: none;
  }
}
 
/* iPad Pro 12.9" */
@media (min-width: 1024px) and (min-height: 1366px) {
  :root {
    --font-size-h1: 2.75rem;
    --font-size-h2: 2.25rem;
  }
}

Common Android Sizes

DeviceWidthHeightDensityNotes
Small phones360px640px1.0-2.0Moto G, etc.
Medium phones393px786px2.5-3.0Pixel 5, etc.
Large phones412px915px3.0-3.5Galaxy S21+
XL phones448px997px3.5+Galaxy S21 Ultra
Small tablets600px960px1.0-1.5Nexus 7
Large tablets800px1280px1.5-2.0Galaxy Tab

Android Code

/* Small Android phones */
@media (max-width: 360px) {
  :root {
    --font-size-h1: 1.5rem;
    --container-padding: 12px;
  }
}
 
/* Medium Android phones (most common) */
@media (min-width: 361px) and (max-width: 414px) {
  /* Default mobile styles apply */
}
 
/* Large Android phones */
@media (min-width: 415px) and (max-width: 599px) {
  :root {
    --font-size-h1: 1.875rem; /* 30px */
    --grid-columns: 2;
  }
  
  .card-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
 
/* Android tablets (small) */
@media (min-width: 600px) and (max-width: 767px) {
  :root {
    --grid-columns: 2;
    --container-padding: 20px;
  }
  
  .card-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

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(56px + env(safe-area-inset-top));
  }
  
  .mobile-bottom-nav {
    padding-bottom: env(safe-area-inset-bottom);
    height: calc(56px + 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: 56px;
  }
  
  .mobile-bottom-nav {
    height: 56px;
  }
}
 
/* 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(-2px);
  }
}
 
/* Stylus devices */
@media (pointer: fine) and (hover: none) {
  .stylus-device {
    /* Stylus-specific styles */
  }
}

Quick Reference Tables

Breakpoint Summary

BreakpointMinMaxGridContainer
Mobile0767px1 col100% - 32px
Tablet768px1023px2 col100% - 48px
Desktop1024px1439px3-4 col1200px max
Large Desktop1440px∞5-6 col1400px max

Touch Target Summary

ElementMobileTabletDesktop
Primary button48x48px52x52px48x48px
Secondary button44x44px48x48px44x44px
Navigation item48x48px56x56px44x44px
CardFull width50% - 16px25% - 24px
Close button48x48px52x52px44x44px

Typography Summary

ElementMobileTabletDesktopLarge
H128px32px40px48px
H224px28px32px36px
H320px24px28px32px
Body16px16px16px16px
Caption12px12px12px14px

Spacing Summary

TokenMobileTabletDesktopLarge
xs4px4px4px4px
sm8px8px8px8px
md12px16px16px16px
lg16px24px24px24px
xl24px32px32px32px
2xl32px48px48px48px
3xl48px64px64px64px

Implementation Checklist

Mobile-First Development

  • Start with mobile styles (no media query)
  • Use min-width media queries for larger screens
  • Test touch targets at 44x44px minimum
  • Implement safe area insets for notched devices
  • Use relative units (rem, %) for scalability

Responsive Images

  • Use srcset for responsive images
  • Implement lazy loading
  • Provide appropriate sizes for each breakpoint
  • Use WebP format with fallbacks

Performance

  • Minimize layout shifts (CLS)
  • Use content-visibility for off-screen content
  • Implement will-change for animated elements
  • Test on actual devices, not just emulators

Accessibility

  • Maintain 4.5:1 contrast ratio minimum
  • Support zoom up to 200%
  • Implement prefers-reduced-motion
  • Test with screen readers
  • Ensure keyboard navigation works

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.