feat(darwin-breeze): add VS Code and Telegram themes
Generate and install a VS Code theme and build an importable Telegram theme from the color scheme.
This commit is contained in:
1 parent
75b1383edf
commit
26a29b3182
14 files changed
+6613
-15
No files matched your search
@@ -1,3 +1,6 @@
|
||||
# Helium caches the built theme next to the manifest.
|
||||
Cached Theme.pak
|
||||
__pycache__/
|
||||
# Binary packages built by build.py.
|
||||
*.vsix
|
||||
*.tdesktop-theme
|
||||
@@ -5,3 +5,5 @@
|
||||
__pycache__
|
||||
^/\.gitignore
|
||||
^/t3
|
||||
^/telegram
|
||||
^/vscode
|
||||
+49
-5
@@ -1,7 +1,7 @@
|
||||
# Darwin Breeze
|
||||
|
||||
Breeze for KDE Plasma 6 in the macOS dark system colors, with Helium, T3 Code
|
||||
and Ghostty themed from the same colors.
|
||||
Breeze for KDE Plasma 6 in the macOS dark system colors, with Helium, T3 Code,
|
||||
Ghostty, VS Code and Telegram themed from the same colors.
|
||||
|
||||
Only the colors change. Breeze still draws the widgets and the title bar, and
|
||||
the window buttons stay on the right.
|
||||
@@ -24,7 +24,15 @@ stow darwin-breeze helium
|
||||
|
||||
`apply.sh` regenerates the app themes, applies the global theme, hides the
|
||||
line under the title bar, turns off the wallpaper accent color and publishes
|
||||
the T3 Code theme. Restart Helium afterwards; T3 Code switches on its own.
|
||||
the T3 Code theme and installs the VS Code extension. Restart Helium
|
||||
afterwards; T3 Code switches on its own. In VS Code, pick "Darwin Breeze Dark"
|
||||
once under Preferences → Color Theme; after later color changes, run Developer:
|
||||
Reload Window.
|
||||
|
||||
Telegram has to import its theme by hand: Settings → Chat Settings → Chat
|
||||
background → Choose from file, then pick
|
||||
`darwin-breeze/telegram/DarwinBreezeDark.tdesktop-theme` and Apply. Import it
|
||||
again after the colors change.
|
||||
|
||||
## Changing colors
|
||||
|
||||
@@ -44,9 +52,12 @@ Edit it, then run `./darwin-breeze/apply.sh` again. Everything else follows:
|
||||
| Helium | `.local/share/helium-themes/`, generated by `build.py` |
|
||||
| T3 Code | `t3/darwin-breeze.json`, generated by `build.py` and published with `t3 theme set` |
|
||||
| Ghostty | `.config/ghostty/themes/`, generated by `build.py` |
|
||||
| VS Code | `vscode/package.json` and `vscode/themes/`, generated by `build.py`, packed into `darwin-breeze.vsix` and installed by `apply.sh` |
|
||||
| Telegram | `telegram/DarwinBreezeDark.tdesktop-theme`, built by `build.py` and imported by hand |
|
||||
|
||||
The generated files are committed so that `stow` alone gives a working setup;
|
||||
don't edit them by hand.
|
||||
The generated text files are committed so that `stow` alone gives a working
|
||||
setup; the binary packages (Telegram's `.tdesktop-theme`, VS Code's `.vsix`)
|
||||
are built by `build.py` instead. Don't edit generated files by hand.
|
||||
|
||||
## T3 Code notes
|
||||
|
||||
@@ -56,6 +67,39 @@ don't edit them by hand.
|
||||
`build.py`), so a new slot or a different mapping is a change there, not a
|
||||
hand-edited color.
|
||||
|
||||
## VS Code notes
|
||||
|
||||
- The workbench colors start from VS Code's own default dark theme, Dark 2026
|
||||
(vendored in `vscode/base/` with the themes it includes). It already lays
|
||||
out its grays as the scheme does: the editor darkest, the chrome around it
|
||||
lighter, widgets lighter still. Each of those becomes the matching scheme
|
||||
gray and the grays between them are interpolated. Other colors take the
|
||||
hue of the matching Apple color and keep their lightness and saturation.
|
||||
Keys with an exact role, such as buttons, badges, the active tab's top
|
||||
border and the git colors, are set directly (`vscode()` in `build.py`).
|
||||
- Syntax colors are Pierre Dark's, the theme T3 Code highlights code with
|
||||
(`vscode/base/pierre-dark.json`, taken from T3 Code). They are used as they
|
||||
are, without gamma compensation, so code looks the same in both apps.
|
||||
- The terminal uses the same 16 colors as Ghostty.
|
||||
- VS Code is Electron, so its workbench colors get the same gamma
|
||||
compensation as Helium and T3 Code.
|
||||
- The `.vsix` isn't committed; `build.py` packs it from `vscode/`.
|
||||
|
||||
## Telegram notes
|
||||
|
||||
- Telegram has some 600 color keys and the scheme has roles for only a few
|
||||
dozen of them (`telegram()` in `build.py`). The rest start from Telegram's
|
||||
own night theme, vendored as `telegram/night.tdesktop-palette`: its
|
||||
blue-tinted grays become scheme grays of the same brightness and its blues
|
||||
take the macOS blue's hue. Other colors, such as the reds, greens and name
|
||||
colors, are kept as night has them.
|
||||
- The chat list, top bar and compose bar use the window color; the chat
|
||||
behind the bubbles and the folder strip use the darker view color.
|
||||
- Telegram is a Qt app, so unlike Helium and T3 Code it needs no gamma
|
||||
compensation.
|
||||
- The `.tdesktop-theme` is a zip, so it isn't committed; `build.py` builds it
|
||||
from the night palette and the color scheme.
|
||||
|
||||
## Helium notes
|
||||
|
||||
- Helium loads the theme from `~/.local/share/helium-themes/darwinbreeze`
|
||||
|
||||
@@ -37,6 +37,12 @@ if [ -x "$t3" ]; then
|
||||
"$t3" theme set "$here/t3/darwin-breeze.json" >/dev/null
|
||||
fi
|
||||
|
||||
# VS Code only loads themes from installed extensions. --force reinstalls the
|
||||
# same version, so color changes land without a version bump.
|
||||
if command -v code >/dev/null; then
|
||||
code --install-extension "$here/vscode/darwin-breeze.vsix" --force >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
echo "Applied Darwin Breeze"
|
||||
if pgrep -x helium >/dev/null; then
|
||||
echo "Restart Helium to pick up its theme"
|
||||
|
||||
+441
-9
@@ -7,10 +7,18 @@ are defined. This script derives from it:
|
||||
.local/share/helium-themes/darwinbreeze/manifest.json
|
||||
.config/ghostty/themes/DarwinBreezeDark
|
||||
t3/darwin-breeze.json (published to T3 Code by apply.sh)
|
||||
telegram/DarwinBreezeDark.tdesktop-theme (not committed; imported into Telegram by hand)
|
||||
vscode/ (packed into vscode/darwin-breeze.vsix, installed by apply.sh)
|
||||
"""
|
||||
|
||||
import colorsys
|
||||
import configparser
|
||||
import io
|
||||
import json
|
||||
import re
|
||||
import struct
|
||||
import zipfile
|
||||
import zlib
|
||||
from pathlib import Path
|
||||
|
||||
PKG = Path(__file__).resolve().parent
|
||||
@@ -18,6 +26,20 @@ SCHEME = PKG / ".local/share/color-schemes/DarwinBreezeDark.colors"
|
||||
HELIUM = PKG / ".local/share/helium-themes/darwinbreeze"
|
||||
GHOSTTY = PKG / ".config/ghostty/themes/DarwinBreezeDark"
|
||||
T3 = PKG / "t3/darwin-breeze.json"
|
||||
# Telegram Desktop's built-in night theme, used as the base for every key the
|
||||
# scheme has no role for: the colors file from telegramdesktop/tdesktop at
|
||||
# 837b256, Telegram/Resources/night.tdesktop-theme.
|
||||
TELEGRAM_BASE = PKG / "telegram/night.tdesktop-palette"
|
||||
TELEGRAM = PKG / "telegram/DarwinBreezeDark.tdesktop-theme"
|
||||
VSCODE = PKG / "vscode"
|
||||
VSCODE_THEME = "themes/DarwinBreezeDark-color-theme.json"
|
||||
# VS Code's default dark theme, Dark 2026 (which includes Dark Modern, Dark+
|
||||
# and Visual Studio Dark), from Code - OSS 1.138 extensions/theme-defaults.
|
||||
# The workbench colors start from it.
|
||||
VSCODE_UI = PKG / "vscode/base/2026-dark.json"
|
||||
# Pierre Dark, the syntax theme T3 Code highlights code with (from T3 Code
|
||||
# 0.1.4). The editor uses its token colors as they are.
|
||||
VSCODE_SYNTAX = PKG / "vscode/base/pierre-dark.json"
|
||||
|
||||
WHITE = (255, 255, 255)
|
||||
|
||||
@@ -48,7 +70,8 @@ def mix(a, b, t):
|
||||
|
||||
|
||||
def hexc(c):
|
||||
return "#{:02x}{:02x}{:02x}".format(*c)
|
||||
"""#rrggbb, or #rrggbbaa when c carries an alpha."""
|
||||
return "#" + "".join(f"{v:02x}" for v in c)
|
||||
|
||||
|
||||
def kwin_compensate(c):
|
||||
@@ -101,12 +124,10 @@ def helium(color):
|
||||
return {k: kwin_compensate(v) for k, v in colors.items()}
|
||||
|
||||
|
||||
def ghostty(color):
|
||||
def ansi(color):
|
||||
"""The 16 terminal colors, shared by Ghostty and the VS Code terminal."""
|
||||
bg = color("View", "BackgroundNormal")
|
||||
fg = color("View", "ForegroundNormal")
|
||||
accent = color("Selection", "BackgroundNormal")
|
||||
accent_text = color("Selection", "ForegroundNormal")
|
||||
|
||||
normal = [
|
||||
mix(bg, fg, 0.15),
|
||||
color("View", "ForegroundNegative"),
|
||||
@@ -122,6 +143,14 @@ def ghostty(color):
|
||||
*(mix(c, WHITE, 0.25) for c in normal[1:7]),
|
||||
mix(fg, WHITE, 0.6),
|
||||
]
|
||||
return normal + bright
|
||||
|
||||
|
||||
def ghostty(color):
|
||||
bg = color("View", "BackgroundNormal")
|
||||
fg = color("View", "ForegroundNormal")
|
||||
accent = color("Selection", "BackgroundNormal")
|
||||
accent_text = color("Selection", "ForegroundNormal")
|
||||
|
||||
lines = [
|
||||
f"# Generated by darwin-breeze/build.py from {SCHEME.name}",
|
||||
@@ -132,7 +161,7 @@ def ghostty(color):
|
||||
f"selection-background = {hexc(accent)}",
|
||||
f"selection-foreground = {hexc(accent_text)}",
|
||||
]
|
||||
lines += [f"palette = {i}={hexc(c)}" for i, c in enumerate(normal + bright)]
|
||||
lines += [f"palette = {i}={hexc(c)}" for i, c in enumerate(ansi(color))]
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
|
||||
@@ -218,11 +247,404 @@ def t3(color):
|
||||
return {k: hexc(kwin_compensate(v)) for k, v in colors.items()}
|
||||
|
||||
|
||||
def write(path, text):
|
||||
def telegram(color):
|
||||
"""Telegram keys mapped onto a scheme role; the rest come from night."""
|
||||
window, window_text = color("Window", "BackgroundNormal"), color("Window", "ForegroundNormal")
|
||||
view, view_text = color("View", "BackgroundNormal"), color("View", "ForegroundNormal")
|
||||
header, header_text = color("Header", "BackgroundNormal"), color("Header", "ForegroundNormal")
|
||||
title_inactive = color("Header][Inactive", "BackgroundNormal")
|
||||
title_inactive_text = color("Header][Inactive", "ForegroundNormal")
|
||||
tooltip, tooltip_text = color("Tooltip", "BackgroundNormal"), color("Tooltip", "ForegroundNormal")
|
||||
accent, accent_text = color("Selection", "BackgroundNormal"), color("Selection", "ForegroundNormal")
|
||||
accent_hover = color("Selection", "BackgroundAlternate")
|
||||
muted = color("Window", "ForegroundInactive")
|
||||
negative = color("Window", "ForegroundNegative")
|
||||
positive = color("Window", "ForegroundPositive")
|
||||
link = color("Window", "ForegroundLink")
|
||||
hover = mix(window, window_text, 0.115)
|
||||
ripple = mix(window, window_text, 0.18)
|
||||
control = mix(window, window_text, 0.3)
|
||||
msg_in = mix(view, view_text, 0.1)
|
||||
msg_out = mix(view, accent, 0.5)
|
||||
|
||||
return {
|
||||
"windowBg": window,
|
||||
"windowFg": window_text,
|
||||
"windowBgOver": hover,
|
||||
"windowBgRipple": ripple,
|
||||
"windowFgOver": window_text,
|
||||
"windowSubTextFg": muted,
|
||||
"windowSubTextFgOver": mix(muted, window_text, 0.2),
|
||||
"windowBoldFg": window_text,
|
||||
"windowBoldFgOver": window_text,
|
||||
"windowBgActive": accent,
|
||||
"windowFgActive": accent_text,
|
||||
"windowActiveTextFg": link,
|
||||
"windowShadowFgFallback": window,
|
||||
"activeButtonBg": accent,
|
||||
"activeButtonBgOver": accent_hover,
|
||||
"activeButtonBgRipple": mix(accent, WHITE, 0.2),
|
||||
"activeButtonFg": accent_text,
|
||||
"activeButtonFgOver": accent_text,
|
||||
"activeButtonSecondaryFg": mix(accent, accent_text, 0.75),
|
||||
"activeLineFg": accent,
|
||||
"activeLineFgError": negative,
|
||||
"lightButtonBg": window,
|
||||
"lightButtonBgOver": mix(window, accent, 0.12),
|
||||
"lightButtonBgRipple": mix(window, accent, 0.2),
|
||||
"lightButtonFg": link,
|
||||
"attentionButtonFg": negative,
|
||||
"attentionButtonFgOver": negative,
|
||||
"attentionButtonBgOver": mix(window, negative, 0.12),
|
||||
"attentionButtonBgRipple": mix(window, negative, 0.2),
|
||||
"outlineButtonOutlineFg": accent,
|
||||
"menuBg": window,
|
||||
"menuBgOver": hover,
|
||||
"menuBgRipple": ripple,
|
||||
"menuIconFg": muted,
|
||||
"menuIconFgOver": mix(muted, window_text, 0.3),
|
||||
"menuSubmenuArrowFg": muted,
|
||||
"menuFgDisabled": control,
|
||||
"menuSeparatorFg": hover,
|
||||
"checkboxFg": muted,
|
||||
"sliderBgInactive": control,
|
||||
"sliderBgActive": accent,
|
||||
"inputBorderFg": control,
|
||||
# Breeze draws text fields in the view color with a blue focus ring.
|
||||
"filterInputActiveBg": view,
|
||||
"filterInputInactiveBg": view,
|
||||
"filterInputBorderFg": accent,
|
||||
"tooltipBg": tooltip,
|
||||
"tooltipFg": tooltip_text,
|
||||
"tooltipBorderFg": mix(tooltip, tooltip_text, 0.115),
|
||||
"titleBg": title_inactive,
|
||||
"titleBgActive": header,
|
||||
"titleFg": title_inactive_text,
|
||||
"titleFgActive": header_text,
|
||||
"topBarBg": header,
|
||||
"boxBg": window,
|
||||
"boxTitleFg": window_text,
|
||||
"boxTextFgGood": positive,
|
||||
"boxTextFgError": negative,
|
||||
# Folder strip in the view color, so the selected folder merges into
|
||||
# the chat list next to it.
|
||||
"sideBarBg": view,
|
||||
"sideBarBgActive": window,
|
||||
"sideBarBgRipple": mix(view, window_text, 0.1),
|
||||
"sideBarTextFg": muted,
|
||||
"sideBarTextFgActive": link,
|
||||
"sideBarIconFg": muted,
|
||||
"sideBarIconFgActive": link,
|
||||
"sideBarBadgeBg": accent,
|
||||
"sideBarBadgeBgMuted": control,
|
||||
"sideBarBadgeFg": accent_text,
|
||||
"dialogsBg": window,
|
||||
"dialogsBgOver": hover,
|
||||
"dialogsRippleBg": ripple,
|
||||
"dialogsBgActive": accent,
|
||||
"dialogsRippleBgActive": accent_hover,
|
||||
"dialogsNameFg": window_text,
|
||||
"dialogsTextFg": muted,
|
||||
"dialogsTextFgOver": muted,
|
||||
"dialogsTextFgService": link,
|
||||
"dialogsTextFgServiceOver": link,
|
||||
"dialogsDateFg": muted,
|
||||
"dialogsDateFgOver": muted,
|
||||
"dialogsDraftFg": negative,
|
||||
"dialogsOnlineBadgeFg": positive,
|
||||
"dialogsVerifiedIconBg": link,
|
||||
"dialogsVerifiedIconFg": window,
|
||||
"dialogsUnreadBg": accent,
|
||||
"dialogsUnreadBgOver": accent,
|
||||
"dialogsUnreadFg": accent_text,
|
||||
"dialogsUnreadBgMuted": control,
|
||||
"dialogsUnreadBgMutedOver": mix(window, window_text, 0.35),
|
||||
"dialogsUnreadBgActive": accent_text,
|
||||
"dialogsUnreadFgActive": accent,
|
||||
"dialogsUnreadBgMutedActive": mix(accent, accent_text, 0.55),
|
||||
"historyComposeAreaBg": window,
|
||||
"historyComposeAreaFg": window_text,
|
||||
"historyComposeButtonBgOver": hover,
|
||||
"historyComposeButtonBgRipple": ripple,
|
||||
"historyTextInFg": view_text,
|
||||
"historyTextOutFg": view_text,
|
||||
"historyLinkInFg": link,
|
||||
"msgInBg": msg_in,
|
||||
"msgInBgSelected": mix(msg_in, accent, 0.3),
|
||||
"msgOutBg": msg_out,
|
||||
"msgOutBgSelected": mix(msg_out, accent, 0.3),
|
||||
"msgInDateFg": muted,
|
||||
"msgOutDateFg": mix(msg_out, WHITE, 0.55),
|
||||
"msgSelectOverlay": (*accent, 0x4C),
|
||||
"msgStickerOverlay": (*accent, 0x7F),
|
||||
}
|
||||
|
||||
|
||||
def luma(c):
|
||||
return 0.299 * c[0] + 0.587 * c[1] + 0.114 * c[2]
|
||||
|
||||
|
||||
def interp(points, x):
|
||||
for (x0, y0), (x1, y1) in zip(points, points[1:]):
|
||||
if x <= x1:
|
||||
return y0 + (y1 - y0) * (x - x0) / (x1 - x0)
|
||||
return points[-1][1]
|
||||
|
||||
|
||||
def parse_hex(v):
|
||||
h = v[1:]
|
||||
if len(h) in (3, 4):
|
||||
h = "".join(ch * 2 for ch in h)
|
||||
return tuple(int(h[i:i + 2], 16) for i in range(0, len(h), 2))
|
||||
|
||||
|
||||
def telegram_theme(color):
|
||||
"""The night theme, recolored onto the scheme.
|
||||
|
||||
Night tints everything blue. Its tinted grays become scheme grays of
|
||||
matching brightness, its blues take the accent's hue and saturation, and
|
||||
other hues (reds, greens, name colors) stay. telegram() then pins every
|
||||
key that has a scheme role.
|
||||
"""
|
||||
base = TELEGRAM_BASE.read_text()
|
||||
line_re = re.compile(r"^(\w+):\s*(#[0-9a-fA-F]+)\s*;")
|
||||
night = {m[1]: parse_hex(m[2]) for m in map(line_re.match, base.splitlines()) if m}
|
||||
|
||||
window, muted = color("Window", "BackgroundNormal"), color("Window", "ForegroundInactive")
|
||||
grays = sorted({
|
||||
(0, 0),
|
||||
(luma(night["windowBg"]), window[0]),
|
||||
(luma(night["windowSubTextFg"]), muted[0]),
|
||||
(255, 255),
|
||||
})
|
||||
accent_h, _, accent_s = colorsys.rgb_to_hls(*(v / 255 for v in color("Selection", "BackgroundNormal")))
|
||||
|
||||
def recolor(c):
|
||||
rgb, alpha = c[:3], c[3:]
|
||||
chroma = max(rgb) - min(rgb)
|
||||
h, l, _ = colorsys.rgb_to_hls(*(v / 255 for v in rgb))
|
||||
if chroma <= 4 or not 195 <= h * 360 <= 225:
|
||||
return c
|
||||
if chroma <= 55:
|
||||
g = round(interp(grays, luma(rgb)))
|
||||
return (g, g, g, *alpha)
|
||||
return (*(round(v * 255) for v in colorsys.hls_to_rgb(accent_h, l, accent_s)), *alpha)
|
||||
|
||||
pinned = telegram(color)
|
||||
seen = set()
|
||||
out = [f"// Generated by darwin-breeze/build.py from {SCHEME.name}"]
|
||||
for line in base.splitlines():
|
||||
m = line_re.match(line)
|
||||
if m:
|
||||
key = m[1]
|
||||
seen.add(key)
|
||||
c = pinned[key] if key in pinned else recolor(night[key])
|
||||
line = f"{key}: {hexc(c)};" + line[m.end():]
|
||||
elif re.match(r"^(\w+):", line) and line.split(":")[0] in pinned:
|
||||
key = line.split(":")[0]
|
||||
seen.add(key)
|
||||
line = f"{key}: {hexc(pinned[key])};"
|
||||
out.append(line)
|
||||
out += [f"{k}: {hexc(c)};" for k, c in pinned.items() if k not in seen]
|
||||
return "\n".join(out) + "\n"
|
||||
|
||||
|
||||
def vscode_base_colors():
|
||||
"""Dark 2026's colors with its include chain resolved."""
|
||||
chain, path = [], VSCODE_UI
|
||||
while path:
|
||||
theme = json.loads(path.read_text())
|
||||
chain.append(theme.get("colors", {}))
|
||||
path = path.parent / theme["include"] if "include" in theme else None
|
||||
colors = {}
|
||||
for layer in reversed(chain):
|
||||
colors.update(layer)
|
||||
return {k: parse_hex(v) for k, v in colors.items()}
|
||||
|
||||
|
||||
def vscode(color):
|
||||
"""Workbench colors: Dark 2026, recolored onto the scheme.
|
||||
|
||||
Dark 2026 lays out its grays the way the scheme does: the chrome lighter
|
||||
than the editor, widgets lighter still. Each of those grays becomes the
|
||||
scheme gray in the same place, and the grays in between are interpolated.
|
||||
Each hue takes the hue of the matching scheme color but keeps its own
|
||||
lightness and saturation, so a muted dark red background stays one. pins
|
||||
then sets the keys that have an exact scheme role, which is where the full
|
||||
macOS blue shows.
|
||||
"""
|
||||
window, window_text = color("Window", "BackgroundNormal"), color("Window", "ForegroundNormal")
|
||||
view, view_text = color("View", "BackgroundNormal"), color("View", "ForegroundNormal")
|
||||
accent, accent_text = color("Selection", "BackgroundNormal"), color("Selection", "ForegroundNormal")
|
||||
muted = color("Window", "ForegroundInactive")
|
||||
negative = color("View", "ForegroundNegative")
|
||||
neutral = color("View", "ForegroundNeutral")
|
||||
positive = color("View", "ForegroundPositive")
|
||||
link = color("View", "ForegroundLink")
|
||||
base = vscode_base_colors()
|
||||
|
||||
grays = sorted({
|
||||
(0, 0),
|
||||
(luma(base["editor.background"]), view[0]),
|
||||
(luma(base["sideBar.background"]), window[0]),
|
||||
(luma(base["editorWidget.background"]), color("Window", "BackgroundAlternate")[0]),
|
||||
(luma(base["sideBar.border"]), mix(window, window_text, 0.115)[0]),
|
||||
(luma(base["descriptionForeground"]), muted[0]),
|
||||
(luma(base["foreground"]), window_text[0]),
|
||||
(255, 255),
|
||||
})
|
||||
assert all(a[1] <= b[1] for a, b in zip(grays, grays[1:])), grays
|
||||
|
||||
def hls(c):
|
||||
return colorsys.rgb_to_hls(*(v / 255 for v in c))
|
||||
|
||||
# (hue range in degrees, scheme color whose hue it takes)
|
||||
families = [
|
||||
((0, 15), negative),
|
||||
((15, 70), neutral),
|
||||
((70, 170), positive),
|
||||
((170, 250), accent),
|
||||
((250, 330), color("View", "ForegroundVisited")),
|
||||
((330, 360), negative),
|
||||
]
|
||||
|
||||
def recolor(c):
|
||||
rgb, alpha = c[:3], c[3:]
|
||||
if max(rgb) - min(rgb) <= 10:
|
||||
g = round(interp(grays, luma(rgb)))
|
||||
return (g, g, g, *alpha)
|
||||
h, l, sat = hls(rgb)
|
||||
target = next(t for (lo, hi), t in families if lo <= h * 360 < hi)
|
||||
return (*(round(v * 255) for v in colorsys.hls_to_rgb(hls(target)[0], l, sat)), *alpha)
|
||||
|
||||
pins = {
|
||||
"editor.background": view,
|
||||
"editor.foreground": view_text,
|
||||
"titleBar.inactiveBackground": color("Header][Inactive", "BackgroundNormal"),
|
||||
"titleBar.inactiveForeground": color("Header][Inactive", "ForegroundNormal"),
|
||||
"focusBorder": (*accent, 0xB3),
|
||||
"quickInputList.focusBackground": accent,
|
||||
"button.background": accent,
|
||||
"button.border": accent,
|
||||
"button.hoverBackground": color("Selection", "BackgroundAlternate"),
|
||||
"button.foreground": accent_text,
|
||||
"badge.background": accent,
|
||||
"badge.foreground": accent_text,
|
||||
"activityBarBadge.background": accent,
|
||||
"activityBarBadge.foreground": accent_text,
|
||||
"tab.activeBorderTop": accent,
|
||||
"panelTitle.activeBorder": accent,
|
||||
"textLink.foreground": link,
|
||||
"textLink.activeForeground": link,
|
||||
}
|
||||
names = ["Black", "Red", "Green", "Yellow", "Blue", "Magenta", "Cyan", "White"]
|
||||
for i, c in enumerate(ansi(color)):
|
||||
pins[f"terminal.ansi{'Bright' if i >= 8 else ''}{names[i % 8]}"] = c
|
||||
|
||||
colors = {k: pins.get(k) or recolor(c) for k, c in base.items()}
|
||||
colors.update(pins)
|
||||
# Electron is Chromium, so it needs the same KWin compensation as Helium.
|
||||
return {k: hexc(kwin_compensate(c[:3]) + list(c[3:])) for k, c in sorted(colors.items())}
|
||||
|
||||
|
||||
def vscode_files(color):
|
||||
"""The extension files, keyed by their path inside it."""
|
||||
name = "Darwin Breeze Dark"
|
||||
# Syntax colors as T3 Code shows them. T3 Code doesn't compensate them
|
||||
# either, so the two render the same.
|
||||
syntax = json.loads(VSCODE_SYNTAX.read_text())
|
||||
theme = {
|
||||
"$schema": "vscode://schemas/color-theme",
|
||||
"name": name,
|
||||
"type": "dark",
|
||||
"semanticHighlighting": True,
|
||||
"colors": vscode(color),
|
||||
"tokenColors": syntax["tokenColors"],
|
||||
"semanticTokenColors": syntax["semanticTokenColors"],
|
||||
}
|
||||
package = {
|
||||
"name": "darwin-breeze",
|
||||
"displayName": "Darwin Breeze",
|
||||
"description": f"Generated by darwin-breeze/build.py from {SCHEME.name}",
|
||||
"publisher": "trivk",
|
||||
"version": "1.0.0",
|
||||
"engines": {"vscode": "^1.70.0"},
|
||||
"categories": ["Themes"],
|
||||
"contributes": {
|
||||
"themes": [{"label": name, "uiTheme": "vs-dark", "path": f"./{VSCODE_THEME}"}],
|
||||
},
|
||||
}
|
||||
return {
|
||||
"package.json": json.dumps(package, indent=2) + "\n",
|
||||
VSCODE_THEME: json.dumps(theme, indent=2) + "\n",
|
||||
}
|
||||
|
||||
|
||||
def vsix(files):
|
||||
"""Pack the extension the way vsce does, for code --install-extension."""
|
||||
manifest = """<?xml version="1.0" encoding="utf-8"?>
|
||||
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
|
||||
<Metadata>
|
||||
<Identity Language="en-US" Id="darwin-breeze" Version="1.0.0" Publisher="trivk"/>
|
||||
<DisplayName>Darwin Breeze</DisplayName>
|
||||
<Description xml:space="preserve">Darwin Breeze Dark color theme</Description>
|
||||
<Categories>Themes</Categories>
|
||||
<Properties>
|
||||
<Property Id="Microsoft.VisualStudio.Code.Engine" Value="^1.70.0"/>
|
||||
</Properties>
|
||||
</Metadata>
|
||||
<Installation>
|
||||
<InstallationTarget Id="Microsoft.VisualStudio.Code"/>
|
||||
</Installation>
|
||||
<Dependencies/>
|
||||
<Assets>
|
||||
<Asset Type="Microsoft.VisualStudio.Code.Manifest" Path="extension/package.json" Addressable="true"/>
|
||||
</Assets>
|
||||
</PackageManifest>
|
||||
"""
|
||||
content_types = """<?xml version="1.0" encoding="utf-8"?>
|
||||
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension=".json" ContentType="application/json"/><Default Extension=".vsixmanifest" ContentType="text/xml"/></Types>
|
||||
"""
|
||||
return zip_bytes({
|
||||
"[Content_Types].xml": content_types,
|
||||
"extension.vsixmanifest": manifest,
|
||||
**{f"extension/{path}": text for path, text in files.items()},
|
||||
})
|
||||
|
||||
|
||||
def solid_png(c):
|
||||
"""A 1x1 PNG; Telegram stretches it over the chat as a plain background."""
|
||||
|
||||
def chunk(kind, data):
|
||||
return struct.pack(">I", len(data)) + kind + data + struct.pack(">I", zlib.crc32(kind + data))
|
||||
|
||||
return (
|
||||
b"\x89PNG\r\n\x1a\n"
|
||||
+ chunk(b"IHDR", struct.pack(">IIBBBBB", 1, 1, 8, 2, 0, 0, 0))
|
||||
+ chunk(b"IDAT", zlib.compress(bytes([0, *c])))
|
||||
+ chunk(b"IEND", b"")
|
||||
)
|
||||
|
||||
|
||||
def zip_bytes(files):
|
||||
"""A zip with fixed timestamps, so an unchanged theme rebuilds byte-identical."""
|
||||
buf = io.BytesIO()
|
||||
with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as z:
|
||||
for name, data in files.items():
|
||||
info = zipfile.ZipInfo(name, (1980, 1, 1, 0, 0, 0))
|
||||
info.compress_type = zipfile.ZIP_DEFLATED
|
||||
info.external_attr = 0o644 << 16
|
||||
z.writestr(info, data)
|
||||
return buf.getvalue()
|
||||
|
||||
|
||||
def write(path, data):
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
if path.exists() and path.read_text() == text:
|
||||
if isinstance(data, str):
|
||||
data = data.encode()
|
||||
if path.exists() and path.read_bytes() == data:
|
||||
return False
|
||||
path.write_text(text)
|
||||
path.write_bytes(data)
|
||||
print(f"wrote {path.relative_to(PKG)}")
|
||||
return True
|
||||
|
||||
@@ -245,6 +667,16 @@ def main():
|
||||
theme = {"version": 1, "name": "Darwin Breeze", "appearance": "dark", "colors": t3(color)}
|
||||
write(T3, json.dumps(theme, indent=2) + "\n")
|
||||
|
||||
write(TELEGRAM, zip_bytes({
|
||||
"colors.tdesktop-theme": telegram_theme(color),
|
||||
"background.png": solid_png(color("View", "BackgroundNormal")),
|
||||
}))
|
||||
|
||||
files = vscode_files(color)
|
||||
for path, text in files.items():
|
||||
write(VSCODE / path, text)
|
||||
write(VSCODE / "darwin-breeze.vsix", vsix(files))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,467 @@
|
||||
windowBg: #17212b; // white: fallback for background
|
||||
windowFg: #f5f5f5; // black: fallback for text
|
||||
windowBgOver: #232e3c; // light gray: fallback for background with mouse over
|
||||
windowBgRipple: #24303d; // darker gray: fallback for ripple effect
|
||||
windowFgOver: #e9ecf0; // black: fallback for text with mouse over
|
||||
windowSubTextFg: #708499; // gray: fallback for additional text
|
||||
windowSubTextFgOver: #7c90a4; // darker gray: fallback for additional text with mouse over
|
||||
windowBoldFg: #e9e8e8; // dark gray: fallback for bold text
|
||||
windowBoldFgOver: #e9e9e9; // dark gray: fallback for bold text with mouse over
|
||||
windowBgActive: #5288c1; // bright blue: fallback for blue filled active areas
|
||||
windowFgActive: #ffffff; // white: fallback for text on active areas
|
||||
windowActiveTextFg: #6ab3f3; // online blue: fallback for active text like online status
|
||||
windowShadowFg: #000000; // black: fallback for shadow
|
||||
windowShadowFgFallback: #17212b; // gray: fallback for shadow without opacity
|
||||
shadowFg: #04080e56; // most shadows (including opacity)
|
||||
slideFadeOutBg: #0000003c; // slide animation (chat to profile) fade out filling
|
||||
slideFadeOutShadowFg: windowShadowFg; // slide animation (chat to profile) fade out right section shadow
|
||||
imageBg: #000000; // image background fallback (when photo size is less than minimum allowed)
|
||||
imageBgTransparent: #ffffff; // image background when displaying an image with opacity where no opacity is needed
|
||||
activeButtonBg: #2f6ea5; // default active button background
|
||||
activeButtonBgOver: #3476ab; // default active button background with mouse over
|
||||
activeButtonBgRipple: #3b7cb1; // default active button ripple effect
|
||||
activeButtonFg: #ffffff; // default active button text
|
||||
activeButtonFgOver: #ffffff; // default active button text with mouse over
|
||||
activeButtonSecondaryFg: #9abfe7; // default active button additional text (selected messages counter in forward / delete buttons)
|
||||
activeButtonSecondaryFgOver: activeButtonSecondaryFg; // default active button additional text with mouse over
|
||||
activeLineFg: #6396cb; // default active line (like code input field bottom border when you log in and field is focused)
|
||||
activeLineFgError: #ef5959; // default active line for error state (like code input field bottom border when you log in and you've entered incorrect code)
|
||||
lightButtonBg: #17212b; // default light button background (like buttons in boxes)
|
||||
lightButtonBgOver: #1d2a39; // default light button background with mouse over
|
||||
lightButtonBgRipple: #223143; // default light button ripple effect
|
||||
lightButtonFg: #6ab2f2; // default light button text
|
||||
lightButtonFgOver: lightButtonFg; // default light button text with mouse over
|
||||
attentionButtonFg: #ec3942; // default attention button text (like confirm button on log out)
|
||||
attentionButtonFgOver: #ec3942; // default attention button text with mouse over
|
||||
attentionButtonBgOver: #592a2a64; // default attention button background with mouse over
|
||||
attentionButtonBgRipple: #68323264; // default attention button ripple effect
|
||||
outlineButtonBg: windowBg; // default left outlined button background (like shared media links in profiles)
|
||||
outlineButtonBgOver: #202b37; // default left outlined button background with mouse over
|
||||
outlineButtonOutlineFg: #3983c3; // default left outlined button left outline border
|
||||
outlineButtonBgRipple: #27323f; // default left outlined button ripple effect
|
||||
menuBg: #17212b; // default popup menu background
|
||||
menuBgOver: #ffffff; // default popup menu item background with mouse over
|
||||
menuBgRipple: #1f2934; // default popup menu item ripple effect
|
||||
menuIconFg: #6c7883; // default popup menu item icon (like main menu)
|
||||
menuIconFgOver: #dcdcdc; // default popup menu item icon with mouse over
|
||||
menuSubmenuArrowFg: #637c95; // default popup menu submenu arrow icon (like in message field context menu in case of RTL system language)
|
||||
menuFgDisabled: #3d4e5c; // default popup menu item disabled text (like unavailable items in message field context menu)
|
||||
menuSeparatorFg: #232f39; // default popup menu separator (like in message field context menu)
|
||||
scrollBarBg: #ffffff53; // default scroll bar current rectangle, the bar itself (like in chats list)
|
||||
scrollBarBgOver: #ffffff7a; // default scroll bar current rectangle with mouse over it
|
||||
scrollBg: #ffffff1a; // default scroll bar background
|
||||
scrollBgOver: #ffffff2c; // default scroll bar background with mouse over the scroll bar
|
||||
smallCloseIconFg: #55616c; // small X icon (like in Show all sessions box to the right for sessions termination)
|
||||
smallCloseIconFgOver: #a3a3a3; // small X icon with mouse over
|
||||
radialFg: windowFgActive; // default radial loader line (like in Media Viewer when loading a photo)
|
||||
radialBg: #00000056; // default radial loader background (like in Media Viewer when loading a photo)
|
||||
placeholderFg: #6d7883; // default input field placeholder when field is not focused (like in phone input field when you log in)
|
||||
placeholderFgActive: #4f5b67; // default input field placeholder when field is focused
|
||||
inputBorderFg: #313c49; // default input field bottom border (like in code input field when you log in and field is not focused)
|
||||
filterInputBorderFg: #242f3d; // default rounded input field border (like in chats list search field when field is focused)
|
||||
filterInputInactiveBg: #242f3d; // default rounded input field background (like in chats list search field when field is inactive)
|
||||
checkboxFg: #4f6276; // default unchecked checkbox rounded rectangle (and also emoji category icons)
|
||||
sliderBgInactive: #364554; // default slider not active bar (like in Settings when you choose interface scale or custom notifications count)
|
||||
sliderBgActive: #4a81bc; // default slider active bar (like in Settings when you choose interface scale or custom notifications count)
|
||||
tooltipBg: #16222d; // tooltip background (like when you put mouse over the message timestamp and wait)
|
||||
tooltipFg: #d4e0ea; // tooltip text
|
||||
tooltipBorderFg: #16222d; // tooltip border
|
||||
titleShadow: #00000000; // one pixel line shadow at the bottom of custom window title
|
||||
titleBg: #1f2936; // custom window title background when window is inactive
|
||||
titleBgActive: #242f3d; // custom window title background when window is active
|
||||
titleButtonBg: titleBg; // custom window title minimize/maximize/restore button background when window is inactive (Windows only)
|
||||
titleButtonFg: #576673; // custom window title minimize/maximize/restore button icon when window is inactive (Windows only)
|
||||
titleButtonBgOver: #25303e; // custom window title minimize/maximize/restore button background with mouse over when window is inactive (Windows only)
|
||||
titleButtonFgOver: #e0e0e0; // custom window title minimize/maximize/restore button icon with mouse over when window is inactive (Windows only)
|
||||
titleButtonBgActive: #242f3d; // custom window title minimize/maximize/restore button background when window is active (Windows only)
|
||||
titleButtonFgActive: titleButtonFg; // custom window title minimize/maximize/restore button icon when window is active (Windows only)
|
||||
titleButtonBgActiveOver: #2c3847; // custom window title minimize/maximize/restore button background with mouse over when window is active (Windows only)
|
||||
titleButtonFgActiveOver: titleButtonFgOver; // custom window title minimize/maximize/restore button icon with mouse over when window is active (Windows only)
|
||||
titleButtonCloseBg: titleButtonBg; // custom window title close button background when window is inactive (Windows only)
|
||||
titleButtonCloseFg: titleButtonFg; // custom window title close button icon when window is inactive (Windows only)
|
||||
titleButtonCloseBgOver: #e92539; // custom window title close button background with mouse over when window is inactive (Windows only)
|
||||
titleButtonCloseFgOver: windowFgActive; // custom window title close button icon with mouse over when window is inactive (Windows only)
|
||||
titleButtonCloseBgActive: #242f3d; // custom window title close button background when window is active (Windows only)
|
||||
titleButtonCloseFgActive: titleButtonCloseFg; // custom window title close button icon when window is active (Windows only)
|
||||
titleButtonCloseBgActiveOver: #e92539; // custom window title close button background with mouse over when window is active (Windows only)
|
||||
titleButtonCloseFgActiveOver: titleButtonCloseFgOver; // custom window title close button icon with mouse over when window is active (Windows only)
|
||||
titleFg: #6a7680; // custom window title text when window is inactive (macOS only)
|
||||
titleFgActive: #91a3b3; // custom window title text when window is active (macOS only)
|
||||
trayCounterBg: #f23c34; // tray icon counter background
|
||||
trayCounterBgMute: #888888; // tray icon counter background if all unread messages are muted
|
||||
trayCounterFg: #ffffff; // tray icon counter text
|
||||
trayCounterBgMacInvert: #ffffff; // tray icon counter background when tray icon is pressed or when dark theme of macOS is used (macOS only)
|
||||
trayCounterFgMacInvert: #ffffff01; // tray icon counter text when tray icon is pressed or when dark theme of macOS is used (macOS only)
|
||||
layerBg: #0000007f; // box and main menu background layer fade
|
||||
cancelIconFg: #737e87; // default for settings close icon and box search cancel icon
|
||||
cancelIconFgOver: #dcdcdc; // default for settings close icon and box search cancel icon with mouse over
|
||||
boxBg: #17212b; // box background
|
||||
boxTextFg: windowFg; // box text
|
||||
boxTextFgGood: #5598db; // accepted box text (like when choosing username that is not occupied)
|
||||
boxTextFgError: #dc3d3d; // rejecting box text (like when choosing username that is occupied)
|
||||
boxTitleFg: #ebebeb; // box title text
|
||||
boxSearchBg: #17212b; // box search field background (like in contacts box)
|
||||
boxTitleAdditionalFg: #6d7f8f; // box title additional text (like in create group box when you see chosen members count)
|
||||
boxTitleCloseFg: cancelIconFg; // settings close icon and box search cancel icon (like in contacts box)
|
||||
boxTitleCloseFgOver: cancelIconFgOver; // settings close icon and box search cancel icon (like in contacts box) with mouse over
|
||||
membersAboutLimitFg: #677a8b; // text in channel members box about the limit (max 200 last members are shown)
|
||||
contactsBg: #17212b; // contacts (and some other) box row background
|
||||
contactsBgOver: #1f2c39; // contacts (and some other) box row background with mouse over
|
||||
contactsNameFg: boxTextFg; // contacts (and some other) box row name text
|
||||
contactsStatusFg: #677a8b; // contacts (and some other) box row additional text (like last seen stamp)
|
||||
contactsStatusFgOver: #677a8b; // contacts (and some other) box row additional text (like last seen stamp) with mouse over
|
||||
contactsStatusFgOnline: #559be0; // contacts (and some other) box row active additional text (like online status)
|
||||
photoCropFadeBg: layerBg; // avatar crop box fade background (when choosing a new photo in Settings or for a group)
|
||||
photoCropPointFg: #ffffff7f; // avatar crop box corner rectangles (when choosing a new photo in Settings or for a group)
|
||||
callArrowFg: #49a2f0; // received phone call arrow (in calls list box)
|
||||
callArrowMissedFg: #ed5050; // missed phone call arrow (in calls list box)
|
||||
introBg: windowBg; // login background
|
||||
introTitleFg: #eeeeee; // login title text
|
||||
introDescriptionFg: #72879b; // login description text
|
||||
introErrorFg: #e94040; // login error text (like when providing a wrong log in code)
|
||||
introCoverTopBg: #124a82; // intro gradient top (from)
|
||||
introCoverBottomBg: #23659f; // intro gradient bottom (to)
|
||||
introCoverIconsFg: #3b7cbd; // intro cloud graphics
|
||||
introCoverPlaneTrace: #3870a8; // intro plane traces
|
||||
introCoverPlaneInner: #ced9e2; // intro plane part
|
||||
introCoverPlaneOuter: #97a9b5; // intro plane part
|
||||
introCoverPlaneTop: #ffffff; // intro plane part
|
||||
dialogsMenuIconFg: menuIconFg; // main menu and lock telegram icon
|
||||
dialogsMenuIconFgOver: menuIconFgOver; // main menu and lock telegram icon with mouse over
|
||||
dialogsBg: windowBg; // chat list background
|
||||
dialogsNameFg: #f5f5f5; // chat list name text
|
||||
dialogsChatIconFg: dialogsNameFg; // chat list group or channel icon
|
||||
dialogsDateFg: #8696a8; // chat list date text
|
||||
dialogsTextFg: #7f91a4; // chat list message text
|
||||
dialogsTextFgService: #73b9f5; // chat list group sender name text (or media message type text)
|
||||
dialogsDraftFg: #ff525d; // chat list draft label
|
||||
dialogsVerifiedIconBg: #6ab3f3; // chat list verified icon background
|
||||
dialogsVerifiedIconFg: #17212b; // chat list verified icon check
|
||||
dialogsSendingIconFg: #647d96; // chat list sending message icon (clock)
|
||||
dialogsSentIconFg: #72bcfd; // chat list sent message tick / double tick icon
|
||||
dialogsUnreadBg: #4082bc; // chat list unread badge background for not muted chat
|
||||
dialogsUnreadBgMuted: #3e546a; // chat list unread badge background for muted chat
|
||||
dialogsUnreadFg: #ffffff; // chat list unread badge text
|
||||
dialogsBgOver: #202b36; // chat list background with mouse over
|
||||
dialogsOnlineBadgeFg: #63b6ff; // chat list online status
|
||||
dialogsNameFgOver: windowBoldFgOver; // chat list name text with mouse over
|
||||
dialogsChatIconFgOver: dialogsNameFgOver; // chat list group or channel icon with mouse over
|
||||
dialogsDateFgOver: #8495a9; // chat list date text with mouse over
|
||||
dialogsTextFgOver: #91a3b5; // chat list message text with mouse over
|
||||
dialogsTextFgServiceOver: #73b9f5; // chat list group sender name text with mouse over
|
||||
dialogsDraftFgOver: dialogsDraftFg; // chat list draft label with mouse over
|
||||
dialogsVerifiedIconBgOver: #6ab3f3; // chat list verified icon background with mouse over
|
||||
dialogsVerifiedIconFgOver: dialogsVerifiedIconFg; // chat list verified icon check with mouse over
|
||||
dialogsSendingIconFgOver: dialogsSendingIconFg; // chat list sending message icon (clock) with mouse over
|
||||
dialogsSentIconFgOver: #72bcfd; // chat list sent message tick / double tick icon with mouse over
|
||||
dialogsUnreadBgOver: #4082bc; // chat list unread badge background for not muted chat with mouse over
|
||||
dialogsUnreadBgMutedOver: #4d5762; // chat list unread badge background for muted chat with mouse over
|
||||
dialogsUnreadFgOver: dialogsUnreadFg; // chat list unread badge text with mouse over
|
||||
dialogsBgActive: #2b5278; // chat list background for current (active) chat
|
||||
dialogsNameFgActive: windowFgActive; // chat list name text for current (active) chat
|
||||
dialogsChatIconFgActive: dialogsNameFgActive; // chat list group or channel icon for current (active) chat
|
||||
dialogsDateFgActive: windowFgActive; // chat list date text for current (active) chat
|
||||
dialogsTextFgActive: windowFgActive; // chat list message text for current (active) chat
|
||||
dialogsTextFgServiceActive: dialogsTextFgActive; // chat list group sender name text for current (active) chat
|
||||
dialogsDraftFgActive: #a9caf0; // chat list draft label for current (active) chat
|
||||
dialogsVerifiedIconBgActive: dialogsTextFgActive; // chat list verified icon background for current (active) chat
|
||||
dialogsVerifiedIconFgActive: dialogsBgActive; // chat list verified icon check for current (active) chat
|
||||
dialogsSendingIconFgActive: #ffffff99; // chat list sending message icon (clock) for current (active) chat
|
||||
dialogsSentIconFgActive: dialogsTextFgActive; // chat list sent message tick / double tick icon for current (active) chat
|
||||
dialogsUnreadBgActive: dialogsTextFgActive; // chat list unread badge background for not muted chat for current (active) chat
|
||||
dialogsUnreadBgMutedActive: #7aa3ca; // chat list unread badge background for muted chat for current (active) chat
|
||||
dialogsUnreadFgActive: #2a5378; // chat list unread badge text for current (active) chat
|
||||
dialogsOnlineBadgeFgActive: #ffffff; // chat list online status for current (active) chat
|
||||
dialogsRippleBg: #25313d; //
|
||||
dialogsRippleBgActive: #315a80; //
|
||||
dialogsForwardBg: dialogsBgActive; // forwarding panel background (when forwarding messages in the smallest window size)
|
||||
dialogsForwardFg: dialogsNameFgActive; // forwarding panel text (when forwarding messages in the smallest window size)
|
||||
searchedBarBg: #202b38; // search results bar background (in chats list, contacts box..)
|
||||
searchedBarFg: #8c98a4; // search results bar text (in chats list, contacts box..)
|
||||
topBarBg: #17212b; // top bar background (in chat view, media overview..)
|
||||
emojiPanBg: windowBg; // emoji panel background
|
||||
emojiPanCategories: #17212b; // emoji panel categories background
|
||||
emojiPanHeaderFg: #7c8d9e; // emoji panel section header text
|
||||
emojiPanHeaderBg: #fffffff2; // emoji panel section header background
|
||||
stickerPanDeleteBg: #000000cc; // delete X button background for custom sent stickers in stickers panel (legacy)
|
||||
stickerPanDeleteFg: windowFgActive; // delete X button icon for custom sent stickers in stickers panel (legacy)
|
||||
stickerPreviewBg: #000000b0; // sticker and GIF preview background (when you press and hold on a sticker)
|
||||
historyTextInFg: windowFg; // inbox message text
|
||||
historyTextInFgSelected: #ffffff; // inbox message selected text or text in a selected message
|
||||
historyTextOutFg: #e4ecf2; // outbox message text
|
||||
historyTextOutFgSelected: #ffffff; // outbox message selected text or text in a selected message
|
||||
historyLinkInFg: #70baf5; // inbox message link
|
||||
historyLinkInFgSelected: #aadcff; // inbox message link in a selected text or message
|
||||
historyLinkOutFg: #83caff; // outbox message link
|
||||
historyLinkOutFgSelected: #aadcff; // outbox message link in a selected text or message
|
||||
historyFileNameInFg: historyTextInFg; // inbox media filename text
|
||||
historyFileNameInFgSelected: #ffffff; // inbox media filename text in a selected message
|
||||
historyFileNameOutFg: historyTextOutFg; // outbox media filename text
|
||||
historyFileNameOutFgSelected: #ffffff; // outbox media filename text in a selected message
|
||||
historyOutIconFg: #6bbfff; // outbox message tick / double tick icon
|
||||
historyOutIconFgSelected: #ffffff; // outbox message tick / double tick icon in a selected message
|
||||
historyIconFgInverted: #ffffffe5; // media message tick / double tick icon (like in sent photo)
|
||||
historySendingOutIconFg: #70a4d2; // outbox sending message icon (clock)
|
||||
historySendingInIconFg: #76838b; // inbox sending message icon (clock) (like in sent messages to yourself or in sent messages to a channel)
|
||||
historySendingInvertedIconFg: #ffffffc8; // media sending message icon (clock) (like in sent photo)
|
||||
historyCallArrowInFg: #5093d6; // received phone call arrow
|
||||
historyCallArrowInFgSelected: #ffffff; // received phone call arrow in a selected message
|
||||
historyCallArrowMissedInFg: callArrowMissedFg; // missed phone call arrow
|
||||
historyCallArrowMissedInFgSelected: #ffffff; // missed phone call arrow in a selected message
|
||||
historyCallArrowOutFg: #ffffff; // outgoing phone call arrow
|
||||
historyCallArrowOutFgSelected: #ffffff; // outgoing phone call arrow
|
||||
historyUnreadBarBg: #182433; // new unread messages bar background
|
||||
historyUnreadBarBorder: #03080d00; // new unread messages bar shadow
|
||||
historyUnreadBarFg: #ffffff; // new unread messages bar text
|
||||
historyForwardChooseBg: #0000004c; // forwarding messages in a large window size "choose recipient" background
|
||||
historyForwardChooseFg: windowFgActive; // forwarding messages in a large window size "choose recipient" text
|
||||
historyPeer1NameFg: #fb6169; // red group member name
|
||||
historyPeer1NameFgSelected: #ffffff; // red group member name in a selected message
|
||||
historyPeer1UserpicBg: #ff845e; // red userpic background
|
||||
historyPeer2NameFg: #85de85; // green group member name
|
||||
historyPeer2NameFgSelected: #ffffff; // green group member name in a selected message
|
||||
historyPeer2UserpicBg: #9ad164; // green userpic background
|
||||
historyPeer3NameFg: #f3bc5c; // yellow group member name
|
||||
historyPeer3NameFgSelected: #ffffff; // yellow group member name in a selected message
|
||||
historyPeer3UserpicBg: #e5ca77; // yellow userpic background (actually unused)
|
||||
historyPeer4NameFg: #65bdf3; // blue group member name
|
||||
historyPeer4NameFgSelected: #ffffff; // blue group member name in a selected message
|
||||
historyPeer4UserpicBg: #5caffa; // blue userpic background
|
||||
historyPeer5NameFg: #b48bf2; // purple group member name
|
||||
historyPeer5NameFgSelected: #ffffff; // purple group member name in a selected message
|
||||
historyPeer5UserpicBg: #b694f9; // purple userpic background
|
||||
historyPeer6NameFg: #ff5694; // pink group member name
|
||||
historyPeer6NameFgSelected: #ffffff; // pink group member name in a selected message
|
||||
historyPeer6UserpicBg: #ff8aac; // pink userpic background
|
||||
historyPeer7NameFg: #62d4e3; // sea group member name
|
||||
historyPeer7NameFgSelected: #ffffff; // sea group member name in a selected message
|
||||
historyPeer7UserpicBg: #5bcbe3; // sea userpic background
|
||||
historyPeer8NameFg: #faa357; // orange group member name
|
||||
historyPeer8NameFgSelected: #ffffff; // orange group member name in a selected message
|
||||
historyPeer8UserpicBg: #febb5b; // orange userpic background
|
||||
historyPeerUserpicFg: windowFgActive; // default userpic initials
|
||||
historyPeer1UserpicBg2: #d45246; // the second red userpic background
|
||||
historyPeer2UserpicBg2: #46ba43; // the second green userpic background
|
||||
historyPeer3UserpicBg2: #e5ca77; // the second yellow userpic background (actually unused)
|
||||
historyPeer4UserpicBg2: #408acf; // the second blue userpic background
|
||||
historyPeer5UserpicBg2: #6c61df; // the second purple userpic background
|
||||
historyPeer6UserpicBg2: #d95574; // the second pink userpic background
|
||||
historyPeer7UserpicBg2: #359ad4; // the second sea userpic background
|
||||
historyPeer8UserpicBg2: #f68136; // the second orange userpic background
|
||||
historyPeerSavedMessagesBg2: historyPeer4UserpicBg2; // the second saved messages userpic background
|
||||
historyScrollBarBg: #7f84897a; // scroll bar current rectangle, the bar itself in the chat view (adjusted)
|
||||
historyScrollBarBgOver: #64686cbc; // scroll bar current rectangle with mouse over it in the chat view (adjusted)
|
||||
historyScrollBg: #565a5e4c; // scroll bar background (adjusted)
|
||||
historyScrollBgOver: #5a5d616b; // scroll bar background with mouse over the scroll bar (adjusted)
|
||||
msgInBg: #182533; // inbox message background
|
||||
msgInBgSelected: #2e70a5; // inbox selected message background (and background of selected text in those messages)
|
||||
msgOutBg: #2b5278; // outbox message background
|
||||
msgOutBgSelected: #2e70a5; // outbox selected message background (and background of selected text in those messages)
|
||||
msgSelectOverlay: #3585d44c; // overlay which is filling the media parts of selected messages (like in selected photo message)
|
||||
msgStickerOverlay: #3585d47f; // overlay which is filling the selected sticker message
|
||||
msgInServiceFg: #71bafa; // inbox message information text (like information about a forwarded message original sender)
|
||||
msgInServiceFgSelected: #ffffff; // inbox selected message information text (like information about a forwarded message original sender)
|
||||
msgOutServiceFg: #90caff; // outbox message information text (like information about a forwarded message original sender)
|
||||
msgOutServiceFgSelected: #ffffff; // outbox message information text (like information about a forwarded message original sender)
|
||||
msgInShadow: #748ea200; // inbox message shadow (below the bubble)
|
||||
msgInShadowSelected: #538ebb00; // inbox selected message shadow (below the bubble)
|
||||
msgOutShadow: #00000000; // outbox message shadow (below the bubble)
|
||||
msgOutShadowSelected: #366ea600; // outbox selected message shadow (below the bubble)
|
||||
msgInDateFg: #6d7f8f; // inbox message time text
|
||||
msgInDateFgSelected: #ffffff; // inbox selected message time text
|
||||
msgOutDateFg: #7da8d3; // outbox message time text
|
||||
msgOutDateFgSelected: #ffffff; // outbox selected message time text
|
||||
msgServiceFg: windowFgActive; // service message text (like date dividers or service message about the group title being changed)
|
||||
msgServiceBg: #213040d5; // service message background (like in a service message about group title being changed) (adjusted)
|
||||
msgServiceBgSelected: #2e7ab4; // service message selected text background (like in a service message about group title being changed) (adjusted)
|
||||
msgInReplyBarColor: #429bdb; // inbox message reply outline
|
||||
msgInReplyBarSelColor: #ffffff; // inbox selected message reply outline
|
||||
msgOutReplyBarColor: #65b9f4; // outbox message reply outline
|
||||
msgOutReplyBarSelColor: #ffffff; // outbox selected message reply outline
|
||||
msgImgReplyBarColor: msgServiceFg; // sticker message reply outline
|
||||
msgInMonoFg: #5a8cb7; // inbox message monospace text (like a message sent with `test` text)
|
||||
msgOutMonoFg: #aed1f3; // outbox message monospace text
|
||||
msgInMonoFgSelected: #a3cdf7; // inbox message monospace text in a selected text or message
|
||||
msgOutMonoFgSelected: #a3cdf7; // outbox message monospace text in a selected text or message
|
||||
msgDateImgFg: #fffffff2; // media message time text (like time text in a sent photo)
|
||||
msgDateImgBg: #00000054; // media message time bubble background (like time bubble in a sent photo) or file with thumbnail download icon circle background
|
||||
msgDateImgBgOver: #00000074; // media message download icon circle background with mouse over (like file with thumbnail download icon)
|
||||
msgDateImgBgSelected: #204f7887; // selected media message time bubble background
|
||||
msgFileThumbLinkInFg: lightButtonFg; // inbox media file message with thumbnail download / open with button text
|
||||
msgFileThumbLinkInFgSelected: #ffffff; // inbox selected media file message with thumbnail download / open with button text
|
||||
msgFileThumbLinkOutFg: #6c9ecf; // outbox media file message with thumbnail download / open with button text
|
||||
msgFileThumbLinkOutFgSelected: #ffffff; // outbox selected media file message with thumbnail download / open with button text
|
||||
msgFileInBg: #3f96d0; // inbox audio file download circle background
|
||||
msgFileInBgOver: #489ed7; // inbox audio file download circle background with mouse over
|
||||
msgFileInBgSelected: #6ab4f4; // inbox selected audio file download circle background
|
||||
msgFileOutBg: #4c9ce2; // outbox audio file download circle background
|
||||
msgFileOutBgOver: #54a4e9; // outbox audio file download circle background with mouse over
|
||||
msgFileOutBgSelected: #58abf3; // outbox selected audio file download circle background
|
||||
msgFile1Bg: #3e7eba; // blue shared links / files without image square thumbnail
|
||||
msgFile1BgDark: #24679e; // blue shared files without image download circle background
|
||||
msgFile1BgOver: #1d5e93; // blue shared files without image download circle background with mouse over
|
||||
msgFile1BgSelected: #ffffff; // blue shared files without image download circle background if file is selected
|
||||
msgFile2Bg: #3ea34a; // green shared links / shared files without image square thumbnail
|
||||
msgFile2BgDark: #298835; // green shared files without image download circle background
|
||||
msgFile2BgOver: #1b7725; // green shared files without image download circle background with mouse over
|
||||
msgFile2BgSelected: #1b7725; // green shared files without image download circle background if file is selected
|
||||
msgFile3Bg: #d6454c; // red shared links / shared files without image square thumbnail
|
||||
msgFile3BgDark: #bf333a; // red shared files without image download circle background
|
||||
msgFile3BgOver: #b2282f; // red shared files without image download circle background with mouse over
|
||||
msgFile3BgSelected: #b2282f; // red shared files without image download circle background if file is selected
|
||||
msgFile4Bg: #d99546; // yellow shared links / shared files without image square thumbnail
|
||||
msgFile4BgDark: #c17d39; // yellow shared files without image download circle background
|
||||
msgFile4BgOver: #ac6b29; // yellow shared files without image download circle background with mouse over
|
||||
msgFile4BgSelected: #ac6b29; // yellow shared files without image download circle background if file is selected
|
||||
historyFileInIconFg: #ffffff; // inbox file without thumbnail (like audio file) download arrow icon
|
||||
historyFileInIconFgSelected: #ffffff; // inbox selected file without thumbnail (like audio file) download arrow icon
|
||||
historyFileInRadialFg: #ffffff; // inbox file without thumbnail (like audio file) radial download animation line
|
||||
historyFileInRadialFgSelected: historyFileInIconFgSelected; // inbox selected file without thumbnail (like audio file) radial download animation line
|
||||
historyFileOutIconFg: #ffffff; // outbox file without thumbnail (like audio file) download arrow icon
|
||||
historyFileOutIconFgSelected: #ffffff; // outbox selected file without thumbnail (like audio file) download arrow icon
|
||||
historyFileOutRadialFg: #ffffff; // outbox file without thumbnail (like audio file) radial download animation line
|
||||
historyFileOutRadialFgSelected: #ffffff; // outbox selected file without thumbnail (like audio file) radial download animation line
|
||||
historyFileThumbIconFg: #efefef; // file with thumbnail (or photo / video) download arrow icon
|
||||
historyFileThumbIconFgSelected: #ffffff; // selected file with thumbnail (or photo / video) download arrow icon
|
||||
historyFileThumbRadialFg: historyFileThumbIconFg; // file with thumbnail (or photo / video) radial download animation line
|
||||
historyFileThumbRadialFgSelected: #ffffff; // selected file with thumbnail (or photo / video) radial download animation line
|
||||
historyVideoMessageProgressFg: historyFileThumbIconFg; // radial playback progress in round video messages
|
||||
msgWaveformInActive: #549cd7; // inbox voice message active waveform lines (like played part of currently playing voice message)
|
||||
msgWaveformInActiveSelected: #ffffff; // inbox selected voice message active waveform lines (like played part of currently playing voice message)
|
||||
msgWaveformInInactive: #3a4d61; // inbox voice message inactive waveform lines (like upcoming part of currently playing voice message)
|
||||
msgWaveformInInactiveSelected: #6fa5d4; // inbox selected voice message inactive waveform lines (like upcoming part of currently playing voice message)
|
||||
msgWaveformOutActive: #62b2fd; // outbox voice message active waveform lines (like played part of currently playing voice message)
|
||||
msgWaveformOutActiveSelected: #ffffff; // outbox selected voice message active waveform lines (like played part of currently playing voice message)
|
||||
msgWaveformOutInactive: #4b7fb3; // outbox voice message inactive waveform lines (like upcoming part of currently playing voice message)
|
||||
msgWaveformOutInactiveSelected: #6fa5d4; // outbox selected voice message inactive waveform lines (like upcoming part of currently playing voice message)
|
||||
msgBotKbOverBgAdd: #80b1db0f; // this is painted over a bot inline keyboard button (which has msgServiceBg background) when mouse is over that button
|
||||
msgBotKbIconFg: msgServiceFg; // bot inline keyboard button icon in the top-right corner (like in @vote bot when a poll is ready to be shared)
|
||||
msgBotKbRippleBg: #92c0e50b; // bot inline keyboard button ripple effect
|
||||
mediaInFg: msgInDateFg; // inbox media message status text (like in file that is being downloaded)
|
||||
mediaInFgSelected: msgInDateFgSelected; // inbox selected media message status text (like in file that is being downloaded)
|
||||
mediaOutFg: msgOutDateFg; // outbox media message status text (like in file that is being downloaded)
|
||||
mediaOutFgSelected: msgOutDateFgSelected; // outbox selected media message status text (like in file that is being downloaded)
|
||||
youtubePlayIconBg: #e83131c8; // youtube play icon background (when a link to a youtube video with a webpage preview is sent)
|
||||
youtubePlayIconFg: windowFgActive; // youtube play icon arrow (when a link to a youtube video with a webpage preview is sent)
|
||||
videoPlayIconBg: #0000007f; // other video play icon background (like when a link to a vimeo video with a webpage preview is sent)
|
||||
videoPlayIconFg: #ffffff; // other video play icon arrow (like when a link to a vimeo video with a webpage preview is sent)
|
||||
toastBg: #000000b2; // toast notification background (like when you click on your t.me link when editing your username)
|
||||
toastFg: windowFgActive; // toast notification text (like when you click on your t.me link when editing your username)
|
||||
reportSpamBg: #363c42; // report spam panel background (like a non contact user writes your for the first time)
|
||||
reportSpamFg: windowFg; // report spam panel text (when you send a report from that panel)
|
||||
historyToDownBg: #1d2b3a; // arrow button background (to scroll to the end of the viewed chat)
|
||||
historyToDownBgOver: #243446; // arrow button background with mouse over
|
||||
historyToDownBgRipple: #2b3c4f; // arrow button ripple effect
|
||||
historyToDownFg: #adb4ba; // arrow button icon
|
||||
historyToDownFgOver: menuIconFgOver; // arrow button icon with mouse over
|
||||
historyToDownShadow: #00000040; // arrow button shadow
|
||||
historyComposeAreaBg: #17212b; // history compose area background (message write area / reply information / forwarding information)
|
||||
historyComposeAreaFg: historyTextInFg; // history compose area text
|
||||
historyComposeAreaFgService: msgInDateFg; // history compose area text when replying to a media message
|
||||
historyComposeIconFg: menuIconFg; // history compose area icon (like emoji, attach, bot command..)
|
||||
historyComposeIconFgOver: menuIconFgOver; // history compose area icon with mouse over
|
||||
historySendIconFg: windowBgActive; // send message icon
|
||||
historySendIconFgOver: windowBgActive; // send message icon with mouse over
|
||||
historyPinnedBg: #1b2734; // pinned message area background
|
||||
historyReplyBg: historyComposeAreaBg; // reply / forward / edit message area background
|
||||
historyReplyIconFg: windowBgActive; // reply / forward / edit message left icon
|
||||
historyReplyCancelFg: cancelIconFg; // reply / forward / edit message cancel button
|
||||
historyReplyCancelFgOver: cancelIconFgOver; // reply / forward / edit message cancel button with mouse over
|
||||
historyComposeButtonBg: historyComposeAreaBg; // unblock / join channel / mute channel button background
|
||||
historyComposeButtonBgOver: #1c2835; // unblock / join channel / mute channel button background with mouse over
|
||||
historyComposeButtonBgRipple: #222f3e; // unblock / join channel / mute channel button ripple effect
|
||||
overviewCheckBg: #00000040; // shared files / links checkbox background for not selected rows when some rows are selected
|
||||
overviewCheckFg: #ffffff; // shared files / links checkbox icon for not selected rows when some rows are selected
|
||||
overviewCheckFgActive: #ffffff; // shared files / links checkbox icon for selected rows
|
||||
overviewPhotoSelectOverlay: #3fa2e333; // shared photos / videos / links fill for selected rows
|
||||
profileStatusFgOver: #677a8b; // group members list in group profile user last seen text with mouse over
|
||||
profileVerifiedCheckBg: windowBgActive; // profile verified check icon background
|
||||
profileVerifiedCheckFg: #ffffff; // profile verified check icon tick
|
||||
profileAdminStartFg: #62a9e6; // group members list admin star icon
|
||||
notificationsBoxMonitorFg: windowFg; // custom notifications settings box monitor color
|
||||
notificationsBoxScreenBg: dialogsBgActive; // #6389a8; // custom notifications settings box monitor screen background
|
||||
notificationSampleUserpicFg: windowBgActive; // custom notifications settings box small sample userpic placeholder
|
||||
notificationSampleCloseFg: #d7d7d7; // custom notifications settings box small sample close button placeholder
|
||||
notificationSampleTextFg: #d7d7d7; // custom notifications settings box small sample text placeholder
|
||||
notificationSampleNameFg: #939393; // custom notifications settings box small sample name placeholder
|
||||
changePhoneSimcardFrom: notificationSampleTextFg; // change phone number box left simcard icon
|
||||
changePhoneSimcardTo: notificationSampleNameFg; // change phone number box right simcard and plane icons
|
||||
mainMenuBg: windowBg; // main menu background
|
||||
mainMenuCoverBg: #276899; // main menu top cover background
|
||||
mainMenuCoverFg: windowFgActive; // main menu top cover text
|
||||
mainMenuCloudFg: activeButtonFg; //
|
||||
mainMenuCloudBg: #185680; //
|
||||
mediaPlayerBg: windowBg; // audio file player background
|
||||
mediaPlayerActiveFg: windowBgActive; // audio file player playback progress already played part
|
||||
mediaPlayerInactiveFg: sliderBgInactive; // audio file player playback progress upcoming (not played yet) part with mouse over
|
||||
mediaPlayerDisabledFg: #9dd1ef; // audio file player loading progress (when you're playing an audio file and switch to the previous one which is not loaded yet)
|
||||
mediaviewFileBg: windowBg; // file rectangle background (when you view a png file in Media Viewer and go to a previous, not loaded yet, file)
|
||||
mediaviewFileNameFg: windowFg; // file name in file rectangle
|
||||
mediaviewFileSizeFg: windowSubTextFg; // file size text in file rectangle
|
||||
mediaviewFileRedCornerFg: #d55959; // red file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .pdf)
|
||||
mediaviewFileYellowCornerFg: #e8a659; // yellow file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .zip)
|
||||
mediaviewFileGreenCornerFg: #49a957; // green file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .exe)
|
||||
mediaviewFileBlueCornerFg: #599dcf; // blue file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .dmg)
|
||||
mediaviewFileExtFg: activeButtonFg; // file extension text in file thumbnail placeholder in file rectangle
|
||||
mediaviewMenuBg: #383838; // context menu in Media Viewer background
|
||||
mediaviewMenuBgOver: #505050; // context menu item background with mouse over
|
||||
mediaviewMenuBgRipple: #676767; // context menu item ripple effect
|
||||
mediaviewMenuFg: windowFgActive; // context menu item text
|
||||
mediaviewBg: #222222eb; // Media Viewer background
|
||||
mediaviewVideoBg: imageBg; // Media Viewer background when viewing a video in full screen
|
||||
mediaviewControlBg: #0000003c; // controls background (like next photo / previous photo)
|
||||
mediaviewControlFg: windowFgActive; // controls icon (like next photo / previous photo)
|
||||
mediaviewCaptionBg: #11111180; // caption text background (when viewing photo with caption)
|
||||
mediaviewCaptionFg: mediaviewControlFg; // caption text
|
||||
mediaviewTextLinkFg: #70baf5; // caption text link
|
||||
mediaviewSaveMsgBg: toastBg; // save to file toast message background in Media Viewer
|
||||
mediaviewSaveMsgFg: toastFg; // save to file toast message text
|
||||
mediaviewPlaybackActive: #c7c7c7; // video playback progress already played part
|
||||
mediaviewPlaybackInactive: #252525; // video playback progress upcoming (not played yet) part
|
||||
mediaviewPlaybackActiveOver: #ffffff; // video playback progress already played part with mouse over
|
||||
mediaviewPlaybackInactiveOver: #474747; // video playback progress upcoming (not played yet) part with mouse over
|
||||
mediaviewPlaybackProgressFg: #ffffffc7; // video playback progress text
|
||||
mediaviewPlaybackIconFg: mediaviewPlaybackActive; // video playback controls icon
|
||||
mediaviewPlaybackIconFgOver: mediaviewPlaybackActiveOver; // video playback controls icon with mouse over
|
||||
mediaviewTransparentBg: #ffffff; // transparent filling part (when viewing a transparent .png file in Media Viewer)
|
||||
mediaviewTransparentFg: #cccccc; // another transparent filling part
|
||||
notificationBg: windowBg; // custom notification window background
|
||||
callBg: #14191ff5; // phone call popup background
|
||||
callNameFg: #ffffff; // phone call popup name text
|
||||
callFingerprintBg: #00000066; // phone call popup emoji fingerprint background
|
||||
callStatusFg: #aaabac; // phone call popup status text
|
||||
callIconFg: #ffffff; // phone call popup answer, hangup and mute mic icon
|
||||
callAnswerBg: #488fc9; // phone call popup answer button background
|
||||
callAnswerRipple: #4286c2; // phone call popup answer button ripple effect
|
||||
callAnswerBgOuter: #3f95eb26; // phone call popup answer button outer ripple effect
|
||||
callHangupBg: #cc4646; // phone call popup hangup button background
|
||||
callHangupRipple: #ca4141; // phone call popup hangup button ripple effect
|
||||
callCancelBg: #ffffff; // phone call popup line busy cancel button background
|
||||
callCancelFg: #536271; // phone call popup line busy cancel button icon
|
||||
callCancelRipple: #435363; // phone call popup line busy cancel button ripple effect
|
||||
callMuteRipple: #ffffff12; // phone call popup mute mic ripple effect
|
||||
callBarBg: #366693; // active phone call bar background
|
||||
callBarMuteRipple: #4b7dab; // active phone call bar mute and hangup button ripple effect
|
||||
callBarBgMuted: #35495d; // phone call bar with muted mic background
|
||||
callBarUnmuteRipple: #435b73; // phone call bar with muted mic mute and hangup button ripple effect
|
||||
callBarFg: dialogsNameFgActive; // phone call bar text and icons
|
||||
importantTooltipBg: toastBg; //
|
||||
importantTooltipFg: toastFg; //
|
||||
importantTooltipFgLink: #65b6fc; //
|
||||
filterInputActiveBg: #242f3d; // default rounded input field active background (like in chats list search field when field is focused)
|
||||
botKbBg: #242f3d; // bot keyboard button background
|
||||
botKbDownBg: #2d3a49; // bot keyboard button ripple effect
|
||||
emojiIconFg: #6c7883; // emoji category icon
|
||||
emojiIconFgActive: #51a0e5; // active emoji category icon
|
||||
overviewCheckBorder: #e4eaef; // shared media round checkbox border
|
||||
sideBarBg: #0e1621; // filters side bar background
|
||||
sideBarBgActive: #25303e; // filters side bar active background
|
||||
sideBarBgRipple: #1e2733; // filters side bar ripple effect
|
||||
sideBarTextFg: #768c9e; // filters side bar text
|
||||
sideBarTextFgActive: #64b9fa; // filters side bar active item text
|
||||
sideBarIconFg: #768c9e; // filters side bar icon
|
||||
sideBarIconFgActive: #5eb5f7; // filters side bar active item icon
|
||||
sideBarBadgeBg: #5eb5f7; // filters side bar badge background
|
||||
sideBarBadgeBgMuted: #768c9e; // filters side bar unimportant badge background
|
||||
statisticsChartInactive: #313d4cc8; // inactive area in footer of statistic charts
|
||||
statisticsChartActive: #526679d8; // sides in footer of statistic charts
|
||||
@@ -0,0 +1,710 @@
|
||||
{
|
||||
"$schema": "vscode://schemas/color-theme",
|
||||
"name": "2026 Dark",
|
||||
"include": "./dark_modern.json",
|
||||
"type": "dark",
|
||||
"colors": {
|
||||
"foreground": "#bfbfbf",
|
||||
"disabledForeground": "#555555",
|
||||
"errorForeground": "#f48771",
|
||||
"descriptionForeground": "#8C8C8C",
|
||||
"icon.foreground": "#8C8C8C",
|
||||
"focusBorder": "#3994BCB3",
|
||||
"textBlockQuote.background": "#242526",
|
||||
"textBlockQuote.border": "#2A2B2C",
|
||||
"textCodeBlock.background": "#242526",
|
||||
"textLink.foreground": "#48A0C7",
|
||||
"textLink.activeForeground": "#53A5CA",
|
||||
"textPreformat.background": "#262626",
|
||||
"textPreformat.foreground": "#8C8C8C",
|
||||
"textSeparator.foreground": "#2a2a2a",
|
||||
"button.background": "#297AA0",
|
||||
"button.foreground": "#FFFFFF",
|
||||
"button.hoverBackground": "#2B7DA3",
|
||||
"button.border": "#297AA0",
|
||||
"button.secondaryHoverBackground": "#FFFFFF10",
|
||||
"button.secondaryBorder": "#333536",
|
||||
"checkbox.background": "#242526",
|
||||
"checkbox.border": "#707070",
|
||||
"checkbox.foreground": "#8C8C8C",
|
||||
"dropdown.background": "#191A1B",
|
||||
"dropdown.border": "#333536",
|
||||
"dropdown.foreground": "#bfbfbf",
|
||||
"dropdown.listBackground": "#191A1B",
|
||||
"input.background": "#191A1B",
|
||||
"input.border": "#333536",
|
||||
"input.foreground": "#bfbfbf",
|
||||
"input.placeholderForeground": "#555555",
|
||||
"inputOption.activeBackground": "#313233",
|
||||
"inputOption.activeForeground": "#bfbfbf",
|
||||
"inputOption.activeBorder": "#2A2B2C",
|
||||
"inputValidation.infoBackground": "#1E3A47",
|
||||
"inputValidation.infoBorder": "#3994BC",
|
||||
"inputValidation.infoForeground": "#bfbfbf",
|
||||
"inputValidation.warningBackground": "#352A05",
|
||||
"inputValidation.warningBorder": "#B89500",
|
||||
"inputValidation.warningForeground": "#bfbfbf",
|
||||
"inputValidation.errorBackground": "#3A1D1D",
|
||||
"inputValidation.errorBorder": "#BE1100",
|
||||
"inputValidation.errorForeground": "#bfbfbf",
|
||||
"scrollbar.shadow": "#191B1D4D",
|
||||
"scrollbarSlider.background": "#A8A9AA85",
|
||||
"scrollbarSlider.hoverBackground": "#A8A9AA90",
|
||||
"scrollbarSlider.activeBackground": "#A8A9AA9C",
|
||||
"badge.background": "#307E9F",
|
||||
"badge.foreground": "#FFFFFF",
|
||||
"progressBar.background": "#878889",
|
||||
"list.activeSelectionBackground": "#FFFFFF22",
|
||||
"list.activeSelectionForeground": "#ededed",
|
||||
"list.inactiveSelectionBackground": "#2C2D2E",
|
||||
"list.inactiveSelectionForeground": "#ededed",
|
||||
"list.hoverBackground": "#FFFFFF14",
|
||||
"list.hoverForeground": "#bfbfbf",
|
||||
"list.dropBackground": "#3994BC1A",
|
||||
"toolbar.activeBackground": "#FFFFFF33",
|
||||
"list.focusBackground": "#FFFFFF22",
|
||||
"list.focusForeground": "#bfbfbf",
|
||||
"list.focusOutline": "#3994BCB3",
|
||||
"list.highlightForeground": "#48A0C7",
|
||||
"list.invalidItemForeground": "#444444",
|
||||
"list.errorForeground": "#f48771",
|
||||
"list.warningForeground": "#e5ba7d",
|
||||
"activityBar.background": "#191A1B",
|
||||
"activityBar.foreground": "#bfbfbf",
|
||||
"activityBar.inactiveForeground": "#8C8C8C",
|
||||
"activityBar.activeBackground": "#313233",
|
||||
"activityBar.border": "#2A2B2C",
|
||||
"activityBar.activeBorder": "#bfbfbf",
|
||||
"activityBar.activeFocusBorder": "#3994BCB3",
|
||||
"activityBarBadge.background": "#307E9F",
|
||||
"activityBarBadge.foreground": "#FFFFFF",
|
||||
"activityBarTop.activeBorder": "#bfbfbf",
|
||||
"sideBar.background": "#191A1B",
|
||||
"sideBar.foreground": "#bfbfbf",
|
||||
"sideBar.border": "#2A2B2C",
|
||||
"sideBarTitle.foreground": "#bfbfbf",
|
||||
"sideBarSectionHeader.background": "#191A1B",
|
||||
"sideBarSectionHeader.foreground": "#bfbfbf",
|
||||
"sideBarSectionHeader.border": "#2A2B2C",
|
||||
"titleBar.activeBackground": "#191A1B",
|
||||
"titleBar.activeForeground": "#8C8C8C",
|
||||
"titleBar.inactiveBackground": "#121314",
|
||||
"titleBar.inactiveForeground": "#8C8C8C",
|
||||
"titleBar.border": "#2A2B2C",
|
||||
"menubar.selectionBackground": "#242526",
|
||||
"menubar.selectionForeground": "#bfbfbf",
|
||||
"menu.background": "#202122",
|
||||
"menu.foreground": "#bfbfbf",
|
||||
"menu.selectionBackground": "#3994BC26",
|
||||
"menu.selectionForeground": "#bfbfbf",
|
||||
"menu.selectionBorder": "#3994BC",
|
||||
"menu.separatorBackground": "#2A2B2C",
|
||||
"menu.border": "#2A2B2C",
|
||||
"commandCenter.foreground": "#bfbfbf",
|
||||
"commandCenter.activeForeground": "#bfbfbf",
|
||||
"commandCenter.background": "#191A1B",
|
||||
"commandCenter.activeBackground": "#FFFFFF0F",
|
||||
"commandCenter.border": "#2E3031",
|
||||
"editor.background": "#121314",
|
||||
"editor.foreground": "#BBBEBF",
|
||||
"editorStickyScroll.background": "#121314",
|
||||
"editorStickyScrollHover.background": "#202122",
|
||||
"editorStickyScroll.border": "#2A2B2C",
|
||||
"editorLineNumber.foreground": "#858889",
|
||||
"editorLineNumber.activeForeground": "#BBBEBF",
|
||||
"editorCursor.foreground": "#BBBEBF",
|
||||
"editor.selectionBackground": "#276782dd",
|
||||
"editor.inactiveSelectionBackground": "#27678260",
|
||||
"editor.selectionHighlightBackground": "#27678260",
|
||||
"editor.wordHighlightBackground": "#27678250",
|
||||
"editor.wordHighlightStrongBackground": "#27678280",
|
||||
"editor.findMatchBackground": "#27678290",
|
||||
"editor.findMatchHighlightBackground": "#27678280",
|
||||
"editor.findRangeHighlightBackground": "#FFFFFF13",
|
||||
"editor.hoverHighlightBackground": "#FFFFFF13",
|
||||
"editor.lineHighlightBackground": "#242526",
|
||||
"editor.rangeHighlightBackground": "#FFFFFF13",
|
||||
"editorLink.activeForeground": "#3a94bc",
|
||||
"editorWhitespace.foreground": "#8C8C8C4D",
|
||||
"editorIndentGuide.background1": "#8384854D",
|
||||
"editorIndentGuide.activeBackground1": "#838485",
|
||||
"editorRuler.foreground": "#848484",
|
||||
"editorCodeLens.foreground": "#8C8C8C",
|
||||
"editorBracketMatch.background": "#3994BC55",
|
||||
"editorBracketMatch.border": "#2A2B2C",
|
||||
"editorWidget.background": "#202122",
|
||||
"editorWidget.border": "#2A2B2C",
|
||||
"editorWidget.foreground": "#bfbfbf",
|
||||
"editorSuggestWidget.background": "#202122",
|
||||
"editorSuggestWidget.border": "#2A2B2C",
|
||||
"editorSuggestWidget.foreground": "#bfbfbf",
|
||||
"editorSuggestWidget.highlightForeground": "#bfbfbf",
|
||||
"editorSuggestWidget.selectedBackground": "#FFFFFF26",
|
||||
"editorSuggestWidget.focusOutline": "#3994BCB3",
|
||||
"editorHoverWidget.background": "#202122",
|
||||
"editorHoverWidget.border": "#2A2B2C",
|
||||
"widget.border": "#2A2B2C",
|
||||
"peekView.border": "#2A2B2C",
|
||||
"peekViewEditor.background": "#191A1B",
|
||||
"peekViewEditor.matchHighlightBackground": "#3994BC33",
|
||||
"peekViewResult.background": "#191A1B",
|
||||
"peekViewResult.fileForeground": "#bfbfbf",
|
||||
"peekViewResult.lineForeground": "#8C8C8C",
|
||||
"peekViewResult.matchHighlightBackground": "#3994BC33",
|
||||
"peekViewResult.selectionBackground": "#3994BC26",
|
||||
"peekViewResult.selectionForeground": "#bfbfbf",
|
||||
"peekViewTitle.background": "#242526",
|
||||
"peekViewTitleDescription.foreground": "#8C8C8C",
|
||||
"peekViewTitleLabel.foreground": "#bfbfbf",
|
||||
"editorGutter.background": "#121314",
|
||||
"editorGutter.addedBackground": "#72C892",
|
||||
"editorGutter.deletedBackground": "#F28772",
|
||||
"diffEditor.insertedLineBackground": "#347d3926",
|
||||
"diffEditor.insertedTextBackground": "#57ab5a4d",
|
||||
"diffEditor.removedLineBackground": "#c93c3726",
|
||||
"diffEditor.removedTextBackground": "#f470674d",
|
||||
"editorOverviewRuler.border": "#2A2B2C",
|
||||
"editorOverviewRuler.findMatchForeground": "#3a94bc99",
|
||||
"editorOverviewRuler.modifiedForeground": "#6ab890",
|
||||
"editorOverviewRuler.addedForeground": "#73c991",
|
||||
"editorOverviewRuler.deletedForeground": "#f48771",
|
||||
"editorOverviewRuler.errorForeground": "#f48771",
|
||||
"editorOverviewRuler.warningForeground": "#e5ba7d",
|
||||
"panel.background": "#191A1B",
|
||||
"panel.border": "#2A2B2C",
|
||||
"panelSection.border": "#2A2B2C",
|
||||
"panelSectionHeader.border": "#2A2B2C",
|
||||
"panelTitle.activeBorder": "#3994BC",
|
||||
"panelTitle.activeForeground": "#bfbfbf",
|
||||
"panelTitle.inactiveForeground": "#8C8C8C",
|
||||
"statusBar.background": "#191A1B",
|
||||
"statusBar.inactiveBackground": "#121314",
|
||||
"statusBar.foreground": "#8C8C8C",
|
||||
"statusBar.border": "#2A2B2C",
|
||||
"statusBar.focusBorder": "#3994BCB3",
|
||||
"statusBar.debuggingBackground": "#3994BC",
|
||||
"statusBar.debuggingForeground": "#FFFFFF",
|
||||
"statusBar.noFolderBackground": "#191A1B",
|
||||
"statusBar.noFolderForeground": "#8C8C8C",
|
||||
"statusBarItem.activeBackground": "#4B4C4D",
|
||||
"statusBarItem.hoverBackground": "#323233",
|
||||
"statusBarItem.focusBorder": "#3994BCB3",
|
||||
"statusBarItem.prominentBackground": "#3994BC",
|
||||
"statusBarItem.prominentForeground": "#FFFFFF",
|
||||
"statusBarItem.prominentHoverBackground": "#3994BC",
|
||||
"tab.activeBackground": "#121314",
|
||||
"tab.activeForeground": "#bfbfbf",
|
||||
"tab.inactiveBackground": "#191A1B",
|
||||
"tab.inactiveForeground": "#8C8C8C",
|
||||
"tab.border": "#2A2B2C",
|
||||
"tab.lastPinnedBorder": "#2A2B2C",
|
||||
"tab.activeBorderTop": "#3994BC",
|
||||
"tab.hoverBackground": "#121314",
|
||||
"tab.hoverForeground": "#bfbfbf",
|
||||
"tab.unfocusedActiveBackground": "#121314",
|
||||
"tab.unfocusedActiveForeground": "#8C8C8C",
|
||||
"tab.unfocusedInactiveBackground": "#191A1B",
|
||||
"tab.unfocusedInactiveForeground": "#444444",
|
||||
"editorGroupHeader.tabsBackground": "#191A1B",
|
||||
"tab.activeBorder": "#121314",
|
||||
"editorGroupHeader.tabsBorder": "#2A2B2C",
|
||||
"breadcrumb.foreground": "#8C8C8C",
|
||||
"breadcrumb.background": "#121314",
|
||||
"breadcrumb.focusForeground": "#bfbfbf",
|
||||
"breadcrumb.activeSelectionForeground": "#bfbfbf",
|
||||
"breadcrumbPicker.background": "#202122",
|
||||
"notificationCenter.border": "#2A2B2C",
|
||||
"notificationCenterHeader.foreground": "#bfbfbf",
|
||||
"notificationCenterHeader.background": "#242526",
|
||||
"notificationToast.border": "#2A2B2C",
|
||||
"notifications.foreground": "#bfbfbf",
|
||||
"notifications.background": "#202122",
|
||||
"notifications.border": "#2A2B2C",
|
||||
"notificationLink.foreground": "#3a94bc",
|
||||
"notificationsWarningIcon.foreground": "#CCA700",
|
||||
"notificationsErrorIcon.foreground": "#f48771",
|
||||
"notificationsInfoIcon.foreground": "#3a94bc",
|
||||
"activityWarningBadge.foreground": "#202020",
|
||||
"activityWarningBadge.background": "#CCA700",
|
||||
"activityErrorBadge.foreground": "#FFFFFF",
|
||||
"activityErrorBadge.background": "#f48771",
|
||||
"extensionButton.prominentBackground": "#297AA0",
|
||||
"extensionButton.prominentForeground": "#FFFFFF",
|
||||
"extensionButton.prominentHoverBackground": "#2B7DA3",
|
||||
"pickerGroup.border": "#2A2B2C",
|
||||
"pickerGroup.foreground": "#bfbfbf",
|
||||
"quickInput.background": "#202122",
|
||||
"quickInput.foreground": "#bfbfbf",
|
||||
"quickInputList.focusBackground": "#297AA0",
|
||||
"quickInputList.focusForeground": "#FFFFFF",
|
||||
"quickInputList.focusIconForeground": "#FFFFFF",
|
||||
"quickInputList.focusHighlightForeground": "#FFFFFF",
|
||||
"terminal.selectionBackground": "#3994BC33",
|
||||
"terminal.background": "#191A1B",
|
||||
"terminal.border": "#2A2B2C",
|
||||
"terminal.tab.activeBorder": "#3994BC00",
|
||||
"terminalCursor.foreground": "#bfbfbf",
|
||||
"terminalCursor.background": "#191A1B",
|
||||
"gitDecoration.addedResourceForeground": "#73c991",
|
||||
"gitDecoration.modifiedResourceForeground": "#e5ba7d",
|
||||
"gitDecoration.deletedResourceForeground": "#f48771",
|
||||
"gitDecoration.untrackedResourceForeground": "#73c991",
|
||||
"gitDecoration.ignoredResourceForeground": "#8C8C8C",
|
||||
"gitDecoration.conflictingResourceForeground": "#f48771",
|
||||
"gitDecoration.stageModifiedResourceForeground": "#e5ba7d",
|
||||
"gitDecoration.stageDeletedResourceForeground": "#f48771",
|
||||
"quickInputTitle.background": "#202122",
|
||||
"commandCenter.activeBorder": "#333536",
|
||||
"chat.requestBubbleBackground": "#ffffff13",
|
||||
"chat.requestBubbleHoverBackground": "#ffffff22",
|
||||
"chat.inputWorkingBorderColor1": "#297AA0",
|
||||
"editorCommentsWidget.rangeBackground": "#488FAE26",
|
||||
"editorCommentsWidget.rangeActiveBackground": "#488FAE46",
|
||||
"charts.foreground": "#CCCCCC",
|
||||
"charts.lines": "#C8CACC80",
|
||||
"charts.blue": "#57A3F8",
|
||||
"charts.red": "#EF8773",
|
||||
"charts.yellow": "#E0B97F",
|
||||
"charts.orange": "#CD861A",
|
||||
"charts.green": "#86CF86",
|
||||
"charts.purple": "#AD80D7",
|
||||
"inlineChat.border": "#00000000",
|
||||
"minimapSlider.background": "#A8A9AA85",
|
||||
"minimapSlider.hoverBackground": "#A8A9AA90",
|
||||
"minimapSlider.activeBackground": "#A8A9AA9C",
|
||||
"agents.background": "#121314",
|
||||
"agentsPanel.background": "#191A1B",
|
||||
"agentsPanel.foreground": "#bfbfbf",
|
||||
"agentsPanel.border": "#2A2B2C",
|
||||
"surface.background": "#191A1B",
|
||||
"surface.foreground": "#bfbfbf",
|
||||
"surface.border": "#2A2B2C",
|
||||
"agentsGradient.tintColor": "#297AA0",
|
||||
"agentsChatInput.background": "#202122",
|
||||
"agentsChatInput.foreground": "#bfbfbf",
|
||||
"agentsChatInput.border": "#333536",
|
||||
"agentsChatInput.focusBorder": "#3994BCB3",
|
||||
"agentsChatInput.placeholderForeground": "#555555",
|
||||
"agentsNewSessionButton.background": "#00000000",
|
||||
"agentsNewSessionButton.foreground": "#bfbfbf",
|
||||
"agentsNewSessionButton.border": "#333536",
|
||||
"agentsNewSessionButton.hoverBackground": "#FFFFFF18",
|
||||
"agentsBadge.background": "#307E9F",
|
||||
"agentsBadge.foreground": "#FFFFFF",
|
||||
"agentsUnreadBadge.background": "#307E9F",
|
||||
"agentsUnreadBadge.foreground": "#FFFFFF",
|
||||
"agentsBottomPanel.border": "#00000000"
|
||||
},
|
||||
"tokenColors": [
|
||||
{
|
||||
"scope": [
|
||||
"comment",
|
||||
"punctuation.definition.comment",
|
||||
"string.comment"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#8b949e"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"constant.other.placeholder",
|
||||
"constant.character"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#ff7b72"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"constant",
|
||||
"entity.name.constant",
|
||||
"variable.other.constant",
|
||||
"variable.other.enummember",
|
||||
"variable.language",
|
||||
"entity"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"entity.name",
|
||||
"meta.export.default",
|
||||
"meta.definition.variable"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#ffa657"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"variable.parameter.function",
|
||||
"meta.jsx.children",
|
||||
"meta.block",
|
||||
"meta.tag.attributes",
|
||||
"entity.name.constant",
|
||||
"meta.object.member",
|
||||
"meta.embedded.expression"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#c9d1d9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "entity.name.function",
|
||||
"settings": {
|
||||
"foreground": "#d2a8ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"entity.name.tag",
|
||||
"support.class.component"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#7ee787"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword",
|
||||
"settings": {
|
||||
"foreground": "#ff7b72"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"storage",
|
||||
"storage.type"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#ff7b72"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"storage.modifier.package",
|
||||
"storage.modifier.import",
|
||||
"storage.type.java"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#c9d1d9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"string",
|
||||
"string punctuation.section.embedded source"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#a5d6ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "support",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.property-name",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "variable",
|
||||
"settings": {
|
||||
"foreground": "#ffa657"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "variable.other",
|
||||
"settings": {
|
||||
"foreground": "#c9d1d9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "invalid.broken",
|
||||
"settings": {
|
||||
"foreground": "#ffa198",
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "invalid.deprecated",
|
||||
"settings": {
|
||||
"foreground": "#ffa198",
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "invalid.illegal",
|
||||
"settings": {
|
||||
"foreground": "#ffa198",
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "invalid.unimplemented",
|
||||
"settings": {
|
||||
"foreground": "#ffa198",
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "carriage-return",
|
||||
"settings": {
|
||||
"foreground": "#f0f6fc",
|
||||
"fontStyle": "italic underline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "message.error",
|
||||
"settings": {
|
||||
"foreground": "#ffa198"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string variable",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"source.regexp",
|
||||
"string.regexp"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#a5d6ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"string.regexp.character-class",
|
||||
"string.regexp constant.character.escape",
|
||||
"string.regexp source.ruby.embedded",
|
||||
"string.regexp string.regexp.arbitrary-repitition"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#a5d6ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string.regexp constant.character.escape",
|
||||
"settings": {
|
||||
"foreground": "#7ee787",
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "support.constant",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "support.variable",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "support.type.property-name.json",
|
||||
"settings": {
|
||||
"foreground": "#7ee787"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.module-reference",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "punctuation.definition.list.begin.markdown",
|
||||
"settings": {
|
||||
"foreground": "#ffa657"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"markup.heading",
|
||||
"markup.heading entity.name"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#79c0ff",
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.quote",
|
||||
"settings": {
|
||||
"foreground": "#7ee787"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.italic",
|
||||
"settings": {
|
||||
"foreground": "#c9d1d9",
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.bold",
|
||||
"settings": {
|
||||
"foreground": "#c9d1d9",
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"markup.underline"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "underline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"markup.strikethrough"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "strikethrough"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.inline.raw",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"markup.deleted",
|
||||
"meta.diff.header.from-file",
|
||||
"punctuation.definition.deleted"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#ffa198"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"punctuation.section.embedded"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#ff7b72"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"markup.inserted",
|
||||
"meta.diff.header.to-file",
|
||||
"punctuation.definition.inserted"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#7ee787"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"markup.changed",
|
||||
"punctuation.definition.changed"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#ffa657"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"markup.ignored",
|
||||
"markup.untracked"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#0d1117"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.diff.range",
|
||||
"settings": {
|
||||
"foreground": "#d2a8ff",
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.diff.header",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.separator",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff",
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.output",
|
||||
"settings": {
|
||||
"foreground": "#79c0ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"brackethighlighter.tag",
|
||||
"brackethighlighter.curly",
|
||||
"brackethighlighter.round",
|
||||
"brackethighlighter.square",
|
||||
"brackethighlighter.angle",
|
||||
"brackethighlighter.quote"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#8b949e"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "brackethighlighter.unmatched",
|
||||
"settings": {
|
||||
"foreground": "#ffa198"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"constant.other.reference.link",
|
||||
"string.other.link"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#a5d6ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "token.info-token",
|
||||
"settings": {
|
||||
"foreground": "#6796E6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "token.warn-token",
|
||||
"settings": {
|
||||
"foreground": "#CD9731"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "token.error-token",
|
||||
"settings": {
|
||||
"foreground": "#F44747"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "token.debug-token",
|
||||
"settings": {
|
||||
"foreground": "#B267E6"
|
||||
}
|
||||
}
|
||||
],
|
||||
"semanticHighlighting": true
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"$schema": "vscode://schemas/color-theme",
|
||||
"name": "Dark Modern",
|
||||
"include": "./dark_plus.json",
|
||||
"colors": {
|
||||
"activityBar.activeBorder": "#0078D4",
|
||||
"activityBar.background": "#181818",
|
||||
"activityBar.border": "#2B2B2B",
|
||||
"activityBar.foreground": "#D7D7D7",
|
||||
"activityBar.inactiveForeground": "#868686",
|
||||
"activityBarBadge.background": "#0078D4",
|
||||
"activityBarBadge.foreground": "#FFFFFF",
|
||||
"badge.background": "#616161",
|
||||
"badge.foreground": "#F8F8F8",
|
||||
"button.background": "#0078D4",
|
||||
"button.border": "#ffffff1a",
|
||||
"button.foreground": "#FFFFFF",
|
||||
"button.hoverBackground": "#026EC1",
|
||||
"button.secondaryBackground": "#00000000",
|
||||
"button.secondaryForeground": "#CCCCCC",
|
||||
"button.secondaryHoverBackground": "#2B2B2B",
|
||||
"chat.slashCommandBackground": "#26477866",
|
||||
"chat.slashCommandForeground": "#85B6FF",
|
||||
"chat.editedFileForeground": "#E2C08D",
|
||||
"checkbox.background": "#313131",
|
||||
"checkbox.border": "#3C3C3C",
|
||||
"debugToolBar.background": "#181818",
|
||||
"descriptionForeground": "#9D9D9D",
|
||||
"dropdown.background": "#313131",
|
||||
"dropdown.border": "#3C3C3C",
|
||||
"dropdown.foreground": "#CCCCCC",
|
||||
"dropdown.listBackground": "#1F1F1F",
|
||||
"editor.background": "#1F1F1F",
|
||||
"editor.findMatchBackground": "#9E6A03",
|
||||
"editor.foreground": "#CCCCCC",
|
||||
"editorGroup.border": "#FFFFFF17",
|
||||
"editorGroupHeader.tabsBackground": "#181818",
|
||||
"editorGroupHeader.tabsBorder": "#2B2B2B",
|
||||
"editorGutter.addedBackground": "#2EA043",
|
||||
"editorGutter.deletedBackground": "#F85149",
|
||||
"editorGutter.modifiedBackground": "#0078D4",
|
||||
"editorLineNumber.activeForeground": "#CCCCCC",
|
||||
"editorLineNumber.foreground": "#6E7681",
|
||||
"editorOverviewRuler.border": "#010409",
|
||||
"editorWidget.background": "#202020",
|
||||
"errorForeground": "#F85149",
|
||||
"focusBorder": "#0078D4",
|
||||
"foreground": "#CCCCCC",
|
||||
"icon.foreground": "#CCCCCC",
|
||||
"input.background": "#313131",
|
||||
"input.border": "#3C3C3C",
|
||||
"input.foreground": "#CCCCCC",
|
||||
"input.placeholderForeground": "#989898",
|
||||
"inputOption.activeBackground": "#2489DB82",
|
||||
"inputOption.activeBorder": "#2488DB",
|
||||
"keybindingLabel.foreground": "#CCCCCC",
|
||||
"menu.background": "#1F1F1F",
|
||||
"menu.selectionBackground": "#0078d4",
|
||||
"notificationCenterHeader.background": "#1F1F1F",
|
||||
"notificationCenterHeader.foreground": "#CCCCCC",
|
||||
"notifications.background": "#1F1F1F",
|
||||
"notifications.border": "#2B2B2B",
|
||||
"notifications.foreground": "#CCCCCC",
|
||||
"panel.background": "#181818",
|
||||
"panel.border": "#2B2B2B",
|
||||
"panelInput.border": "#2B2B2B",
|
||||
"panelTitle.activeBorder": "#0078D4",
|
||||
"panelTitle.activeForeground": "#CCCCCC",
|
||||
"panelTitle.inactiveForeground": "#9D9D9D",
|
||||
"peekViewEditor.background": "#1F1F1F",
|
||||
"peekViewEditor.matchHighlightBackground": "#BB800966",
|
||||
"peekViewResult.background": "#1F1F1F",
|
||||
"peekViewResult.matchHighlightBackground": "#BB800966",
|
||||
"pickerGroup.border": "#3C3C3C",
|
||||
"progressBar.background": "#0078D4",
|
||||
"quickInput.background": "#222222",
|
||||
"quickInput.foreground": "#CCCCCC",
|
||||
"settings.dropdownBackground": "#313131",
|
||||
"settings.dropdownBorder": "#3C3C3C",
|
||||
"settings.headerForeground": "#FFFFFF",
|
||||
"settings.modifiedItemIndicator": "#BB800966",
|
||||
"sideBar.background": "#181818",
|
||||
"sideBar.border": "#2B2B2B",
|
||||
"sideBar.foreground": "#CCCCCC",
|
||||
"sideBarSectionHeader.background": "#181818",
|
||||
"sideBarSectionHeader.border": "#2B2B2B",
|
||||
"sideBarSectionHeader.foreground": "#CCCCCC",
|
||||
"sideBarTitle.foreground": "#CCCCCC",
|
||||
"statusBar.background": "#181818",
|
||||
"statusBar.inactiveBackground": "#1F1F1F",
|
||||
"statusBar.border": "#2B2B2B",
|
||||
"statusBarItem.hoverBackground": "#F1F1F133",
|
||||
"statusBarItem.hoverForeground": "#FFFFFF",
|
||||
"statusBar.debuggingBackground": "#0078D4",
|
||||
"statusBar.debuggingForeground": "#FFFFFF",
|
||||
"statusBar.focusBorder": "#0078D4",
|
||||
"statusBar.foreground": "#CCCCCC",
|
||||
"statusBar.noFolderBackground": "#1F1F1F",
|
||||
"statusBarItem.focusBorder": "#0078D4",
|
||||
"statusBarItem.prominentBackground": "#6E768166",
|
||||
"statusBarItem.remoteBackground": "#0078D4",
|
||||
"statusBarItem.remoteForeground": "#FFFFFF",
|
||||
"tab.activeBackground": "#1F1F1F",
|
||||
"tab.activeBorder": "#1F1F1F",
|
||||
"tab.activeBorderTop": "#0078D4",
|
||||
"tab.activeForeground": "#FFFFFF",
|
||||
"tab.selectedBorderTop": "#6caddf",
|
||||
"tab.border": "#2B2B2B",
|
||||
"tab.hoverBackground": "#1F1F1F",
|
||||
"tab.inactiveBackground": "#181818",
|
||||
"tab.inactiveForeground": "#9D9D9D",
|
||||
"tab.unfocusedActiveBorder": "#1F1F1F",
|
||||
"tab.unfocusedActiveBorderTop": "#2B2B2B",
|
||||
"tab.unfocusedHoverBackground": "#1F1F1F",
|
||||
"terminal.foreground": "#CCCCCC",
|
||||
"terminal.tab.activeBorder": "#0078D4",
|
||||
"textBlockQuote.background": "#2B2B2B",
|
||||
"textBlockQuote.border": "#616161",
|
||||
"textCodeBlock.background": "#2B2B2B",
|
||||
"textLink.activeForeground": "#4daafc",
|
||||
"textLink.foreground": "#4daafc",
|
||||
"textPreformat.foreground": "#D0D0D0",
|
||||
"textPreformat.background": "#3C3C3C",
|
||||
"textSeparator.foreground": "#21262D",
|
||||
"titleBar.activeBackground": "#181818",
|
||||
"titleBar.activeForeground": "#CCCCCC",
|
||||
"titleBar.border": "#2B2B2B",
|
||||
"titleBar.inactiveBackground": "#1F1F1F",
|
||||
"titleBar.inactiveForeground": "#9D9D9D",
|
||||
"welcomePage.tileBackground": "#2B2B2B",
|
||||
"welcomePage.progress.foreground": "#0078D4",
|
||||
"widget.border": "#313131",
|
||||
"modernActivityBarItem.activeBackground": "#FFFFFF22",
|
||||
"modernActivityBarItem.hoverBackground": "#FFFFFF11",
|
||||
"modernActivityBar.border": "#252526"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
{
|
||||
"$schema": "vscode://schemas/color-theme",
|
||||
"name": "Dark+",
|
||||
"include": "./dark_vs.json",
|
||||
"tokenColors": [
|
||||
{
|
||||
"name": "Function declarations",
|
||||
"scope": [
|
||||
"entity.name.function",
|
||||
"support.function",
|
||||
"support.constant.handlebars",
|
||||
"source.powershell variable.other.member",
|
||||
"entity.name.operator.custom-literal"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#DCDCAA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Types declaration and references",
|
||||
"scope": [
|
||||
"support.class",
|
||||
"support.type",
|
||||
"entity.name.type",
|
||||
"entity.name.namespace",
|
||||
"entity.other.attribute",
|
||||
"entity.name.scope-resolution",
|
||||
"entity.name.class",
|
||||
"storage.type.numeric.go",
|
||||
"storage.type.byte.go",
|
||||
"storage.type.boolean.go",
|
||||
"storage.type.string.go",
|
||||
"storage.type.uintptr.go",
|
||||
"storage.type.error.go",
|
||||
"storage.type.rune.go",
|
||||
"storage.type.cs",
|
||||
"storage.type.generic.cs",
|
||||
"storage.type.modifier.cs",
|
||||
"storage.type.variable.cs",
|
||||
"storage.type.annotation.java",
|
||||
"storage.type.generic.java",
|
||||
"storage.type.java",
|
||||
"storage.type.object.array.java",
|
||||
"storage.type.primitive.array.java",
|
||||
"storage.type.primitive.java",
|
||||
"storage.type.token.java",
|
||||
"storage.type.groovy",
|
||||
"storage.type.annotation.groovy",
|
||||
"storage.type.parameters.groovy",
|
||||
"storage.type.generic.groovy",
|
||||
"storage.type.object.array.groovy",
|
||||
"storage.type.primitive.array.groovy",
|
||||
"storage.type.primitive.groovy"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#4EC9B0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Types declaration and references, TS grammar specific",
|
||||
"scope": [
|
||||
"meta.type.cast.expr",
|
||||
"meta.type.new.expr",
|
||||
"support.constant.math",
|
||||
"support.constant.dom",
|
||||
"support.constant.json",
|
||||
"entity.other.inherited-class",
|
||||
"punctuation.separator.namespace.ruby"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#4EC9B0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Control flow / Special keywords",
|
||||
"scope": [
|
||||
"keyword.control",
|
||||
"source.cpp keyword.operator.new",
|
||||
"keyword.operator.delete",
|
||||
"keyword.other.using",
|
||||
"keyword.other.directive.using",
|
||||
"keyword.other.operator",
|
||||
"entity.name.operator"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C586C0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Variable and parameter name",
|
||||
"scope": [
|
||||
"variable",
|
||||
"meta.definition.variable.name",
|
||||
"support.variable",
|
||||
"entity.name.variable",
|
||||
"constant.other.placeholder"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#9CDCFE"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Constants and enums",
|
||||
"scope": [
|
||||
"variable.other.constant",
|
||||
"variable.other.enummember"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#4FC1FF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Object keys, TS grammar specific",
|
||||
"scope": [
|
||||
"meta.object-literal.key"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#9CDCFE"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS property value",
|
||||
"scope": [
|
||||
"support.constant.property-value",
|
||||
"support.constant.font-name",
|
||||
"support.constant.media-type",
|
||||
"support.constant.media",
|
||||
"constant.other.color.rgb-value",
|
||||
"constant.other.rgb-value",
|
||||
"support.constant.color"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#CE9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Regular expression groups",
|
||||
"scope": [
|
||||
"punctuation.definition.group.regexp",
|
||||
"punctuation.definition.group.assertion.regexp",
|
||||
"punctuation.definition.character-class.regexp",
|
||||
"punctuation.character.set.begin.regexp",
|
||||
"punctuation.character.set.end.regexp",
|
||||
"keyword.operator.negation.regexp",
|
||||
"support.other.parenthesis.regexp"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#CE9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"constant.character.character-class.regexp",
|
||||
"constant.other.character-class.set.regexp",
|
||||
"constant.other.character-class.regexp",
|
||||
"constant.character.set.regexp"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#d16969"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"keyword.operator.or.regexp",
|
||||
"keyword.control.anchor.regexp"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#DCDCAA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword.operator.quantifier.regexp",
|
||||
"settings": {
|
||||
"foreground": "#d7ba7d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"constant.character",
|
||||
"constant.other.option"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "constant.character.escape",
|
||||
"settings": {
|
||||
"foreground": "#d7ba7d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "entity.name.label",
|
||||
"settings": {
|
||||
"foreground": "#C8C8C8"
|
||||
}
|
||||
}
|
||||
],
|
||||
"semanticTokenColors": {
|
||||
"newOperator": "#C586C0",
|
||||
"stringLiteral": "#ce9178",
|
||||
"customLiteral": "#DCDCAA",
|
||||
"numberLiteral": "#b5cea8"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,423 @@
|
||||
{
|
||||
"$schema": "vscode://schemas/color-theme",
|
||||
"name": "Dark (Visual Studio)",
|
||||
"colors": {
|
||||
"checkbox.border": "#6B6B6B",
|
||||
"editor.background": "#1E1E1E",
|
||||
"editor.foreground": "#D4D4D4",
|
||||
"editor.inactiveSelectionBackground": "#3A3D41",
|
||||
"editorIndentGuide.background1": "#404040",
|
||||
"editorIndentGuide.activeBackground1": "#707070",
|
||||
"editor.selectionHighlightBackground": "#ADD6FF26",
|
||||
"list.dropBackground": "#383B3D",
|
||||
"activityBarBadge.background": "#007ACC",
|
||||
"sideBarTitle.foreground": "#BBBBBB",
|
||||
"input.placeholderForeground": "#A6A6A6",
|
||||
"menu.background": "#252526",
|
||||
"menu.foreground": "#CCCCCC",
|
||||
"menu.separatorBackground": "#454545",
|
||||
"menu.border": "#454545",
|
||||
"menu.selectionBackground": "#0078d4",
|
||||
"statusBarItem.remoteForeground": "#FFF",
|
||||
"statusBarItem.remoteBackground": "#16825D",
|
||||
"statusBar.inactiveBackground": "#1476B8",
|
||||
"titleBar.inactiveBackground": "#323233",
|
||||
"ports.iconRunningProcessForeground": "#369432",
|
||||
"sideBarSectionHeader.background": "#0000",
|
||||
"sideBarSectionHeader.border": "#ccc3",
|
||||
"tab.selectedBackground": "#37373D",
|
||||
"tab.selectedForeground": "#FFFFFF",
|
||||
"tab.lastPinnedBorder": "#ccc3",
|
||||
"list.activeSelectionIconForeground": "#FFF",
|
||||
"terminal.inactiveSelectionBackground": "#3A3D41",
|
||||
"widget.border": "#303031",
|
||||
"actionBar.toggledBackground": "#383a49",
|
||||
"agentsPanel.border": "#303031",
|
||||
"agentsCard.border": "#00000000",
|
||||
"agentsChatInput.border": "#303031",
|
||||
"agentsChatInput.focusBorder": "#007ACC",
|
||||
"agentsNewSessionButton.border": "#303031",
|
||||
"surface.border": "#252526",
|
||||
"modernActivityBarItem.activeBackground": "#1E1E1E",
|
||||
"modernActivityBarItem.hoverBackground": "#1E1E1E66",
|
||||
"modernActivityBar.border": "#252526"
|
||||
},
|
||||
"tokenColors": [
|
||||
{
|
||||
"scope": [
|
||||
"meta.embedded",
|
||||
"source.groovy.embedded",
|
||||
"string meta.image.inline.markdown",
|
||||
"variable.legacy.builtin.python"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#D4D4D4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "emphasis",
|
||||
"settings": {
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "strong",
|
||||
"settings": {
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "header",
|
||||
"settings": {
|
||||
"foreground": "#000080"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "comment",
|
||||
"settings": {
|
||||
"foreground": "#6A9955"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "constant.language",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"constant.numeric",
|
||||
"variable.other.enummember",
|
||||
"keyword.operator.plus.exponent",
|
||||
"keyword.operator.minus.exponent"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "constant.regexp",
|
||||
"settings": {
|
||||
"foreground": "#646695"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "entity.name.tag",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"entity.name.tag.css",
|
||||
"entity.name.tag.less"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#d7ba7d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "entity.other.attribute-name",
|
||||
"settings": {
|
||||
"foreground": "#9cdcfe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"entity.other.attribute-name.class.css",
|
||||
"source.css entity.other.attribute-name.class",
|
||||
"entity.other.attribute-name.id.css",
|
||||
"entity.other.attribute-name.parent-selector.css",
|
||||
"entity.other.attribute-name.parent.less",
|
||||
"source.css entity.other.attribute-name.pseudo-class",
|
||||
"entity.other.attribute-name.pseudo-element.css",
|
||||
"source.css.less entity.other.attribute-name.id",
|
||||
"entity.other.attribute-name.scss"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#d7ba7d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "invalid",
|
||||
"settings": {
|
||||
"foreground": "#f44747"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.underline",
|
||||
"settings": {
|
||||
"fontStyle": "underline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.bold",
|
||||
"settings": {
|
||||
"fontStyle": "bold",
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.heading",
|
||||
"settings": {
|
||||
"fontStyle": "bold",
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.italic",
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#C586C0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.strikethrough",
|
||||
"settings": {
|
||||
"fontStyle": "strikethrough"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.inserted",
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.deleted",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.changed",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "punctuation.definition.quote.begin.markdown",
|
||||
"settings": {
|
||||
"foreground": "#6A9955"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "punctuation.definition.list.begin.markdown",
|
||||
"settings": {
|
||||
"foreground": "#6796e6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.inline.raw",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "brackets of XML/HTML tags",
|
||||
"scope": "punctuation.definition.tag",
|
||||
"settings": {
|
||||
"foreground": "#808080"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"meta.preprocessor",
|
||||
"entity.name.function.preprocessor"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.preprocessor.string",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.preprocessor.numeric",
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.structure.dictionary.key.python",
|
||||
"settings": {
|
||||
"foreground": "#9cdcfe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.diff.header",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "storage",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "storage.type",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"storage.modifier",
|
||||
"keyword.operator.noexcept"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"string",
|
||||
"meta.embedded.assembly"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string.tag",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string.value",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string.regexp",
|
||||
"settings": {
|
||||
"foreground": "#d16969"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "String interpolation",
|
||||
"scope": [
|
||||
"punctuation.definition.template-expression.begin",
|
||||
"punctuation.definition.template-expression.end",
|
||||
"punctuation.section.embedded"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Reset JavaScript string interpolation expression",
|
||||
"scope": [
|
||||
"meta.template.expression"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#d4d4d4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"support.type.vendored.property-name",
|
||||
"support.type.property-name",
|
||||
"source.css variable",
|
||||
"source.coffee.embedded"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#9cdcfe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword.control",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword.operator",
|
||||
"settings": {
|
||||
"foreground": "#d4d4d4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"keyword.operator.new",
|
||||
"keyword.operator.expression",
|
||||
"keyword.operator.cast",
|
||||
"keyword.operator.sizeof",
|
||||
"keyword.operator.alignof",
|
||||
"keyword.operator.typeid",
|
||||
"keyword.operator.alignas",
|
||||
"keyword.operator.instanceof",
|
||||
"keyword.operator.logical.python",
|
||||
"keyword.operator.wordlike"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword.other.unit",
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"punctuation.section.embedded.begin.php",
|
||||
"punctuation.section.embedded.end.php"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "support.function.git-rebase",
|
||||
"settings": {
|
||||
"foreground": "#9cdcfe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "constant.sha.git-rebase",
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "coloring of the Java import and package identifiers",
|
||||
"scope": [
|
||||
"storage.modifier.import.java",
|
||||
"variable.language.wildcard.java",
|
||||
"storage.modifier.package.java"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#d4d4d4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "this.self",
|
||||
"scope": "variable.language",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
}
|
||||
],
|
||||
"semanticHighlighting": true,
|
||||
"semanticTokenColors": {
|
||||
"newOperator": "#d4d4d4",
|
||||
"stringLiteral": "#ce9178",
|
||||
"customLiteral": "#D4D4D4",
|
||||
"numberLiteral": "#b5cea8"
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "darwin-breeze",
|
||||
"displayName": "Darwin Breeze",
|
||||
"description": "Generated by darwin-breeze/build.py from DarwinBreezeDark.colors",
|
||||
"publisher": "trivk",
|
||||
"version": "1.0.0",
|
||||
"engines": {
|
||||
"vscode": "^1.70.0"
|
||||
},
|
||||
"categories": [
|
||||
"Themes"
|
||||
],
|
||||
"contributes": {
|
||||
"themes": [
|
||||
{
|
||||
"label": "Darwin Breeze Dark",
|
||||
"uiTheme": "vs-dark",
|
||||
"path": "./themes/DarwinBreezeDark-color-theme.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user