create-riebeckite 0.0.26 → 0.0.28

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.
@@ -0,0 +1,3 @@
1
+ import { type ScaffoldPreset } from "./presets.js";
2
+ import type { SiteTemplateVariables } from "./template_types.js";
3
+ export declare function readme(preset: ScaffoldPreset, variables: SiteTemplateVariables): string;
@@ -0,0 +1,27 @@
1
+ import type { ScaffoldPreset } from "./presets.js";
2
+ export type ReadmeDemo = {
3
+ readonly title: {
4
+ readonly en: string;
5
+ readonly ja: string;
6
+ };
7
+ readonly intro: {
8
+ readonly en: string;
9
+ readonly ja: string;
10
+ };
11
+ readonly markdown: string;
12
+ };
13
+ export declare const README_DEMOS: Readonly<Record<string, ReadmeDemo>>;
14
+ /**
15
+ * English-only content pages keep a `.en` suffix unless `en` is the default
16
+ * language. `examples` is intentionally absent: it is localized like the
17
+ * tour pages, with English as the fallback for untranslated languages.
18
+ */
19
+ export declare const ENGLISH_ONLY_PAGES: Set<string>;
20
+ export declare function fence(language: string, body: string): string;
21
+ export declare function hasPlugin(preset: ScaffoldPreset, packageName: string): boolean;
22
+ /**
23
+ * A demo key is either `@scope/package` or `@scope/package/topic`. Recover the
24
+ * package name: the first two `/`-separated segments form the scoped name.
25
+ */
26
+ export declare function demoPackage(key: string): string;
27
+ export declare const README_DEMO_ORDER: string[];
@@ -1,4 +1,4 @@
1
- import type { SiteTemplateFile } from "./templates.js";
1
+ import type { SiteTemplateFile } from "./template_types.js";
2
2
  export declare function resolveTemplateRoot(): string;
3
3
  export declare function readTemplate(relativePath: string): Uint8Array;
4
4
  export declare function copyTemplateTree(relativeDirectory: string, replacements?: Readonly<Record<string, string>>, include?: (relativePath: string) => boolean): SiteTemplateFile[];
@@ -0,0 +1,13 @@
1
+ import type { ScaffoldOptionContext, ScaffoldOptions, ScaffoldPreset } from "./presets.js";
2
+ import type { SiteTemplateVariables } from "./template_types.js";
3
+ /**
4
+ * Resolve a plugin's options literal for the preset's depth, or `null` when
5
+ * the plugin takes no options at that depth (and should be called bare).
6
+ */
7
+ export declare function renderOptions(options: ScaffoldOptions | undefined, context: ScaffoldOptionContext): string | null;
8
+ export declare function pluginExpression(plugin: ScaffoldPreset["plugins"][number], preset: ScaffoldPreset, variables: SiteTemplateVariables): string;
9
+ /**
10
+ * The options object literal used for a plugin at this preset's depth, or
11
+ * `null` when it takes no options at that depth.
12
+ */
13
+ export declare function readmePluginOptions(variables: SiteTemplateVariables, preset: ScaffoldPreset, plugin: ScaffoldPreset["plugins"][number]): string | null;
@@ -0,0 +1,17 @@
1
+ import type { ScaffoldUtilityName } from "./utilities.js";
2
+ export type SiteTemplateVariables = {
3
+ readonly name: string;
4
+ readonly title: string;
5
+ readonly description: string;
6
+ readonly baseUrl: string;
7
+ readonly locale: string;
8
+ readonly externalContent?: boolean;
9
+ };
10
+ export type SiteTemplateOptions = {
11
+ readonly cloudflareWorkers?: boolean;
12
+ readonly utilities?: readonly ScaffoldUtilityName[];
13
+ };
14
+ export type SiteTemplateFile = {
15
+ readonly path: string;
16
+ readonly content: string | Uint8Array;
17
+ };
@@ -1,55 +1,8 @@
1
- import { type ScaffoldOptionContext, type ScaffoldOptions, type ScaffoldPreset } from "./presets.js";
2
- import { type ScaffoldUtilityName } from "./utilities.js";
3
- export type SiteTemplateVariables = {
4
- readonly name: string;
5
- readonly title: string;
6
- readonly description: string;
7
- readonly baseUrl: string;
8
- readonly locale: string;
9
- readonly externalContent?: boolean;
10
- };
11
- export type SiteTemplateOptions = {
12
- readonly cloudflareWorkers?: boolean;
13
- readonly utilities?: readonly ScaffoldUtilityName[];
14
- };
15
- export type SiteTemplateFile = {
16
- readonly path: string;
17
- readonly content: string | Uint8Array;
18
- };
1
+ import { type ScaffoldPreset } from "./presets.js";
2
+ import type { SiteTemplateFile, SiteTemplateOptions, SiteTemplateVariables } from "./template_types.js";
3
+ export type { SiteTemplateFile, SiteTemplateOptions, SiteTemplateVariables, } from "./template_types.js";
19
4
  export declare function siteTemplateFiles(preset: ScaffoldPreset, variables: SiteTemplateVariables, options?: SiteTemplateOptions): readonly SiteTemplateFile[];
