1package styles
2
3import (
4 "charm.land/lipgloss/v2"
5 "github.com/charmbracelet/x/exp/charmtone"
6)
7
8func NewLightTheme() *Theme {
9 t := &Theme{
10 Name: "light",
11 IsDark: false,
12
13 Primary: charmtone.Charple,
14 Secondary: charmtone.Dolly,
15 Tertiary: charmtone.Bok,
16 Accent: charmtone.Zest,
17
18 // Backgrounds (improved for accessibility)
19 BgBase: charmtone.Salt, // #F1EFEF - very light background
20 BgBaseLighter: lipgloss.Color("#FFFFFF"), // Pure white for areas needing more contrast
21 BgSubtle: charmtone.Ash, // #DFDBDD - light gray for subtle areas
22 BgOverlay: charmtone.Oyster, // #605F6B - darker overlay, better contrast
23
24 // Foregrounds (darker for better accessibility on light backgrounds)
25 FgBase: charmtone.Pepper, // #201F26 - darkest, good contrast
26 FgMuted: charmtone.Charcoal, // #3A3943 - still quite dark
27 FgHalfMuted: charmtone.Iron, // #4D4C57 - medium dark
28 FgSubtle: charmtone.Oyster, // #605F6B - much better than Squid
29 FgSelected: charmtone.Pepper, // #201F26 - same as base for consistency
30
31 // Borders (improved contrast)
32 Border: charmtone.Oyster, // #605F6B - better contrast than previous
33 BorderFocus: charmtone.Charple, // #6B50FF - same purple for focus
34
35 // Status (same as dark, these work on both)
36 Success: charmtone.Turtle,
37 Error: charmtone.Cherry,
38 Warning: charmtone.Zest,
39 Info: charmtone.Sapphire,
40
41 // Colors
42 White: charmtone.Salt,
43
44 BlueLight: charmtone.Malibu,
45 BlueDark: charmtone.Sapphire,
46 Blue: charmtone.Guppy,
47
48 Yellow: charmtone.Mustard,
49 Citron: charmtone.Citron,
50
51 Green: charmtone.Turtle,
52 GreenDark: charmtone.Guac,
53 GreenLight: charmtone.Bok,
54
55 Red: charmtone.Coral,
56 RedDark: charmtone.Cherry,
57 RedLight: charmtone.Salmon,
58 Cherry: charmtone.Cherry,
59
60 // Markdown colors (light theme - accessible on Salt background).
61 MdText: charmtone.Pepper, // 14.26:1 contrast
62 MdHeading: lipgloss.Color("#0066CC"), // Dark blue, 4.86:1
63 MdH6: lipgloss.Color("#006644"), // Forest green, 6.14:1
64 MdHRule: charmtone.Oyster, // 5.48:1
65 MdLink: lipgloss.Color("#007777"), // Dark teal, 4.69:1
66 MdLinkText: lipgloss.Color("#006644"), // Forest green, 6.14:1
67 MdImage: lipgloss.Color("#CC2255"), // Dark red, 4.67:1
68 MdImageText: charmtone.Iron, // 7.37:1
69 MdCodeFg: charmtone.Charcoal, // 9.93:1 on Ash
70 MdCodeBg: charmtone.Ash, // Light gray background
71 MdCodeBlockFg: charmtone.Pepper, // Dark text
72 MdCodeBlockBg: charmtone.Ash, // Light gray background
73 MdComment: charmtone.Oyster, // 5.48:1
74 MdKeyword: lipgloss.Color("#0066CC"), // Dark blue, 4.86:1
75 MdKeywordAlt: lipgloss.Color("#5533CC"), // Dark purple, 6.71:1
76 MdKeywordType: charmtone.Sapphire, // 4.98:1
77 MdOperator: lipgloss.Color("#CC2255"), // Dark red, 4.67:1
78 MdPunctuation: charmtone.Charcoal, // 9.93:1 (can't use bright yellow)
79 MdName: charmtone.Charcoal, // 9.93:1
80 MdNameBuiltin: lipgloss.Color("#CC2255"), // Dark red, 4.67:1
81 MdNameTag: lipgloss.Color("#8B008B"), // Dark magenta, 7.42:1
82 MdNameAttr: lipgloss.Color("#4B0082"), // Indigo, 11.31:1
83 MdNameClass: charmtone.Pepper, // Darkest, bold
84 MdNameDecorator: lipgloss.Color("#B7410E"), // Rust, 4.86:1
85 MdNameFunc: lipgloss.Color("#006644"), // Forest green, 6.14:1
86 MdNumber: lipgloss.Color("#800080"), // Purple, 8.22:1
87 MdString: lipgloss.Color("#8B4513"), // Saddle brown, 6.20:1
88 MdStringEscape: lipgloss.Color("#006644"), // Forest green, 6.14:1
89 MdDeleted: lipgloss.Color("#CC2255"), // Dark red, 4.67:1
90 MdInserted: lipgloss.Color("#006644"), // Forest green, 6.14:1
91 MdSubheading: charmtone.Iron, // 7.37:1
92 MdError: charmtone.Pepper, // Dark text
93 MdErrorBg: lipgloss.Color("#FFCCCC"), // Light red background
94
95 // Diff colors (light theme - light backgrounds with dark text).
96 DiffInsertFg: lipgloss.Color("#006644"), // Dark green text
97 DiffInsertBg: lipgloss.Color("#D4EDDA"), // Light green bg
98 DiffInsertSymBg: lipgloss.Color("#C3E6CB"), // Slightly darker green
99 DiffInsertCodeBg: lipgloss.Color("#D4EDDA"), // Light green bg
100 DiffDeleteFg: lipgloss.Color("#CC2255"), // Dark red text
101 DiffDeleteBg: lipgloss.Color("#F8D7DA"), // Light red bg
102 DiffDeleteSymBg: lipgloss.Color("#F5C6CB"), // Slightly darker red
103 DiffDeleteCodeBg: lipgloss.Color("#F8D7DA"), // Light red bg
104 }
105
106 // Text selection.
107 t.TextSelection = lipgloss.NewStyle().Foreground(charmtone.Salt).Background(charmtone.Charple)
108
109 // LSP and MCP status (improved accessibility).
110 t.ItemOfflineIcon = lipgloss.NewStyle().Foreground(charmtone.Oyster).SetString("●")
111 t.ItemBusyIcon = t.ItemOfflineIcon.Foreground(charmtone.Citron)
112 t.ItemErrorIcon = t.ItemOfflineIcon.Foreground(charmtone.Cherry)
113 t.ItemOnlineIcon = t.ItemOfflineIcon.Foreground(charmtone.Turtle)
114
115 t.YoloIconFocused = lipgloss.NewStyle().Foreground(charmtone.Pepper).Background(charmtone.Citron).Bold(true).SetString(" ! ")
116 t.YoloIconBlurred = t.YoloIconFocused.Foreground(charmtone.Salt).Background(charmtone.Iron)
117 t.YoloDotsFocused = lipgloss.NewStyle().Foreground(charmtone.Zest).SetString(":::")
118 t.YoloDotsBlurred = t.YoloDotsFocused.Foreground(charmtone.Oyster)
119
120 return t
121}