# Themes — Preset Theme Configuration Each theme = a set of colors + a set of fonts + mood tags. Once a theme is selected, all colors are automatically derived according to the color scale rules in `design-system.md`. --- ## Theme Selection Rules 1. AI selects the theme based on scene classification and content tone 2. Each PPT deck uses only one theme, **no switching throughout** 3. If the user specifies a color or style preference, select the closest theme or customize accordingly (still must follow color scale rules) --- ## Preset Themes ### 1. Ocean (Deep Sea Blue) | Property | Value | |------|-----| | **Mood** | Professional, trustworthy | | **Suitable for** | Work reports, business proposals, company introductions | | **Primary** | `#1B2A4A` | | **Accent (A — default)** | `#2A9D8F` (teal) | | **Accent B** | `#D7A460` (warm gold) | | **Accent C** | `#6C92E0` (bright blue) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Gill Sans MT Bold | | **Latin Body Font** | Gill Sans MT | | **Image Keywords** | ocean, deep blue, corporate, skyline, technology, water, aerial city | | **Mask Color** | `rgba(18,32,64,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | Usage Example | |------|------|---------| | primary-100 | `#0D1525` | Dark mode background | | primary-90 | `#122040` | Title bar background | | primary-80 | `#1B2A4A` | Title text | | primary-60 | `#3D5A80` | Subtitle / icons | | primary-40 | `#6B8AB0` | Secondary text | | primary-20 | `#B0C4DE` | Light decoration | | primary-10 | `#DFE8F2` | Card background / border | | primary-5 | `#F0F4F8` | Surface base color | --- ### 2. Graphite (Graphite Gray) | Property | Value | |------|-----| | **Mood** | Modern, restrained, clean and sharp | | **Suitable for** | Tech products, weekly/monthly reports, technical sharing | | **Primary** | `#2D3436` | | **Accent (A — default)** | `#D77860` (coral red) | | **Accent B** | `#6BCB77` (emerald green) | | **Accent C** | `#9B8EC4` (light purple) | | **CJK Title Font** | SimHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Century Gothic Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | architecture, minimal, concrete, technology, geometric, monochrome, server room | | **Mask Color** | `rgba(34,40,41,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | |------|------| | primary-100 | `#161A1B` | | primary-90 | `#222829` | | primary-80 | `#2D3436` | | primary-60 | `#576163` | | primary-40 | `#8D9496` | | primary-20 | `#C3C8CA` | | primary-10 | `#E4E7E8` | | primary-5 | `#F3F4F5` | --- ### 3. Forest (Forest Green) | Property | Value | |------|-----| | **Mood** | Natural, serene, organic and gentle | | **Suitable for** | Educational courseware, humanities/liberal arts academic, ESG/sustainability | | **Primary** | `#1B4332` | | **Accent (A — default)** | `#DCBD74` (golden) | | **Accent B** | `#E18C70` (coral) | | **Accent C** | `#7EC8B0` (mint) | | **CJK Title Font** | SimSun Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Palatino Linotype Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | forest, nature, leaves, green, organic, sustainability, botanical, meadow | | **Mask Color** | `rgba(18,45,31,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | |------|------| | primary-100 | `#0B1E14` | | primary-90 | `#122D1F` | | primary-80 | `#1B4332` | | primary-60 | `#2E6B4F` | | primary-40 | `#60A882` | | primary-20 | `#A8D4BC` | | primary-10 | `#D8EEE2` | | primary-5 | `#EEF7F1` | --- ### 4. Twilight (Dark Night Purple) | Property | Value | |------|-----| | **Mood** | Creative, unique, personality-driven | | **Suitable for** | Creative proposals, brand planning, design sharing | | **Primary** | `#2D2B55` | | **Accent (A — default)** | `#9B50F5` (electric purple) | | **Accent B** | `#E3B27D` (warm orange) | | **Accent C** | `#5EC4D4` (sky blue) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Candara Bold | | **Latin Body Font** | Candara | | **Image Keywords** | galaxy, night sky, aurora, creative, neon, abstract art, purple gradient | | **Mask Color** | `rgba(33,31,64,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | |------|------| | primary-100 | `#15142A` | | primary-90 | `#211F40` | | primary-80 | `#2D2B55` | | primary-60 | `#555380` | | primary-40 | `#8886AB` | | primary-20 | `#BFBED6` | | primary-10 | `#E2E1ED` | | primary-5 | `#F2F2F7` | --- ### 5. Sandstone (Warm Sand) | Property | Value | |------|-----| | **Mood** | Premium, warm, composed and grand | | **Suitable for** | Investment roadshows, real estate, luxury goods, finance | | **Primary** | `#3C2415` | | **Accent (A — default)** | `#C09E30` (gold) | | **Accent B** | `#D4766A` (ochre red) | | **Accent C** | `#8BB174` (olive) | | **CJK Title Font** | SimSun Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Palatino Linotype Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | luxury, gold, marble, architecture, warm light, classical, elegant interior | | **Mask Color** | `rgba(45,27,16,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | |------|------| | primary-100 | `#1E120A` | | primary-90 | `#2D1B10` | | primary-80 | `#3C2415` | | primary-60 | `#6B5443` | | primary-40 | `#9E8A7A` | | primary-20 | `#CEBFB5` | | primary-10 | `#E9E2DC` | | primary-5 | `#F5F2F0` | --- ### 6. Mono (Minimalist Black) | Property | Value | |------|-----| | **Mood** | Sharp, minimalist, visual impact | | **Suitable for** | Product launches, minimalist style, photography showcases | | **Primary** | `#1A1A1A` | | **Accent (A — default)** | `#E6754C` (burnt orange) | | **Accent B** | `#4ECDC4` (cyan) | | **Accent C** | `#C44569` (rose) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Arial Bold | | **Latin Body Font** | Arial | | **Image Keywords** | minimal, black white, contrast, product, clean, abstract, studio lighting | | **Mask Color** | `rgba(20,20,20,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | |------|------| | primary-100 | `#0A0A0A` | | primary-90 | `#141414` | | primary-80 | `#1A1A1A` | | primary-60 | `#4A4A4A` | | primary-40 | `#808080` | | primary-20 | `#B8B8B8` | | primary-10 | `#E0E0E0` | | primary-5 | `#F2F2F2` | --- ### 7. Deep Mineral (Dark Night Blue) | Property | Value | |------|-----| | **Mood** | High-end, immersive, cinematic depth | | **Suitable for** | Tech launches, keynotes, data dashboards, night-mode presentations | | **Primary** | `#FFFFFF` | | **Accent (A — default)** | `#44D1E4` (electric cyan) | | **Accent B** | `#EDCD82` (warm yellow) | | **Accent C** | `#E65174` (rose) | | **Background Override** | `#162235` (replaces default `#FFFFFF`) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Trebuchet MS Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | dark blue, night city, deep ocean, space, data visualization, neon glow | | **Mask Color** | `rgba(16,26,40,0.70)` (primary-100 based) | **Dark theme notes**: This is a dark-background theme — the color logic is inverted: - `background` = `#162235` (dark), `surface` = `#1E2D45` (slightly lighter), `surface-card` = `#243550` (card layer) - `text-primary` = `#FFFFFF`, `text-secondary` = `rgba(255,255,255,0.75)`, `text-muted` = `rgba(255,255,255,0.45)` - Cards use `surface-card` with no shadow (shadows invisible on dark backgrounds) - Accent (`#44D1E4`) is used for highlights, KPI numbers, accent bars, and emphasis elements Color Scale (inverted — lighter values are "darker" in visual weight): | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#0D1525` | Deepest background | | primary-90 | `#122040` | Title bar background | | primary-80 | `#FFFFFF` | Title text / primary elements | | primary-60 | `rgba(255,255,255,0.75)` | Subtitle / secondary text | | primary-40 | `rgba(255,255,255,0.45)` | Muted text / annotations | | primary-20 | `#2A3F5F` | Card borders / subtle decorations | | primary-10 | `#1E2D45` | Surface / content area base | | primary-5 | `#162235` | Page background | --- ### 8. Warm Retro (Vintage Warmth) | Property | Value | |------|-----| | **Mood** | Vintage, cultured, warm and grounded | | **Suitable for** | Cultural events, humanities, food/lifestyle, brand storytelling | | **Primary** | `#2A4A3A` | | **Accent (A — default)** | `#C89F62` (antique gold) | | **Accent B** | `#C06C58` (copper red) | | **Accent C** | `#7BA68C` (moss green) | | **Background Override** | `#F4F1E9` (warm off-white, replaces default `#FFFFFF`) | | **CJK Title Font** | SimSun Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Palatino Linotype Bold | | **Latin Body Font** | Garamond | | **Image Keywords** | vintage, warm light, craft, leather, coffee, botanical, old book, linen texture | | **Mask Color** | `rgba(30,40,34,0.75)` (primary-90 based) | **Warm background notes**: This theme uses a warm off-white (`#F4F1E9`) instead of pure white: - `background` = `#F4F1E9`, `surface` = `#EDE9DF` (slightly darker warm), `surface-card` = `#FEFDFB` (near-white card) - The warm base gives a cozy, analog feel — avoid pure white elements that would look jarring Color Scale: | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#0F1C15` | Darkest (rarely used) | | primary-90 | `#1E2822` | Title bar background | | primary-80 | `#2A4A3A` | Title text / primary elements | | primary-60 | `#4A7A62` | Subtitle / icons | | primary-40 | `#7AAA90` | Secondary text | | primary-20 | `#B5D4C2` | Light decoration | | primary-10 | `#DCE9E0` | Card background / border | | primary-5 | `#F0F5F1` | Surface base (use `#EDE9DF` for warm surface) | --- ### 9. Deep Forest (Dark Green) | Property | Value | |------|-----| | **Mood** | Calm, grounded, nature-tech fusion | | **Suitable for** | ESG reports, sustainability, ecology, green tech | | **Primary** | `#FFFFFF` | | **Accent (A — default)** | `#D7D968` (electric lime) | | **Accent B** | `#E18C70` (coral orange) | | **Accent C** | `#85C5E0` (sky blue) | | **Background Override** | `#193328` (deep forest green, replaces default `#FFFFFF`) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Gill Sans MT Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | dark forest, moss, fern, green nature, sustainability, eco technology, rain forest | | **Mask Color** | `rgba(18,38,30,0.70)` (primary-100 based) | **Dark theme notes**: Same inverted logic as Deep Mineral — see its notes above. - `background` = `#193328`, `surface` = `#1F3F32`, `surface-card` = `#264A3C` - `text-primary` = `#FFFFFF`, `text-secondary` = `rgba(255,255,255,0.75)`, `text-muted` = `rgba(255,255,255,0.45)` Color Scale (inverted): | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#0D1A14` | Deepest background | | primary-90 | `#12261E` | Title bar background | | primary-80 | `#FFFFFF` | Title text / primary elements | | primary-60 | `rgba(255,255,255,0.75)` | Subtitle / secondary text | | primary-40 | `rgba(255,255,255,0.45)` | Muted text / annotations | | primary-20 | `#2A5040` | Card borders / subtle decorations | | primary-10 | `#1F3F32` | Surface / content area base | | primary-5 | `#193328` | Page background | --- ### 10. Coral (Coral Pink) | Property | Value | |------|-----| | **Mood** | Warm, vibrant, youthful | | **Suitable for** | Brand marketing, consumer products, lifestyle, female-audience presentations | | **Primary** | `#8B3A4A` | | **Accent (A — default)** | `#E2A574` (warm peach) | | **Accent B** | `#DC755B` (burnt sienna) | | **Accent C** | `#6BC5B8` (mint contrast) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Candara Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | pink, flowers, beauty, lifestyle, warm light, cafe, fashion, soft texture | | **Mask Color** | `rgba(100,42,54,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#3D1A22` | Deepest background | | primary-90 | `#642A36` | Title bar background | | primary-80 | `#8B3A4A` | Title text / primary elements | | primary-60 | `#B06070` | Subtitle / icons | | primary-40 | `#D08A96` | Secondary text | | primary-20 | `#E8BAC2` | Light decoration | | primary-10 | `#F3DDE1` | Card background / border | | primary-5 | `#FAF0F2` | Surface base color | --- ### 11. Mint (Mint Green) | Property | Value | |------|-----| | **Mood** | Fresh, clean, health-oriented | | **Suitable for** | Healthcare, wellness, eco-friendly, food & beverage | | **Primary** | `#1A6B5A` | | **Accent (A — default)** | `#E3987D` (warm coral) | | **Accent B** | `#DEC363` (golden yellow) | | **Accent C** | `#8574E2` (medium slate blue) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Gill Sans MT Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | mint, fresh, health, botanical, clean, green smoothie, spa, herbal | | **Mask Color** | `rgba(18,78,64,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#0A3028` | Deepest background | | primary-90 | `#124E40` | Title bar background | | primary-80 | `#1A6B5A` | Title text / primary elements | | primary-60 | `#3D9B86` | Subtitle / icons | | primary-40 | `#6DBFAB` | Secondary text | | primary-20 | `#A8DACE` | Light decoration | | primary-10 | `#D6EDE7` | Card background / border | | primary-5 | `#EFF8F5` | Surface base color | --- ### 12. Azure (Sky Blue) | Property | Value | |------|-----| | **Mood** | Open, lightweight, approachable technology | | **Suitable for** | SaaS products, AI/tech, onboarding, training materials | | **Primary** | `#1E5F8C` | | **Accent (A — default)** | `#FF6B2B` (electric orange) | | **Accent B** | `#DD5F5F` (red) | | **Accent C** | `#9270E1` (violet) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Trebuchet MS Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | sky, cloud, technology, light blue, software, digital, clean interface | | **Mask Color** | `rgba(20,68,104,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#0C2A40` | Deepest background | | primary-90 | `#144468` | Title bar background | | primary-80 | `#1E5F8C` | Title text / primary elements | | primary-60 | `#4085B0` | Subtitle / icons | | primary-40 | `#70AAD0` | Secondary text | | primary-20 | `#A8CEE5` | Light decoration | | primary-10 | `#D8E9F3` | Card background / border | | primary-5 | `#F0F6FA` | Surface base color | --- ### 13. Ember (Amber Red) | Property | Value | |------|-----| | **Mood** | Bold, energetic, high-impact | | **Suitable for** | Annual events, product launches, sales campaigns, motivational presentations | | **Primary** | `#8B2500` | | **Accent (A — default)** | `#F04828` (fire orange) | | **Accent B** | `#2EC4B6` (teal contrast) | | **Accent C** | `#EC7979` (coral red) | | **CJK Title Font** | SimHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Arial Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | fire, red, energy, stage light, celebration, bold, dynamic, explosion | | **Mask Color** | `rgba(100,26,0,0.75)` (primary-90 based) | Color Scale: | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#3E1000` | Deepest background | | primary-90 | `#641A00` | Title bar background | | primary-80 | `#8B2500` | Title text / primary elements | | primary-60 | `#B85030` | Subtitle / icons | | primary-40 | `#D88060` | Secondary text | | primary-20 | `#EBB8A0` | Light decoration | | primary-10 | `#F5DCD0` | Card background / border | | primary-5 | `#FBF0EB` | Surface base color | --- ### 14. Volt (Electric / Startup Dark) | Property | Value | |------|-----| | **Mood** | Electric, aggressive, high-energy | | **Suitable for** | AI/tech product launches, startup pitches, youth tech brands, digital innovation | | **Primary** | `#FFFFFF` | | **Accent (A — default)** | `#00F5A0` (electric mint-green) | | **Accent B** | `#FF5E3A` (electric orange) | | **Accent C** | `#A855F7` (electric purple) | | **Background Override** | `#080B14` (near-black with blue tint, replaces default `#FFFFFF`) | | **CJK Title Font** | Microsoft YaHei Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Trebuchet MS Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | neon, circuit board, futuristic, dark ui, electric glow, startup, code, data stream | | **Mask Color** | `rgba(5,7,16,0.70)` (primary-100 based) | **Dark theme notes**: Same inverted logic as Deep Mineral — see its notes above. - `background` = `#080B14`, `surface` = `#0F1424`, `surface-card` = `#162033` - `text-primary` = `#FFFFFF`, `text-secondary` = `rgba(255,255,255,0.75)`, `text-muted` = `rgba(255,255,255,0.45)` - Accents are extremely vivid by design — use sparingly (bars, numbers, key labels only) Color Scale (inverted): | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#050710` | Deepest background | | primary-90 | `#0D1320` | Title bar background | | primary-80 | `#FFFFFF` | Title text / primary elements | | primary-60 | `rgba(255,255,255,0.75)` | Subtitle / secondary text | | primary-40 | `rgba(255,255,255,0.45)` | Muted text / annotations | | primary-20 | `#1E2E48` | Card borders / subtle decorations | | primary-10 | `#0F1424` | Surface / content area base | | primary-5 | `#080B14` | Page background | --- ### 15. Vermillion (Chinese Red) | Property | Value | |------|-----| | **Mood** | Ceremonial, festive, culturally resonant | | **Suitable for** | Chinese cultural events, Spring Festival, traditional ceremonies, brand storytelling with Chinese aesthetics | | **Primary** | `#8B1A1A` | | **Accent (A — default)** | `#D4AF37` (Chinese gold) | | **Accent B** | `#C4762A` (copper bronze) | | **Accent C** | `#2D6B8A` (cool blue contrast) | | **Background Override** | `#FDF8F2` (warm rice-paper white, replaces default `#FFFFFF`) | | **CJK Title Font** | SimSun Bold | | **CJK Body Font** | Microsoft YaHei | | **Latin Title Font** | Palatino Linotype Bold | | **Latin Body Font** | Corbel | | **Image Keywords** | red lantern, Chinese architecture, traditional culture, festival, gold ornament, calligraphy, temple, Spring Festival | | **Mask Color** | `rgba(107,20,20,0.75)` (primary-90 based) | **Warm background notes**: Uses warm rice-paper white `#FDF8F2` instead of pure white: - `background` = `#FDF8F2`, `surface` = `#F5EDE0` (warm tint), `surface-card` = `#FEFDFB` (near-white card) - Avoid pure white elements that would look jarring against the warm base Color Scale: | Scale | Color Value | Usage | |------|------|---------| | primary-100 | `#450D0D` | Deepest background / dramatic pages | | primary-90 | `#6B1414` | Title bar background | | primary-80 | `#8B1A1A` | Title text / primary elements | | primary-60 | `#B84040` | Subtitle / icons | | primary-40 | `#D57070` | Secondary text | | primary-20 | `#EDB0B0` | Light decoration | | primary-10 | `#F8E0E0` | Card background / border | | primary-5 | `#FDF4F4` | Surface base color | --- ## Custom Themes If the user specifies a particular color, create a custom theme following these steps: 1. Use the user-specified color as `primary-80` 2. Derive the full 8-level color scale according to the color scale generation rules in section 3.1 of `design-system.md` 3. Select an Accent color with a hue difference of ≥ 30° from the Primary (to ensure visual distinction). Recommended range: 60°–180°. Provide 3 accent variants (A/B/C) for variety. 4. Choose the most suitable font pairing from the presets, or use the user-specified fonts 5. Record the complete configuration in comments within the generated code to ensure consistency across the entire PPT deck ## Font Pairing Notes Each theme has **4 font roles**: | Role | HTML font-family Syntax | Usage | |------|----------------------|------| | CJK Title | Write PPT font name directly: `font-family:'SimHei','Microsoft YaHei',sans-serif` | h1, h2, cover title | | CJK Body | Write PPT font name directly: `font-family:'Microsoft YaHei',sans-serif` | body, lists, annotations | | Latin Title | Write PPT font name directly: `font-family:'Century Gothic','Corbel',sans-serif` | Pure Latin character titles | | Latin Body | Write PPT font name directly: `font-family:'Corbel',sans-serif` | Pure Latin character body text | **v3 Smart Font Mapping**: html2pptx.js automatically handles fonts: - **PPT-safe fonts** (SimHei, Corbel, Palatino Linotype, etc. 40+) → Passed through directly, preserved as-is - **macOS-exclusive fonts** (PingFang, Hiragino) → Automatically mapped to cross-platform equivalent fonts - **Web fonts** (Roboto, Montserrat, Inter, etc.) → Automatically mapped to the visually closest PPT-safe font - **fontConfig still available**: Serves as the final fallback default for CJK/Latin **fontConfig can be passed when calling html2pptx()** (optional, used to override default fallback): ```javascript const fontConfig = { cjk: 'SimHei', latin: 'Corbel' }; ``` **Recommended practice**: Write the target PPT font name directly in HTML; do not rely on fontConfig for switching. **PPT-safe Chinese fonts**: Microsoft YaHei / SimHei / SimSun / KaiTi / FangSong / DengXian **PPT-safe English fonts**: Corbel / Arial / Times New Roman / Palatino Linotype / Gill Sans MT / Century Gothic / Garamond / Rockwell / Candara / Constantia / Cambria / Trebuchet MS --- ## Dark Mode Semantic Color Mapping For themes that need a full dark-mode deck (not just individual dark slides), use these semantic overrides: | Semantic Token | Light Mode Value | Dark Mode Value | |---------------|-----------------|-----------------| | `background` | `#FFFFFF` | `primary-100` | | `surface` | `primary-5` | `primary-90` | | `surface-card` | `#FFFFFF` | `primary-80` | | `text-primary` | `primary-80` | `#FFFFFF` | | `text-secondary` | `primary-60` | `rgba(255,255,255,0.75)` | | `text-muted` | `primary-40` | `rgba(255,255,255,0.45)` | | `border` | `primary-10` | `primary-60` | | `on-dark` | `#FFFFFF` | `#FFFFFF` (unchanged) | Deep Mineral and Deep Forest themes already use dark mode by default. For any other theme, apply this mapping to create a dark variant. Cards in dark mode use `surface-card` background with **no shadow** (shadows invisible on dark backgrounds). Use subtle `border: 1pt solid primary-60` instead for card definition.