@riebeckite/theme-folio 0.0.33 → 0.0.34

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 CHANGED
@@ -2,44 +2,65 @@
2
2
 
3
3
  <!-- Generated from docs/docs/themes/folio.md. Edit the canonical documentation in docs/docs/themes and run `pnpm docs:sync`. -->
4
4
 
5
- A high-contrast portfolio theme with direct sans-serif typography, an
6
- asymmetric title rule, and a restrained vermilion accent.
7
-
8
5
  [日本語](./README_ja.md)
9
6
 
7
+ ## Overview
8
+
9
+ `@riebeckite/theme-folio` provides the official **Folio** theme. Its theme identity is `folio`. A spacious portfolio-style theme with editorial framing.
10
+
11
+ ## Installation
12
+
13
+ ```sh
14
+ npm install @riebeckite/theme-folio
15
+ ```
16
+
10
17
  ## Usage
11
18
 
12
19
  ```ts
20
+ import { defineConfig } from "@riebeckite/core";
13
21
  import { folioTheme } from "@riebeckite/theme-folio";
14
22
 
15
23
  export default defineConfig({
16
- theme: folioTheme({ colorMode: "system" }),
24
+ theme: folioTheme({
25
+ colorMode: "system",
26
+ settings: { typography: "system" },
27
+ }),
17
28
  });
18
29
  ```
19
30
 
20
- ## Character
31
+ ## Common options
32
+
33
+ | Property | Values | Description |
34
+ | --- | --- | --- |
35
+ | `colorMode` | `"light"`, `"dark"`, `"system"` | Chooses the color mode. `"system"` follows the browser preference. |
36
+ | `layout` | `"article"`, `"sidebar"`, `"full-width"` | Chooses the page layout. |
37
+ | `preset` | — | This theme does not define presets. |
38
+ | `settings` | object | Overrides the settings listed below. Unknown keys and invalid values are rejected. |
39
+ | `stylesheets` | string array | Loads site-owned stylesheets after the theme CSS. |
40
+
41
+ Resolution order is schema defaults, then the selected preset, then explicit `settings`.
42
+
43
+ ## Theme settings
21
44
 
22
- - Large, tightly tracked titles and a left accent rule give project pages a
23
- confident hierarchy.
24
- - A wide article measure suits project descriptions and media without turning
25
- content into a card grid.
26
- - Media, lightbox, recent posts, and card links receive structural top rules
27
- through stable public plugin roots.
45
+ | Property | Type | Default and allowed values | Effect |
46
+ | --- | --- | --- | --- |
47
+ | `typography` | select | `"system"` — `system`, `serif`, `sans`, `mono` | Selects the article typeface. |
48
+ | `accentColor` | color | `"#d6422c"` | Rules and interactive accents. |
49
+ | `articleWidth` | slider | `62` — 44–76, step 1 | Maximum article width in rem. |
50
+ | `fontSize` | slider | `1.05` — 0.95–1.25, step 0.05 | Article text size in rem. |
51
+ | `lineHeight` | slider | `1.65` — 1.5–2.1, step 0.05 | Article line height. |
52
+ | `motion` | boolean | `true` | Enables theme motion effects. |
53
+ | `ornament` | boolean | `true` | Show the corner mark in the article header. |
54
+ | `seal` | boolean | `false` | Add a circular folio stamp to the article header. |
28
55
 
29
- ## Options and tokens
56
+ ## Presets
30
57
 
31
- `folioTheme(options?)` accepts `ThemeConfig` fields other than `name`:
32
- `colorMode`, `typography`, `articleLayout`, `tokens`, and `userCss`. Use
33
- `tokens` for shared semantic color, type, spacing, and layout overrides.
58
+ This theme does not define presets.
34
59
 
35
- ## Modes and compatibility
60
+ ## CSS and attributes
36
61
 
37
- The theme has matching light, explicit-dark, and system-dark token contracts.
38
- It supports visible focus, responsive typography, reduced motion, and
39
- horizontally scrollable tables. It ships only CSS and uses system fonts.
62
+ The root receives `data-rb-theme="folio"`, `data-rb-mode` for an explicit light or dark mode, and `data-rb-layout`. Every setting is reflected as `data-rb-setting-<name>`; color, number, and slider settings are also available as safe `--rb-setting-<name>` custom properties.
40
63
 
