light.go

  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}