@riebeckite/theme-tokyonight 0.0.3 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +102 -81
- package/README_ja.md +68 -47
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +8 -1
- package/package.json +2 -2
- package/styles/fonts/jetbrains-mono-LICENSE.txt +93 -0
- package/styles/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
- package/styles/theme.css +704 -162
package/README.md
CHANGED
|
@@ -1,81 +1,102 @@
|
|
|
1
|
-
# @riebeckite/theme-tokyonight
|
|
2
|
-
|
|
3
|
-
An assertive Tokyo Night theme for Riebeckite: high-contrast twilight day mode
|
|
4
|
-
and the classic deep-indigo night mode,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
`
|
|
13
|
-
|
|
14
|
-
`--rb-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
1
|
+
# @riebeckite/theme-tokyonight
|
|
2
|
+
|
|
3
|
+
An assertive Tokyo Night theme for Riebeckite: high-contrast twilight day mode
|
|
4
|
+
and the classic deep-indigo night mode, rebuilt as a technical "developer tool"
|
|
5
|
+
look — mono display headings, a tight rhythm, square hairline-bordered surfaces,
|
|
6
|
+
an electric-blue accent, and an optional neon glow.
|
|
7
|
+
|
|
8
|
+
[日本語](./README_ja.md)
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
`tokyonightTheme()` creates a theme named `tokyonight`, following the same
|
|
13
|
+
`ThemeConfig` API and token contract as the other Riebeckite themes. Design
|
|
14
|
+
tokens are exposed as CSS custom properties (`--rb-color-*`, `--rb-font-*`,
|
|
15
|
+
`--rb-space-*`, `--rb-layout-*`) and mapped into Tailwind theme values in an
|
|
16
|
+
`@theme` block.
|
|
17
|
+
|
|
18
|
+
Compared with the subtler default theme, Tokyo Night dials up the contrast:
|
|
19
|
+
|
|
20
|
+
- **Light ("day")** — twilight-white paper (`#e1e2e7`) with a deep indigo ink
|
|
21
|
+
(`#343b58`) and an electric-blue accent (`#2e7de9`)
|
|
22
|
+
- **Dark ("night")** — the classic Tokyo Night background `#1a1b26` with pale
|
|
23
|
+
fuji-blue ink (`#c0caf5`) and a glowing `#7aa2f7` accent
|
|
24
|
+
|
|
25
|
+
Beyond the palette it carries a distinct visual character rather than being a
|
|
26
|
+
color swap: uppercase mono headings with accent rules, square corners and 1px
|
|
27
|
+
borders, chunky bordered code, hairline tables, underline-on-hover links, and
|
|
28
|
+
flat shadow-free chrome. Latin text uses a self-hosted JetBrains Mono for
|
|
29
|
+
headings and `--rb-font-mono`; Japanese glyphs fall back to the system stack and
|
|
30
|
+
body copy stays sans.
|
|
31
|
+
|
|
32
|
+
It also applies assertive base styling: an accent-color `caret`/`accent-color`,
|
|
33
|
+
an electric `:focus-visible` outline, neon-tinted `::selection`, and a slim
|
|
34
|
+
accent-tinted scrollbar.
|
|
35
|
+
|
|
36
|
+
## Usage
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
import { defineConfig } from "@riebeckite/core";
|
|
40
|
+
import { tokyonightTheme } from "@riebeckite/theme-tokyonight";
|
|
41
|
+
|
|
42
|
+
export default defineConfig({
|
|
43
|
+
// ...
|
|
44
|
+
theme: tokyonightTheme({
|
|
45
|
+
colorMode: "system",
|
|
46
|
+
typography: "system",
|
|
47
|
+
articleLayout: "article",
|
|
48
|
+
density: "cozy",
|
|
49
|
+
heading: "tech",
|
|
50
|
+
neon: true,
|
|
51
|
+
userCss: [],
|
|
52
|
+
}),
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Relies on the same `ThemeConfig` API as `defaultTheme()`, so it can replace
|
|
57
|
+
either theme without other configuration changes. The root-level
|
|
58
|
+
`data-theme-name` attribute reports `tokyonight`.
|
|
59
|
+
|
|
60
|
+
## Options
|
|
61
|
+
|
|
62
|
+
`tokyonightTheme(options?)` accepts any `ThemeConfig` field except `name`, plus
|
|
63
|
+
the theme-specific `density`, `heading`, and `neon` options:
|
|
64
|
+
|
|
65
|
+
| Option | Type | Default | Description |
|
|
66
|
+
| ------ | ---- | ------- | ----------- |
|
|
67
|
+
| `density` | `"cozy" \| "compact"` | `"cozy"` | Vertical rhythm (applied via `data-tokyonight-density`). `compact` tightens the `--rb-space-*` scale and heading, paragraph, and list spacing throughout |
|
|
68
|
+
| `heading` | `"tech" \| "plain"` | `"tech"` | Heading treatment (applied via `data-tokyonight-heading`). `tech` = uppercase mono headings with accent bars; `plain` = normal-case, undecorated headings in the body font |
|
|
69
|
+
| `neon` | `boolean` | `false` | Neon flourish (applied via `data-tokyonight-neon="on"`): glowing accent `:focus-visible` outline, `::selection`, scrollbar, link hover, and heading accents |
|
|
70
|
+
| `colorMode` | `"light" \| "dark" \| "system"` | `"system"` | Color mode. `system` follows `prefers-color-scheme` unless `data-theme` is set |
|
|
71
|
+
| `typography` | `"system" \| "serif" \| "sans"` | `"system"` | Typography preset, applied via the `data-typography` attribute |
|
|
72
|
+
| `articleLayout` | `"article" \| "sidebar" \| "full-width"` | `"article"` | Article layout preset for consumers that read `data-article-layout` |
|
|
73
|
+
| `tokens` | `ThemeDesignTokens` | `{}` | Override design tokens (colors, fonts, spacing, layout widths) |
|
|
74
|
+
| `userCss` | `string[]` | `[]` | Extra user stylesheets |
|
|
75
|
+
|
|
76
|
+
Theme-specific options are applied to the root element as safe `data-*`
|
|
77
|
+
attributes (`data-tokyonight-density`, `data-tokyonight-heading`,
|
|
78
|
+
`data-tokyonight-neon`). `neon` can also be overridden directly from `config`
|
|
79
|
+
via `attributes: { "data-tokyonight-neon": "on" }`.
|
|
80
|
+
|
|
81
|
+
See the [`@riebeckite/theme-default`](../default/README.md) README for the
|
|
82
|
+
full token list — the token contract is identical.
|
|
83
|
+
|
|
84
|
+
## Fonts
|
|
85
|
+
|
|
86
|
+
The Latin subset of [JetBrains Mono](https://www.jetbrains.com/lp/mono/) is
|
|
87
|
+
self-hosted (no network request) and vendored under `styles/fonts/` together
|
|
88
|
+
with its SIL Open Font License (`jetbrains-mono-LICENSE.txt`). It is used for
|
|
89
|
+
mono text and, with `heading: "tech"`, for display headings; CJK glyphs fall
|
|
90
|
+
back to the system font stack.
|
|
91
|
+
|
|
92
|
+
## Exports
|
|
93
|
+
|
|
94
|
+
- `tokyonightTheme(options?)` — theme factory
|
|
95
|
+
- Type: `TokyonightThemeOptions`
|
|
96
|
+
- Styles: `@riebeckite/theme-tokyonight/style.css`
|
|
97
|
+
|
|
98
|
+
## See also
|
|
99
|
+
|
|
100
|
+
- [Plugin guide](../../../docs/en/plugin-system.md)
|
|
101
|
+
- [`@riebeckite/theme-default`](../default/README.md)
|
|
102
|
+
- [`@riebeckite/theme-sakura`](../sakura/README.md)
|
package/README_ja.md
CHANGED
|
@@ -1,47 +1,68 @@
|
|
|
1
|
-
# @riebeckite/theme-tokyonight
|
|
2
|
-
|
|
3
|
-
Tokyo Night
|
|
4
|
-
|
|
5
|
-
[English](./README.md)
|
|
6
|
-
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
1
|
+
# @riebeckite/theme-tokyonight
|
|
2
|
+
|
|
3
|
+
Tokyo Night の濃い藍色と鮮やかな青を、開発ツールらしい見た目に寄せたテーマです。等幅の見出し、詰まった行間、角を立てた1px罫線の面、青いアクセント、任意のネオン発光で構成します。昼向けの明るい配色と、定番の深い夜向け配色を切り替えられます。
|
|
4
|
+
|
|
5
|
+
[English](./README.md)
|
|
6
|
+
|
|
7
|
+
## 特長
|
|
8
|
+
|
|
9
|
+
単なる配色の差し替えではなく、次のような見た目の性格を持たせています。
|
|
10
|
+
|
|
11
|
+
- **等幅・大文字の見出し** — JetBrains Mono を使い、字間を広げ、アクセントの縦罫を添える
|
|
12
|
+
- **角と罫線** — 面の角は直角、境界は1pxの罫線、影は使わない
|
|
13
|
+
- **コード** — 等幅、1px罫線、アクセントの左罫、余白を広めにとったヘッダー風の体裁
|
|
14
|
+
- **任意のネオン** — フォーカス枠、選択色、スクロールバー、リンクのホバー、見出しのアクセントに控えめな発光を足す
|
|
15
|
+
|
|
16
|
+
本文はサンセリフのまま、日本語のグリフはシステムフォントにフォールバックします。ラテン文字には同梱の JetBrains Mono を使います。
|
|
17
|
+
|
|
18
|
+
明るい配色では `#e1e2e7` の背景、`#343b58` の文字、`#2e7de9` のアクセントを使います。暗い配色では `#1a1b26` の背景、`#c0caf5` の文字、`#7aa2f7` のアクセントに切り替わります。
|
|
19
|
+
|
|
20
|
+
## 設定する
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { defineConfig } from "@riebeckite/core";
|
|
24
|
+
import { tokyonightTheme } from "@riebeckite/theme-tokyonight";
|
|
25
|
+
|
|
26
|
+
export default defineConfig({
|
|
27
|
+
// ...
|
|
28
|
+
theme: tokyonightTheme({
|
|
29
|
+
colorMode: "system",
|
|
30
|
+
density: "cozy",
|
|
31
|
+
heading: "tech",
|
|
32
|
+
neon: true,
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
テーマ名は `tokyonight` です。
|
|
38
|
+
|
|
39
|
+
## 変更できる項目
|
|
40
|
+
|
|
41
|
+
| 項目 | 既定値 | 説明 |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| `density` | `"cozy"` | 行間と余白。`"compact"` にすると `--rb-space-*` と見出し・段落・リストの間隔を詰める(`data-tokyonight-density`) |
|
|
44
|
+
| `heading` | `"tech"` | 見出しの体裁。`"tech"` は等幅・大文字でアクセントの罫を添え、`"plain"` は大文字化と装飾を外して本文フォントに戻す(`data-tokyonight-heading`) |
|
|
45
|
+
| `neon` | `false` | 青いフォーカス枠、選択色、スクロールバー、リンクのホバー、見出しのアクセントを強調する(`data-tokyonight-neon="on"`) |
|
|
46
|
+
| `colorMode` | `"system"` | `"light"`、`"dark"`、`"system"` |
|
|
47
|
+
| `typography` | `"system"` | `"system"`、`"serif"`、`"sans"` |
|
|
48
|
+
| `articleLayout` | `"article"` | 記事レイアウトの値 |
|
|
49
|
+
| `tokens` | `{}` | 共通デザイントークンの上書き |
|
|
50
|
+
| `userCss` | `[]` | 追加のスタイルシート |
|
|
51
|
+
|
|
52
|
+
このテーマは入力要素のアクセント色、キーボード操作時のフォーカス枠、テキスト選択、スクロールバーにも青系の色を適用します。テーマ固有の項目は `data-tokyonight-density`、`data-tokyonight-heading`、`data-tokyonight-neon` としてルート要素に付きます。`neon` は `attributes: { "data-tokyonight-neon": "on" }` として直接指定することもできます。
|
|
53
|
+
|
|
54
|
+
## フォント
|
|
55
|
+
|
|
56
|
+
JetBrains Mono のラテン文字サブセットを同梱しているため、外部へのリクエストは発生しません。ライセンスは SIL Open Font License で、`styles/fonts/jetbrains-mono-LICENSE.txt` に収録しています。等幅テキストと、`heading: "tech"` のときの見出しに使い、日本語のグリフはシステムフォントにフォールバックします。
|
|
57
|
+
|
|
58
|
+
## 主なエクスポート
|
|
59
|
+
|
|
60
|
+
- `tokyonightTheme(options?)`: テーマを作成する
|
|
61
|
+
- `TokyonightThemeOptions`: 設定用の型
|
|
62
|
+
- `@riebeckite/theme-tokyonight/style.css`: テーマのスタイルシート
|
|
63
|
+
|
|
64
|
+
## 関連資料
|
|
65
|
+
|
|
66
|
+
- [テーマシステム](../../../docs/ja/theme-system.md)
|
|
67
|
+
- [`@riebeckite/theme-default`](../default/README_ja.md)
|
|
68
|
+
- [`@riebeckite/theme-sakura`](../sakura/README_ja.md)
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.js
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import { defineTheme } from "@riebeckite/core";
|
|
3
3
|
function tokyonightTheme(options = {}) {
|
|
4
|
-
const {
|
|
4
|
+
const {
|
|
5
|
+
density = "cozy",
|
|
6
|
+
heading = "tech",
|
|
7
|
+
neon = false,
|
|
8
|
+
...config
|
|
9
|
+
} = options;
|
|
5
10
|
return defineTheme({
|
|
6
11
|
name: "tokyonight",
|
|
7
12
|
options,
|
|
8
13
|
attributes: {
|
|
14
|
+
"data-tokyonight-density": density,
|
|
15
|
+
"data-tokyonight-heading": heading,
|
|
9
16
|
"data-tokyonight-neon": neon ? "on" : void 0
|
|
10
17
|
},
|
|
11
18
|
styles: [{ moduleSpecifier: "@riebeckite/theme-tokyonight/style.css" }],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riebeckite/theme-tokyonight",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"./styles/theme.css": "./styles/theme.css"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@riebeckite/core": "0.0.
|
|
19
|
+
"@riebeckite/core": "0.0.6"
|
|
20
20
|
},
|
|
21
21
|
"publishConfig": {
|
|
22
22
|
"access": "public"
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) JetBrainsMono-Italic[wght].ttf: Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
package/styles/theme.css
CHANGED
|
@@ -1,162 +1,704 @@
|
|
|
1
|
-
@theme {
|
|
2
|
-
--font-sans: var(--rb-font-body);
|
|
3
|
-
--font-serif: Georgia, Cambria, "Times New Roman", Times, serif;
|
|
4
|
-
--font-mono: var(--rb-font-mono);
|
|
5
|
-
--color-rb-paper: var(--rb-color-paper);
|
|
6
|
-
--color-rb-ink: var(--rb-color-ink);
|
|
7
|
-
--color-rb-muted: var(--rb-color-muted);
|
|
8
|
-
--color-rb-accent: var(--rb-color-accent);
|
|
9
|
-
--color-rb-surface: var(--rb-color-surface);
|
|
10
|
-
--color-rb-danger: var(--rb-color-danger);
|
|
11
|
-
--color-rb-success: var(--rb-color-success);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
@layer base {
|
|
15
|
-
:root {
|
|
16
|
-
color-scheme: light;
|
|
17
|
-
--rb-color-paper: #e1e2e7;
|
|
18
|
-
--rb-color-surface: #d6d8df;
|
|
19
|
-
--rb-color-surface-hover: #cbcdd6;
|
|
20
|
-
--rb-color-ink: #343b58;
|
|
21
|
-
--rb-color-muted: #5c6384;
|
|
22
|
-
--rb-color-accent: #2e7de9;
|
|
23
|
-
--rb-color-border: color-mix(in srgb, currentColor 18%, transparent);
|
|
24
|
-
--rb-color-border-strong: color-mix(in srgb, currentColor 28%, transparent);
|
|
25
|
-
--rb-color-danger: #f52a65;
|
|
26
|
-
--rb-color-success: #3e8e5a;
|
|
27
|
-
--rb-color-code-background: color-mix(
|
|
28
|
-
in srgb,
|
|
29
|
-
var(--rb-color-ink) 9%,
|
|
30
|
-
transparent
|
|
31
|
-
);
|
|
32
|
-
--rb-color-overlay: rgb(0 0 0 / 0.4);
|
|
33
|
-
--rb-font-body:
|
|
34
|
-
ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
35
|
-
sans-serif;
|
|
36
|
-
--rb-font-heading: var(--rb-font-body);
|
|
37
|
-
--rb-font-mono:
|
|
38
|
-
|
|
39
|
-
--rb-space-
|
|
40
|
-
--rb-space-
|
|
41
|
-
--rb-space-
|
|
42
|
-
--rb-space-
|
|
43
|
-
--rb-space-
|
|
44
|
-
--rb-
|
|
45
|
-
--rb-
|
|
46
|
-
--rb-layout-
|
|
47
|
-
--rb-layout-
|
|
48
|
-
--rb-layout-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
--rb-color-
|
|
55
|
-
--rb-color-surface
|
|
56
|
-
--rb-color-
|
|
57
|
-
--rb-color-
|
|
58
|
-
--rb-color-
|
|
59
|
-
--rb-color-
|
|
60
|
-
--rb-color-
|
|
61
|
-
--rb-color-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
--rb-color-
|
|
74
|
-
--rb-color-surface
|
|
75
|
-
--rb-color-
|
|
76
|
-
--rb-color-
|
|
77
|
-
--rb-color-
|
|
78
|
-
--rb-color-
|
|
79
|
-
--rb-color-
|
|
80
|
-
--rb-color-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
color: var(--rb-color-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
outline
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
background:
|
|
161
|
-
|
|
162
|
-
|
|
1
|
+
@theme {
|
|
2
|
+
--font-sans: var(--rb-font-body);
|
|
3
|
+
--font-serif: Georgia, Cambria, "Times New Roman", Times, serif;
|
|
4
|
+
--font-mono: var(--rb-font-mono);
|
|
5
|
+
--color-rb-paper: var(--rb-color-paper);
|
|
6
|
+
--color-rb-ink: var(--rb-color-ink);
|
|
7
|
+
--color-rb-muted: var(--rb-color-muted);
|
|
8
|
+
--color-rb-accent: var(--rb-color-accent);
|
|
9
|
+
--color-rb-surface: var(--rb-color-surface);
|
|
10
|
+
--color-rb-danger: var(--rb-color-danger);
|
|
11
|
+
--color-rb-success: var(--rb-color-success);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@layer base {
|
|
15
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] {
|
|
16
|
+
color-scheme: light;
|
|
17
|
+
--rb-color-paper: #e1e2e7;
|
|
18
|
+
--rb-color-surface: #d6d8df;
|
|
19
|
+
--rb-color-surface-hover: #cbcdd6;
|
|
20
|
+
--rb-color-ink: #343b58;
|
|
21
|
+
--rb-color-muted: #5c6384;
|
|
22
|
+
--rb-color-accent: #2e7de9;
|
|
23
|
+
--rb-color-border: color-mix(in srgb, currentColor 18%, transparent);
|
|
24
|
+
--rb-color-border-strong: color-mix(in srgb, currentColor 28%, transparent);
|
|
25
|
+
--rb-color-danger: #f52a65;
|
|
26
|
+
--rb-color-success: #3e8e5a;
|
|
27
|
+
--rb-color-code-background: color-mix(
|
|
28
|
+
in srgb,
|
|
29
|
+
var(--rb-color-ink) 9%,
|
|
30
|
+
transparent
|
|
31
|
+
);
|
|
32
|
+
--rb-color-overlay: rgb(0 0 0 / 0.4);
|
|
33
|
+
--rb-font-body:
|
|
34
|
+
ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
35
|
+
sans-serif;
|
|
36
|
+
--rb-font-heading: var(--rb-font-body);
|
|
37
|
+
--rb-font-mono:
|
|
38
|
+
"JetBrains Mono", "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
39
|
+
--rb-space-1: 0.5rem;
|
|
40
|
+
--rb-space-2: 1rem;
|
|
41
|
+
--rb-space-3: 1.5rem;
|
|
42
|
+
--rb-space-4: 2rem;
|
|
43
|
+
--rb-space-6: 3rem;
|
|
44
|
+
--rb-space-8: 4rem;
|
|
45
|
+
--rb-rule-width: 1px;
|
|
46
|
+
--rb-layout-page-max: 80rem;
|
|
47
|
+
--rb-layout-article-max: 48rem;
|
|
48
|
+
--rb-layout-sidebar: 14rem;
|
|
49
|
+
--rb-layout-gap: 2rem;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"][data-theme="dark"] {
|
|
53
|
+
color-scheme: dark;
|
|
54
|
+
--rb-color-paper: #1a1b26;
|
|
55
|
+
--rb-color-surface: #212332;
|
|
56
|
+
--rb-color-surface-hover: #2a2c40;
|
|
57
|
+
--rb-color-ink: #c0caf5;
|
|
58
|
+
--rb-color-muted: #7982a9;
|
|
59
|
+
--rb-color-accent: #7aa2f7;
|
|
60
|
+
--rb-color-danger: #f52a65;
|
|
61
|
+
--rb-color-success: #9ece6a;
|
|
62
|
+
--rb-color-code-background: color-mix(
|
|
63
|
+
in srgb,
|
|
64
|
+
var(--rb-color-ink) 10%,
|
|
65
|
+
transparent
|
|
66
|
+
);
|
|
67
|
+
--rb-color-overlay: rgb(0 0 0 / 0.6);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@media (prefers-color-scheme: dark) {
|
|
71
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]:not([data-theme]) {
|
|
72
|
+
color-scheme: dark;
|
|
73
|
+
--rb-color-paper: #1a1b26;
|
|
74
|
+
--rb-color-surface: #212332;
|
|
75
|
+
--rb-color-surface-hover: #2a2c40;
|
|
76
|
+
--rb-color-ink: #c0caf5;
|
|
77
|
+
--rb-color-muted: #7982a9;
|
|
78
|
+
--rb-color-accent: #7aa2f7;
|
|
79
|
+
--rb-color-danger: #f52a65;
|
|
80
|
+
--rb-color-success: #9ece6a;
|
|
81
|
+
--rb-color-code-background: color-mix(
|
|
82
|
+
in srgb,
|
|
83
|
+
var(--rb-color-ink) 10%,
|
|
84
|
+
transparent
|
|
85
|
+
);
|
|
86
|
+
--rb-color-overlay: rgb(0 0 0 / 0.6);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
:is(
|
|
91
|
+
:root,
|
|
92
|
+
.rb-theme-root
|
|
93
|
+
)[data-theme-name="tokyonight"][data-typography="serif"] {
|
|
94
|
+
--rb-font-body: Georgia, Cambria, "Times New Roman", Times, serif;
|
|
95
|
+
--rb-font-heading:
|
|
96
|
+
ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
97
|
+
sans-serif;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
:is(
|
|
101
|
+
:root,
|
|
102
|
+
.rb-theme-root
|
|
103
|
+
)[data-theme-name="tokyonight"][data-typography="sans"] {
|
|
104
|
+
--rb-font-body:
|
|
105
|
+
ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
106
|
+
sans-serif;
|
|
107
|
+
--rb-font-heading: var(--rb-font-body);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] {
|
|
111
|
+
background: var(--rb-color-paper);
|
|
112
|
+
color: var(--rb-color-ink);
|
|
113
|
+
font-family: var(--rb-font-body);
|
|
114
|
+
accent-color: var(--rb-color-accent);
|
|
115
|
+
caret-color: var(--rb-color-accent);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] ::selection {
|
|
119
|
+
background: var(--rb-color-accent);
|
|
120
|
+
color: var(--rb-color-paper);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] :focus-visible {
|
|
124
|
+
outline: 2px solid var(--rb-color-accent);
|
|
125
|
+
outline-offset: 2px;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
:is(
|
|
129
|
+
:root,
|
|
130
|
+
.rb-theme-root
|
|
131
|
+
)[data-theme-name="tokyonight"][data-tokyonight-neon="on"]
|
|
132
|
+
:focus-visible {
|
|
133
|
+
outline-color: var(--rb-color-accent);
|
|
134
|
+
box-shadow:
|
|
135
|
+
0 0 0 4px color-mix(in srgb, var(--rb-color-accent) 30%, transparent),
|
|
136
|
+
0 0 16px color-mix(in srgb, var(--rb-color-accent) 40%, transparent);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
:is(
|
|
140
|
+
:root,
|
|
141
|
+
.rb-theme-root
|
|
142
|
+
)[data-theme-name="tokyonight"][data-tokyonight-neon="on"]
|
|
143
|
+
::selection {
|
|
144
|
+
background: color-mix(in srgb, var(--rb-color-accent) 85%, transparent);
|
|
145
|
+
color: color-mix(in srgb, var(--rb-color-paper) 90%, transparent);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] * {
|
|
149
|
+
scrollbar-color: var(--rb-color-muted) transparent;
|
|
150
|
+
scrollbar-width: thin;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] ::-webkit-scrollbar {
|
|
154
|
+
width: 10px;
|
|
155
|
+
height: 10px;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
159
|
+
::-webkit-scrollbar-thumb {
|
|
160
|
+
background: var(--rb-color-muted);
|
|
161
|
+
border-radius: 10px;
|
|
162
|
+
border: 2px solid var(--rb-color-paper);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
:is(
|
|
166
|
+
:root,
|
|
167
|
+
.rb-theme-root
|
|
168
|
+
)[data-theme-name="tokyonight"][data-tokyonight-neon="on"]
|
|
169
|
+
::-webkit-scrollbar-thumb {
|
|
170
|
+
background: var(--rb-color-accent);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
174
|
+
::-webkit-scrollbar-track {
|
|
175
|
+
background: transparent;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* ------------------------------------------------------------------ *
|
|
180
|
+
* Character layer
|
|
181
|
+
*
|
|
182
|
+
* Tokyo Night identity: technical / neon. Mono display headings,
|
|
183
|
+
* a tight rhythm, square 1px-bordered surfaces, electric accents and
|
|
184
|
+
* an optional neon glow. Unlayered on purpose so it wins over the
|
|
185
|
+
* layered app and plugin stylesheets without `!important`.
|
|
186
|
+
* ------------------------------------------------------------------ */
|
|
187
|
+
|
|
188
|
+
@font-face {
|
|
189
|
+
font-family: "JetBrains Mono";
|
|
190
|
+
src: url("./fonts/jetbrains-mono-latin-wght-normal.woff2")
|
|
191
|
+
format("woff2-variations");
|
|
192
|
+
font-weight: 100 800;
|
|
193
|
+
font-style: normal;
|
|
194
|
+
font-display: swap;
|
|
195
|
+
unicode-range:
|
|
196
|
+
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
|
|
197
|
+
U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
|
|
198
|
+
U+2212, U+2215, U+FEFF, U+FFFD;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* Display + mono identity (Latin only; CJK falls back to the system stack). */
|
|
202
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] {
|
|
203
|
+
--rb-font-heading:
|
|
204
|
+
"JetBrains Mono", "SFMono-Regular", Consolas, "Liberation Mono",
|
|
205
|
+
"Hiragino Sans", "Noto Sans JP", "Yu Gothic", ui-monospace, monospace;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/* ---- Body rhythm ---- */
|
|
209
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-body {
|
|
210
|
+
font-family: var(--rb-font-body);
|
|
211
|
+
line-height: 1.7;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-body p {
|
|
215
|
+
margin: 0.9em 0;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
219
|
+
.rb-article-body
|
|
220
|
+
:is(ul, ol) {
|
|
221
|
+
margin: 1em 0;
|
|
222
|
+
padding-left: 1.4em;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-body li {
|
|
226
|
+
margin: 0.3em 0;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/* ---- Headings: tech (default) ---- */
|
|
230
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-header {
|
|
231
|
+
margin-bottom: 1.5rem;
|
|
232
|
+
border-bottom: 2px solid var(--rb-color-accent);
|
|
233
|
+
padding-bottom: 1rem;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-header h1 {
|
|
237
|
+
font-family: var(--rb-font-heading);
|
|
238
|
+
font-size: clamp(1.75rem, 1.4rem + 1.6vw, 2.25rem);
|
|
239
|
+
font-weight: 800;
|
|
240
|
+
line-height: 1.15;
|
|
241
|
+
letter-spacing: 0.05em;
|
|
242
|
+
text-transform: uppercase;
|
|
243
|
+
text-wrap: balance;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-body h2 {
|
|
247
|
+
margin: 2em 0 0.75em;
|
|
248
|
+
border-left: 3px solid var(--rb-color-accent);
|
|
249
|
+
padding-left: 0.6em;
|
|
250
|
+
font-family: var(--rb-font-heading);
|
|
251
|
+
font-size: 1.25rem;
|
|
252
|
+
font-weight: 700;
|
|
253
|
+
line-height: 1.3;
|
|
254
|
+
letter-spacing: 0.05em;
|
|
255
|
+
text-transform: uppercase;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-body h3 {
|
|
259
|
+
margin: 1.6em 0 0.5em;
|
|
260
|
+
border-left: 2px solid var(--rb-color-border-strong);
|
|
261
|
+
padding-left: 0.5em;
|
|
262
|
+
font-family: var(--rb-font-heading);
|
|
263
|
+
font-size: 1rem;
|
|
264
|
+
font-weight: 700;
|
|
265
|
+
line-height: 1.35;
|
|
266
|
+
letter-spacing: 0.045em;
|
|
267
|
+
text-transform: uppercase;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-body h4 {
|
|
271
|
+
margin: 1.4em 0 0.4em;
|
|
272
|
+
font-family: var(--rb-font-heading);
|
|
273
|
+
font-size: 0.875rem;
|
|
274
|
+
font-weight: 600;
|
|
275
|
+
letter-spacing: 0.04em;
|
|
276
|
+
text-transform: uppercase;
|
|
277
|
+
color: var(--rb-color-muted);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
281
|
+
.rb-article-body
|
|
282
|
+
:is(h5, h6) {
|
|
283
|
+
margin: 1.2em 0 0.4em;
|
|
284
|
+
font-family: var(--rb-font-heading);
|
|
285
|
+
font-size: 0.8125rem;
|
|
286
|
+
font-weight: 600;
|
|
287
|
+
letter-spacing: 0.04em;
|
|
288
|
+
text-transform: uppercase;
|
|
289
|
+
color: var(--rb-color-muted);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/* ---- Headings: plain (opt-out) ---- */
|
|
293
|
+
:is(
|
|
294
|
+
:root,
|
|
295
|
+
.rb-theme-root
|
|
296
|
+
)[data-theme-name="tokyonight"][data-tokyonight-heading="plain"] {
|
|
297
|
+
--rb-font-heading: var(--rb-font-body);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
:is(
|
|
301
|
+
:root,
|
|
302
|
+
.rb-theme-root
|
|
303
|
+
)[data-theme-name="tokyonight"][data-tokyonight-heading="plain"]
|
|
304
|
+
:is(.rb-article-header h1, .rb-article-body h1, .rb-article-body h2),
|
|
305
|
+
:is(
|
|
306
|
+
:root,
|
|
307
|
+
.rb-theme-root
|
|
308
|
+
)[data-theme-name="tokyonight"][data-tokyonight-heading="plain"]
|
|
309
|
+
.rb-article-body
|
|
310
|
+
:is(h3, h4, h5, h6) {
|
|
311
|
+
border-left: 0;
|
|
312
|
+
padding-left: 0;
|
|
313
|
+
color: var(--rb-color-ink);
|
|
314
|
+
font-weight: 600;
|
|
315
|
+
letter-spacing: normal;
|
|
316
|
+
text-transform: none;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/* ---- Links ---- */
|
|
320
|
+
/* Accent text is mixed toward ink so it clears WCAG AA on the day paper
|
|
321
|
+
(#2e7de9 alone is ~3.1:1) while staying an electric blue. */
|
|
322
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
323
|
+
:is(.rb-article-body, .rb-article-footer, .rb-article-meta)
|
|
324
|
+
a {
|
|
325
|
+
color: color-mix(in srgb, var(--rb-color-accent) 50%, var(--rb-color-ink));
|
|
326
|
+
text-decoration: none;
|
|
327
|
+
text-decoration-thickness: 1px;
|
|
328
|
+
text-underline-offset: 0.22em;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
332
|
+
:is(.rb-article-body, .rb-article-footer, .rb-article-meta)
|
|
333
|
+
a:hover {
|
|
334
|
+
text-decoration: underline;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/* ---- Blockquote ---- */
|
|
338
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
339
|
+
.rb-article-body
|
|
340
|
+
blockquote {
|
|
341
|
+
margin: 1.5em 0;
|
|
342
|
+
border-left: 3px solid var(--rb-color-accent);
|
|
343
|
+
background: color-mix(in srgb, var(--rb-color-accent) 6%, transparent);
|
|
344
|
+
padding: 0.75em 1em;
|
|
345
|
+
color: color-mix(in srgb, var(--rb-color-ink) 85%, var(--rb-color-muted));
|
|
346
|
+
font-style: normal;
|
|
347
|
+
font-weight: 400;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
351
|
+
.rb-article-body
|
|
352
|
+
blockquote
|
|
353
|
+
p:first-of-type::before,
|
|
354
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
355
|
+
.rb-article-body
|
|
356
|
+
blockquote
|
|
357
|
+
p:last-of-type::after {
|
|
358
|
+
content: none;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/* ---- Rules ---- */
|
|
362
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-body hr {
|
|
363
|
+
margin: 2.5em 0;
|
|
364
|
+
border: 0;
|
|
365
|
+
border-top: 1px solid var(--rb-color-accent);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* ---- Code ---- */
|
|
369
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
370
|
+
.rb-article-body
|
|
371
|
+
:not(pre)
|
|
372
|
+
> code {
|
|
373
|
+
border: 1px solid var(--rb-color-border);
|
|
374
|
+
border-radius: 0;
|
|
375
|
+
background: var(--rb-color-code-background);
|
|
376
|
+
padding: 0.15em 0.4em;
|
|
377
|
+
font-family: var(--rb-font-mono);
|
|
378
|
+
font-size: 0.85em;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
382
|
+
.rb-article-body
|
|
383
|
+
pre:not(:where(.rr-code *)) {
|
|
384
|
+
margin: 1.5em 0;
|
|
385
|
+
border: 1px solid var(--rb-color-border);
|
|
386
|
+
border-left: 3px solid var(--rb-color-accent);
|
|
387
|
+
border-radius: 0;
|
|
388
|
+
background: var(--rb-color-code-background);
|
|
389
|
+
color: var(--rb-color-ink);
|
|
390
|
+
padding: 0.75rem 1rem;
|
|
391
|
+
font-family: var(--rb-font-mono);
|
|
392
|
+
font-size: 0.85rem;
|
|
393
|
+
line-height: 1.6;
|
|
394
|
+
overflow-x: auto;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
398
|
+
.rb-article-body
|
|
399
|
+
pre
|
|
400
|
+
code {
|
|
401
|
+
border: 0;
|
|
402
|
+
background: transparent;
|
|
403
|
+
padding: 0;
|
|
404
|
+
font-size: inherit;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/* ---- Tables ---- */
|
|
408
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
409
|
+
.rb-article-body
|
|
410
|
+
table {
|
|
411
|
+
margin: 1.5em 0;
|
|
412
|
+
border: 1px solid var(--rb-color-border);
|
|
413
|
+
border-collapse: collapse;
|
|
414
|
+
font-size: 0.9em;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
418
|
+
.rb-article-body
|
|
419
|
+
thead {
|
|
420
|
+
background: color-mix(in srgb, var(--rb-color-accent) 8%, transparent);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
424
|
+
.rb-article-body
|
|
425
|
+
:is(th, td) {
|
|
426
|
+
border: 1px solid var(--rb-color-border);
|
|
427
|
+
padding: 0.5em 0.75em;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/* ---- Media: square corners ---- */
|
|
431
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
432
|
+
:is(.rb-article-body img, .rb-article-body video, .rr-media, .rr-attachment) {
|
|
433
|
+
border-radius: 0;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/* ---- Article chrome ---- */
|
|
437
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-meta {
|
|
438
|
+
margin: 0 0 1.5rem;
|
|
439
|
+
border: 1px solid var(--rb-color-border);
|
|
440
|
+
border-left: 3px solid var(--rb-color-accent);
|
|
441
|
+
border-radius: 0;
|
|
442
|
+
background: color-mix(in srgb, var(--rb-color-surface) 55%, transparent);
|
|
443
|
+
padding: 0.5rem 0.75rem;
|
|
444
|
+
font-family: var(--rb-font-mono);
|
|
445
|
+
font-size: 0.75rem;
|
|
446
|
+
letter-spacing: 0.04em;
|
|
447
|
+
text-transform: uppercase;
|
|
448
|
+
color: var(--rb-color-muted);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-article-footer {
|
|
452
|
+
margin-top: 2.5rem;
|
|
453
|
+
border-top: 1px solid var(--rb-color-border);
|
|
454
|
+
padding-top: 1rem;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rb-sidebar {
|
|
458
|
+
border-left: 2px solid var(--rb-color-border-strong);
|
|
459
|
+
padding-left: 1rem;
|
|
460
|
+
font-size: 0.9rem;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/* ---- Plugin roots ---- */
|
|
464
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
465
|
+
:is(.rr-table-of-contents, .rr-backlinks) {
|
|
466
|
+
margin: 1.5rem 0;
|
|
467
|
+
border: 1px solid var(--rb-color-border);
|
|
468
|
+
border-radius: 0;
|
|
469
|
+
background: color-mix(in srgb, var(--rb-color-surface) 50%, transparent);
|
|
470
|
+
padding: 0.9rem 1rem;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
474
|
+
:is(.rr-table-of-contents, .rr-backlinks, .rr-recent-posts)
|
|
475
|
+
a {
|
|
476
|
+
color: var(--rb-color-ink);
|
|
477
|
+
text-decoration: none;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
481
|
+
:is(.rr-table-of-contents, .rr-backlinks, .rr-recent-posts)
|
|
482
|
+
a:hover {
|
|
483
|
+
color: color-mix(in srgb, var(--rb-color-accent) 50%, var(--rb-color-ink));
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rr-recent-posts {
|
|
487
|
+
margin: 1.5rem 0;
|
|
488
|
+
border: 1px solid var(--rb-color-border);
|
|
489
|
+
border-radius: 0;
|
|
490
|
+
background: color-mix(in srgb, var(--rb-color-surface) 50%, transparent);
|
|
491
|
+
padding: 0.9rem 1rem;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
495
|
+
:is(.rr-code, .rr-code-tabs) {
|
|
496
|
+
margin: 1.5rem 0;
|
|
497
|
+
border: 1px solid var(--rb-color-border);
|
|
498
|
+
border-left: 3px solid var(--rb-color-accent);
|
|
499
|
+
border-radius: 0;
|
|
500
|
+
background: var(--rb-color-code-background);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
504
|
+
:is(.rr-code, .rr-code-tabs)
|
|
505
|
+
pre {
|
|
506
|
+
margin: 0;
|
|
507
|
+
border: 0;
|
|
508
|
+
border-radius: 0;
|
|
509
|
+
background: transparent;
|
|
510
|
+
color: var(--rb-color-ink);
|
|
511
|
+
font-family: var(--rb-font-mono);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rr-callout {
|
|
515
|
+
margin: 1.5rem 0;
|
|
516
|
+
border: 1px solid var(--rb-color-border);
|
|
517
|
+
border-left: 3px solid var(--rb-color-accent);
|
|
518
|
+
border-radius: 0;
|
|
519
|
+
background: color-mix(in srgb, var(--rb-color-accent) 6%, transparent);
|
|
520
|
+
padding: 0.9rem 1rem;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
524
|
+
.rr-callout
|
|
525
|
+
> :first-child {
|
|
526
|
+
font-family: var(--rb-font-mono);
|
|
527
|
+
font-size: 0.75rem;
|
|
528
|
+
font-weight: 700;
|
|
529
|
+
letter-spacing: 0.06em;
|
|
530
|
+
text-transform: uppercase;
|
|
531
|
+
color: color-mix(in srgb, var(--rb-color-accent) 50%, var(--rb-color-ink));
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
535
|
+
.rr-callout
|
|
536
|
+
p:last-child {
|
|
537
|
+
margin-bottom: 0;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
541
|
+
:is(.rr-local-graph, .rr-mermaid) {
|
|
542
|
+
border: 1px solid var(--rb-color-border);
|
|
543
|
+
border-radius: 0;
|
|
544
|
+
background: var(--rb-color-surface);
|
|
545
|
+
padding: 1rem;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rr-search {
|
|
549
|
+
border: 1px solid var(--rb-color-border);
|
|
550
|
+
border-radius: 0;
|
|
551
|
+
background: var(--rb-color-surface);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"]
|
|
555
|
+
.rr-search
|
|
556
|
+
:is(input, button) {
|
|
557
|
+
border-radius: 0;
|
|
558
|
+
font-family: var(--rb-font-mono);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rr-cardlink {
|
|
562
|
+
border: 1px solid var(--rb-color-border);
|
|
563
|
+
border-left: 3px solid var(--rb-color-accent);
|
|
564
|
+
border-radius: 0;
|
|
565
|
+
background: color-mix(in srgb, var(--rb-color-surface) 50%, transparent);
|
|
566
|
+
padding: 0.9rem 1rem;
|
|
567
|
+
text-decoration: none;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
:is(:root, .rb-theme-root)[data-theme-name="tokyonight"] .rr-cardlink:hover {
|
|
571
|
+
border-color: var(--rb-color-accent);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/* ---- Density: compact ---- */
|
|
575
|
+
:is(
|
|
576
|
+
:root,
|
|
577
|
+
.rb-theme-root
|
|
578
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"] {
|
|
579
|
+
--rb-space-1: 0.375rem;
|
|
580
|
+
--rb-space-2: 0.75rem;
|
|
581
|
+
--rb-space-3: 1.125rem;
|
|
582
|
+
--rb-space-4: 1.5rem;
|
|
583
|
+
--rb-space-6: 2.25rem;
|
|
584
|
+
--rb-space-8: 3rem;
|
|
585
|
+
--rb-layout-gap: 1.25rem;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
:is(
|
|
589
|
+
:root,
|
|
590
|
+
.rb-theme-root
|
|
591
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
592
|
+
.rb-article-body {
|
|
593
|
+
line-height: 1.6;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
:is(
|
|
597
|
+
:root,
|
|
598
|
+
.rb-theme-root
|
|
599
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
600
|
+
.rb-article-body
|
|
601
|
+
p {
|
|
602
|
+
margin: 0.65em 0;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
:is(
|
|
606
|
+
:root,
|
|
607
|
+
.rb-theme-root
|
|
608
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
609
|
+
.rb-article-body
|
|
610
|
+
:is(ul, ol) {
|
|
611
|
+
margin: 0.75em 0;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
:is(
|
|
615
|
+
:root,
|
|
616
|
+
.rb-theme-root
|
|
617
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
618
|
+
.rb-article-body
|
|
619
|
+
li {
|
|
620
|
+
margin: 0.2em 0;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
:is(
|
|
624
|
+
:root,
|
|
625
|
+
.rb-theme-root
|
|
626
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
627
|
+
.rb-article-body
|
|
628
|
+
h2 {
|
|
629
|
+
margin: 1.4em 0 0.5em;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
:is(
|
|
633
|
+
:root,
|
|
634
|
+
.rb-theme-root
|
|
635
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
636
|
+
.rb-article-body
|
|
637
|
+
h3 {
|
|
638
|
+
margin: 1.15em 0 0.4em;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
:is(
|
|
642
|
+
:root,
|
|
643
|
+
.rb-theme-root
|
|
644
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
645
|
+
.rb-article-body
|
|
646
|
+
:is(h4, h5, h6) {
|
|
647
|
+
margin: 1em 0 0.35em;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
:is(
|
|
651
|
+
:root,
|
|
652
|
+
.rb-theme-root
|
|
653
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
654
|
+
.rb-article-header {
|
|
655
|
+
margin-bottom: 1rem;
|
|
656
|
+
padding-bottom: 0.75rem;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
:is(
|
|
660
|
+
:root,
|
|
661
|
+
.rb-theme-root
|
|
662
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
663
|
+
.rb-article-body
|
|
664
|
+
:is(pre, blockquote, table) {
|
|
665
|
+
margin: 1.1em 0;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
:is(
|
|
669
|
+
:root,
|
|
670
|
+
.rb-theme-root
|
|
671
|
+
)[data-theme-name="tokyonight"][data-tokyonight-density="compact"]
|
|
672
|
+
.rb-article-body
|
|
673
|
+
hr {
|
|
674
|
+
margin: 1.75em 0;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
/* ---- Neon (opt-in) ---- */
|
|
678
|
+
:is(
|
|
679
|
+
:root,
|
|
680
|
+
.rb-theme-root
|
|
681
|
+
)[data-theme-name="tokyonight"][data-tokyonight-neon="on"]
|
|
682
|
+
:is(.rb-article-header h1, .rb-article-body h2, .rb-article-body h3) {
|
|
683
|
+
text-shadow: 0 0 8px
|
|
684
|
+
color-mix(in srgb, var(--rb-color-accent) 35%, transparent);
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
:is(
|
|
688
|
+
:root,
|
|
689
|
+
.rb-theme-root
|
|
690
|
+
)[data-theme-name="tokyonight"][data-tokyonight-neon="on"]
|
|
691
|
+
.rb-article-body
|
|
692
|
+
a:hover {
|
|
693
|
+
text-shadow: 0 0 6px
|
|
694
|
+
color-mix(in srgb, var(--rb-color-accent) 55%, transparent);
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
:is(
|
|
698
|
+
:root,
|
|
699
|
+
.rb-theme-root
|
|
700
|
+
)[data-theme-name="tokyonight"][data-tokyonight-neon="on"]
|
|
701
|
+
::-webkit-scrollbar-thumb {
|
|
702
|
+
box-shadow: 0 0 6px
|
|
703
|
+
color-mix(in srgb, var(--rb-color-accent) 60%, transparent);
|
|
704
|
+
}
|