2018-01-07 21:42:19 +01:00
|
|
|
package webcontroller
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2022-01-17 17:40:03 +01:00
|
|
|
"html/template"
|
|
|
|
"math/rand"
|
2018-01-07 21:42:19 +01:00
|
|
|
"net/http"
|
2022-06-07 14:43:01 +02:00
|
|
|
"strconv"
|
2022-01-17 17:40:03 +01:00
|
|
|
"time"
|
2022-06-07 14:43:01 +02:00
|
|
|
|
|
|
|
"github.com/julienschmidt/httprouter"
|
2018-01-07 21:42:19 +01:00
|
|
|
)
|
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
func (wc *WebController) themeHandler(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
|
|
|
w.Header().Set("Content-Type", "text/css")
|
|
|
|
w.Write([]byte(userStyleFromRequest(r)))
|
|
|
|
}
|
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
func userStyleFromRequest(r *http.Request) (s template.CSS) {
|
2021-11-28 15:58:04 +01:00
|
|
|
// Get the chosen style from the URL
|
|
|
|
var style = r.URL.Query().Get("style")
|
2022-06-07 14:43:01 +02:00
|
|
|
var hue = -1
|
|
|
|
|
|
|
|
if hueStr := r.URL.Query().Get("hue"); hueStr != "" {
|
|
|
|
hue, _ = strconv.Atoi(hueStr)
|
|
|
|
}
|
2018-01-07 21:42:19 +01:00
|
|
|
|
2021-11-28 15:58:04 +01:00
|
|
|
// If the URL style was empty use the cookie value
|
|
|
|
if style == "" {
|
|
|
|
if cookie, err := r.Cookie("style"); err == nil {
|
|
|
|
style = cookie.Value
|
2018-07-11 22:46:44 +02:00
|
|
|
}
|
|
|
|
}
|
2022-06-07 14:43:01 +02:00
|
|
|
if hue == -1 {
|
|
|
|
if cookie, err := r.Cookie("hue"); err == nil {
|
|
|
|
hue, _ = strconv.Atoi(cookie.Value)
|
|
|
|
}
|
|
|
|
}
|
2018-01-07 21:42:19 +01:00
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
return userStyle(style, hue)
|
2022-02-07 12:00:22 +01:00
|
|
|
}
|
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
func userStyle(style string, hue int) template.CSS {
|
|
|
|
var (
|
|
|
|
def styleSheet
|
|
|
|
light styleSheet
|
|
|
|
hasLight bool
|
|
|
|
)
|
|
|
|
|
2021-11-28 15:58:04 +01:00
|
|
|
switch style {
|
2022-06-07 14:43:01 +02:00
|
|
|
default:
|
|
|
|
fallthrough
|
2022-04-01 20:27:38 +02:00
|
|
|
case "nord":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = nordDarkStyle
|
|
|
|
light = nordLightStyle
|
|
|
|
hasLight = true
|
2022-04-01 20:27:38 +02:00
|
|
|
case "nord_dark":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = nordDarkStyle
|
2022-04-01 20:27:38 +02:00
|
|
|
case "nord_light", "snowstorm":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = nordLightStyle
|
2022-04-01 20:27:38 +02:00
|
|
|
case "solarized":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = solarizedDarkStyle
|
|
|
|
light = solarizedLightStyle
|
|
|
|
hasLight = true
|
2021-11-28 15:58:04 +01:00
|
|
|
case "solarized_dark":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = solarizedDarkStyle
|
2022-04-01 20:27:38 +02:00
|
|
|
case "solarized_light":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = solarizedLightStyle
|
2022-04-01 20:27:38 +02:00
|
|
|
case "classic":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = classicStyle
|
|
|
|
hue = -1 // Does not support custom hues
|
2022-04-01 20:27:38 +02:00
|
|
|
case "purple_drain":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = purpleDrainStyle
|
|
|
|
hue = -1 // Does not support custom hues
|
2021-11-28 15:58:04 +01:00
|
|
|
case "maroon":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = maroonStyle
|
2021-11-28 15:58:04 +01:00
|
|
|
case "hacker":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = hackerStyle
|
|
|
|
hue = -1 // Does not support custom hues
|
2021-11-28 15:58:04 +01:00
|
|
|
case "canta":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = cantaPixeldrainStyle
|
2022-01-10 21:59:07 +01:00
|
|
|
case "skeuos":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = skeuosPixeldrainStyle
|
2022-03-08 23:34:10 +01:00
|
|
|
case "sweet":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = sweetPixeldrainStyle
|
2022-04-01 20:27:38 +02:00
|
|
|
case "adwaita":
|
2022-06-07 14:43:01 +02:00
|
|
|
def = adwaitaDarkStyle
|
|
|
|
light = adwaitaLightStyle
|
|
|
|
hasLight = true
|
2022-10-11 15:57:23 +02:00
|
|
|
case "adwaita_dark":
|
|
|
|
def = adwaitaDarkStyle
|
|
|
|
case "adwaita_light":
|
|
|
|
def = adwaitaLightStyle
|
2022-06-07 14:43:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if hue >= 0 && hue <= 360 {
|
|
|
|
def = def.withHue(hue)
|
|
|
|
light = light.withHue(hue)
|
|
|
|
}
|
|
|
|
|
|
|
|
if hasLight {
|
|
|
|
return template.CSS(def.withLight(light))
|
|
|
|
} else {
|
|
|
|
return template.CSS(def.String())
|
2021-11-28 15:58:04 +01:00
|
|
|
}
|
2019-12-23 23:56:57 +01:00
|
|
|
}
|
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
type styleSheet struct {
|
2022-06-07 14:43:01 +02:00
|
|
|
Link HSL // Based on Highlight if undefined
|
|
|
|
Input CSS
|
|
|
|
InputHover CSS
|
|
|
|
InputText CSS
|
|
|
|
InputDisabledText CSS
|
|
|
|
HighlightBackground CSS
|
|
|
|
Highlight HSL // Links, highlighted buttons, list navigation
|
|
|
|
HighlightText HSL // Text on buttons
|
|
|
|
Danger HSL
|
2022-12-05 15:01:04 +01:00
|
|
|
ScrollbarForeground CSS // Based on Input if undefined
|
2022-06-07 14:43:01 +02:00
|
|
|
ScrollbarHover CSS // Based on ScrollbarForeground if undefined
|
|
|
|
|
|
|
|
BackgroundColor HSL
|
|
|
|
Background CSS
|
|
|
|
BackgroundText HSL
|
|
|
|
BackgroundPattern CSS
|
|
|
|
Navigation CSS
|
|
|
|
BodyColor HSL
|
|
|
|
BodyBackground CSS
|
|
|
|
BodyText HSL
|
2022-06-21 14:00:03 +02:00
|
|
|
Separator HSL
|
2022-06-07 14:43:01 +02:00
|
|
|
CardColor HSL
|
|
|
|
CardText HSL
|
2022-01-17 17:40:03 +01:00
|
|
|
|
2022-01-25 20:37:21 +01:00
|
|
|
// Colors to use in graphs
|
2022-06-07 14:43:01 +02:00
|
|
|
Chart1 HSL
|
|
|
|
Chart2 HSL
|
|
|
|
Chart3 HSL
|
2022-01-25 20:37:21 +01:00
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
Shadow HSL
|
2019-12-23 23:56:57 +01:00
|
|
|
}
|
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
func (s styleSheet) withDefaults() styleSheet {
|
|
|
|
// Set default colors
|
2022-06-07 14:43:01 +02:00
|
|
|
var noColor = HSL{0, 0, 0}
|
|
|
|
var defaultHSL = func(target *HSL, def HSL) {
|
|
|
|
if *target == noColor {
|
|
|
|
*target = def
|
2022-03-30 19:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
2022-06-07 14:43:01 +02:00
|
|
|
var defaultCSS = func(target *CSS, def CSS) {
|
|
|
|
if *target == nil {
|
|
|
|
*target = def
|
2022-03-30 19:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
defaultHSL(&s.Link, s.Highlight.Add(0, 0, -.05))
|
2022-06-07 14:43:01 +02:00
|
|
|
defaultCSS(&s.ScrollbarForeground, s.Input)
|
2022-12-05 15:01:04 +01:00
|
|
|
defaultCSS(&s.ScrollbarHover, s.InputHover)
|
2022-03-30 19:35:26 +02:00
|
|
|
defaultHSL(&s.Chart1, s.Highlight)
|
|
|
|
defaultHSL(&s.Chart2, s.Chart1.Add(120, 0, 0))
|
|
|
|
defaultHSL(&s.Chart3, s.Chart2.Add(120, 0, 0))
|
2022-06-07 14:43:01 +02:00
|
|
|
defaultCSS(&s.HighlightBackground, s.Highlight)
|
|
|
|
defaultCSS(&s.Background, s.BackgroundColor)
|
|
|
|
defaultCSS(&s.BackgroundPattern, s.BackgroundColor)
|
|
|
|
defaultCSS(&s.Navigation, RawCSS("none"))
|
|
|
|
defaultCSS(&s.BodyBackground, s.BodyColor)
|
2022-03-30 19:35:26 +02:00
|
|
|
defaultHSL(&s.BackgroundText, s.BodyText)
|
2023-01-17 22:53:41 +01:00
|
|
|
defaultHSL(&s.Separator, s.BodyColor.Add(0, 0, .05))
|
2022-03-30 19:35:26 +02:00
|
|
|
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
func (s styleSheet) withHue(hue int) styleSheet {
|
|
|
|
s = s.withDefaults()
|
|
|
|
|
|
|
|
var setHue = func(c CSS) CSS {
|
|
|
|
if hsl, ok := c.(HSL); ok {
|
|
|
|
hsl.Hue = hue
|
|
|
|
return hsl
|
|
|
|
} else {
|
|
|
|
return c
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
s.Input = setHue(s.Input)
|
|
|
|
s.InputHover = setHue(s.InputHover)
|
|
|
|
s.InputText = setHue(s.InputText)
|
|
|
|
s.InputDisabledText = setHue(s.InputDisabledText)
|
|
|
|
s.ScrollbarForeground = setHue(s.ScrollbarForeground)
|
|
|
|
s.ScrollbarHover = setHue(s.ScrollbarHover)
|
|
|
|
s.BackgroundColor.Hue = hue
|
|
|
|
s.Background = setHue(s.Background)
|
|
|
|
s.BackgroundText.Hue = hue
|
|
|
|
s.BackgroundPattern = setHue(s.BackgroundPattern)
|
|
|
|
s.Navigation = setHue(s.Navigation)
|
|
|
|
s.BodyColor.Hue = hue
|
|
|
|
s.BodyBackground = setHue(s.BodyBackground)
|
|
|
|
s.BodyText.Hue = hue
|
2022-06-21 14:00:03 +02:00
|
|
|
s.Separator.Hue = hue
|
2022-06-07 14:43:01 +02:00
|
|
|
s.CardColor.Hue = hue
|
|
|
|
s.CardText.Hue = hue
|
|
|
|
s.Shadow.Hue = hue
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
func (s styleSheet) String() string {
|
|
|
|
s = s.withDefaults()
|
|
|
|
|
2019-12-23 23:56:57 +01:00
|
|
|
return fmt.Sprintf(
|
2018-01-07 21:42:19 +01:00
|
|
|
`:root {
|
2022-03-08 23:34:10 +01:00
|
|
|
--link_color: %s;
|
2022-03-29 21:41:46 +02:00
|
|
|
--input_background: %s;
|
2022-03-29 21:54:43 +02:00
|
|
|
--input_hover_background: %s;
|
2022-03-29 21:41:46 +02:00
|
|
|
--input_text: %s;
|
|
|
|
--input_disabled_text: %s;
|
2022-03-13 15:42:32 +01:00
|
|
|
--highlight_background: %s;
|
2022-03-08 23:34:10 +01:00
|
|
|
--highlight_color: %s;
|
|
|
|
--highlight_text_color: %s;
|
|
|
|
--danger_color: %s;
|
2024-02-15 18:52:46 +01:00
|
|
|
--danger_text_color: %s;
|
2022-03-08 23:34:10 +01:00
|
|
|
--scrollbar_foreground_color: %s;
|
|
|
|
--scrollbar_hover_color: %s;
|
|
|
|
|
2022-03-29 21:41:46 +02:00
|
|
|
--background_color: %s;
|
2022-03-13 15:42:32 +01:00
|
|
|
--background: %s;
|
2022-03-29 21:41:46 +02:00
|
|
|
--background_text_color: %s;
|
2022-06-07 14:43:01 +02:00
|
|
|
--background_pattern: url("%s");
|
2022-03-13 15:42:32 +01:00
|
|
|
--background_pattern_color: %s;
|
|
|
|
--navigation_background: %s;
|
2022-03-29 21:41:46 +02:00
|
|
|
--body_color: %s;
|
2022-03-13 15:42:32 +01:00
|
|
|
--body_background: %s;
|
2022-03-29 21:41:46 +02:00
|
|
|
--body_text_color: %s;
|
|
|
|
--separator: %s;
|
2022-03-22 23:02:47 +01:00
|
|
|
--shaded_background: %s;
|
2022-04-01 20:27:38 +02:00
|
|
|
--card_color: %s;
|
2022-03-08 23:34:10 +01:00
|
|
|
|
|
|
|
--chart_1_color: %s;
|
|
|
|
--chart_2_color: %s;
|
|
|
|
--chart_3_color: %s;
|
|
|
|
|
|
|
|
--shadow_color: %s;
|
2019-02-18 13:37:41 +01:00
|
|
|
}`,
|
2022-03-08 23:34:10 +01:00
|
|
|
s.Link.CSS(),
|
|
|
|
s.Input.CSS(),
|
2022-03-29 21:54:43 +02:00
|
|
|
s.InputHover.CSS(),
|
2022-03-08 23:34:10 +01:00
|
|
|
s.InputText.CSS(),
|
2022-03-29 21:41:46 +02:00
|
|
|
s.InputDisabledText.CSS(),
|
2022-03-13 15:42:32 +01:00
|
|
|
s.HighlightBackground.CSS(),
|
2022-03-08 23:34:10 +01:00
|
|
|
s.Highlight.CSS(),
|
|
|
|
s.HighlightText.CSS(),
|
|
|
|
s.Danger.CSS(),
|
2024-02-15 18:52:46 +01:00
|
|
|
s.HighlightText.CSS(),
|
2022-03-08 23:34:10 +01:00
|
|
|
s.ScrollbarForeground.CSS(),
|
|
|
|
s.ScrollbarHover.CSS(),
|
2022-03-29 21:41:46 +02:00
|
|
|
s.BackgroundColor.CSS(),
|
2022-03-13 15:42:32 +01:00
|
|
|
s.Background.CSS(),
|
2022-03-29 21:41:46 +02:00
|
|
|
s.BackgroundText.CSS(),
|
2022-06-07 14:43:01 +02:00
|
|
|
BackgroundTiles(),
|
2022-03-13 15:42:32 +01:00
|
|
|
s.BackgroundPattern.CSS(),
|
|
|
|
s.Navigation.CSS(),
|
2022-03-29 21:41:46 +02:00
|
|
|
s.BodyColor.CSS(),
|
|
|
|
s.BodyBackground.CSS(),
|
|
|
|
s.BodyText.CSS(),
|
|
|
|
s.Separator.CSS(),
|
2024-02-05 15:07:25 +01:00
|
|
|
s.BodyColor.WithAlpha(0.8).CSS(), // shaded_background
|
2022-04-01 20:27:38 +02:00
|
|
|
s.CardColor.CSS(),
|
2022-03-08 23:34:10 +01:00
|
|
|
s.Chart1.CSS(),
|
|
|
|
s.Chart2.CSS(),
|
|
|
|
s.Chart3.CSS(),
|
|
|
|
s.Shadow.CSS(),
|
2022-01-17 17:40:03 +01:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
func (dark styleSheet) withLight(light styleSheet) string {
|
|
|
|
return fmt.Sprintf(
|
|
|
|
`%s
|
|
|
|
|
|
|
|
@media (prefers-color-scheme: light) {
|
|
|
|
%s
|
|
|
|
}`,
|
|
|
|
dark.String(),
|
|
|
|
light.String(),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
func BackgroundTiles() template.URL {
|
2022-01-17 17:40:03 +01:00
|
|
|
var (
|
|
|
|
now = time.Now()
|
|
|
|
month = now.Month()
|
|
|
|
day = now.Day()
|
|
|
|
file string
|
2019-12-23 23:56:57 +01:00
|
|
|
)
|
2022-01-17 17:40:03 +01:00
|
|
|
|
|
|
|
if now.Weekday() == time.Wednesday && rand.Intn(20) == 0 {
|
|
|
|
file = "checker_wednesday"
|
|
|
|
} else if month == time.August && day == 8 {
|
|
|
|
file = "checker_dwarf"
|
|
|
|
} else if month == time.August && day == 24 {
|
|
|
|
file = "checker_developers"
|
|
|
|
} else if month == time.October && day == 31 {
|
|
|
|
file = "checker_halloween"
|
|
|
|
} else if month == time.December && (day == 25 || day == 26 || day == 27) {
|
|
|
|
file = "checker_christmas"
|
|
|
|
} else {
|
2023-10-23 17:09:15 +02:00
|
|
|
file = fmt.Sprintf("checker%d", now.UnixNano()%20)
|
2022-01-17 17:40:03 +01:00
|
|
|
}
|
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
return template.URL("/res/img/background_patterns/" + file + "_transparent.png")
|
2018-01-07 21:42:19 +01:00
|
|
|
}
|
2018-07-11 22:46:44 +02:00
|
|
|
|
|
|
|
// Following are all the available styles
|
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
var purpleDrainStyle = styleSheet{
|
2023-01-30 11:11:59 +01:00
|
|
|
Input: RGBA{77, 19, 236, .3},
|
|
|
|
InputHover: RGBA{77, 19, 236, .4},
|
2022-06-07 14:43:01 +02:00
|
|
|
InputText: HSL{0, 0, .9},
|
|
|
|
InputDisabledText: HSL{266, .85, .4},
|
2023-01-30 11:11:59 +01:00
|
|
|
HighlightBackground: NewGradient(160, HSL{150, .84, .39}, HSL{85, .85, .35}),
|
2022-06-07 14:43:01 +02:00
|
|
|
Highlight: HSL{117, .63, .46},
|
|
|
|
HighlightText: HSL{0, 0, 0},
|
|
|
|
Danger: HSL{357, .63, .46},
|
|
|
|
ScrollbarForeground: HSL{266, .85, .40},
|
|
|
|
ScrollbarHover: HSL{266, .85, .50},
|
|
|
|
|
2023-01-30 11:11:59 +01:00
|
|
|
BackgroundColor: HSL{270, .84, .12},
|
|
|
|
Background: NewGradient(120, HSL{255, .84, .16}, HSL{300, .85, .14}),
|
2022-06-07 14:43:01 +02:00
|
|
|
BackgroundPattern: RawCSS("none"),
|
2022-10-11 14:21:06 +02:00
|
|
|
Navigation: RawCSS("none"),
|
2022-06-07 14:43:01 +02:00
|
|
|
BodyColor: HSL{274, .9, .14},
|
2023-01-30 11:11:59 +01:00
|
|
|
BodyBackground: NewGradient(120, HSL{255, .84, .18}, HSL{300, .85, .16}),
|
2022-06-07 14:43:01 +02:00
|
|
|
BodyText: HSL{0, 0, .8},
|
|
|
|
CardColor: HSL{275, .8, .18},
|
2022-01-17 17:40:03 +01:00
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
Shadow: HSL{0, 0, 0},
|
2021-06-17 11:27:31 +02:00
|
|
|
}
|
|
|
|
|
2022-04-01 20:27:38 +02:00
|
|
|
var classicStyle = styleSheet{
|
2022-12-05 15:01:04 +01:00
|
|
|
Input: HSL{0, 0, .18},
|
|
|
|
InputHover: HSL{0, 0, .22},
|
|
|
|
InputText: HSL{0, 0, .9},
|
|
|
|
InputDisabledText: HSL{0, 0, .4},
|
|
|
|
Highlight: HSL{89, .60, .45},
|
|
|
|
HighlightText: HSL{0, 0, 0},
|
|
|
|
Danger: HSL{339, .65, .31},
|
2022-06-07 14:43:01 +02:00
|
|
|
|
|
|
|
BackgroundColor: HSL{0, 0, .08},
|
|
|
|
BodyColor: HSL{0, 0, .12},
|
|
|
|
BodyText: HSL{0, 0, .8},
|
|
|
|
CardColor: HSL{0, 0, .16},
|
|
|
|
|
|
|
|
Shadow: HSL{0, 0, 0},
|
2018-07-11 22:46:44 +02:00
|
|
|
}
|
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
var maroonStyle = styleSheet{
|
2022-12-05 15:01:04 +01:00
|
|
|
Input: HSL{0, .8, .20}, // hsl(0, 87%, 40%)
|
|
|
|
InputHover: HSL{0, .8, .25},
|
|
|
|
InputText: HSL{0, 0, 1},
|
|
|
|
InputDisabledText: HSL{0, 0, .5},
|
|
|
|
Highlight: HSL{137, 1, .37}, //hsl(137, 100%, 37%)
|
|
|
|
HighlightText: HSL{0, 0, 0},
|
|
|
|
Danger: HSL{9, .96, .42}, //hsl(9, 96%, 42%)
|
2022-06-07 14:43:01 +02:00
|
|
|
|
|
|
|
BackgroundColor: HSL{0, .7, .05},
|
|
|
|
BodyColor: HSL{0, .8, .08}, // HSL{0, .8, .15},
|
|
|
|
BodyText: HSL{0, 0, .8},
|
|
|
|
CardColor: HSL{0, .9, .14},
|
|
|
|
|
|
|
|
Shadow: HSL{0, 0, 0},
|
2018-07-11 22:46:44 +02:00
|
|
|
}
|
2019-03-31 21:06:52 +02:00
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
var hackerStyle = styleSheet{
|
2022-12-05 15:01:04 +01:00
|
|
|
Input: HSL{0, 0, .1},
|
|
|
|
InputHover: HSL{0, 0, .15},
|
|
|
|
InputText: HSL{0, 0, 1},
|
|
|
|
InputDisabledText: HSL{0, 0, .5},
|
|
|
|
Highlight: HSL{120, .8, .5},
|
|
|
|
HighlightText: HSL{0, 0, 0},
|
|
|
|
Danger: HSL{0, 1, .4},
|
2022-06-07 14:43:01 +02:00
|
|
|
|
|
|
|
BackgroundColor: HSL{0, 0, 0},
|
|
|
|
BodyColor: HSL{0, 0, .03},
|
|
|
|
BodyText: HSL{0, 0, .8},
|
|
|
|
CardColor: HSL{120, .4, .05},
|
|
|
|
|
|
|
|
Shadow: HSL{0, 0, 0},
|
2019-07-06 18:41:16 +02:00
|
|
|
}
|
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
var cantaPixeldrainStyle = styleSheet{
|
2022-12-05 15:01:04 +01:00
|
|
|
Input: HSL{167, .06, .30}, // hsl(167, 6%, 30%)
|
|
|
|
InputHover: HSL{167, .06, .35}, // hsl(167, 6%, 30%)
|
|
|
|
InputText: HSL{0, 0, 1},
|
|
|
|
InputDisabledText: HSL{0, 0, .5},
|
|
|
|
Highlight: HSL{165, 1, .40}, // hsl(165, 100%, 40%)
|
|
|
|
HighlightText: HSL{0, 0, 0},
|
|
|
|
Danger: HSL{40, 1, .5}, // hsl(40, 100%, 50%)
|
2022-06-07 14:43:01 +02:00
|
|
|
|
|
|
|
BackgroundColor: HSL{180, .04, .16},
|
|
|
|
BodyColor: HSL{168, .05, .21},
|
|
|
|
BodyText: HSL{0, 0, .8},
|
|
|
|
CardColor: HSL{170, .05, .26},
|
|
|
|
|
|
|
|
Shadow: HSL{0, 0, 0},
|
2019-07-16 22:07:10 +02:00
|
|
|
}
|
2022-01-10 21:59:07 +01:00
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
var skeuosPixeldrainStyle = styleSheet{
|
2022-12-05 15:01:04 +01:00
|
|
|
Input: HSL{226, .15, .23}, //hsl(226, 15%, 23%)
|
|
|
|
InputHover: HSL{226, .15, .28},
|
|
|
|
InputText: HSL{60, .06, .93},
|
|
|
|
InputDisabledText: HSL{0, 0, .5},
|
|
|
|
Highlight: HSL{282, .65, .54}, // hsl(282, 65%, 54%)
|
|
|
|
HighlightText: HSL{0, 0, 1},
|
|
|
|
Danger: HSL{0, .79, .43}, // hsl(0, 79%, 43%)
|
2022-06-07 14:43:01 +02:00
|
|
|
|
|
|
|
BackgroundColor: HSL{232, .14, .11}, //hsl(232, 14%, 11%)
|
|
|
|
BodyColor: HSL{229, .14, .16}, // hsl(229, 14%, 16%)
|
|
|
|
BodyText: HSL{60, .06, .93}, // hsl(60, 6%, 93%)
|
|
|
|
CardColor: HSL{225, .14, .17}, // hsl(225, 14%, 17%)
|
|
|
|
|
|
|
|
Shadow: HSL{0, 0, 0},
|
2022-01-10 21:59:07 +01:00
|
|
|
}
|
2022-01-17 15:46:59 +01:00
|
|
|
|
2022-10-11 14:21:06 +02:00
|
|
|
var (
|
|
|
|
nord0 = HSL{220, .16, .22} // Dark
|
|
|
|
nord1 = HSL{222, .16, .28} // Dark
|
|
|
|
nord2 = HSL{220, .17, .32} // Dark
|
|
|
|
nord3 = HSL{220, .16, .36} // Light
|
|
|
|
nord4 = HSL{219, .28, .88} // Light
|
|
|
|
nord5 = HSL{218, .27, .92} // Light
|
|
|
|
nord6 = HSL{218, .27, .94} // Light
|
|
|
|
nord7 = HSL{179, .25, .65} // Teal
|
|
|
|
nord8 = HSL{193, .43, .67} // Light blue
|
|
|
|
nord11 = HSL{354, .42, .56} // Red
|
|
|
|
nord14 = HSL{92, .28, .65} // Green
|
|
|
|
)
|
|
|
|
|
2022-04-01 20:27:38 +02:00
|
|
|
var nordDarkStyle = styleSheet{
|
2022-10-11 14:21:06 +02:00
|
|
|
Input: nord3.Add(0, 0, 0.01),
|
|
|
|
InputHover: nord3.Add(0, 0, 0.03),
|
|
|
|
InputText: nord5,
|
|
|
|
InputDisabledText: nord0,
|
|
|
|
Highlight: nord14,
|
|
|
|
HighlightText: nord0,
|
|
|
|
Danger: nord11,
|
|
|
|
ScrollbarForeground: nord7,
|
|
|
|
ScrollbarHover: nord8,
|
|
|
|
|
|
|
|
BackgroundColor: nord0,
|
|
|
|
BodyColor: nord1,
|
|
|
|
BodyText: nord4,
|
|
|
|
CardColor: nord2,
|
2022-06-07 14:43:01 +02:00
|
|
|
|
|
|
|
Shadow: HSL{0, 0, 0},
|
2022-01-17 17:40:03 +01:00
|
|
|
}
|
|
|
|
|
2022-04-01 20:27:38 +02:00
|
|
|
var nordLightStyle = styleSheet{
|
2022-06-07 14:43:01 +02:00
|
|
|
Link: HSL{92, .40, .32},
|
2022-10-11 14:21:06 +02:00
|
|
|
Input: nord4.Add(0, 0, -0.04),
|
|
|
|
InputHover: nord4.Add(0, 0, -0.06),
|
|
|
|
InputText: nord0,
|
|
|
|
InputDisabledText: nord6,
|
|
|
|
Highlight: nord14,
|
|
|
|
HighlightText: nord1,
|
|
|
|
Danger: nord11,
|
|
|
|
ScrollbarForeground: nord7,
|
|
|
|
ScrollbarHover: nord8,
|
|
|
|
|
|
|
|
BackgroundColor: nord4,
|
|
|
|
BackgroundText: nord0,
|
|
|
|
BodyColor: nord6,
|
|
|
|
BodyText: nord2,
|
|
|
|
Separator: nord4,
|
|
|
|
BackgroundPattern: nord4,
|
|
|
|
CardColor: nord5,
|
2022-06-07 14:43:01 +02:00
|
|
|
|
|
|
|
Shadow: HSL{220, .16, .36},
|
2022-01-17 15:46:59 +01:00
|
|
|
}
|
2022-03-08 23:34:10 +01:00
|
|
|
|
2022-03-30 19:35:26 +02:00
|
|
|
var sweetPixeldrainStyle = styleSheet{
|
2022-06-07 14:43:01 +02:00
|
|
|
Input: HSL{229, .25, .18}, // hsl(229, 25%, 14%)
|
2022-12-05 15:01:04 +01:00
|
|
|
InputHover: HSL{229, .25, .23}, // hsl(229, 25%, 14%)
|
2022-06-07 14:43:01 +02:00
|
|
|
InputText: HSL{223, .13, .79},
|
|
|
|
InputDisabledText: HSL{0, 0, .5},
|
|
|
|
Highlight: HSL{296, .88, .44},
|
|
|
|
HighlightText: HSL{0, 0, 0},
|
|
|
|
Danger: HSL{356, 1, .64}, // hsl(356, 100%, 64%)
|
|
|
|
|
|
|
|
BackgroundColor: HSL{225, .25, .06}, // hsl(225, 25%, 6%)
|
|
|
|
BodyColor: HSL{228, .25, .12}, // hsl(228, 25%, 12%)
|
|
|
|
BodyText: HSL{223, .13, .79}, // hsl(223, 13%, 79%)
|
|
|
|
CardColor: HSL{229, .25, .14}, // hsl(229, 25%, 14%)
|
2022-03-08 23:34:10 +01:00
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
Shadow: HSL{0, 0, 0},
|
2022-03-08 23:34:10 +01:00
|
|
|
}
|
2022-04-01 20:27:38 +02:00
|
|
|
|
|
|
|
var adwaitaDarkStyle = styleSheet{
|
|
|
|
Input: RGBA{255, 255, 255, .06},
|
2022-12-05 15:01:04 +01:00
|
|
|
InputHover: RGBA{255, 255, 255, .11},
|
2022-06-07 14:43:01 +02:00
|
|
|
InputText: HSL{0, 0, 1},
|
|
|
|
InputDisabledText: HSL{0, 0, .5},
|
|
|
|
Highlight: HSL{152, .62, .39}, // hsl(152, 62%, 39%)
|
|
|
|
HighlightText: HSL{0, 0, 0},
|
|
|
|
Danger: HSL{9, 1, .69}, // hsl(9, 100%, 69%)
|
|
|
|
|
2022-10-11 15:57:23 +02:00
|
|
|
BackgroundColor: HSL{0, 0, .12},
|
2022-06-07 14:43:01 +02:00
|
|
|
BodyColor: HSL{0, 0, .14},
|
|
|
|
BodyText: HSL{0, 0, 1},
|
2022-10-11 15:57:23 +02:00
|
|
|
CardColor: HSL{0, 0, .21},
|
2022-04-01 20:27:38 +02:00
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
Shadow: HSL{0, 0, 0},
|
2022-04-01 20:27:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
var adwaitaLightStyle = styleSheet{
|
|
|
|
Input: RGBA{0, 0, 0, .06},
|
2022-12-05 15:01:04 +01:00
|
|
|
InputHover: RGBA{0, 0, 0, .11},
|
2022-06-07 14:43:01 +02:00
|
|
|
InputText: HSL{0, 0, .2},
|
|
|
|
InputDisabledText: HSL{0, 0, .7},
|
|
|
|
Highlight: HSL{152, .62, .47}, // hsl(152, 62%, 47%)
|
|
|
|
HighlightText: HSL{0, 0, 1},
|
|
|
|
Danger: HSL{356, .75, .43}, // hsl(356, 75%, 43%)
|
|
|
|
|
|
|
|
BackgroundColor: HSL{0, 0, .92},
|
|
|
|
BodyColor: HSL{0, 0, .98},
|
|
|
|
BodyText: HSL{0, 0, .2},
|
2022-10-11 15:57:23 +02:00
|
|
|
Separator: HSL{0, 0, .86},
|
2022-06-07 14:43:01 +02:00
|
|
|
CardColor: HSL{0, 0, 1},
|
|
|
|
|
|
|
|
Shadow: HSL{0, 0, 0.36},
|
2022-04-01 20:27:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
var solarizedDarkStyle = styleSheet{
|
2022-06-07 14:43:01 +02:00
|
|
|
Input: HSL{192, .81, .18}, // hsl(194, 14%, 40%)
|
2022-12-05 15:01:04 +01:00
|
|
|
InputHover: HSL{192, .81, .23}, // hsl(196, 13%, 45%)
|
2022-06-07 14:43:01 +02:00
|
|
|
InputText: HSL{180, .07, .80}, // hsl(44, 87%, 94%)
|
|
|
|
InputDisabledText: HSL{194, .14, .30}, // hsl(194, 14%, 40%)
|
|
|
|
Highlight: HSL{68, 1, .30}, // hsl(68, 100%, 30%)
|
|
|
|
HighlightText: HSL{192, .81, .14}, // hsl(192, 100%, 11%)
|
|
|
|
Danger: HSL{1, .71, .52}, // hsl(1, 71%, 52%)
|
|
|
|
|
|
|
|
BackgroundColor: HSL{192, 1, .11}, //hsl(192, 100%, 11%)
|
|
|
|
BodyColor: HSL{192, .81, .14}, // hsl(192, 81%, 14%)
|
|
|
|
BodyText: HSL{180, .07, .60}, // hsl(180, 7%, 60%)
|
|
|
|
CardColor: HSL{192, .81, .16},
|
2022-04-01 20:27:38 +02:00
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
Shadow: HSL{0, 0, 0},
|
2022-04-01 20:27:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
var solarizedLightStyle = styleSheet{
|
2022-10-11 14:21:06 +02:00
|
|
|
Input: HSL{46, .42, .84},
|
2022-12-05 15:01:04 +01:00
|
|
|
InputHover: HSL{46, .42, .80},
|
2022-06-07 14:43:01 +02:00
|
|
|
InputText: HSL{194, .14, .20}, // hsl(192, 81%, 14%)
|
2022-10-11 14:21:06 +02:00
|
|
|
InputDisabledText: HSL{44, .87, .94},
|
2022-06-07 14:43:01 +02:00
|
|
|
Highlight: HSL{68, 1, .30}, // hsl(68, 100%, 30%)
|
|
|
|
HighlightText: HSL{44, .87, .94},
|
|
|
|
Danger: HSL{1, .71, .52}, // hsl(1, 71%, 52%)
|
|
|
|
|
2022-10-11 14:21:06 +02:00
|
|
|
BackgroundColor: HSL{46, .42, .88}, // hsl(46, 42%, 88%)
|
|
|
|
BackgroundText: HSL{192, .81, .14},
|
2022-06-07 14:43:01 +02:00
|
|
|
BodyColor: HSL{44, .87, .94}, // hsl(44, 87%, 94%)
|
|
|
|
BodyText: HSL{194, .14, .40}, // hsl(194, 14%, 40%)
|
2022-10-11 14:21:06 +02:00
|
|
|
Separator: HSL{46, .42, .88},
|
|
|
|
CardColor: HSL{44, .87, .92},
|
2022-04-01 20:27:38 +02:00
|
|
|
|
2022-06-07 14:43:01 +02:00
|
|
|
Shadow: HSL{0, 0, 0.36},
|
2022-04-01 20:27:38 +02:00
|
|
|
}
|