--- 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.