20
5
  /**
21
- * Resolve a plugin's options literal for the preset's depth, or `null` when
22
- * the plugin takes no options at that depth (and should be called bare).
6
+ * `starter` includes practical configuration and `showcase` renders the full
7
+ * option surface. Lightweight presets deliberately keep depth 0.
23
8
  */
24
- export declare function renderOptions(options: ScaffoldOptions | undefined, context: ScaffoldOptionContext): string | null;
25
- export type ReadmeDemo = {
26
- readonly title: {
27
- readonly en: string;
28
- readonly ja: string;
29
- };
30
- readonly intro: {
31
- readonly en: string;
32
- readonly ja: string;
33
- };
34
- readonly markdown: string;
35
- };
36
- export declare const README_DEMOS: Readonly<Record<string, ReadmeDemo>>;
37
- /**
38
- * English-only content pages keep a `.en` suffix unless `en` is the default
39
- * language. `examples` is intentionally absent: it is localized like the
40
- * tour pages, with English as the fallback for untranslated languages.
41
- */
42
- export declare const ENGLISH_ONLY_PAGES: Set<string>;
43
- export declare function fence(language: string, body: string): string;
44
- export declare function hasPlugin(preset: ScaffoldPreset, packageName: string): boolean;
45
- /**
46
- * A demo key is either `@scope/package` or `@scope/package/topic`. Recover the
47
- * package name: the first two `/`-separated segments form the scoped name.
48
- */
49
- export declare function demoPackage(key: string): string;
50
- /**
51
- * The options object literal used for a plugin at this preset's depth, or
52
- * `null` when it takes no options at that depth.
53
- */
54
- export declare function readmePluginOptions(variables: SiteTemplateVariables, preset: ScaffoldPreset, plugin: ScaffoldPreset["plugins"][number]): string | null;
55
- export declare const README_DEMO_ORDER: string[];
@@ -1,4 +1,4 @@
1
- import type { SiteTemplateFile } from "./templates.js";
1
+ import type { SiteTemplateFile } from "./template_types.js";
2
2
  export declare const SCAFFOLD_UTILITY_NAMES: readonly ["gitignore", "editorconfig", "gitattributes", "biome", "npmrc", "vscode"];
3
3
  export type ScaffoldUtilityName = (typeof SCAFFOLD_UTILITY_NAMES)[number];
4
4
  export type ScaffoldUtilitySummary = {
@@ -1 +1 @@
1
- export declare const RIEBECKITE_VERSION = "^0.0.26";
1
+ export declare const RIEBECKITE_VERSION = "^0.0.28";
@@ -13,8 +13,6 @@ export declare const CLOUDFLARE_WORKERS_DEFAULTS: {
13
13
  readonly directory: "./dist";
14
14
  };
15
15
  };
