Files
mal/DESIGN.md

155 lines
6.2 KiB
Markdown

---
name: MAL
description: Personal anime streaming & watchlist service
colors:
background: "#080808"
background-sidebar: "#0f0f0f"
background-header: "#141414"
background-surface: "#202020"
background-button: "#1a1a1a"
background-button-hover: "#252525"
foreground-muted: "#6a6b70"
foreground: "#f8f9fa"
accent: "#9f7aea"
danger: "#dc2626"
typography:
body:
fontFamily: "'DM Sans', 'Segoe UI', system-ui, sans-serif"
fontSize: "14px"
fontWeight: 400
lineHeight: 1.5
rounded:
default: "6px"
spacing:
sm: "0.25rem"
md: "0.5rem"
lg: "1rem"
xl: "1.5rem"
2xl: "2rem"
components:
button-primary:
backgroundColor: "{colors.accent}"
textColor: "#080808"
padding: "8px 16px"
button-secondary:
backgroundColor: "{colors.background-button}"
textColor: "{colors.foreground}"
padding: "8px 16px"
button-secondary-hover:
backgroundColor: "{colors.background-button-hover}"
---
# Design System: MAL
## 1. Overview
**Creative North Star: "The Personal Theater"**
A dark, intimate interface for watching anime. Built for long viewing sessions in low-light environments—think late-night streaming on a personal server. The aesthetic rejects the loud, gamified look of mainstream anime trackers. No flashy animations, no glassmorphism, no gradient text. Just content and controls.
**Key Characteristics:**
- Dark by default; light mode exists but is secondary
- Minimal chrome; the anime artwork carries the visual weight
- Purple accent used sparingly (<10% of any screen)
- No rounded corners; sharp edges throughout
- System fonts (DM Sans) for reliability across devices
## 2. Colors
The palette is intentionally restrained. Dark surfaces dominate to reduce eye strain during long sessions.
### Primary
- **Accent Purple** (`#9f7aea`): Navigation highlights, active states, primary actions. Used on active sidebar items, hover states on important buttons, current episode indicators.
### Neutral
- **Background** (`#080808`): Main page background. Deep black with a hint of warmth.
- **Background Sidebar** (`#0f0f0f`): Slightly elevated surface for navigation panel.
- **Background Header** (`#141414`): Sticky header surface, slightly brighter than page.
- **Background Surface** (`#202020`): Cards, dropdowns, search inputs.
- **Background Button** (`#1a1a1a`): Default button state, form fields.
- **Background Button Hover** (`#252525`): Button hover state.
- **Foreground Muted** (`#6a6b70`): Secondary text, icons, placeholders.
- **Foreground** (`#f8f9fa`): Primary text, headings.
### Named Rules
**The One Accent Rule.** Purple appears on ≤10% of any given screen. Its rarity is the point. Navigation highlights use a subtle left border; primary buttons use the accent background.
## 3. Typography
**Body Font:** DM Sans (with Segoe UI, system-ui fallbacks)
**Character:** Clean, legible, unremarkable. The typeface should be invisible—content first.
### Hierarchy
- **Title** (`600`, `20px`): Page headings.
- **Body** (`400`, `14px`): Standard text, descriptions.
- **Label** (`500`, `14px`, `0.025em`): Navigation items, buttons, form labels.
- **Small** (`400`, `12px`): Metadata, episode numbers, timestamps.
### Named Rules
**The Weight Contrast Rule.** Headings use `font-semibold` (600), body uses `font-normal` (400). Avoid flat weight hierarchies.
## 4. Elevation
**Flat by default.** No shadows at rest. Depth is conveyed through tonal layering—different background colors rather than shadow layers.
- **Hover state:** Background shifts from `#1a1a1a` to `#252525`.
- **Active states:** Subtle accent tint (`bg-accent/20`) or accent left border.
- **No shadows.** The interface is intentionally flat.
### Shadow Vocabulary
None used. If shadows are needed for overlays (modals, dropdowns), use `box-shadow: 0 8px 24px rgba(0,0,0,0.4)`.
## 5. Components
### Buttons
- **Shape:** No rounded corners (sharp edges).
- **Primary:** Purple background (`bg-accent`), dark text. Used for the most important action on each screen.
- **Secondary:** Dark background (`bg-white/5`), light text. Used for prev/next episode, filters.
- **Hover:** Background shifts lighter (`bg-white/10`). Transition duration 200ms.
### Cards / Anime Grid
- **Corner Style:** No radius. Square corners.
- **Background:** None at rest. Dark image placeholder (`bg-white/5`) behind anime poster.
- **Hover:** Overlay appears (`bg-black/80`) revealing title, synopsis, and watchlist button.
- **Internal Padding:** 12px (main content), 8px (card hover overlay).
### Navigation (Sidebar)
- **Style:** Fixed width (256px), collapsible to icons only.
- **Default:** Text in `foreground-muted` (`#6a6b70`), no background.
- **Hover:** `bg-white/5`.
- **Active:** Left accent border (`w-0.5 bg-accent`), accent text color. Subtle glow (`shadow-[0_0_8px_rgba(159,122,234,0.6)]`).
### Dropdowns
- **Background:** `#1a1a1a` with shadow.
- **No radius.** Sharp corners.
- **Items:** 12px vertical padding, hover `bg-white/10`.
### Input Fields
- **Style:** `bg-white/5`, `border-transparent`, 8px vertical padding.
- **Focus:** Border shifts to accent color (`focus:border-accent`).
### Toast Notifications
- **Style:** Monochromatic, no color coding by type.
- **Background:** `bg-white/10` with `border-white/20`.
- **No rounded corners.**
## 6. Do's and Don'ts
### Do:
- **Do** use accent purple for primary actions and active states only.
- **Do** keep interfaces dark by default—lighter backgrounds are for special emphasis only.
- **Do** use weight contrast (semibold headings, normal body) for hierarchy.
- **Do** reveal detail on hover (anime cards, navigation).
- **Do** include back buttons on detail pages.
### Don't:
- **Don't** use rounded corners anywhere.
- **Don't** use color to differentiate toast types—all toasts look the same.
- **Don't** use gradient text.
- **Don't** use glassmorphism (blur backgrounds, transparency effects).
- **Don't** use hero metric layouts (big number + small label).
- **Don't** use identical card grids with no visual variation.
- **Don't** use modals as a first thought—inline and progressive disclosure preferred.
- **Don't** use side-stripe borders (colored left/right borders on cards).
- **Don't** use the green accent—violet is the one and only accent.