41
- ## Exports
64
+ ## See also
42
65
 
43
- - `folioTheme(options?)`
44
- - `FolioThemeOptions`
45
- - `@riebeckite/theme-folio/style.css`
66
+ [Theme API](https://github.com/Rerurate514/riebeckite/blob/main/docs/docs/reference/theme-api.md) and [Writing a theme](https://github.com/Rerurate514/riebeckite/blob/main/docs/docs/themes/writing-a-theme.md).
package/README_ja.md CHANGED
@@ -2,36 +2,65 @@
2
2
 
3
3
  <!-- Generated from docs/docs/themes/folio.ja.md. Edit the canonical documentation in docs/docs/themes and run `pnpm docs:sync`. -->
4
4
 
5
- 直接的なサンセリフ体、非対称のタイトル罫線、抑えた朱色のアクセントで構成する高コントラストなポートフォリオ向けテーマです。
6
-
7
5
  [English](./README.md)
8
6
 
7
+ ## 概要
8
+
9
+ `@riebeckite/theme-folio` は公式テーマ **Folio** を提供します。テーマ ID は `folio` です。エディトリアルな枠組みを持つ、余白の広いポートフォリオ風テーマです。
10
+
11
+ ## インストール
12
+
13
+ ```sh
14
+ npm install @riebeckite/theme-folio
15
+ ```
16
+
9
17
  ## 使い方
10
18
 
11
19
  ```ts
20
+ import { defineConfig } from "@riebeckite/core";
12
21
  import { folioTheme } from "@riebeckite/theme-folio";
13
22
 
14
23
  export default defineConfig({
15
- theme: folioTheme({ colorMode: "system" }),
24
+ theme: folioTheme({
25
+ colorMode: "system",
26
+ settings: { typography: "system" },
27
+ }),
16
28
  });
17
29
  ```
18
30
 
19
- ## デザイン
31
+ ## 共通オプション
32
+
33
+ | プロパティ | 値 | 説明 |
34
+ | --- | --- | --- |
35
+ | `colorMode` | `"light"`、`"dark"`、`"system"` | カラーモードを選びます。`"system"` はブラウザの設定に従います。 |
36
+ | `layout` | `"article"`、`"sidebar"`、`"full-width"` | ページレイアウトを選びます。 |
37
+ | `preset` | — | このテーマにはプリセットがありません。 |
38
+ | `settings` | object | 下記の設定を上書きします。不明なキーや不正な値は拒否されます。 |
39
+ | `stylesheets` | string array | テーマ CSS の後にサイト固有のスタイルシートを読み込みます。 |
40
+
41
+ 設定スキーマの既定値、選択したプリセット、明示した `settings` の順に適用されます。
42
+
43
+ ## テーマ設定
20
44
 
21
- - 大きく詰めたタイトルと左のアクセント罫線で、プロジェクトページに明快な階層を与えます。
22
- - 広い記事幅は、コンテンツをカードグリッドにせずプロジェクト説明とメディアを扱いやすくします。
23
- - Media、Lightbox、Recent posts、Card link は安定した公開プラグインルートを通じて上罫線で構造化します。
45
+ | プロパティ | 型 | 既定値と選択値 | 効果 |
46
+ | --- | --- | --- | --- |
47
+ | `typography` | select | 既定値 `"system"` — `system`、`serif`、`sans`、`mono` | 本文の書体を選びます。 |
48
+ | `accentColor` | color | 既定値 `"#d6422c"` | 操作要素などのアクセント色を設定します。 |
49
+ | `articleWidth` | slider | 既定値 `62` — 44–76、刻み 1 | 本文の最大幅を rem で設定します。 |
50
+ | `fontSize` | slider | 既定値 `1.05` — 0.95–1.25、刻み 0.05 | 本文の文字サイズを rem で設定します。 |
51
+ | `lineHeight` | slider | 既定値 `1.65` — 1.5–2.1、刻み 0.05 | 本文の行間を設定します。 |
52
+ | `motion` | boolean | 既定値 `true` | テーマの動きを有効にします。 |
53
+ | `ornament` | boolean | 既定値 `true` | 記事ヘッダーの装飾を表示します。 |
54
+ | `seal` | boolean | 既定値 `false` | 記事ヘッダーに円形のフォリオ印を追加します。 |
24
55
 
25
- ## 設定とトークン
56
+ ## プリセット
26
57
 
27
- `folioTheme(options?)` は `name` 以外の `ThemeConfig`、`colorMode`、`typography`、`articleLayout`、`tokens`、`userCss` を受け取ります。共通のセマンティックな色、書体、余白、レイアウトは `tokens` で上書きできます。
58
+ このテーマにはプリセットがありません。
28
59
 
29
- ## モードと互換性
60
+ ## CSS と属性
30
61
 
31
- ライト、明示ダーク、システムダークのトークン契約は一致します。視認できるフォーカス、レスポンシブな文字、縮小モーション、表の横スクロールに対応します。配布物は CSS のみで、システムフォントを使います。
62
+ ルートには `data-rb-theme="folio"`、明示的にライトまたはダークを選んだ場合は `data-rb-mode`、そして `data-rb-layout` が設定されます。すべての設定は `data-rb-setting-<name>` 属性に反映されます。color、number、slider 型の設定は安全な `--rb-setting-<name>` カスタムプロパティとしても利用できます。
32
63
 
33
- ## エクスポート
64
+ ## 関連情報
34
65
 
35
- - `folioTheme(options?)`
36
- - `FolioThemeOptions`
37
- - `@riebeckite/theme-folio/style.css`
66
+ [Theme API](https://github.com/Rerurate514/riebeckite/blob/main/docs/docs/reference/theme-api.md) と [テーマを書く](https://github.com/Rerurate514/riebeckite/blob/main/docs/docs/themes/writing-a-theme.ja.md) を参照してください。
@@ -1,5 +1,72 @@
1
- import { type ThemeConfig } from "@riebeckite/core";
2
- export type FolioThemeOptions = Omit<ThemeConfig, "name" | "userCss"> & {
3
- userCss?: string[];
4
- };
5
- export declare function folioTheme(options?: FolioThemeOptions): import("@riebeckite/core").RiebeckiteTheme<FolioThemeOptions>;
1
+ export declare const folioTheme: import("@riebeckite/core").ThemeDefinition<{
2
+ readonly typography: {
3
+ readonly type: "select";
4
+ readonly label: "Typography";
5
+ readonly default: "system";
6
+ readonly options: readonly [{
7
+ readonly value: "system";
8
+ readonly label: "System";
9
+ }, {
10
+ readonly value: "serif";
11
+ readonly label: "Serif";
12
+ }, {
13
+ readonly value: "sans";
14
+ readonly label: "Sans";
15
+ }, {
16
+ readonly value: "mono";
17
+ readonly label: "Mono";
18
+ }];
19
+ };
20
+ readonly accentColor: {
21
+ readonly type: "color";
22
+ readonly label: "Accent color";
23
+ readonly description: "Rules and interactive accents.";
24
+ readonly default: "#d6422c";
25
+ readonly light: "#d6422c";
26
+ readonly dark: "#ff826c";
27
+ };
28
+ readonly articleWidth: {
29
+ readonly type: "slider";
30
+ readonly label: "Article width";
31
+ readonly description: "Maximum article width in rem.";
32
+ readonly default: 62;
33
+ readonly min: 44;
34
+ readonly max: 76;
35
+ readonly step: 1;
36
+ };
37
+ readonly fontSize: {
38
+ readonly type: "slider";
39
+ readonly label: "Font size";
40
+ readonly description: "Article text size in rem.";
41
+ readonly default: 1.05;
42
+ readonly min: 0.95;
43
+ readonly max: 1.25;
44
+ readonly step: 0.05;
45
+ };
46
+ readonly lineHeight: {
47
+ readonly type: "slider";
48
+ readonly label: "Line height";
49
+ readonly description: "Article line height.";
50
+ readonly default: 1.65;
51
+ readonly min: 1.5;
52
+ readonly max: 2.1;
53
+ readonly step: 0.05;
54
+ };
55
+ readonly motion: {
56
+ readonly type: "boolean";
57
+ readonly label: "Motion";
58
+ readonly default: true;
59
+ };
60
+ readonly ornament: {
61
+ readonly type: "boolean";
62
+ readonly label: "Corner ornament";
63
+ readonly description: "Show the corner mark in the article header.";
64
+ readonly default: true;
65
+ };
66
+ readonly seal: {
67
+ readonly type: "boolean";
68
+ readonly label: "Folio seal";
69
+ readonly description: "Add a circular folio stamp to the article header.";
70
+ readonly default: false;
71
+ };
72
+ }>;
package/dist/src/index.js CHANGED
@@ -1,13 +1,71 @@
1
1
  // src/index.ts
2
- import { defineTheme } from "@riebeckite/core";
3
- function folioTheme(options = {}) {
4
- return defineTheme({
5
- name: "folio",
6
- options,
7
- styles: [{ moduleSpecifier: "@riebeckite/theme-folio/style.css" }],
8
- config: options
9
- });
10
- }
2
+ import { defineTheme, defineThemeSettings } from "@riebeckite/core";
3
+ var folioTheme = defineTheme({
4
+ name: "folio",
5
+ styles: [{ moduleSpecifier: "@riebeckite/theme-folio/style.css" }],
6
+ settings: defineThemeSettings({
7
+ typography: {
8
+ type: "select",
9
+ label: "Typography",
10
+ default: "system",
11
+ options: [
12
+ { value: "system", label: "System" },
13
+ { value: "serif", label: "Serif" },
14
+ { value: "sans", label: "Sans" },
15
+ { value: "mono", label: "Mono" }
16
+ ]
17
+ },
18
+ accentColor: {
19
+ type: "color",
20
+ label: "Accent color",
21
+ description: "Rules and interactive accents.",
22
+ default: "#d6422c",
23
+ light: "#d6422c",
24
+ dark: "#ff826c"
25
+ },
26
+ articleWidth: {
27
+ type: "slider",
28
+ label: "Article width",
29
+ description: "Maximum article width in rem.",
30
+ default: 62,
31
+ min: 44,
32
+ max: 76,
33
+ step: 1
34
+ },
35
+ fontSize: {
36
+ type: "slider",
37
+ label: "Font size",
38
+ description: "Article text size in rem.",
39
+ default: 1.05,
40
+ min: 0.95,
41
+ max: 1.25,
42
+ step: 0.05
43
+ },
44
+ lineHeight: {
45
+ type: "slider",
46
+ label: "Line height",
47
+ description: "Article line height.",
48
+ default: 1.65,
49
+ min: 1.5,
50
+ max: 2.1,
51
+ step: 0.05
52
+ },
53
+ motion: { type: "boolean", label: "Motion", default: true },
54
+ ornament: {
55
+ type: "boolean",
56
+ label: "Corner ornament",
57
+ description: "Show the corner mark in the article header.",
58
+ default: true
59
+ },
60
+ seal: {
61
+ type: "boolean",
62
+ label: "Folio seal",
63
+ description: "Add a circular folio stamp to the article header.",
64
+ default: false
65
+ }
66
+ }),
67
+ presets: { reading: { label: "Reading", settings: { typography: "serif" } } }
68
+ });
11
69
  export {
12
70
  folioTheme
13
71
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riebeckite/theme-folio",
3
- "version": "0.0.33",
3
+ "version": "0.0.34",
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.33"
19
+ "@riebeckite/core": "0.0.34"
20
20
  },
21
21
  "publishConfig": {
22
22
  "access": "public"
package/styles/theme.css CHANGED
@@ -12,14 +12,14 @@
12
12
  }
13
13
 
14
14
  @layer base {
15
- :is(:root, .rb-theme-root)[data-theme-name="folio"] {
15
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] {
16
16
  color-scheme: light;
17
17
  --rb-color-paper: #f1f0ec;
18
18
  --rb-color-surface: #ffffff;
19
19
  --rb-color-surface-hover: #e4e2dc;
20
20
  --rb-color-ink: #161616;
21
21
  --rb-color-muted: #65635f;
22
- --rb-color-accent: #d6422c;
22
+ --rb-color-accent: var(--rb-setting-accent-color, #d6422c);
23
23
  --rb-color-link: #bd301e;
24
24
  --rb-color-focus: #d6422c;
25
25
  --rb-color-selected: #ffd1c9;
@@ -40,21 +40,21 @@
40
40
  --rb-font-mono:
41
41
  "SFMono-Regular", Consolas, "Noto Sans Mono CJK JP", monospace;
42
42
  --rb-layout-page-max: 100rem;
43
- --rb-layout-article-max: 62rem;
43
+ --rb-layout-article-max: calc(var(--rb-setting-article-width, 62) * 1rem);
44
44
  --rb-layout-sidebar: 15rem;
45
45
  --rb-layout-gap: 2.5rem;
46
46
  --rb-radius-sm: 0;
47
47
  --rb-radius-md: 0;
48
48
  }
49
49
 
50
- :is(:root, .rb-theme-root)[data-theme-name="folio"][data-theme="dark"] {
50
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"][data-rb-mode="dark"] {
51
51
  color-scheme: dark;
52
52
  --rb-color-paper: #171716;
53
53
  --rb-color-surface: #222220;
54
54
  --rb-color-surface-hover: #30302d;
55
55
  --rb-color-ink: #f5f2eb;
56
56
  --rb-color-muted: #c0bcb3;
57
- --rb-color-accent: #ff826c;
57
+ --rb-color-accent: var(--rb-setting-accent-color, #ff826c);
58
58
  --rb-color-link: #ffac9c;
59
59
  --rb-color-focus: #ffbdaf;
60
60
  --rb-color-selected: #71382e;
@@ -69,14 +69,14 @@
69
69
  }
70
70
 
71
71
  @media (prefers-color-scheme: dark) {
72
- :is(:root, .rb-theme-root)[data-theme-name="folio"]:not([data-theme]) {
72
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]:not([data-rb-mode]) {
73
73
  color-scheme: dark;
74
74
  --rb-color-paper: #171716;
75
75
  --rb-color-surface: #222220;
76
76
  --rb-color-surface-hover: #30302d;
77
77
  --rb-color-ink: #f5f2eb;
78
78
  --rb-color-muted: #c0bcb3;
79
- --rb-color-accent: #ff826c;
79
+ --rb-color-accent: var(--rb-setting-accent-color, #ff826c);
80
80
  --rb-color-link: #ffac9c;
81
81
  --rb-color-focus: #ffbdaf;
82
82
  --rb-color-selected: #71382e;
@@ -91,7 +91,7 @@
91
91
  }
92
92
  }
93
93
 
94
- :is(:root, .rb-theme-root)[data-theme-name="folio"] {
94
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] {
95
95
  background: var(--rb-color-paper);
96
96
  color: var(--rb-color-ink);
97
97
  font-family: var(--rb-font-body);
@@ -100,38 +100,82 @@
100
100
  }
101
101
  }
102
102
 
103
- :is(:root, .rb-theme-root)[data-theme-name="folio"] ::selection {
103
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] ::selection {
104
104
  background: var(--rb-color-selected);
105
105
  color: var(--rb-color-ink);
106
106
  }
107
- :is(:root, .rb-theme-root)[data-theme-name="folio"] :focus-visible {
107
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] :focus-visible {
108
108
  outline: 3px solid var(--rb-color-focus);
109
109
  outline-offset: 3px;
110
110
  }
111
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article {
112
- font-size: 1.05rem;
113
- line-height: 1.65;
111
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article {
112
+ font-size: calc(var(--rb-setting-font-size, 1.05) * 1rem);
113
+ line-height: var(--rb-setting-line-height, 1.65);
114
114
  }
115
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-header {
115
+
116
+ :is(
117
+ :root,
118
+ .rb-theme-root
119
+ )[data-rb-theme="folio"][data-rb-setting-typography="mono"]
120
+ .rb-article {
121
+ font-family: ui-monospace, "SFMono-Regular", Consolas, monospace;
122
+ }
123
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] {
124
+ --rb-folio-corner: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 72 72' fill='none'%3E%3Cpath d='M2 34V2h32M70 38v32H38' stroke='%23d6422c' stroke-width='4'/%3E%3Cpath d='M2 70 70 2' stroke='%23d6422c' stroke-width='1'/%3E%3C/svg%3E");
125
+ }
126
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"][data-rb-mode="dark"] {
127
+ --rb-folio-corner: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 72 72' fill='none'%3E%3Cpath d='M2 34V2h32M70 38v32H38' stroke='%23ff826c' stroke-width='4'/%3E%3Cpath d='M2 70 70 2' stroke='%23ff826c' stroke-width='1'/%3E%3C/svg%3E");
128
+ }
129
+ @media (prefers-color-scheme: dark) {
130
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]:not([data-rb-mode]) {
131
+ --rb-folio-corner: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 72 72' fill='none'%3E%3Cpath d='M2 34V2h32M70 38v32H38' stroke='%23ff826c' stroke-width='4'/%3E%3Cpath d='M2 70 70 2' stroke='%23ff826c' stroke-width='1'/%3E%3C/svg%3E");
132
+ }
133
+ }
134
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-header {
116
135
  border-left: 0.5rem solid var(--rb-color-accent);
117
136
  margin-bottom: 3rem;
118
137
  padding-left: 1.25rem;
138
+ padding-right: 5rem;
139
+ position: relative;
140
+ }
141
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-header::after {
142
+ background: var(--rb-folio-corner) center / contain no-repeat;
143
+ content: "";
144
+ height: 4rem;
145
+ position: absolute;
146
+ right: 0;
147
+ top: 0;
148
+ width: 4rem;
149
+ }
150
+ :is(
151
+ :root,
152
+ .rb-theme-root
153
+ )[data-rb-theme="folio"][data-rb-setting-ornament="false"]
154
+ .rb-article-header {
155
+ padding-right: 1.25rem;
119
156
  }
120
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-header h1 {
157
+ :is(
158
+ :root,
159
+ .rb-theme-root
160
+ )[data-rb-theme="folio"][data-rb-setting-ornament="false"]
161
+ .rb-article-header::after {
162
+ display: none;
163
+ }
164
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-header h1 {
121
165
  font-size: clamp(2.4rem, 1.6rem + 3.5vw, 5rem);
122
166
  font-weight: 800;
123
167
  letter-spacing: -0.055em;
124
168
  line-height: 0.95;
125
169
  text-wrap: balance;
126
170
  }
127
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-meta {
171
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-meta {
128
172
  color: var(--rb-color-muted);
129
173
  font-size: 0.8rem;
130
174
  font-weight: 700;
131
175
  letter-spacing: 0.05em;
132
176
  text-transform: uppercase;
133
177
  }
134
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-content h2 {
178
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-content h2 {
135
179
  border-left: 0.25rem solid var(--rb-color-accent);
136
180
  font-size: 1.65rem;
137
181
  font-weight: 800;
@@ -139,18 +183,25 @@
139
183
  margin-top: 3.5rem;
140
184
  padding-left: 0.75rem;
141
185
  }
142
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-content h3 {
186
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-content h3 {
143
187
  font-size: 1.2rem;
144
188
  font-weight: 800;
145
189
  margin-top: 2.4rem;
146
190
  }
147
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-content a {
191
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-content a {
148
192
  color: var(--rb-color-link);
149
193
  font-weight: 650;
150
194
  text-decoration-thickness: 2px;
151
195
  text-underline-offset: 0.16em;
196
+ transition:
197
+ color 140ms ease,
198
+ text-decoration-thickness 140ms ease;
199
+ }
200
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-content a:hover {
201
+ color: var(--rb-color-accent);
202
+ text-decoration-thickness: 3px;
152
203
  }
153
- :is(:root, .rb-theme-root)[data-theme-name="folio"]
204
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]
154
205
  .rb-article-content
155
206
  blockquote {
156
207
  border-left: 0.35rem solid var(--rb-color-accent);
@@ -159,48 +210,130 @@
159
210
  margin-inline: 0;
160
211
  padding-left: 1.2rem;
161
212
  }
162
- :is(:root, .rb-theme-root)[data-theme-name="folio"]
213
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]
163
214
  .rb-article-content
164
215
  :is(pre, code) {
165
216
  font-family: var(--rb-font-mono);
166
217
  }
167
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-content pre {
218
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-content pre {
168
219
  overflow-x: auto;
169
220
  }
170
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-content table {
221
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-content table {
171
222
  border-collapse: collapse;
172
223
  display: block;
173
224
  max-width: 100%;
174
225
  overflow-x: auto;
175
226
  }
176
- :is(:root, .rb-theme-root)[data-theme-name="folio"]
227
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]
177
228
  .rb-article-content
178
229
  :is(th, td) {
179
230
  border-bottom: 2px solid var(--rb-color-border);
180
231
  padding: 0.65rem;
181
232
  text-align: left;
182
233
  }
183
- :is(:root, .rb-theme-root)[data-theme-name="folio"]
234
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]
184
235
  :is(.rr-media, .rr-lightbox, .rr-recent-posts, .rr-cardlink) {
185
236
  border-top: 3px solid var(--rb-color-ink);
186
237
  margin-top: 2.5rem;
187
238
  padding-top: 1rem;
188
239
  }
189
- :is(:root, .rb-theme-root)[data-theme-name="folio"]
240
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] :is(.rr-media, .rr-lightbox) {
241
+ border-top-color: var(--rb-color-accent);
242
+ }
243
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rr-cardlink {
244
+ transition:
245
+ border-color 140ms ease,
246
+ transform 140ms ease;
247
+ }
248
+ @media (prefers-reduced-motion: no-preference) {
249
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]:not(
250
+ [data-rb-setting-motion="false"]
251
+ )
252
+ .rb-article-header::after {
253
+ animation: rb-folio-frame-in 420ms ease-out both;
254
+ }
255
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rr-cardlink:hover {
256
+ border-color: var(--rb-color-accent);
257
+ transform: translateX(0.25rem);
258
+ }
259
+ }
260
+ @keyframes rb-folio-frame-in {
261
+ from {
262
+ opacity: 0;
263
+ transform: translate(0.6rem, -0.6rem);
264
+ }
265
+ to {
266
+ opacity: 1;
267
+ transform: translate(0);
268
+ }
269
+ }
270
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]
190
271
  :is(.rb-site-header, .rb-site-footer) {
191
272
  font-weight: 700;
192
273
  }
193
274
  @media (max-width: 48rem) {
194
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article {
275
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article {
195
276
  font-size: 1rem;
196
277
  }
197
- :is(:root, .rb-theme-root)[data-theme-name="folio"] .rb-article-header {
278
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] .rb-article-header {
198
279
  border-left-width: 0.3rem;
280
+ padding-right: 3.5rem;
199
281
  }
200
282
  }
201
283
  @media (prefers-reduced-motion: reduce) {
202
- :is(:root, .rb-theme-root)[data-theme-name="folio"] * {
284
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"] * {
203
285
  scroll-behavior: auto;
204
286
  transition-duration: 0s;
205
287
  }
206
288
  }
289
+
290
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"][data-rb-setting-seal="true"]
291
+ .rb-article-header {
292
+ padding-right: 5rem;
293
+ }
294
+
295
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"][data-rb-setting-seal="true"]
296
+ .rb-article-header::before {
297
+ position: absolute;
298
+ top: 1.25rem;
299
+ right: 5.25rem;
300
+ display: grid;
301
+ width: 3.25rem;
302
+ height: 3.25rem;
303
+ border: 1px solid var(--rb-color-accent);
304
+ border-radius: 50%;
305
+ color: var(--rb-color-accent);
306
+ content: "FOLIO";
307
+ font-family: var(--rb-font-heading);
308
+ font-size: 0.5rem;
309
+ font-weight: 700;
310
+ letter-spacing: 0.14em;
311
+ opacity: 0.75;
312
+ place-items: center;
313
+ text-indent: 0.14em;
314
+ transform: rotate(-12deg);
315
+ pointer-events: none;
316
+ }
317
+
318
+ @media (max-width: 48rem) {
319
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"][data-rb-setting-seal="true"]
320
+ .rb-article-header {
321
+ padding-right: 3.5rem;
322
+ }
323
+
324
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"][data-rb-setting-seal="true"]
325
+ .rb-article-header::before {
326
+ top: 1rem;
327
+ right: 3.75rem;
328
+ width: 2.75rem;
329
+ height: 2.75rem;
330
+ font-size: 0.4375rem;
331
+ }
332
+ }
333
+
334
+ :is(:root, .rb-theme-root)[data-rb-theme="folio"]
335
+ .rb-article-content
336
+ > :is(.rr-callout, .rb-table-scroll, pre, .rr-code)
337
+ + :is(.rr-callout, .rb-table-scroll, pre, .rr-code) {
338
+ margin-block-start: 2.5rem;
339
+ }