16
- /** Type for the wrangler config object */
17
- export type CloudflareWorkersDefaults = typeof CLOUDFLARE_WORKERS_DEFAULTS;
18
16
  export declare const WRANGLER_VERSION = "^4.83.0";
19
17
  export declare const DEFAULT_WORKER_NAME = "riebeckite-site";
20
18
  export declare const WORKER_NAME_MAX_LENGTH = 63;
@@ -40,7 +38,5 @@ export declare const LOCKFILE_NAME: "package-lock.json";
40
38
  export declare const GITIGNORE_REQUIRED: readonly ["node_modules/", "dist/", ".riebeckite/", "app/.riebeckite/", ".wrangler/", ".dev.vars"];
41
39
  /** Files that must NOT be in .gitignore */
42
40
  export declare const GITIGNORE_FORBIDDEN: readonly ["package-lock.json"];
43
- /** Starter preset content pages (base names without language suffixes) */
44
- export declare const STARTER_CONTENT_PAGES: readonly ["index", "guide", "examples", "notes/planning", "notes/writing"];
45
41
  /** Starter preset languages */
46
42
  export declare const STARTER_LANGUAGES: readonly ["en", "ja", "zh-CN", "es", "de", "fr", "ko"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-riebeckite",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "esbuild": "^0.28.2",
42
- "@riebeckite/test": "0.0.26"
42
+ "@riebeckite/test": "0.0.28"
43
43
  },
