278 lines
7.3 KiB
Markdown
278 lines
7.3 KiB
Markdown
# DAS Website Layout Guide
|
|
*A cozy, personal space for lo-fi beats*
|
|
|
|
---
|
|
|
|
## Design Philosophy
|
|
This site should feel like stepping into a friend's carefully curated music space. Warm, intimate, uncluttered. Every pixel serves the music.
|
|
|
|
---
|
|
|
|
## Spacing System
|
|
|
|
### Container Padding
|
|
- **Desktop:** 80px horizontal, 60px vertical
|
|
- **Tablet:** 40px horizontal, 40px vertical
|
|
- **Mobile:** 24px horizontal, 32px vertical
|
|
|
|
### Section Spacing (vertical)
|
|
- **Between major sections:** 120px (desktop), 80px (tablet), 60px (mobile)
|
|
- **Between subsections:** 60px (desktop), 40px (tablet), 32px (mobile)
|
|
- **Between elements in a group:** 24px (desktop), 20px (tablet), 16px (mobile)
|
|
|
|
### Track List Item Spacing
|
|
- **Gap between tracks:** 16px
|
|
- **Internal padding:** 20px (desktop), 16px (mobile)
|
|
- **Hover expansion:** Add 4px padding-top and padding-bottom on hover
|
|
|
|
---
|
|
|
|
## Typography Hierarchy
|
|
|
|
### Font Families
|
|
- **Headings:** System font stack: `-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`
|
|
- **Body:** Same as headings for cohesion
|
|
- **Accent/Artist name:** Consider a gentle rounded sans like `'DM Sans', 'Inter', system-ui`
|
|
|
|
### Font Sizes
|
|
|
|
#### Desktop (1024px+)
|
|
- **Artist Name (H1):** 72px, font-weight: 700, letter-spacing: -0.02em
|
|
- **Tagline:** 24px, font-weight: 400, letter-spacing: 0.01em, opacity: 0.85
|
|
- **Section Headers (H2):** 36px, font-weight: 600
|
|
- **Track Titles:** 20px, font-weight: 500
|
|
- **Track Album/Description:** 16px, font-weight: 400, opacity: 0.7
|
|
- **About Text:** 18px, font-weight: 400, line-height: 1.7
|
|
- **Buttons/Links:** 16px, font-weight: 500, letter-spacing: 0.02em
|
|
|
|
#### Tablet (768px - 1023px)
|
|
- **Artist Name:** 56px
|
|
- **Tagline:** 20px
|
|
- **Section Headers:** 28px
|
|
- **Track Titles:** 18px
|
|
- **Track Album/Description:** 15px
|
|
- **About Text:** 17px
|
|
- **Buttons/Links:** 15px
|
|
|
|
#### Mobile (<768px)
|
|
- **Artist Name:** 40px
|
|
- **Tagline:** 18px
|
|
- **Section Headers:** 24px
|
|
- **Track Titles:** 17px
|
|
- **Track Album/Description:** 14px
|
|
- **About Text:** 16px, line-height: 1.65
|
|
- **Buttons/Links:** 15px
|
|
|
|
---
|
|
|
|
## Color Palette
|
|
|
|
### Primary Colors
|
|
```
|
|
Background: #FFF8F0 (warm off-white, like aged paper)
|
|
Text Primary: #2A2420 (warm dark brown, not pure black)
|
|
Text Secondary: rgba(42, 36, 32, 0.65)
|
|
```
|
|
|
|
### Accent Colors
|
|
```
|
|
Primary Accent: #E85D75 (warm coral pink)
|
|
Hover Accent: #D94460 (deeper coral)
|
|
Secondary Accent: #FFA07A (light salmon - for subtle highlights)
|
|
```
|
|
|
|
### Interactive States
|
|
```
|
|
Link Default: #2A2420
|
|
Link Hover: #E85D75
|
|
Button Background: #E85D75
|
|
Button Hover: #D94460
|
|
Button Text: #FFF8F0
|
|
Track Item Hover Background: rgba(232, 93, 117, 0.08)
|
|
```
|
|
|
|
### Semantic Colors
|
|
```
|
|
Focus Ring: 2px solid #E85D75, offset 2px
|
|
Border/Divider: rgba(42, 36, 32, 0.12)
|
|
```
|
|
|
|
---
|
|
|
|
## Responsive Breakpoints
|
|
|
|
```css
|
|
/* Mobile-first approach */
|
|
|
|
/* Small phones */
|
|
@media (max-width: 375px) {
|
|
/* Tighter spacing, smaller fonts */
|
|
}
|
|
|
|
/* Standard mobile */
|
|
@media (min-width: 376px) and (max-width: 767px) {
|
|
/* Base mobile styles */
|
|
}
|
|
|
|
/* Tablet portrait */
|
|
@media (min-width: 768px) and (max-width: 1023px) {
|
|
/* Medium spacing and fonts */
|
|
}
|
|
|
|
/* Desktop */
|
|
@media (min-width: 1024px) {
|
|
/* Full spacing and fonts */
|
|
}
|
|
|
|
/* Large desktop */
|
|
@media (min-width: 1440px) {
|
|
/* Optional: max-width container, centered */
|
|
/* Max content width: 1200px */
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Component-Specific Guidelines
|
|
|
|
### Hero Section (Artist Name + Tagline)
|
|
- **Alignment:** Center
|
|
- **Vertical spacing from top:** 80px (desktop), 60px (mobile)
|
|
- **Tagline margin-top:** 16px
|
|
- **Animation:** Subtle fade-in on load (0.6s ease)
|
|
|
|
### Track List
|
|
- **Max width:** 640px, centered
|
|
- **Border radius:** 12px per item
|
|
- **Transition:** all 0.2s ease-in-out
|
|
- **Hover state:** Lift with subtle shadow `box-shadow: 0 4px 12px rgba(42, 36, 32, 0.08)`
|
|
- **Play button (if added):** 40px circle, positioned left or center, accent color
|
|
|
|
### About Section
|
|
- **Max width:** 560px, centered
|
|
- **Text alignment:** Center
|
|
- **Line height:** 1.7 (desktop), 1.65 (mobile)
|
|
|
|
### Streaming Links
|
|
- **Layout:** Horizontal flex on desktop, vertical stack on mobile (<600px)
|
|
- **Button style:** Rounded corners (24px), 16px vertical padding, 32px horizontal padding
|
|
- **Gap between buttons:** 16px
|
|
- **Icon size (if added):** 20px, positioned left of text with 8px gap
|
|
- **Hover effect:** Slight scale (transform: scale(1.02)) + color change
|
|
|
|
---
|
|
|
|
## Accessibility Considerations
|
|
|
|
### Color Contrast
|
|
- **Text on background:** Minimum WCAG AA (4.5:1 for body text, 3:1 for large text)
|
|
- **Accent color on white:** #E85D75 on #FFF8F0 = ~4.8:1 ✓
|
|
- **Dark text on white:** #2A2420 on #FFF8F0 = ~13.5:1 ✓
|
|
|
|
### Focus States
|
|
- **All interactive elements** must have visible focus ring
|
|
- **Focus ring:** 2px solid accent color, 2px offset
|
|
- **Never remove outline** without replacing with visible alternative
|
|
|
|
### Keyboard Navigation
|
|
- **Tab order:** Logical top-to-bottom flow
|
|
- **Skip links:** Consider "Skip to music" link at top
|
|
- **Interactive elements:** Minimum 44x44px touch target on mobile
|
|
|
|
### Screen Reader Support
|
|
- **Artist name:** Wrapped in `<h1>` with proper hierarchy
|
|
- **Track list:** Semantic `<ul>` with `<li>` items
|
|
- **Links:** Descriptive text ("Listen on Spotify" not just "Spotify")
|
|
- **Icons:** Include `aria-label` or sr-only text
|
|
- **Album art (if added):** Descriptive alt text
|
|
|
|
### Motion & Animation
|
|
- **Respect `prefers-reduced-motion`:**
|
|
```css
|
|
@media (prefers-reduced-motion: reduce) {
|
|
* {
|
|
animation-duration: 0.01ms !important;
|
|
transition-duration: 0.01ms !important;
|
|
}
|
|
}
|
|
```
|
|
|
|
### Performance
|
|
- **Font loading:** Use `font-display: swap` to prevent invisible text
|
|
- **Images (if added):** Lazy load, provide width/height to prevent layout shift
|
|
- **Animations:** Use `transform` and `opacity` for GPU acceleration
|
|
|
|
---
|
|
|
|
## Mobile-Specific Considerations
|
|
|
|
### Touch Targets
|
|
- **Minimum size:** 44x44px (48x48px recommended)
|
|
- **Spacing between targets:** At least 8px
|
|
|
|
### Viewport
|
|
```html
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
```
|
|
|
|
### Horizontal Scrolling
|
|
- **Never require horizontal scroll**
|
|
- **Text:** Must wrap naturally
|
|
- **Buttons:** Stack vertically if needed
|
|
|
|
### Performance
|
|
- **Keep total page weight under 500KB** (before images)
|
|
- **Critical CSS:** Inline above-the-fold styles
|
|
- **Lazy load:** Below-the-fold content
|
|
|
|
---
|
|
|
|
## Implementation Notes
|
|
|
|
### CSS Variables (Recommended)
|
|
```css
|
|
:root {
|
|
--color-bg: #FFF8F0;
|
|
--color-text: #2A2420;
|
|
--color-text-secondary: rgba(42, 36, 32, 0.65);
|
|
--color-accent: #E85D75;
|
|
--color-accent-hover: #D94460;
|
|
|
|
--spacing-xs: 8px;
|
|
--spacing-sm: 16px;
|
|
--spacing-md: 24px;
|
|
--spacing-lg: 40px;
|
|
--spacing-xl: 60px;
|
|
--spacing-xxl: 80px;
|
|
|
|
--radius-sm: 8px;
|
|
--radius-md: 12px;
|
|
--radius-lg: 24px;
|
|
|
|
--font-size-xs: 14px;
|
|
--font-size-sm: 16px;
|
|
--font-size-md: 18px;
|
|
--font-size-lg: 24px;
|
|
--font-size-xl: 36px;
|
|
--font-size-xxl: 72px;
|
|
}
|
|
```
|
|
|
|
### Animation Timing
|
|
- **Micro-interactions (hover, focus):** 150-250ms
|
|
- **Page transitions:** 400-600ms
|
|
- **Ease function:** `cubic-bezier(0.4, 0.0, 0.2, 1)` for smoothness
|
|
|
|
---
|
|
|
|
## Final Touch: Personality
|
|
|
|
This isn't just a website—it's a feeling. Every interaction should whisper, not shout. Think:
|
|
- **Gentle hover states** (not aggressive)
|
|
- **Breathing room** (generous whitespace)
|
|
- **Organic shapes** (rounded corners, soft shadows)
|
|
- **Warm tones** (no harsh blues or grays)
|
|
- **Handcrafted vibe** (imperfect is perfect)
|
|
|
|
The goal: visitors should want to *stay*, not just *visit*.
|