anki/sass/_vars.scss
Matthias Metelka 0c340c4f74
Add comments to Sass variables and tweak main window (#2137)
* Prevent multiple inclusion of variables in CSS files

* Use dict instead of tuple for variables

* Add comments to variables

* Improve appearance of main window

* Tweak main window styles

* Use json.dumps over pprint.format

* Make study button primary

* Improve header margin

* Make bottom toolbar slimmer

* Make congrats page more balanced

* Fix type issue

* Replace day/night with light/dark

* Exclude top-level-drag-row from hover effect

* Create dataclass for variables

* Run formatter

* Apply CSS variables from Python side

Why go full-circle with the Sass variables? This way we only need one interface for add-on authors to interact with. It also makes it easier for us to apply additional themes in the future.

* Fix typing

* Fix rgba values in Qt

* Darken button background

* Fix palette not being applied in light theme

For some odd reason this problem arose much later than #2016.

* Tweak default button look

* Reformat

* Apply CSS vars to ts pages

* Include elevation in button_mixins_lib

* Cast opacity to int

* Add some margin to studiedToday info

* Tweak light theme button gradient

* Tweak highlight-bg for light theme

* Add back default button color

as it made the browser sidebar tool icons dark in light theme.

* Reformat

* Tweak light theme buttons once more

Sorry for the back-and-forth. Sass only compiles when there are changes in user files, not when I only change the vars.

* Fix bottom toolbar button indicators

* Make buttons more clicky

* Fix button padding

* Handle macOS separately again

* Decrease elevation effect for main window buttons to 1

* Imitate box-shadow for Qt elements

* Adjust shadow vars

* Adjust primary border color

because the save button in the deck options had a lighter color than its background gradient.

* Boost box-shadow color of primary buttons

* Format

* Adjust Qt box-shadow imitation and shadow colors

* Use more subtle default shadow color

* Add some more padding to top toolbar

* Revert "Apply CSS vars to ts pages"

This reverts commit 5d8e7f6b7ffc8894b6517ecbb8cfba35407fc69a.

* Revert "Apply CSS variables from Python side"

This reverts commit 87db774412fd2bfd75e2630d2c5e782daef96b5f.

* Better match the standard macOS buttons

In the dark theme the standard color is a lighter grey, but at least
the size/shape is similar again.

This doesn't work for the editor buttons.

* Reduce the top margin of the congrats screen

* Fix illegible buttons when changing theme on macOS; match dark button style
2022-10-29 10:48:53 +10:00

448 lines
14 KiB
SCSS

/* Copyright: Ankitects Pty Ltd and contributors
* License: GNU AGPL, version 3 or later, http://www.gnu.org/licenses/agpl.html */
@use "sass:map";
@use "sass:color";
@use "functions" as *;
@use "color-palette" as *;
@function palette($key, $shade) {
$color: map.get($color-palette, $key);
@return map.get($color, $shade);
}
$vars: (
props: (
border-radius: (
default: (
"Used to round corners of various UI elements",
(
default: 5px,
),
),
large: (
"Used for big centered buttons",
(
default: 15px,
),
),
),
),
colors: (
fg: (
default: (
"Default text/icon color",
(
light: palette(darkgray, 9),
dark: palette(lightgray, 0),
),
),
subtle: (
"Placeholder text, icons in idle state",
(
light: palette(darkgray, 6),
dark: palette(lightgray, 3),
),
),
disabled: (
"Foreground color of disabled UI elements",
(
light: palette(lightgray, 9),
dark: palette(darkgray, 0),
),
),
faint: (
"Foreground color that barely stands out against canvas",
(
light: palette(lightgray, 7),
dark: palette(darkgray, 2),
),
),
link: (
"Hyperlink foreground color",
(
light: palette(blue, 7),
dark: palette(blue, 2),
),
),
),
canvas: (
default: (
"Window background",
(
light: palette(lightgray, 2),
dark: palette(darkgray, 5),
),
),
elevated: (
"Slightly brighter than window background",
(
light: white,
dark: palette(darkgray, 4),
),
),
inset: (
"Slightly darker than window background",
(
light: palette(lightgray, 3),
dark: palette(darkgray, 6),
),
),
overlay: (
"Background of floating elements (menus, tooltips)",
(
light: palette(lightgray, 0),
dark: palette(darkgray, 5),
),
),
code: (
"Background of code editors",
(
light: white,
dark: palette(darkgray, 6),
),
),
),
border: (
default: (
"Border color with medium contrast against window background",
(
light: palette(lightgray, 6),
dark: palette(darkgray, 7),
),
),
subtle: (
"Border color with low contrast against window background",
(
light: palette(lightgray, 4),
dark: palette(darkgray, 6),
),
),
strong: (
"Border color with high contrast against window background",
(
light: palette(lightgray, 9),
dark: palette(darkgray, 9),
),
),
focus: (
"Border color of focused input elements",
(
light: palette(blue, 5),
dark: palette(blue, 5),
),
),
),
button: (
disabled: (
"Background color of disabled buttons",
(
light: color.scale(palette(lightgray, 5), $alpha: -50%),
dark: color.scale(palette(darkgray, 3), $alpha: -50%),
),
),
gradient: (
start: (
"Start value of default button gradient",
(
light: white,
dark: palette(darkgray, 4),
),
),
end: (
"End value of default button gradient",
(
light: palette(lightgray, 3),
dark: palette(darkgray, 5),
),
),
),
hover: (
gradient: (
start: (
"Start value of default button gradient in hover state",
(
light: palette(lightgray, 1),
dark: palette(darkgray, 3),
),
),
end: (
"End value of default button gradient in hover state",
(
light: palette(lightgray, 2),
dark: palette(darkgray, 4),
),
),
),
border: (
"Border color of default button in hover state",
(
light: palette(lightgray, 8),
dark: palette(darkgray, 8),
),
),
),
primary: (
gradient: (
start: (
"Start value of primary button gradient",
(
light: palette(blue, 4),
dark: color.scale(palette(blue, 6), $saturation: -10%),
),
),
end: (
"End value of primary button gradient",
(
light: palette(blue, 6),
dark: color.scale(palette(blue, 8), $saturation: -10%),
),
),
),
hover: (
gradient: (
start: (
"Start value of primary button gradient in hover state",
(
light: palette(blue, 3),
dark: color.scale(palette(blue, 5), $saturation: -10%),
),
),
end: (
"End value of primary button gradient in hover state",
(
light: palette(blue, 5),
dark: color.scale(palette(blue, 7), $saturation: -10%),
),
),
),
),
disabled: (
"Background of primary button in disabled state",
(
light: palette(blue, 3),
dark: color.scale(palette(blue, 5), $saturation: -10%),
),
),
),
),
scrollbar: (
bg: (
default: (
"Background of scrollbar in idle state (Win/Lin only)",
(
light: palette(lightgray, 5),
dark: palette(darkgray, 4),
),
),
hover: (
"Background of scrollbar in hover state (Win/Lin only)",
(
light: palette(lightgray, 6),
dark: palette(darkgray, 3),
),
),
active: (
"Background of scrollbar in pressed state (Win/Lin only)",
(
light: palette(lightgray, 7),
dark: palette(darkgray, 1),
),
),
),
),
shadow: (
default: (
"Default box-shadow color",
(
light: palette(lightgray, 6),
dark: palette(darkgray, 7),
),
),
inset: (
"Inset box-shadow color",
(
light: palette(darkgray, 3),
dark: palette(darkgray, 7),
),
),
subtle: (
"Box-shadow color with lower contrast against window background",
(
light: palette(darkgray, 0),
dark: palette(darkgray, 4),
),
),
focus: (
"Box-shadow color for elements in focused state",
(
default: palette(indigo, 5),
),
),
),
accent: (
card: (
"Accent color for cards",
(
light: palette(blue, 4),
dark: palette(blue, 3),
),
),
note: (
"Accent color for notes",
(
light: palette(green, 5),
dark: palette(green, 4),
),
),
danger: (
"Saturated accent color to grab attention",
(
light: palette(red, 5),
dark: palette(red, 4),
),
),
),
flag: (
1: (
"Flag 1 (red)",
(
light: palette(red, 5),
dark: palette(red, 4),
),
),
2: (
"Flag 2 (orange)",
(
light: palette(orange, 4),
dark: palette(orange, 3),
),
),
3: (
"Flag 3 (green)",
(
light: palette(green, 4),
dark: palette(green, 3),
),
),
4: (
"Flag 4 (blue)",
(
light: palette(blue, 5),
dark: palette(blue, 4),
),
),
5: (
"Flag 5 (pink)",
(
light: palette(fuchsia, 4),
dark: palette(fuchsia, 3),
),
),
6: (
"Flag 6 (turquoise)",
(
light: palette(teal, 4),
dark: palette(teal, 3),
),
),
7: (
"Flag 7 (purple)",
(
light: palette(purple, 5),
dark: palette(purple, 4),
),
),
),
state: (
new: (
"Accent color for new cards",
(
light: palette(blue, 5),
dark: palette(blue, 3),
),
),
learn: (
"Accent color for cards in learning state",
(
light: palette(red, 6),
dark: palette(red, 4),
),
),
review: (
"Accent color for cards in review state",
(
light: palette(green, 6),
dark: palette(green, 5),
),
),
buried: (
"Accent color for buried cards",
(
light: palette(amber, 5),
dark: palette(amber, 8),
),
),
suspended: (
"Accent color for suspended cards",
(
light: palette(yellow, 4),
dark: palette(yellow, 1),
),
),
marked: (
"Accent color for marked cards",
(
light: palette(indigo, 2),
dark: palette(purple, 5),
),
),
),
highlight: (
bg: (
"Background color of highlighted items",
(
light: color.scale(palette(blue, 6), $alpha: -50%),
dark: color.scale(palette(blue, 3), $alpha: -50%),
),
),
fg: (
"Foreground color of highlighted items",
(
light: black,
dark: white,
),
),
),
selected: (
bg: (
"Background color of selected text",
(
light: color.scale(palette(lightgray, 5), $alpha: -50%),
dark: color.scale(palette(blue, 3), $alpha: -50%),
),
),
fg: (
"Foreground color of selected text",
(
light: black,
dark: white,
),
),
),
),
);
@function prop($keyword) {
@return var(--#{$keyword});
}
@function color($keyword) {
@return var(--#{$keyword});
}
@function palette-of($keyword, $theme: default) {
$colors: map.get($vars, colors);
@return get-value-from-map($colors, $keyword, $theme);
}