jekyll-theme-zer0 1.29.0 → 1.31.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +886 -2
- data/_data/README.md +2 -0
- data/_data/ai.yml +5 -3
- data/_data/ai_pricing.yml +36 -0
- data/_data/backlog.yml +196 -22
- data/_data/consumers.yml +147 -5
- data/_data/features.yml +147 -21
- data/_data/feedback_types.yml +17 -12
- data/_data/landing.yml +5 -2
- data/_data/navigation/quickstart.yml +4 -0
- data/_data/site_builder.yml +874 -0
- data/_data/theme-manifest.yml +132 -122
- data/_data/ui-text.yml +19 -0
- data/_includes/README.md +11 -1
- data/_includes/analytics/posthog.html +30 -11
- data/_includes/components/README.md +1 -1
- data/_includes/components/admin-links.html +2 -2
- data/_includes/components/admin-tabs.html +2 -2
- data/_includes/components/ai-chat.html +14 -11
- data/_includes/components/analytics-dashboard.html +8 -8
- data/_includes/components/author-bio.html +1 -1
- data/_includes/components/author-card.html +10 -2
- data/_includes/components/author-eeat.html +4 -4
- data/_includes/components/background-customizer.html +8 -8
- data/_includes/components/background-image.html +120 -0
- data/_includes/components/background-settings.html +28 -15
- data/_includes/components/collection-manager.html +5 -5
- data/_includes/components/component-showcase.html +13 -13
- data/_includes/components/config-editor.html +12 -12
- data/_includes/components/config-viewer.html +8 -8
- data/_includes/components/cookie-consent.html +41 -41
- data/_includes/components/cta-button.html +7 -2
- data/_includes/components/dev-shortcuts.html +7 -7
- data/_includes/components/env-dashboard.html +8 -8
- data/_includes/components/env-switcher.html +9 -9
- data/_includes/components/feature-card.html +2 -2
- data/_includes/components/halfmoon.html +2 -2
- data/_includes/components/info-section.html +36 -36
- data/_includes/components/js-cdn.html +15 -15
- data/_includes/components/language-toggle.html +4 -4
- data/_includes/components/mermaid.html +79 -435
- data/_includes/components/nanobar.html +5 -5
- data/_includes/components/nav-editor.html +2 -2
- data/_includes/components/nav-export.html +2 -2
- data/_includes/components/nav-overview.html +2 -2
- data/_includes/components/page-feedback.html +45 -30
- data/_includes/components/page-views-init.html +1 -1
- data/_includes/components/post-card.html +22 -22
- data/_includes/components/post-type-badge.html +2 -2
- data/_includes/components/powered-by.html +2 -2
- data/_includes/components/preview-image.html +28 -3
- data/_includes/components/quick-index.html +2 -2
- data/_includes/components/search-modal.html +27 -2
- data/_includes/components/searchbar.html +2 -2
- data/_includes/components/svg-background.html +2 -2
- data/_includes/components/theme-customizer.html +2 -2
- data/_includes/components/theme-info.html +6 -6
- data/_includes/components/theme-preview-gallery.html +23 -23
- data/_includes/content/giscus.html +2 -2
- data/_includes/content/intro.html +15 -8
- data/_includes/content/jsonld-faq.html +2 -2
- data/_includes/content/jsonld-software.html +2 -2
- data/_includes/content/seo.html +12 -4
- data/_includes/content/sitemap.html +247 -290
- data/_includes/content/toc.html +183 -183
- data/_includes/core/branding.html +13 -20
- data/_includes/core/console-capture.html +32 -74
- data/_includes/core/favicon.html +49 -7
- data/_includes/core/footer-fabs.html +17 -3
- data/_includes/core/footer.html +31 -18
- data/_includes/core/head.html +128 -92
- data/_includes/core/header.html +85 -54
- data/_includes/core/tokens-inline.html +16 -1
- data/_includes/docs/bootstrap-docs.html +8 -8
- data/_includes/landing/landing-install-cards.html +2 -2
- data/_includes/landing/landing-quick-links.html +1 -1
- data/_includes/navigation/admin-nav.html +2 -2
- data/_includes/navigation/nav-tree.html +8 -8
- data/_includes/navigation/navbar.html +21 -18
- data/_includes/navigation/section-sidebar.html +16 -16
- data/_includes/navigation/sidebar-config.html +36 -2
- data/_includes/navigation/sidebar-left.html +15 -15
- data/_includes/navigation/sidebar-right.html +6 -6
- data/_includes/obsidian/full-graph.html +2 -2
- data/_includes/setup/claude-session.html +72 -0
- data/_includes/setup/prereq-checklist.html +90 -0
- data/_includes/setup/wizard.html +910 -291
- data/_includes/stats/stats-categories.html +8 -8
- data/_includes/stats/stats-header.html +14 -14
- data/_includes/stats/stats-metrics.html +12 -12
- data/_includes/stats/stats-no-data.html +12 -12
- data/_includes/stats/stats-overview.html +6 -6
- data/_includes/stats/stats-tags.html +8 -8
- data/_layouts/404.html +38 -24
- data/_layouts/admin.html +22 -22
- data/_layouts/article.html +54 -37
- data/_layouts/author.html +20 -20
- data/_layouts/authors.html +2 -2
- data/_layouts/book-abc.html +12 -12
- data/_layouts/book-story.html +15 -15
- data/_layouts/book.html +12 -12
- data/_layouts/collection.html +33 -33
- data/_layouts/cookbook.html +12 -12
- data/_layouts/default.html +27 -24
- data/_layouts/home.html +36 -24
- data/_layouts/index.html +10 -10
- data/_layouts/landing.html +17 -17
- data/_layouts/news.html +44 -44
- data/_layouts/note.html +40 -39
- data/_layouts/notebook.html +36 -35
- data/_layouts/recipe.html +24 -24
- data/_layouts/root.html +95 -55
- data/_layouts/section.html +23 -23
- data/_layouts/setup.html +3 -3
- data/_layouts/sitemap-collection.html +49 -49
- data/_layouts/stats.html +40 -40
- data/_layouts/tag.html +12 -12
- data/_layouts/welcome.html +21 -21
- data/_sass/components/_cookie-banner.scss +48 -0
- data/_sass/components/_mermaid.scss +375 -0
- data/_sass/components/_setup-wizard.scss +588 -41
- data/_sass/components/_ui-enhancements.scss +11 -0
- data/_sass/core/_navbar.scss +147 -100
- data/_sass/core/_sidebar-extras.scss +2 -14
- data/_sass/core/code-copy.scss +27 -8
- data/_sass/layouts/_navbar-extras.scss +14 -4
- data/assets/css/extension-points-demo.css +27 -0
- data/assets/css/main.scss +1 -0
- data/assets/data/wiki-index.json +19 -0
- data/assets/js/ai-chat.js +47 -5
- data/assets/js/auto-hide-nav.js +53 -13
- data/assets/js/code-copy.js +72 -1
- data/assets/js/extension-points-demo.js +48 -0
- data/assets/js/fleet-feedback-capture.js +124 -0
- data/assets/js/fleet-feedback.js +853 -0
- data/assets/js/mermaid-diagrams.js +1373 -0
- data/assets/js/modules/navigation/config.js +9 -6
- data/assets/js/modules/navigation/scroll-spy.js +315 -80
- data/assets/js/modules/theme/appearance.js +8 -2
- data/assets/js/obsidian-local-graph.js +27 -5
- data/assets/js/obsidian-wiki-links.js +8 -3
- data/assets/js/page-feedback.js +125 -192
- data/assets/js/search-modal.js +26 -0
- data/assets/js/setup-wizard.js +2119 -363
- data/assets/js/site-builder.js +1834 -0
- data/assets/js/ui-enhancements.js +11 -3
- data/scripts/README.md +15 -0
- data/scripts/ai/README.md +38 -0
- data/scripts/ai/api_call.rb +124 -0
- data/scripts/ai/usage.rb +314 -0
- data/scripts/ai/usage_report.rb +225 -0
- data/scripts/ci/test_visual_evidence_autogen.py +403 -0
- data/scripts/ci/visual_evidence_autogen.py +1070 -0
- data/scripts/content-review.rb +20 -1
- data/scripts/features/install-preview-generator +1 -1
- data/scripts/lib/README.md +12 -0
- data/scripts/lib/preview_generator.py +2 -2
- data/scripts/test/integration/mermaid +22 -8
- data/scripts/test/lib/run_tests.sh +1 -0
- data/scripts/test/lib/test_visual_evidence_autogen.sh +24 -0
- data/scripts/translate.rb +23 -1
- metadata +21 -2
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
|
-
//
|
|
2
|
+
// Site Builder / setup wizard
|
|
3
|
+
// (_includes/setup/wizard.html + setup/prereq-checklist.html +
|
|
4
|
+
// setup/claude-session.html · assets/js/setup-wizard.js + site-builder.js)
|
|
3
5
|
// =============================================================================
|
|
4
|
-
// Feature: ZER0-067 · Redesign: T-040 / #408
|
|
6
|
+
// Feature: ZER0-067, ZER0-085 · Redesign: T-040 / #408 · Site Builder: ZER0-085
|
|
5
7
|
//
|
|
6
|
-
// Three columns at lg+ (stepper / steps /
|
|
7
|
-
//
|
|
8
|
+
// Three columns at lg+ (stepper / steps / side column), stacked below. The
|
|
9
|
+
// side column holds the Claude session on top and the live file preview under
|
|
10
|
+
// it, so both stay in view on every step. The two rules that matter most:
|
|
8
11
|
//
|
|
9
12
|
// 1. `.wizard-panes` is a GRID with every pane in the same cell, so the
|
|
10
13
|
// container is always exactly as tall as the tallest step; `.wizard-nav`
|
|
@@ -12,8 +15,8 @@
|
|
|
12
15
|
// Neither alone is enough: the grid stops the CONTAINER resizing, and the
|
|
13
16
|
// auto margin stops the BUTTONS floating up inside a short step.
|
|
14
17
|
// Together, Back/Next sit at the same y offset on every step.
|
|
15
|
-
// 2. The
|
|
16
|
-
//
|
|
18
|
+
// 2. The side column is sticky and scrolls on its own, so a long transcript
|
|
19
|
+
// or a long generated file never grows the page.
|
|
17
20
|
// =============================================================================
|
|
18
21
|
|
|
19
22
|
// -----------------------------------------------------------------------------
|
|
@@ -95,26 +98,46 @@
|
|
|
95
98
|
|
|
96
99
|
.wizard-step-label {
|
|
97
100
|
display: block;
|
|
98
|
-
overflow:
|
|
99
|
-
|
|
100
|
-
white-space: nowrap;
|
|
101
|
+
overflow-wrap: anywhere; // "Integrations" must survive a ~100px stepper column
|
|
102
|
+
line-height: 1.2;
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
// "Draft saved" acknowledgement. Kept in the layout (no display toggling) so
|
|
104
|
-
// its appearance never shifts the
|
|
106
|
+
// its appearance never shifts the header.
|
|
107
|
+
//
|
|
108
|
+
// That was always the intent of this rule, and for a long time it was only the
|
|
109
|
+
// intent: the markup carried `hidden` and setup-wizard.js cleared it on the
|
|
110
|
+
// first debounced save, so the chip went from `display: none` to a 26px box
|
|
111
|
+
// while the "Start over" `.btn-sm` beside it is 19px. The header grew and
|
|
112
|
+
// stayed grown, one-way, taking `#wizardTabContent` and every Back/Next row
|
|
113
|
+
// below it down with it (issue #265) — 7px where the header's right-hand block
|
|
114
|
+
// had already wrapped onto its own line, a whole wrapped line where those 7px
|
|
115
|
+
// were what tipped it over.
|
|
116
|
+
//
|
|
117
|
+
// `visibility` rather than `display` is what makes the prose above true: the
|
|
118
|
+
// box is reserved from first paint, so nothing moves when the chip appears,
|
|
119
|
+
// and `visibility: hidden` still keeps it out of the accessibility tree while
|
|
120
|
+
// it has nothing to say. The `visibility` transition is discrete — it flips to
|
|
121
|
+
// visible at the start of the fade in and back to hidden at the end of the
|
|
122
|
+
// fade out, so the text is never readable at opacity 0.
|
|
105
123
|
.wizard-draft-chip {
|
|
106
|
-
margin: 0.75rem 0 0;
|
|
107
124
|
padding: 0.25rem 0.5rem;
|
|
108
125
|
font-size: 0.75rem;
|
|
109
126
|
color: var(--bs-success, #198754);
|
|
127
|
+
visibility: hidden;
|
|
110
128
|
opacity: 0;
|
|
111
|
-
transition: opacity 0.2s ease;
|
|
129
|
+
transition: opacity 0.2s ease, visibility 0.2s ease;
|
|
112
130
|
|
|
113
131
|
&.is-visible {
|
|
132
|
+
visibility: visible;
|
|
114
133
|
opacity: 1;
|
|
115
134
|
}
|
|
116
135
|
}
|
|
117
136
|
|
|
137
|
+
.wizard-progress .progress-bar {
|
|
138
|
+
transition: width 0.3s ease;
|
|
139
|
+
}
|
|
140
|
+
|
|
118
141
|
// -----------------------------------------------------------------------------
|
|
119
142
|
// Step panes — the stable-height half
|
|
120
143
|
// -----------------------------------------------------------------------------
|
|
@@ -122,28 +145,27 @@
|
|
|
122
145
|
.wizard-panes {
|
|
123
146
|
// Every pane is stacked in ONE grid cell, so the row's height is
|
|
124
147
|
// max(pane heights) — computed by the browser, continuously, exactly.
|
|
125
|
-
//
|
|
126
|
-
// This used to be a flex column whose min-height JS measured and wrote
|
|
127
|
-
// inline. Measuring a box you have to un-hide, lay out, read and restore is
|
|
128
|
-
// a guess: it came back ~16px short of the tallest pane, and the shortest
|
|
129
|
-
// step's Back/Next sat 16px higher than everywhere else. Grid asks the
|
|
130
|
-
// layout engine the same question and gets the answer right, on every
|
|
131
|
-
// reflow, with no resize listener.
|
|
132
148
|
display: grid;
|
|
133
149
|
min-height: 26rem; // floor for the degenerate case of no panes
|
|
134
150
|
|
|
135
151
|
// The selector carries `.tab-content` purely for specificity: Bootstrap's
|
|
136
152
|
// `.tab-content > .tab-pane { display: none }` would otherwise take the
|
|
137
153
|
// cell's only occupant out of the grid on a tie.
|
|
154
|
+
// A grid item's default `min-width: auto` lets one unbreakable line (a
|
|
155
|
+
// command in .wizard-cmd) widen the whole column past its track and under
|
|
156
|
+
// the side column, where it intercepted clicks. Zero it so long content
|
|
157
|
+
// scrolls inside its own box instead.
|
|
158
|
+
min-width: 0;
|
|
159
|
+
|
|
138
160
|
&.tab-content > .tab-pane {
|
|
139
161
|
display: flex;
|
|
140
162
|
flex-direction: column;
|
|
141
163
|
grid-area: 1 / 1; // one cell, all panes
|
|
164
|
+
min-width: 0;
|
|
142
165
|
|
|
143
166
|
// Inactive panes stay in layout — that is the whole point — but must not
|
|
144
167
|
// be seen, focused, clicked, or read out. `visibility: hidden` does all
|
|
145
|
-
// four (it removes the subtree from the a11y tree and from the tab
|
|
146
|
-
// order), which `opacity: 0` alone would not.
|
|
168
|
+
// four (it removes the subtree from the a11y tree and from the tab order).
|
|
147
169
|
visibility: hidden;
|
|
148
170
|
pointer-events: none;
|
|
149
171
|
|
|
@@ -166,17 +188,10 @@
|
|
|
166
188
|
}
|
|
167
189
|
|
|
168
190
|
// Pinned to the bottom of the card, so a short step does not float its
|
|
169
|
-
// Back/Next up the page relative to a tall one.
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
// button's TOP, so anything that changes the row's height moves it. Two things
|
|
173
|
-
// did, and both are fixed here rather than in the assertion.
|
|
191
|
+
// Back/Next up the page relative to a tall one. Always a flex row (a block
|
|
192
|
+
// box puts a lone button on a baseline, ~2px high) and labels never wrap
|
|
193
|
+
// (a wrapped label makes the row taller and lifts the button's top).
|
|
174
194
|
.wizard-nav {
|
|
175
|
-
// 1. Never a block box. Step 1's nav is `text-end` with no `d-flex`, so its
|
|
176
|
-
// button was an inline-block on a line box and sat on the baseline — the
|
|
177
|
-
// descender space below it left that button ~2px above every other step's.
|
|
178
|
-
// `flex-end` is the base; the later steps' `justify-content-between`
|
|
179
|
-
// utility (Bootstrap emits `!important`) still wins where it is applied.
|
|
180
195
|
display: flex;
|
|
181
196
|
align-items: center;
|
|
182
197
|
justify-content: flex-end;
|
|
@@ -184,29 +199,472 @@
|
|
|
184
199
|
margin-top: auto;
|
|
185
200
|
padding-top: 1rem;
|
|
186
201
|
|
|
187
|
-
// 2. Never let a label wrap. In the real three-column layout the middle
|
|
188
|
-
// column is ~270px, and "Review & Download" wrapped to a second line —
|
|
189
|
-
// making that one button a line-height taller. With the row pinned to the
|
|
190
|
-
// bottom, the extra line pushes the button's TOP up instead of its bottom
|
|
191
|
-
// down, which is the 16px the offset test caught on step 4.
|
|
192
202
|
.btn {
|
|
193
203
|
white-space: nowrap;
|
|
194
204
|
}
|
|
195
205
|
}
|
|
196
206
|
|
|
197
207
|
// -----------------------------------------------------------------------------
|
|
198
|
-
//
|
|
208
|
+
// Form furniture shared by several steps
|
|
199
209
|
// -----------------------------------------------------------------------------
|
|
200
210
|
|
|
201
|
-
.wizard-
|
|
211
|
+
.wizard-choice {
|
|
212
|
+
min-height: 3.5rem;
|
|
213
|
+
white-space: normal;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.wizard-check .form-check-label {
|
|
217
|
+
cursor: pointer;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Inline command with a copy button on the right.
|
|
221
|
+
.wizard-cmd {
|
|
222
|
+
display: flex;
|
|
223
|
+
align-items: center;
|
|
224
|
+
gap: 0.25rem;
|
|
225
|
+
max-width: 100%;
|
|
226
|
+
margin-top: 0.25rem;
|
|
227
|
+
padding: 0.25rem 0.25rem 0.25rem 0.6rem;
|
|
228
|
+
font-size: 0.8rem;
|
|
229
|
+
background: var(--zer0-color-bg-muted, var(--bs-tertiary-bg));
|
|
230
|
+
border: 1px solid var(--bs-border-color);
|
|
231
|
+
border-radius: var(--zer0-radius-sm, 0.375rem);
|
|
232
|
+
|
|
233
|
+
code {
|
|
234
|
+
flex: 1 1 auto;
|
|
235
|
+
min-width: 0;
|
|
236
|
+
overflow-x: auto;
|
|
237
|
+
white-space: nowrap;
|
|
238
|
+
color: inherit;
|
|
239
|
+
background: none;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.btn {
|
|
243
|
+
flex-shrink: 0;
|
|
244
|
+
padding: 0 0.35rem;
|
|
245
|
+
line-height: 1;
|
|
246
|
+
color: var(--zer0-color-ink-muted);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
&.d-inline-flex {
|
|
250
|
+
display: inline-flex;
|
|
251
|
+
vertical-align: middle;
|
|
252
|
+
max-width: 100%;
|
|
253
|
+
margin: 0 0.15rem;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Every step card is a flex column inside the grid cell; the same min-width
|
|
258
|
+
// rule applies down the chain so a long line can never widen the card.
|
|
259
|
+
.wizard-panes .card,
|
|
260
|
+
.wizard-panes .card-body,
|
|
261
|
+
.sb-manual-steps li,
|
|
262
|
+
.prereq-item .min-w-0 {
|
|
263
|
+
min-width: 0;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// The prerequisites list is the tallest step by far. Cap it so the shared grid
|
|
267
|
+
// row (sized to the tallest pane) stays close to the other steps instead of
|
|
268
|
+
// leaving them with a screen of blank space above their Back/Next row.
|
|
269
|
+
.prereq-list {
|
|
270
|
+
max-height: 30rem;
|
|
271
|
+
overflow-y: auto;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Numbered connect steps. The text column must be allowed to shrink
|
|
275
|
+
// (min-width: 0) or a nowrap command line inside .wizard-cmd widens the
|
|
276
|
+
// list past the card and — because inactive panes stay in layout — the
|
|
277
|
+
// whole page, on every step, at phone widths.
|
|
278
|
+
.sb-steps li {
|
|
279
|
+
display: flex;
|
|
280
|
+
gap: 0.75rem;
|
|
281
|
+
margin-bottom: 0.9rem;
|
|
282
|
+
|
|
283
|
+
> div {
|
|
284
|
+
flex: 1 1 auto;
|
|
285
|
+
min-width: 0;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.sb-step-num {
|
|
290
|
+
display: inline-flex;
|
|
291
|
+
align-items: center;
|
|
292
|
+
justify-content: center;
|
|
293
|
+
flex-shrink: 0;
|
|
294
|
+
width: 1.6rem;
|
|
295
|
+
height: 1.6rem;
|
|
296
|
+
font-size: 0.8rem;
|
|
297
|
+
font-weight: 600;
|
|
298
|
+
color: #fff;
|
|
299
|
+
background: var(--bs-primary);
|
|
300
|
+
border-radius: 50%;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.sb-connect-status {
|
|
304
|
+
.btn {
|
|
305
|
+
flex-shrink: 0;
|
|
306
|
+
white-space: nowrap;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.sb-status-detail {
|
|
310
|
+
overflow-wrap: anywhere; // long scaffold paths
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.sb-status-dot {
|
|
314
|
+
display: inline-block;
|
|
315
|
+
flex-shrink: 0;
|
|
316
|
+
width: 0.65rem;
|
|
317
|
+
height: 0.65rem;
|
|
318
|
+
border-radius: 50%;
|
|
319
|
+
background: var(--bs-secondary);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
&[data-state="online"] .sb-status-dot {
|
|
323
|
+
background: var(--bs-success);
|
|
324
|
+
box-shadow: 0 0 0 4px rgba(25, 135, 84, 0.2);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
&[data-state="offline"] .sb-status-dot {
|
|
328
|
+
background: var(--bs-warning);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
&[data-state="checking"] .sb-status-dot {
|
|
332
|
+
animation: sbPulse 1.2s ease-in-out infinite;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
@keyframes sbPulse {
|
|
337
|
+
0%, 100% { opacity: 0.35; }
|
|
338
|
+
50% { opacity: 1; }
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Navigation editor rows
|
|
342
|
+
.nav-editor .nav-row {
|
|
343
|
+
.nav-title { flex: 1 1 32%; }
|
|
344
|
+
.nav-url { flex: 1 1 40%; }
|
|
345
|
+
.nav-icon { flex: 0 1 24%; }
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Skin picker
|
|
349
|
+
.skin-card {
|
|
350
|
+
display: flex;
|
|
351
|
+
flex-direction: column;
|
|
352
|
+
gap: 0.35rem;
|
|
353
|
+
width: 100%;
|
|
354
|
+
padding: 0.6rem;
|
|
355
|
+
cursor: pointer;
|
|
356
|
+
border: 2px solid var(--bs-border-color);
|
|
357
|
+
border-radius: var(--zer0-radius-md, 0.5rem);
|
|
358
|
+
transition: border-color 0.15s ease, transform 0.15s ease;
|
|
359
|
+
|
|
360
|
+
&:hover {
|
|
361
|
+
transform: translateY(-1px);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.skin-swatch {
|
|
365
|
+
display: block;
|
|
366
|
+
height: 2.5rem;
|
|
367
|
+
border-radius: var(--zer0-radius-sm, 0.375rem);
|
|
368
|
+
background: linear-gradient(135deg, var(--sw-a) 0%, var(--sw-a) 45%, var(--sw-b) 55%, var(--sw-b) 100%);
|
|
369
|
+
border: 1px solid rgba(0, 0, 0, 0.08);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.skin-name {
|
|
373
|
+
font-weight: 600;
|
|
374
|
+
font-size: 0.9rem;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.skin-mood {
|
|
378
|
+
font-size: 0.72rem;
|
|
379
|
+
color: var(--zer0-color-ink-muted);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.btn-check:checked + .skin-card {
|
|
384
|
+
border-color: var(--bs-primary);
|
|
385
|
+
box-shadow: 0 0 0 3px rgba(var(--bs-primary-rgb), 0.2);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.btn-check:focus-visible + .skin-card {
|
|
389
|
+
outline: 2px solid var(--bs-primary);
|
|
390
|
+
outline-offset: 2px;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Palette picker (layers over the skin)
|
|
394
|
+
.palette-card {
|
|
395
|
+
display: flex;
|
|
396
|
+
flex-direction: column;
|
|
397
|
+
align-items: center;
|
|
398
|
+
gap: 0.3rem;
|
|
399
|
+
width: 5.25rem;
|
|
400
|
+
padding: 0.4rem;
|
|
401
|
+
cursor: pointer;
|
|
402
|
+
border: 2px solid var(--bs-border-color);
|
|
403
|
+
border-radius: var(--zer0-radius-md, 0.5rem);
|
|
404
|
+
font-size: 0.72rem;
|
|
405
|
+
text-align: center;
|
|
406
|
+
|
|
407
|
+
.palette-swatches {
|
|
408
|
+
display: flex;
|
|
409
|
+
width: 100%;
|
|
410
|
+
height: 1.4rem;
|
|
411
|
+
overflow: hidden;
|
|
412
|
+
border-radius: var(--zer0-radius-sm, 0.375rem);
|
|
413
|
+
border: 1px solid rgba(0, 0, 0, 0.08);
|
|
414
|
+
|
|
415
|
+
> span { flex: 1 1 0; }
|
|
416
|
+
|
|
417
|
+
.palette-swatch-skin {
|
|
418
|
+
background: linear-gradient(90deg, var(--bs-primary) 0 34%, var(--bs-secondary) 34% 67%, var(--zer0-color-accent, var(--bs-info)) 67%);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
&--custom {
|
|
422
|
+
align-items: center;
|
|
423
|
+
justify-content: center;
|
|
424
|
+
background: var(--zer0-color-bg-muted, var(--bs-tertiary-bg));
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
.btn-check:checked + .palette-card {
|
|
430
|
+
border-color: var(--bs-primary);
|
|
431
|
+
box-shadow: 0 0 0 3px rgba(var(--bs-primary-rgb), 0.2);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.btn-check:focus-visible + .palette-card {
|
|
435
|
+
outline: 2px solid var(--bs-primary);
|
|
436
|
+
outline-offset: 2px;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
.font-preview {
|
|
440
|
+
font-size: 1rem;
|
|
441
|
+
line-height: 1.3;
|
|
442
|
+
transition: font-family 0.15s ease;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// Example-page planner rows
|
|
446
|
+
.pages-planner .page-row {
|
|
447
|
+
.page-collection { flex: 0 0 32%; }
|
|
448
|
+
.page-title { flex: 1 1 45%; }
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.pages-planner .page-row + .page-row {
|
|
452
|
+
margin-top: 0.4rem;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Integration list
|
|
456
|
+
.wizard-integrations .form-switch .form-check-input {
|
|
457
|
+
width: 2.5em;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// Build terminal
|
|
461
|
+
.wizard-terminal {
|
|
462
|
+
max-height: 18rem;
|
|
463
|
+
margin: 0;
|
|
464
|
+
padding: 0.75rem;
|
|
465
|
+
overflow: auto;
|
|
466
|
+
font-size: 0.75rem;
|
|
467
|
+
line-height: 1.4;
|
|
468
|
+
color: #d8dee9;
|
|
469
|
+
background: #1b1f24;
|
|
470
|
+
border-radius: var(--zer0-radius-sm, 0.375rem);
|
|
471
|
+
white-space: pre-wrap;
|
|
472
|
+
word-break: break-word;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// -----------------------------------------------------------------------------
|
|
476
|
+
// Prerequisites checklist
|
|
477
|
+
// -----------------------------------------------------------------------------
|
|
478
|
+
|
|
479
|
+
.prereq-item {
|
|
480
|
+
.prereq-state-icon {
|
|
481
|
+
display: inline-flex;
|
|
482
|
+
align-items: center;
|
|
483
|
+
justify-content: center;
|
|
484
|
+
flex-shrink: 0;
|
|
485
|
+
width: 2rem;
|
|
486
|
+
height: 2rem;
|
|
487
|
+
font-size: 1rem;
|
|
488
|
+
border: 1px solid var(--bs-border-color);
|
|
489
|
+
border-radius: 50%;
|
|
490
|
+
color: var(--zer0-color-ink-muted);
|
|
491
|
+
transition: color 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
&[data-state="ok"] .prereq-state-icon,
|
|
495
|
+
&[data-state="manual"] .prereq-state-icon {
|
|
496
|
+
color: #fff;
|
|
497
|
+
background: var(--bs-success);
|
|
498
|
+
border-color: var(--bs-success);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
&[data-state="fail"] .prereq-state-icon {
|
|
502
|
+
color: #fff;
|
|
503
|
+
background: var(--bs-danger);
|
|
504
|
+
border-color: var(--bs-danger);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.prereq-output {
|
|
508
|
+
overflow: hidden;
|
|
509
|
+
text-overflow: ellipsis;
|
|
510
|
+
white-space: nowrap;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
.prereq-details summary {
|
|
514
|
+
cursor: pointer;
|
|
515
|
+
color: var(--bs-link-color);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// -----------------------------------------------------------------------------
|
|
520
|
+
// Side column — Claude session + generated files
|
|
521
|
+
// -----------------------------------------------------------------------------
|
|
522
|
+
|
|
523
|
+
.wizard-side {
|
|
202
524
|
top: 1.5rem; // paired with .sticky-lg-top
|
|
525
|
+
max-height: calc(100vh - 3rem);
|
|
526
|
+
overflow-y: auto;
|
|
527
|
+
scrollbar-width: thin;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
.sb-panel {
|
|
531
|
+
.card-header {
|
|
532
|
+
background: var(--zer0-color-bg-muted, var(--bs-tertiary-bg));
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
&[data-state="online"] .card-header {
|
|
536
|
+
border-bottom: 2px solid var(--bs-success);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.sb-messages {
|
|
541
|
+
min-height: 9rem;
|
|
542
|
+
max-height: 22rem;
|
|
543
|
+
overflow-y: auto;
|
|
544
|
+
scroll-behavior: smooth;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
.sb-message--user {
|
|
548
|
+
display: flex;
|
|
549
|
+
justify-content: flex-end;
|
|
550
|
+
|
|
551
|
+
.sb-bubble {
|
|
552
|
+
max-width: 88%;
|
|
553
|
+
color: #fff;
|
|
554
|
+
background: var(--bs-primary);
|
|
555
|
+
word-wrap: break-word;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.sb-message--assistant .sb-bubble {
|
|
560
|
+
max-width: 92%;
|
|
561
|
+
color: var(--bs-body-color);
|
|
562
|
+
background: var(--bs-tertiary-bg);
|
|
563
|
+
word-wrap: break-word;
|
|
564
|
+
|
|
565
|
+
.sb-li {
|
|
566
|
+
display: block;
|
|
567
|
+
padding-left: 0.25rem;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
.sb-code {
|
|
571
|
+
margin: 0.35rem 0;
|
|
572
|
+
padding: 0.5rem;
|
|
573
|
+
font-size: 0.72rem;
|
|
574
|
+
color: #d8dee9;
|
|
575
|
+
background: #1b1f24;
|
|
576
|
+
border-radius: var(--zer0-radius-sm, 0.375rem);
|
|
577
|
+
overflow-x: auto;
|
|
578
|
+
white-space: pre;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
.sb-card {
|
|
583
|
+
color: var(--bs-body-color);
|
|
584
|
+
background: var(--bs-tertiary-bg);
|
|
585
|
+
border: 1px solid var(--bs-border-color);
|
|
586
|
+
border-left: 3px solid var(--bs-primary);
|
|
587
|
+
|
|
588
|
+
.sb-card-meta {
|
|
589
|
+
overflow-wrap: anywhere;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
.sb-card-list {
|
|
593
|
+
max-height: 9rem;
|
|
594
|
+
padding-left: 1.1rem;
|
|
595
|
+
overflow-y: auto;
|
|
596
|
+
font-family: var(--bs-font-monospace);
|
|
597
|
+
font-size: 0.72rem;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
&--resolved {
|
|
601
|
+
opacity: 0.75;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
&--accepted {
|
|
605
|
+
border-left-color: var(--bs-success);
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
&--declined {
|
|
609
|
+
border-left-color: var(--bs-secondary);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
&--result {
|
|
613
|
+
border-left-color: var(--bs-info);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
.sb-chips .sb-chip {
|
|
618
|
+
font-size: 0.72rem;
|
|
619
|
+
text-align: left;
|
|
620
|
+
white-space: normal;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
.sb-composer textarea {
|
|
624
|
+
resize: none;
|
|
625
|
+
min-height: 2.4rem;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
.sb-typing span {
|
|
629
|
+
display: inline-block;
|
|
630
|
+
font-weight: bold;
|
|
631
|
+
font-size: 1.2em;
|
|
632
|
+
animation: sbTyping 1.4s infinite;
|
|
633
|
+
|
|
634
|
+
&:nth-child(2) { animation-delay: 0.2s; }
|
|
635
|
+
&:nth-child(3) { animation-delay: 0.4s; }
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
@keyframes sbTyping {
|
|
639
|
+
0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
|
|
640
|
+
30% { opacity: 1; transform: translateY(-4px); }
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// File preview
|
|
644
|
+
.wizard-file-tabs {
|
|
645
|
+
gap: 0.25rem;
|
|
646
|
+
scrollbar-width: thin;
|
|
647
|
+
|
|
648
|
+
.wizard-file-tab {
|
|
649
|
+
flex-shrink: 0;
|
|
650
|
+
padding: 0.2rem 0.6rem;
|
|
651
|
+
font-size: 0.72rem;
|
|
652
|
+
font-family: var(--bs-font-monospace);
|
|
653
|
+
white-space: nowrap;
|
|
654
|
+
|
|
655
|
+
&.is-overridden::after {
|
|
656
|
+
content: "•";
|
|
657
|
+
margin-left: 0.25rem;
|
|
658
|
+
color: var(--bs-warning);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
203
661
|
}
|
|
204
662
|
|
|
205
663
|
.wizard-preview-code {
|
|
206
|
-
max-height:
|
|
664
|
+
max-height: 38vh;
|
|
207
665
|
margin-bottom: 0;
|
|
208
666
|
overflow: auto;
|
|
209
|
-
font-size: 0.
|
|
667
|
+
font-size: 0.74rem;
|
|
210
668
|
line-height: 1.45;
|
|
211
669
|
}
|
|
212
670
|
|
|
@@ -216,13 +674,22 @@
|
|
|
216
674
|
letter-spacing: 0.04em;
|
|
217
675
|
}
|
|
218
676
|
|
|
219
|
-
// Below lg the three columns stack; the
|
|
677
|
+
// Below lg the three columns stack; the side column is no longer sticky and a
|
|
220
678
|
// shorter scroll region reads better under the form.
|
|
221
679
|
@media (max-width: 991.98px) {
|
|
680
|
+
.wizard-side {
|
|
681
|
+
max-height: none;
|
|
682
|
+
overflow: visible;
|
|
683
|
+
}
|
|
684
|
+
|
|
222
685
|
.wizard-preview-code {
|
|
223
686
|
max-height: 20rem;
|
|
224
687
|
}
|
|
225
688
|
|
|
689
|
+
.sb-messages {
|
|
690
|
+
max-height: 16rem;
|
|
691
|
+
}
|
|
692
|
+
|
|
226
693
|
.wizard-stepper {
|
|
227
694
|
flex-direction: row !important;
|
|
228
695
|
flex-wrap: wrap;
|
|
@@ -232,4 +699,84 @@
|
|
|
232
699
|
width: auto;
|
|
233
700
|
flex: 1 1 auto;
|
|
234
701
|
}
|
|
702
|
+
|
|
703
|
+
.wizard-progress {
|
|
704
|
+
display: none;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
@media (prefers-reduced-motion: reduce) {
|
|
709
|
+
.sb-typing span,
|
|
710
|
+
.sb-connect-status .sb-status-dot,
|
|
711
|
+
.skin-card,
|
|
712
|
+
.wizard-progress .progress-bar {
|
|
713
|
+
animation: none !important;
|
|
714
|
+
transition: none !important;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
// -----------------------------------------------------------------------------
|
|
719
|
+
// Connect step — providers, bring-your-own token, session mode (ZER0-087)
|
|
720
|
+
// -----------------------------------------------------------------------------
|
|
721
|
+
|
|
722
|
+
.sb-provider-card {
|
|
723
|
+
&.is-pinned-out {
|
|
724
|
+
opacity: 0.45;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
.sb-provider-state {
|
|
728
|
+
flex-shrink: 0;
|
|
729
|
+
font-size: 0.65rem;
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
.sb-credential {
|
|
734
|
+
input[type="password"] {
|
|
735
|
+
font-family: var(--bs-font-monospace);
|
|
736
|
+
letter-spacing: 0.06em;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
.input-group .btn {
|
|
740
|
+
white-space: nowrap;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
// Proxy reachable, provider still without a key.
|
|
745
|
+
.sb-connect-status[data-state="partial"] .sb-status-dot {
|
|
746
|
+
background: var(--bs-info);
|
|
747
|
+
box-shadow: 0 0 0 4px rgba(13, 202, 240, 0.2);
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
.sb-mode-badge {
|
|
751
|
+
font-size: 0.65rem;
|
|
752
|
+
text-transform: uppercase;
|
|
753
|
+
letter-spacing: 0.04em;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
#sb-stop {
|
|
757
|
+
white-space: nowrap;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
// Before/after snippet on edit cards and the start of a file on write cards.
|
|
761
|
+
.sb-card .sb-diff {
|
|
762
|
+
max-height: 8rem;
|
|
763
|
+
margin: 0;
|
|
764
|
+
padding: 0.4rem 0.5rem;
|
|
765
|
+
overflow: auto;
|
|
766
|
+
font-size: 0.68rem;
|
|
767
|
+
line-height: 1.4;
|
|
768
|
+
color: #d8dee9;
|
|
769
|
+
background: #1b1f24;
|
|
770
|
+
border-radius: var(--zer0-radius-sm, 0.375rem);
|
|
771
|
+
white-space: pre-wrap;
|
|
772
|
+
word-break: break-word;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
// Thumbnail of a generated image, served by the dev proxy's /asset route.
|
|
776
|
+
.sb-card .sb-image-thumb {
|
|
777
|
+
display: block;
|
|
778
|
+
max-width: 100%;
|
|
779
|
+
max-height: 12rem;
|
|
780
|
+
border: 1px solid var(--bs-border-color);
|
|
781
|
+
border-radius: var(--zer0-radius-sm, 0.375rem);
|
|
235
782
|
}
|