44
44
  "repository": {
45
45
  "type": "git",
@@ -11,6 +11,9 @@ concurrency:
11
11
  group: riebeckite-deploy
12
12
  cancel-in-progress: true
13
13
 
14
+ env:
15
+ NODE_VERSION: "22"
16
+
14
17
  jobs:
15
18
  deploy:
16
19
  runs-on: ubuntu-latest
@@ -23,7 +26,7 @@ jobs:
23
26
  - name: Set up Node.js
24
27
  uses: actions/setup-node@v4
25
28
  with:
26
- node-version: 22
29
+ node-version: ${{ env.NODE_VERSION }}
27
30
  cache: npm
28
31
 
29
32
  - name: Install dependencies
@@ -31,14 +34,27 @@ jobs:
31
34
 
32
35
  - name: Restore Riebeckite build state
33
36
  uses: actions/cache@v4
37
+ continue-on-error: true
34
38
  with:
35
39
  path: |
36
40
  .riebeckite/cache
37
41
  .riebeckite/build/content-state.json
38
- key: riebeckite-build-v1-${{ runner.os }}-${{ hashFiles('package-lock.json') }}-${{ github.run_id }}-${{ github.run_attempt }}
42
+ .riebeckite/ssg-output-cache.json
43
+ .riebeckite/ssg-output-cache.entries
44
+ .riebeckite/ssg-output-cache.fast-path.json
45
+ key: riebeckite-build-v2-${{ runner.os }}-node${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}-${{ hashFiles('riebeckite.config.ts') }}-${{ github.run_id }}-${{ github.run_attempt }}
39
46
  restore-keys: |
40
- riebeckite-build-v1-${{ runner.os }}-${{ hashFiles('package-lock.json') }}-
41
- riebeckite-content-v3-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
47
+ riebeckite-build-v2-${{ runner.os }}-node${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}-${{ hashFiles('riebeckite.config.ts') }}-
48
+ riebeckite-build-v2-${{ runner.os }}-node${{ env.NODE_VERSION }}-${{ hashFiles('package-lock.json') }}-
49
+
50
+ - name: Report restored Riebeckite cache
51
+ shell: bash
52
+ run: |
53
+ if [ -d .riebeckite ]; then
54
+ echo "Restored Riebeckite cache: $(du -sb .riebeckite | cut -f1) bytes"
55
+ else
56
+ echo "Restored Riebeckite cache: 0 bytes (cold build)"
57
+ fi
42
58
 
43
59
  - name: Validate configuration and plugins
44
60
  run: npm exec riebeckite check
@@ -46,6 +62,11 @@ jobs:
46
62
  - name: Build the site
47
63
  run: npm exec riebeckite build
48
64
 
65
+ - name: Report Riebeckite cache to save
66
+ shell: bash
67
+ run: |
68
+ echo "Riebeckite cache to save: $(du -sb .riebeckite | cut -f1) bytes"
69
+
49
70
  - name: Deploy the built assets
50
71
  uses: cloudflare/wrangler-action@v3
51
72
  with:
@@ -1,14 +1,4 @@
1
-
2
- *,
3
- *::before,
4
- *::after {
5
- box-sizing: border-box;
6
- }
7
-
8
- body {
9
- margin: 0;
10
- font-family: system-ui, sans-serif;
11
- }
1
+ @import "./.riebeckite/framework-styles.css";
12
2
 
13
3
  .riebeckite-empty {
14
4
  max-width: 48rem;
@@ -2,17 +2,6 @@
2
2
  @import "./.riebeckite/plugin-styles.css";
3
3
  @import "./.riebeckite/theme-styles.css";
4
4
 
5
- *,
6
- *::before,
7
- *::after {
8
- box-sizing: border-box;
9
- }
10
-
11
- body {
12
- margin: 0;
13
- font-family: system-ui, sans-serif;
14
- }
15
-
16
5
  .riebeckite-page {
17
6
  display: flex;
18
7
  min-height: 100vh;
@@ -1,4 +1,4 @@
1
- import { SiteNav } from "@riebeckite/plugin-navigation";
1
+ import { MobileSiteNav, SiteNav } from "@riebeckite/plugin-navigation";
2
2
  import { ColorModeToggle } from "@riebeckite/plugin-color-mode";
3
3
  import { useSiteContext } from "@riebeckite/ui";
4
4
 
@@ -17,11 +17,12 @@ export function SiteHeader() {
17
17
  />
18
18
  {site?.config.site.title}
19
19
  </a>
20
- <SiteNav placement="primary" omitHome />
21
- <details class="rb-nav__mobile">
22
- <summary class="rb-nav__toggle">Menu</summary>
20
+ <div class="site-header__primary-navigation">
23
21
  <SiteNav placement="primary" omitHome />
24
- </details>
22
+ </div>
23
+ <div class="site-header__mobile-navigation">
24
+ <MobileSiteNav placement="primary" omitHome />
25
+ </div>
25
26
  <ColorModeToggle />
26
27
  </header>
27
28
  );
@@ -2,17 +2,6 @@
2
2
  @import "./.riebeckite/plugin-styles.css";
3
3
  @import "./.riebeckite/theme-styles.css";
4
4
 
5
- *,
6
- *::before,
7
- *::after {
8
- box-sizing: border-box;
9
- }
10
-
11
- body {
12
- margin: 0;
13
- font-family: system-ui, sans-serif;
14
- }
15
-
16
5
  .riebeckite-page {
17
6
  --site-toc-sticky-top: var(--rb-space-3, 1.5rem);
18
7
  display: flex;
@@ -43,7 +32,7 @@ body {
43
32
  }
44
33
 
45
34
  .site-header,
46
- .rb-site-footer {
35
+ .site-footer {
47
36
  width: min(100% - 2rem, var(--rb-layout-page-max, 80rem));
48
37
  }
49
38
 
@@ -57,51 +46,17 @@ body {
57
46
  text-decoration: none;
58
47
  }
59
48
 
60
- .rb-nav {
61
- color: var(--rb-color-ink);
62
- }
63
-
64
- .rb-nav > .rb-nav__list {
65
- display: flex;
66
- align-items: center;
67
- gap: var(--rb-space-3, 1.5rem);
68
- }
69
-
70
- .rb-nav__link {
71
- color: inherit;
72
- text-decoration: none;
73
- }
74
-
75
- .rb-nav__link:hover,
76
- .rb-nav__link:focus-visible,
77
- .rb-nav__link--active {
78
- color: var(--rb-color-accent);
79
- }
80
-
81
- .rb-nav__link:focus-visible,
82
- .rb-nav__toggle:focus-visible {
83
- outline: 2px solid var(--rb-color-accent);
84
- outline-offset: 2px;
85
- }
86
-
87
- .rb-nav__children {
88
- padding: var(--rb-space-2, 1rem);
89
- background: var(--rb-color-surface);
90
- border: 1px solid var(--rb-color-border);
91
- }
92
-
93
- .rb-nav__mobile {
49
+ .site-header__mobile-navigation {
94
50
  display: none;
95
51
  }
96
52
 
97
- .rb-site-footer {
53
+ .site-footer {
98
54
  margin-top: 1rem;
99
55
  border-top: 1px solid var(--rb-color-border);
100
56
  }
101
57
 
102
58
  @media (min-width: 30.001rem) and (max-width: 48rem) {
103
- .rb-site-header,
104
- .rb-nav > .rb-nav__list {
59
+ .site-header {
105
60
  flex-wrap: wrap;
106
61
  }
107
62
  }
@@ -111,51 +66,17 @@ body {
111
66
  padding-block: var(--rb-space-3, 1.5rem);
112
67
  }
113
68
 
114
- .rb-site-header {
69
+ .site-header {
115
70
  flex-wrap: wrap;
116
71
  }
117
72
 
118
- .rb-site-header > .rb-nav {
73
+ .site-header__primary-navigation {
119
74
  display: none;
120
75
  }
121
76
 
122
- .rb-nav__mobile {
123
- position: relative;
77
+ .site-header__mobile-navigation {
124
78
  display: block;
125
79
  }
126
-
127
- .rb-nav__mobile > .rb-nav {
128
- position: absolute;
129
- z-index: 10;
130
- top: calc(100% + var(--rb-space-2, 1rem));
131
- right: 0;
132
- min-width: 12rem;
133
- padding: var(--rb-space-3, 1.5rem);
134
- background: var(--rb-color-surface);
135
- border: 1px solid var(--rb-color-border);
136
- box-shadow: 0 4px 12px
137
- color-mix(in oklab, var(--rb-color-ink) 14%, transparent);
138
- }
139
-
140
- .rb-nav__mobile .rb-nav__list,
141
- .rb-nav__mobile .rb-nav__children {
142
- display: flex;
143
- flex-direction: column;
144
- align-items: flex-start;
145
- gap: var(--rb-space-2, 1rem);
146
- }
147
-
148
- .rb-nav__mobile .rb-nav__list {
149
- padding: 0;
150
- }
151
-
152
- .rb-nav__mobile .rb-nav__children {
153
- position: static;
154
- margin-top: var(--rb-space-2, 1rem);
155
- padding: 0;
156
- background: transparent;
157
- border: 0;
158
- }
159
80
  }
160
81
 
161
82
  .site-header__logo {
@@ -174,29 +95,37 @@ body {
174
95
  margin: 0 auto;
175
96
  }
176
97
 
177
- .rb-article-body,
178
- .site-article__footer {
98
+ .rb-article-body {
179
99
  min-width: 0;
180
100
  padding-inline: var(--rb-space-2, 1rem);
181
101
  }
182
102
 
103
+ .site-article__footer {
104
+ min-width: 0;
105
+ }
106
+
183
107
  .site-article__aside {
184
108
  display: none;
185
109
  }
186
110
 
187
- @media (min-width: 64rem) {
111
+ @media (min-width: 80rem) {
188
112
  .site-article__layout {
189
113
  display: grid;
190
114
  width: 100%;
191
- grid-template-columns: minmax(0, var(--rb-layout-article-max, 48rem)) minmax(0, var(--rb-layout-sidebar, 14rem));
192
- gap: var(--rb-layout-gap, 2rem);
115
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--rb-layout-article-max, 48rem)) minmax(0, 1fr);
193
116
  align-items: start;
194
117
  }
195
118
 
119
+ .site-article__layout > .rb-article-body {
120
+ grid-column: 2;
121
+ }
122
+
196
123
  .site-article__aside {
197
124
  display: block;
198
125
  min-width: 0;
199
126
  align-self: stretch;
127
+ grid-column: 3;
128
+ padding-inline-start: var(--rb-layout-gap, 2rem);
200
129
  }
201
130
 
202
131
  .site-article__aside > .rr-table-of-contents--desktop {
@@ -1,4 +1,4 @@
1
- import { SiteNav } from "@riebeckite/plugin-navigation";
1
+ import { MobileSiteNav, SiteNav } from "@riebeckite/plugin-navigation";
2
2
  import { ColorModeToggle } from "@riebeckite/plugin-color-mode";
3
3
  import { useSiteContext } from "@riebeckite/ui";
4
4
 
@@ -17,11 +17,12 @@ export function SiteHeader() {
17
17
  />
18
18
  {site?.config.site.title}
19
19
  </a>
20
- <SiteNav placement="primary" omitHome />
21
- <details class="rb-nav__mobile">
22
- <summary class="rb-nav__toggle">Menu</summary>
20
+ <div class="site-header__primary-navigation">
23
21
  <SiteNav placement="primary" omitHome />
24
- </details>
22
+ </div>
23
+ <div class="site-header__mobile-navigation">
24
+ <MobileSiteNav placement="primary" omitHome />
25
+ </div>
25
26
  <ColorModeToggle />
26
27
  </header>
27
28
  );
@@ -2,17 +2,6 @@
2
2
  @import "./.riebeckite/plugin-styles.css";
3
3
  @import "./.riebeckite/theme-styles.css";
4
4
 
5
- *,
6
- *::before,
7
- *::after {
8
- box-sizing: border-box;
9
- }
10
-
11
- body {
12
- margin: 0;
13
- font-family: system-ui, sans-serif;
14
- }
15
-
16
5
  .riebeckite-page {
17
6
  --site-toc-sticky-top: var(--rb-space-3, 1.5rem);
18
7
  display: flex;
@@ -43,7 +32,7 @@ body {
43
32
  }
44
33
 
45
34
  .site-header,
46
- .rb-site-footer {
35
+ .site-footer {
47
36
  width: min(100% - 2rem, var(--rb-layout-page-max, 80rem));
48
37
  }
49
38
 
@@ -57,51 +46,17 @@ body {
57
46
  text-decoration: none;
58
47
  }
59
48
 
60
- .rb-nav {
61
- color: var(--rb-color-ink);
62
- }
63
-
64
- .rb-nav > .rb-nav__list {
65
- display: flex;
66
- align-items: center;
67
- gap: var(--rb-space-3, 1.5rem);
68
- }
69
-
70
- .rb-nav__link {
71
- color: inherit;
72
- text-decoration: none;
73
- }
74
-
75
- .rb-nav__link:hover,
76
- .rb-nav__link:focus-visible,
77
- .rb-nav__link--active {
78
- color: var(--rb-color-accent);
79
- }
80
-
81
- .rb-nav__link:focus-visible,
82
- .rb-nav__toggle:focus-visible {
83
- outline: 2px solid var(--rb-color-accent);
84
- outline-offset: 2px;
85
- }
86
-
87
- .rb-nav__children {
88
- padding: var(--rb-space-2, 1rem);
89
- background: var(--rb-color-surface);
90
- border: 1px solid var(--rb-color-border);
91
- }
92
-
93
- .rb-nav__mobile {
49
+ .site-header__mobile-navigation {
94
50
  display: none;
95
51
  }
96
52
 
97
- .rb-site-footer {
53
+ .site-footer {
98
54
  margin-top: 1rem;
99
55
  border-top: 1px solid var(--rb-color-border);
100
56
  }
101
57
 
102
58
  @media (min-width: 30.001rem) and (max-width: 48rem) {
103
- .rb-site-header,
104
- .rb-nav > .rb-nav__list {
59
+ .site-header {
105
60
  flex-wrap: wrap;
106
61
  }
107
62
  }
@@ -111,51 +66,17 @@ body {
111
66
  padding-block: var(--rb-space-3, 1.5rem);
112
67
  }
113
68
 
114
- .rb-site-header {
69
+ .site-header {
115
70
  flex-wrap: wrap;
116
71
  }
117
72
 
118
- .rb-site-header > .rb-nav {
73
+ .site-header__primary-navigation {
119
74
  display: none;
120
75
  }
121
76
 
122
- .rb-nav__mobile {
123
- position: relative;
77
+ .site-header__mobile-navigation {
124
78
  display: block;
125
79
  }
126
-
127
- .rb-nav__mobile > .rb-nav {
128
- position: absolute;
129
- z-index: 10;
130
- top: calc(100% + var(--rb-space-2, 1rem));
131
- right: 0;
132
- min-width: 12rem;
133
- padding: var(--rb-space-3, 1.5rem);
134
- background: var(--rb-color-surface);
135
- border: 1px solid var(--rb-color-border);
136
- box-shadow: 0 4px 12px
137
- color-mix(in oklab, var(--rb-color-ink) 14%, transparent);
138
- }
139
-
140
- .rb-nav__mobile .rb-nav__list,
141
- .rb-nav__mobile .rb-nav__children {
142
- display: flex;
143
- flex-direction: column;
144
- align-items: flex-start;
145
- gap: var(--rb-space-2, 1rem);
146
- }
147
-
148
- .rb-nav__mobile .rb-nav__list {
149
- padding: 0;
150
- }
151
-
152
- .rb-nav__mobile .rb-nav__children {
153
- position: static;
154
- margin-top: var(--rb-space-2, 1rem);
155
- padding: 0;
156
- background: transparent;
157
- border: 0;
158
- }
159
80
  }
160
81
 
161
82
  .site-header__logo {
@@ -174,29 +95,37 @@ body {
174
95
  margin: 0 auto;
175
96
  }
176
97
 
177
- .rb-article-body,
178
- .site-article__footer {
98
+ .rb-article-body {
179
99
  min-width: 0;
180
100
  padding-inline: var(--rb-space-2, 1rem);
181
101
  }
182
102
 
103
+ .site-article__footer {
104
+ min-width: 0;
105
+ }
106
+
183
107
  .site-article__aside {
184
108
  display: none;
185
109
  }
186
110
 
187
- @media (min-width: 64rem) {
111
+ @media (min-width: 80rem) {
188
112
  .site-article__layout {
189
113
  display: grid;
190
114
  width: 100%;
191
- grid-template-columns: minmax(0, var(--rb-layout-article-max, 48rem)) minmax(0, var(--rb-layout-sidebar, 14rem));
192
- gap: var(--rb-layout-gap, 2rem);
115
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--rb-layout-article-max, 48rem)) minmax(0, 1fr);
193
116
  align-items: start;
194
117
  }
195
118
 
119
+ .site-article__layout > .rb-article-body {
120
+ grid-column: 2;
121
+ }
122
+
196
123
  .site-article__aside {
197
124
  display: block;
198
125
  min-width: 0;
199
126
  align-self: stretch;
127
+ grid-column: 3;
128
+ padding-inline-start: var(--rb-layout-gap, 2rem);
200
129
  }
201
130
 
202
131
  .site-article__aside > .rr-table-of-contents--desktop {