PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 4.9.5
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v4.9.5
4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 All 203 releases
betterdocs / react-src / admin / scss / _sample-docs.scss

_sample-docs.scss in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 4.9.5, at react-src/admin/scss/_sample-docs.scss

1,084 lines 32.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* ============================================================
2 AI "Generate Sample Docs" flow.
3 Aligned to the BetterDocs admin design system: green is reserved
4 for the primary action, the live progress indicator, success, and
5 selection — every other surface and all metadata use the neutral
6 ramp. Uses var(--token, #fallback) so it renders in both the
7 dashboard bundle (tokens defined, dark-mode aware) and the
8 quick-setup / setup-wizard bundle.
9 ============================================================ */
10
11 /* Brand green — primary action, live progress, success, selection only. */
12 $sd-green: var(--base-color-700, #00b884);
13 $sd-green-600: var(--base-color-800, #00956b);
14 $sd-green-700: var(--base-color-900, #007557);
15 $sd-green-50: var(--base-color-75, #ecfdf3); // selection ring tint only
16
17 /* Neutral ramp — the house default for surfaces, borders, text, metadata. */
18 $sd-ink: var(--text-color-900, #101828);
19 $sd-ink-2: var(--text-color-950, #1d2939);
20 $sd-muted: var(--text-color-600, #667085);
21 $sd-border: var(--text-color-300, #dde2e4);
22 $sd-border-soft: var(--text-color-100, #f2f4f7);
23 $sd-hairline: var(--text-color-150, #eef0f3);
24 $sd-surface: var(--text-color-50, #f9fafb); // subtle fill (headers, highlights)
25 $sd-meta-bg: var(--text-color-100, #f2f4f7); // neutral badge fill
26 $sd-card: var(--base-background, #ffffff);
27 $sd-page: var(--page-background, #fafbfb);
28
29 @keyframes sdSpin { to { transform: rotate(360deg); } }
30 @keyframes sdFade { from { transform: translateY(8px); opacity: 0; } to { transform: none; opacity: 1; } }
31 @keyframes sdPop { from { transform: scale(.975); } to { transform: none; } }
32 @keyframes sdPulse { 0%, 100% { opacity: .5; } 50% { opacity: 1; } }
33 @keyframes sdCheckIn { from { transform: scale(.4); opacity: 0; } to { transform: scale(1); opacity: 1; } }
34
35 .betterdocs-sd-fade { animation: sdFade .34s ease both; }
36 .betterdocs-sd-pop { animation: sdPop .26s cubic-bezier(.2, .8, .3, 1) both; }
37
38 .betterdocs-sd-spinner {
39 display: inline-block;
40 border-radius: 50%;
41 border: 3px solid var(--text-color-200, #eaecf0);
42 border-top-color: $sd-green;
43 animation: sdSpin .7s linear infinite;
44 flex-shrink: 0;
45 box-sizing: border-box;
46 }
47
48 /* ---------- AI badge (neutral pill, green spark icon only) ---------- */
49 .betterdocs-sd-badge {
50 display: inline-flex;
51 align-items: center;
52 gap: 6px;
53 background: $sd-meta-bg;
54 color: $sd-muted;
55 border: 1px solid $sd-hairline;
56 padding: 5px 12px 5px 10px;
57 border-radius: 999px;
58 font-size: 12px;
59 font-weight: 600;
60 white-space: nowrap;
61 line-height: 1;
62
63 svg { flex-shrink: 0; color: $sd-green; } // the one small green accent
64 }
65
66 /* ---------- Generate pill (primary) ---------- */
67 .betterdocs-sd-gen-btn {
68 display: inline-flex;
69 align-items: center;
70 justify-content: center;
71 gap: 8px;
72 background: $sd-green;
73 color: #fff;
74 padding: 11px 18px;
75 border: 1px solid transparent;
76 border-radius: 8px;
77 font-size: 14px;
78 font-weight: 600;
79 line-height: 1.2;
80 box-sizing: border-box;
81 cursor: pointer;
82 box-shadow: none;
83 transition: background .15s ease;
84
85 &:hover { background: $sd-green-600; color: #fff; }
86 &:disabled { background: var(--text-color-300, #d0d5dd); cursor: not-allowed; box-shadow: none; }
87 &--block { width: 100%; }
88 svg { flex-shrink: 0; }
89 }
90
91 /* ---------- Empty "No Category Found" card ---------- */
92 /* Scoped under .betterdocs-admin to outrank the base
93 `.betterdocs-admin .betterdocs-no-docs-wrapper { max-width:364px }` rule. */
94 .betterdocs-admin .betterdocs-no-docs-wrapper.betterdocs-sd-empty-card {
95 max-width: 558px;
96 width: 100%;
97 margin: 0 auto 48px;
98 /* Match the doc category card (.betterdocs-dashboard-category-wrap):
99 white bg, single border + the standard dashboard card shadow. */
100 background: var(--base-background);
101 border: 1px solid var(--text-color-150);
102 border-radius: 12px;
103 box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);
104 }
105
106 .betterdocs-sd-empty-card {
107 .betterdocs-sd-empty-actions {
108 display: flex;
109 flex-direction: column;
110 gap: 12px;
111 max-width: 340px;
112 margin: 24px auto 0;
113 }
114
115 /* White "Create A New Category" button — neutral secondary. */
116 .betterdocs-sd-create-btn {
117 display: inline-flex;
118 align-items: center;
119 justify-content: center;
120 width: 100%;
121 box-sizing: border-box;
122 padding: 12px 18px;
123 border-radius: 8px;
124 background: var(--base-background, #fff);
125 border: 1px solid var(--text-color-300, #d0d5dd);
126 font-size: 14px;
127 font-weight: 600;
128 line-height: 1.2;
129 color: var(--text-color-700, #344054);
130 text-decoration: none;
131 box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);
132 transition: background .15s ease, border-color .15s ease;
133
134 &:hover,
135 &:focus {
136 border-color: var(--text-color-300, #d0d5dd);
137 color: var(--text-color-900, #101828);
138 background: var(--text-color-100, #f2f4f7);
139 box-shadow: none;
140 }
141 }
142
143 /* Generate pill matches the secondary button's box. */
144 .betterdocs-sd-gen-btn {
145 padding: 12px 18px;
146 border-radius: 8px;
147 font-size: 14px;
148 }
149
150 .betterdocs-sd-empty-badge {
151 margin-top: 16px;
152 display: flex;
153 justify-content: center;
154 }
155 }
156
157 /* ---------- Modal shell ---------- */
158 .betterdocs-sd-overlay {
159 position: fixed;
160 inset: 0;
161 z-index: 100000;
162 background: rgba(16, 24, 40, .42);
163 backdrop-filter: blur(3px);
164 display: flex;
165 align-items: center;
166 justify-content: center;
167 padding: 24px;
168 animation: sdFade .2s ease both;
169 }
170
171 .betterdocs-sd-modal {
172 width: 100%;
173 max-width: 640px;
174 max-height: 88vh;
175 background: $sd-card;
176 border-radius: 16px;
177 box-shadow: 0 24px 64px rgba(16, 24, 40, .24);
178 display: flex;
179 flex-direction: column;
180 overflow: hidden;
181 font-family: "IBM Plex Sans", sans-serif;
182 }
183
184 .betterdocs-sd-modal-header {
185 display: flex;
186 align-items: center;
187 gap: 12px;
188 padding: 16px 24px;
189 background: $sd-surface;
190 border-bottom: 1px solid $sd-hairline;
191 }
192 .betterdocs-sd-modal-spark {
193 width: 32px;
194 height: 32px;
195 border-radius: 8px;
196 background: $sd-meta-bg;
197 color: $sd-green; // small green spark on a neutral tile
198 display: flex;
199 align-items: center;
200 justify-content: center;
201 flex-shrink: 0;
202 }
203 .betterdocs-sd-modal-heading { flex: 1; min-width: 0; }
204 .betterdocs-sd-modal-title { font-size: 16px; font-weight: 600; color: $sd-ink; }
205 .betterdocs-sd-modal-sub { font-size: 12px; color: $sd-muted; margin-top: 2px; }
206 .betterdocs-sd-modal-close {
207 width: 32px;
208 height: 32px;
209 border: 0;
210 border-radius: 8px;
211 display: flex;
212 align-items: center;
213 justify-content: center;
214 color: var(--text-color-600, #667085);
215 background: var(--text-color-100, #f2f4f7);
216 box-shadow: none;
217 cursor: pointer;
218 transition: all .2s ease-in-out;
219
220 &:hover {
221 background: var(--text-color-200, #eaecf0);
222 color: var(--text-color-900, #101828);
223 }
224 }
225 .betterdocs-sd-modal-body { padding: 24px; overflow: auto; background: var(--base-background, #fff); }
226
227 .betterdocs-sd-modal-footer {
228 display: flex;
229 align-items: center;
230 justify-content: flex-end;
231 gap: 12px;
232 padding: 16px 24px;
233 border-top: 1px solid $sd-hairline;
234 background: $sd-surface;
235
236 /* Left-side (ghost) buttons sit left; the primary stays right. A lone
237 primary button (e.g. preview's "Insert all docs") right-aligns. */
238 .betterdocs-sd-btn-ghost {
239 margin-right: auto;
240 }
241 }
242
243 /* Ghost actions (Cancel, Remove sample docs, Close) — bordered secondary,
244 identical to the Discard button. */
245 .betterdocs-sd-btn-ghost {
246 display: inline-flex;
247 align-items: center;
248 gap: 8px;
249 background: transparent;
250 border: 1px solid var(--text-color-300, #dde2e4);
251 border-radius: 8px;
252 padding: 10px 16px;
253 font-family: "IBM Plex Sans", sans-serif;
254 font-size: 14px;
255 font-weight: 600;
256 line-height: 1.4;
257 color: var(--text-color-700, #344054);
258 cursor: pointer;
259 transition: background .12s ease, border-color .12s ease;
260
261 svg { width: 16px; height: 16px; }
262
263 &:hover { background: var(--text-color-100, #f2f4f7); color: var(--text-color-900, #101828); }
264 }
265
266 /* Discard — bordered ghost, mirrors .betterdocs-quick-edit-cancel-btn. */
267 .betterdocs-sd-btn-discard {
268 display: inline-flex;
269 align-items: center;
270 gap: 8px;
271 margin-right: auto;
272 color: var(--text-color-700, #344054);
273 background: transparent;
274 font-family: "IBM Plex Sans", sans-serif;
275 font-size: 14px;
276 font-weight: 600;
277 line-height: 1.4;
278 padding: 10px 16px;
279 border-radius: 8px;
280 border: 1px solid var(--text-color-300, #d0d5dd);
281 cursor: pointer;
282 transition: background .12s ease, border-color .12s ease;
283
284 svg { width: 16px; height: 16px; }
285
286 &:hover { background: var(--text-color-100, #f2f4f7); }
287 }
288 .betterdocs-sd-btn-primary {
289 display: inline-flex;
290 align-items: center;
291 gap: 8px;
292 background: $sd-green;
293 color: #fff;
294 border: 0;
295 border-radius: 8px;
296 padding: 11px 18px;
297 font-size: 14px;
298 font-weight: 600;
299 cursor: pointer;
300 transition: background .15s ease;
301
302 &:hover { background: $sd-green-600; }
303 &:disabled { background: var(--text-color-300, #d0d5dd); cursor: not-allowed; }
304 svg { flex-shrink: 0; }
305 }
306
307 /* ---------- Detecting ---------- */
308 .betterdocs-sd-detecting {
309 padding: 40px 24px;
310 display: flex;
311 flex-direction: column;
312 align-items: center;
313 text-align: center;
314 }
315 .betterdocs-sd-detecting-orb {
316 position: relative;
317 width: 64px;
318 height: 64px;
319 margin-bottom: 24px;
320 display: flex;
321 align-items: center;
322 justify-content: center;
323 }
324 .betterdocs-sd-detecting-spark { position: absolute; color: $sd-green; display: flex; }
325 .betterdocs-sd-detecting-title { font-size: 18px; font-weight: 600; color: $sd-ink; }
326 .betterdocs-sd-detecting-sub { font-size: 14px; color: $sd-muted; margin-top: 8px; max-width: 360px; line-height: 1.55; }
327 .betterdocs-sd-detecting-dots {
328 display: flex;
329 gap: 6px;
330 margin-top: 24px;
331
332 span {
333 width: 7px;
334 height: 7px;
335 border-radius: 50%;
336 background: $sd-green;
337 animation: sdPulse 1s ease infinite;
338 }
339 }
340
341 /* ---------- Profile ---------- */
342 .betterdocs-sd-profile { display: flex; flex-direction: column; gap: 24px; }
343 .betterdocs-sd-profile-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
344 .betterdocs-sd-profile-title { margin: 0; font-size: 18px; font-weight: 600; color: $sd-ink; }
345 .betterdocs-sd-profile-blurb { margin: 8px 0 0; font-size: 14px; color: $sd-muted; line-height: 1.55; max-width: 560px; }
346 .betterdocs-sd-signals { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
347 .betterdocs-sd-signal {
348 display: inline-flex;
349 align-items: center;
350 gap: 6px;
351 font-size: 12px;
352 font-weight: 600;
353 color: $sd-muted;
354 background: $sd-meta-bg;
355 border-radius: 8px;
356 padding: 5px 10px;
357 }
358 .betterdocs-sd-signal-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--text-color-400, #d0d5dd); }
359 .betterdocs-sd-profile-subhead { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 12px; }
360 .betterdocs-sd-profile-subtitle { font-size: 14px; font-weight: 600; color: $sd-ink-2; }
361 .betterdocs-sd-profile-count { font-size: 12px; color: $sd-muted; font-weight: 600; }
362
363 /* ---------- Chips (neutral, removable tokens) ---------- */
364 .betterdocs-sd-chips { display: flex; flex-wrap: wrap; gap: 8px; }
365 .betterdocs-sd-chip {
366 display: inline-flex;
367 align-items: center;
368 gap: 8px;
369 background: $sd-card;
370 border: 1px solid $sd-border;
371 color: $sd-ink-2;
372 padding: 5px 8px 5px 12px;
373 border-radius: 999px;
374 font-size: 12px;
375 font-weight: 500;
376 }
377 .betterdocs-sd-chip-remove {
378 width: 22px;
379 height: 22px;
380 border: 0;
381 border-radius: 50%;
382 display: flex;
383 align-items: center;
384 justify-content: center;
385 color: $sd-muted;
386 background: $sd-meta-bg;
387 box-shadow: none;
388 cursor: pointer;
389 transition: background .12s, color .12s;
390
391 &:hover { background: var(--danger-50, #fef3f2); color: var(--danger-600, #d92d20); }
392 }
393 /* Empty state when every suggested chip is removed. */
394 .betterdocs-sd-chips-empty { margin: 0; font-size: 13px; color: $sd-muted; line-height: 1.55; }
395 /* Privacy disclosure under the suggested categories. */
396 .betterdocs-sd-privacy-note { margin: 12px 0 0; font-size: 12px; color: var(--text-color-500, #98a2b3); line-height: 1.5; }
397
398 /* ---------- Intent steer (docs only) ---------- */
399 .betterdocs-sd-intent { margin: 4px 0 2px; }
400 .betterdocs-sd-intent-label { display: block; font-size: 13px; font-weight: 600; color: $sd-ink-2; margin-bottom: 6px; }
401 .betterdocs-sd-intent-input {
402 width: 100%;
403 box-sizing: border-box;
404 resize: vertical;
405 min-height: 56px;
406 padding: 10px 12px;
407 font-size: 13px;
408 line-height: 1.5;
409 color: $sd-ink;
410 background: $sd-card;
411 border: 1px solid $sd-border;
412 border-radius: 8px;
413 transition: border-color .15s ease, box-shadow .15s ease;
414 &:focus { outline: none; border-color: $sd-green; box-shadow: 0 0 0 3px $sd-green-50; }
415 &::placeholder { color: var(--text-color-400, #b5bcc6); }
416 }
417 .betterdocs-sd-intent-hint { margin: 6px 0 0; font-size: 12px; color: $sd-muted; line-height: 1.5; }
418
419 /* ---------- Quota note (neutral info surface) ---------- */
420 .betterdocs-sd-quota {
421 display: flex;
422 align-items: flex-start;
423 gap: 12px;
424 background: $sd-surface;
425 border: 1px solid $sd-border-soft;
426 border-radius: 12px;
427 padding: 12px 16px;
428 }
429 .betterdocs-sd-quota-icon { color: $sd-muted; flex-shrink: 0; display: flex; margin-top: 1px; }
430 .betterdocs-sd-quota-text { font-size: 13px; color: $sd-ink-2; line-height: 1.55; }
431
432 /* ---------- Generating ---------- */
433 .betterdocs-sd-progress-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 8px; }
434 .betterdocs-sd-progress-label { font-size: 14px; font-weight: 600; color: $sd-ink; }
435 .betterdocs-sd-progress-pct { font-size: 13px; font-weight: 600; color: $sd-muted; }
436 .betterdocs-sd-progress-track { height: 8px; border-radius: 999px; background: var(--text-color-200, #eaecf0); overflow: hidden; margin-bottom: 20px; }
437 .betterdocs-sd-progress-fill { height: 100%; border-radius: 999px; background: $sd-green; transition: width .4s cubic-bezier(.4, 0, .2, 1); }
438 .betterdocs-sd-progress-rows { display: flex; flex-direction: column; gap: 8px; }
439 .betterdocs-sd-progress-row {
440 display: flex;
441 align-items: center;
442 gap: 12px;
443 padding: 14px 16px;
444 border-radius: 12px;
445 background: $sd-card;
446 border: 1px solid $sd-border-soft;
447 transition: background .3s, border-color .3s, opacity .3s;
448
449 &.is-live { background: $sd-surface; border-color: $sd-border; }
450 &.is-pending { opacity: .6; }
451 }
452 .betterdocs-sd-progress-row-meta { flex: 1; min-width: 0; }
453 .betterdocs-sd-progress-row-name { font-size: 14px; font-weight: 600; color: $sd-ink; }
454 .betterdocs-sd-progress-row-sub { font-size: 12px; color: $sd-muted; margin-top: 3px; font-weight: 500; &.is-done { color: $sd-muted; } }
455 .betterdocs-sd-progress-row-state { flex-shrink: 0; width: 26px; display: flex; justify-content: center; }
456 .betterdocs-sd-progress-check {
457 width: 24px;
458 height: 24px;
459 border-radius: 50%;
460 background: $sd-green;
461 color: #fff;
462 display: flex;
463 align-items: center;
464 justify-content: center;
465 animation: sdCheckIn .3s cubic-bezier(.2, .8, .3, 1) both;
466 }
467 .betterdocs-sd-progress-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--text-color-300, #d0d5dd); }
468
469 /* Final "finalizing" step shown while the bar parks near 97% waiting for the
470 real generation result; flips to a check once it reaches 100%. */
471 .betterdocs-sd-progress-finalizing {
472 display: flex;
473 align-items: center;
474 gap: 12px;
475 margin-top: 8px;
476 padding: 14px 16px;
477 border-radius: 12px;
478 background: $sd-surface;
479 border: 1px solid $sd-border-soft;
480 animation: sdCheckIn .3s cubic-bezier(.2, .8, .3, 1) both;
481 }
482 .betterdocs-sd-progress-finalizing-icon {
483 flex-shrink: 0;
484 width: 24px;
485 height: 24px;
486 display: flex;
487 align-items: center;
488 justify-content: center;
489 color: $sd-muted;
490
491 .betterdocs-sd-progress-finalizing.is-done & {
492 background: $sd-green;
493 color: #fff;
494 border-radius: 50%;
495 }
496 }
497 .betterdocs-sd-progress-finalizing-text { font-size: 13px; font-weight: 500; color: $sd-muted; }
498
499 /* ---------- Preview ---------- */
500 .betterdocs-sd-preview-intro { margin-bottom: 16px; }
501 .betterdocs-sd-preview-intro-title { font-size: 18px; font-weight: 600; color: $sd-ink; }
502 .betterdocs-sd-preview-intro-sub { font-size: 13px; color: $sd-muted; margin-top: 4px; }
503 /* Partial-generation warning shown above the preview when some articles failed. */
504 .betterdocs-sd-preview-warning {
505 display: flex;
506 align-items: flex-start;
507 gap: 10px;
508 margin-bottom: 14px;
509 padding: 11px 14px;
510 font-size: 13px;
511 line-height: 1.5;
512 color: var(--text-color-800, #92400e);
513 background: var(--base-color-50, #fff8ec);
514 border: 1px solid var(--base-color-200, #fde3b3);
515 border-radius: 8px;
516 }
517 .betterdocs-sd-preview-warning-icon {
518 flex-shrink: 0;
519 width: 18px;
520 height: 18px;
521 margin-top: 1px;
522 border-radius: 50%;
523 background: #f59e0b;
524 color: #fff;
525 font-weight: 700;
526 font-size: 12px;
527 line-height: 18px;
528 text-align: center;
529 }
530 .betterdocs-sd-preview { display: flex; flex-direction: column; gap: 12px; }
531 .betterdocs-sd-preview-group { border: 1px solid $sd-border-soft; border-radius: 12px; overflow: hidden; background: $sd-card; }
532 .betterdocs-sd-preview-head {
533 display: flex;
534 align-items: center;
535 gap: 12px;
536 padding: 12px 16px;
537 background: $sd-surface;
538 border-bottom: 1px solid $sd-border-soft;
539 }
540 .betterdocs-sd-preview-name { font-size: 14px; font-weight: 600; color: $sd-ink; }
541 .betterdocs-sd-preview-badge {
542 font-size: 12px;
543 font-weight: 600;
544 color: $sd-muted;
545 background: $sd-meta-bg;
546 border-radius: 999px;
547 padding: 3px 10px;
548 }
549 // "All products" tag on the store-wide product FAQ group (green, since it's the one
550 // group that behaves differently — shown on every product page).
551 .betterdocs-sd-preview-tag {
552 margin-left: auto;
553 font-size: 11px;
554 font-weight: 600;
555 letter-spacing: 0.02em;
556 color: $sd-green-700;
557 background: $sd-green-50;
558 border-radius: 999px;
559 padding: 3px 10px;
560 }
561 // When the tag is present it takes the auto-margin, so the count badge sits next to it.
562 .betterdocs-sd-preview-tag + .betterdocs-sd-preview-badge { margin-left: 8px; }
563 .betterdocs-sd-preview-article {
564 display: flex;
565 align-items: center;
566 gap: 12px;
567 padding: 11px 16px;
568
569 & + & { border-top: 1px solid $sd-border-soft; }
570 }
571 .betterdocs-sd-preview-article-icon { color: var(--text-color-500, #98a2b3); flex-shrink: 0; display: flex; }
572 .betterdocs-sd-preview-article-title { font-size: 14px; color: $sd-ink-2; font-weight: 500; }
573 .betterdocs-sd-preview-article-draft { margin-left: auto; font-size: 11px; font-weight: 600; color: $sd-muted; background: $sd-meta-bg; border-radius: 999px; padding: 3px 9px; }
574
575 /* ---------- Success / Error ---------- */
576 .betterdocs-sd-success { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 28px 24px; }
577 .betterdocs-sd-success-check {
578 width: 56px;
579 height: 56px;
580 border-radius: 50%;
581 background: $sd-green;
582 color: #fff;
583 display: flex;
584 align-items: center;
585 justify-content: center;
586 margin-bottom: 16px;
587 animation: sdCheckIn .3s cubic-bezier(.2, .8, .3, 1) both;
588 }
589 .betterdocs-sd-success-title { font-size: 18px; font-weight: 600; color: $sd-ink; }
590 .betterdocs-sd-success-sub { font-size: 13px; color: $sd-muted; margin-top: 6px; }
591 .betterdocs-sd-error {
592 padding: 32px 24px;
593 text-align: center;
594 display: flex;
595 flex-direction: column;
596 align-items: center;
597 }
598 // Soft-tinted alert tile, mirroring the success check's treatment (but neutral-warning,
599 // not a heavy red block).
600 .betterdocs-sd-error-icon {
601 width: 44px;
602 height: 44px;
603 border-radius: 50%;
604 display: flex;
605 align-items: center;
606 justify-content: center;
607 margin-bottom: 14px;
608 color: var(--danger-600, #d92d20);
609 background: var(--danger-50, #fef3f2);
610 }
611 // Smaller, calmer title — the icon carries the "something went wrong" signal, so the
612 // message no longer needs to be a large red heading.
613 .betterdocs-sd-error-title {
614 font-size: 14px;
615 font-weight: 600;
616 line-height: 1.5;
617 max-width: 380px;
618 color: $sd-ink;
619 }
620 .betterdocs-sd-error-sub { font-size: 13px; color: $sd-muted; margin-top: 6px; line-height: 1.55; }
621
622 /* ---------- Quick Setup "Create Content" — AI banner (neutral surface) ---------- */
623 .betterdocs-sd-promo {
624 position: relative;
625 overflow: hidden;
626 display: flex;
627 align-items: center;
628 gap: 24px;
629 flex-wrap: wrap;
630 background: $sd-surface;
631 border: 1px solid $sd-border-soft;
632 border-radius: 12px;
633 padding: 24px;
634 }
635 .betterdocs-sd-promo-glow { display: none; } // removed decorative green glow
636 .betterdocs-sd-promo-icon {
637 width: 48px;
638 height: 48px;
639 border-radius: 12px;
640 flex-shrink: 0;
641 display: flex;
642 align-items: center;
643 justify-content: center;
644 background: $sd-card;
645 border: 1px solid $sd-border-soft;
646 color: $sd-green; // small green spark on a neutral tile
647 box-shadow: none;
648 }
649 .betterdocs-sd-promo-body { flex: 1; min-width: 240px; }
650 .betterdocs-sd-promo-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
651 .betterdocs-sd-promo-title { margin: 0; font-size: 18px; font-weight: 600; color: $sd-ink; }
652 .betterdocs-sd-promo-text { margin: 6px 0 0; font-size: 14px; color: $sd-muted; line-height: 1.55; max-width: 540px; }
653
654 @media (max-width: 600px) {
655 .betterdocs-sd-promo { text-align: center; justify-content: center; }
656 }
657
658 /* ---------- Customize step — layout picker ---------- */
659 .betterdocs-sd-layouts {
660 display: flex;
661 flex-direction: column;
662 gap: 8px;
663 background: var(--base-background, #fff);
664 border: 1px solid var(--text-color-150, #eef0f3);
665 border-radius: 16px;
666 overflow: hidden;
667 padding: 24px;
668 }
669 .betterdocs-sd-layout-group {
670 margin-bottom: 24px;
671 }
672 .betterdocs-sd-layout-group-head {
673 display: flex;
674 align-items: baseline;
675 gap: 10px;
676 margin-bottom: 16px;
677 }
678 .betterdocs-sd-layout-group-title {
679 margin: 0;
680 font-size: 16px;
681 font-weight: 600;
682 color: $sd-ink;
683 }
684 .betterdocs-sd-layout-group-hint {
685 font-size: 13px;
686 font-weight: 500;
687 color: var(--text-color-500, #98a2b3);
688 }
689 .betterdocs-sd-layout-saved {
690 display: inline-flex;
691 align-items: center;
692 gap: 4px;
693 margin-left: auto;
694 font-size: 12px;
695 font-weight: 600;
696 color: $sd-muted;
697 background: $sd-meta-bg;
698 border-radius: 999px;
699 padding: 2px 10px;
700 }
701 .betterdocs-sd-layout-grid {
702 display: grid;
703 grid-template-columns: repeat(4, minmax(0, 1fr));
704 gap: 16px;
705 }
706 .betterdocs-sd-layout-card {
707 display: flex;
708 flex-direction: column;
709 align-items: stretch;
710 gap: 10px;
711 padding: 0;
712 background: transparent;
713 border: 0;
714 cursor: pointer;
715 text-align: center;
716
717 .betterdocs-sd-layout-thumb {
718 position: relative;
719 display: block;
720 background: var(--base-background, #fff);
721 border: 2px solid $sd-border;
722 border-radius: 12px;
723 overflow: hidden;
724 box-shadow: 0 1px 2px rgba(16, 24, 40, .05);
725 transition: border-color .16s ease, box-shadow .16s ease, transform .12s ease;
726
727 img {
728 display: block;
729 width: 100%;
730 height: auto;
731 }
732 }
733
734 .betterdocs-sd-layout-check {
735 position: absolute;
736 top: 8px;
737 right: 8px;
738 width: 24px;
739 height: 24px;
740 border-radius: 50%;
741 background: $sd-green;
742 color: #fff;
743 display: flex;
744 align-items: center;
745 justify-content: center;
746 box-shadow: 0 2px 6px rgba(0, 184, 132, .4);
747 animation: sdCheckIn .3s cubic-bezier(.2, .8, .3, 1) both;
748 }
749
750 .betterdocs-sd-layout-name {
751 font-size: 14px;
752 font-weight: 500;
753 color: $sd-muted;
754 transition: color .16s ease, font-weight .16s ease;
755 }
756
757 &:hover:not(.is-selected) {
758 .betterdocs-sd-layout-thumb {
759 border-color: var(--text-color-400, #d0d5dd);
760 box-shadow: 0 4px 14px rgba(16, 24, 40, .06);
761 transform: translateY(-2px);
762 }
763 }
764
765 &.is-selected {
766 .betterdocs-sd-layout-thumb {
767 border-color: $sd-green;
768 box-shadow: 0 0 0 4px $sd-green-50, 0 4px 14px rgba(16, 24, 40, .06);
769 }
770 .betterdocs-sd-layout-name {
771 color: $sd-ink;
772 font-weight: 600;
773 }
774 }
775 }
776
777 /* ---------- Customize step — FSE hand-off (block themes) ----------
778 The layout picker is meaningless on a block theme, so the step becomes a hand-off to
779 the Site Editor: copy left, preview right, one primary action. Same card language as
780 the Create Content step's AI banner (.betterdocs-sd-promo) — surface, border, radius,
781 18/600 title, 14px muted body — so the wizard still reads as one flow. */
782 .betterdocs-sd-fse {
783 display: flex;
784 align-items: center;
785 gap: 40px;
786 background: $sd-card;
787 border: 1px solid $sd-border-soft;
788 border-radius: 16px;
789 padding: 32px;
790
791 .betterdocs-sd-fse-body {
792 flex: 1 1 auto;
793 min-width: 260px;
794 }
795
796 /* Badge: the shared .betterdocs-sd-badge pill — only its spacing is set here. */
797 .betterdocs-sd-badge {
798 margin-bottom: 12px;
799 }
800
801 .betterdocs-sd-fse-title {
802 margin: 0 0 8px;
803 font-size: 18px;
804 font-weight: 600;
805 line-height: 1.35;
806 color: $sd-ink;
807 }
808
809 .betterdocs-sd-fse-text {
810 margin: 0;
811 max-width: 460px;
812 font-size: 14px;
813 line-height: 1.55;
814 color: $sd-muted;
815 }
816
817 .betterdocs-sd-fse-list {
818 margin: 18px 0 0;
819 padding: 0;
820 list-style: none;
821 display: flex;
822 flex-direction: column;
823 gap: 10px;
824
825 li {
826 display: flex;
827 align-items: center;
828 gap: 10px;
829 margin: 0;
830 font-size: 13.5px;
831 font-weight: 500;
832 color: $sd-ink-2;
833 }
834 }
835
836 .betterdocs-sd-fse-tick {
837 display: inline-flex;
838 align-items: center;
839 justify-content: center;
840 flex-shrink: 0;
841 width: 18px;
842 height: 18px;
843 border-radius: 50%;
844 background: $sd-green-50;
845 color: $sd-green-700;
846 }
847
848 .betterdocs-sd-fse-action {
849 display: flex;
850 align-items: center;
851 gap: 14px;
852 flex-wrap: wrap;
853 margin-top: 24px;
854 }
855
856 .betterdocs-sd-fse-button {
857 display: inline-flex;
858 align-items: center;
859 gap: 8px;
860 padding: 11px 20px;
861 border-radius: 8px;
862 background: $sd-green;
863 border: 1px solid $sd-green;
864 color: #fff;
865 font-size: 14px;
866 font-weight: 600;
867 line-height: 1;
868 text-decoration: none;
869 box-shadow: none;
870 transition: background 0.15s ease, border-color 0.15s ease;
871
872 &:hover,
873 &:focus {
874 background: $sd-green-600;
875 border-color: $sd-green-600;
876 color: #fff;
877 text-decoration: none;
878 }
879
880 &:focus-visible {
881 outline: 2px solid $sd-green-700;
882 outline-offset: 2px;
883 }
884 }
885
886 .betterdocs-sd-fse-note {
887 font-size: 12.5px;
888 color: $sd-muted;
889 }
890
891 /* Preview sits right, and is decorative — the copy carries the meaning. */
892 .betterdocs-sd-fse-preview {
893 flex: 0 1 380px;
894 min-width: 0;
895
896 img {
897 display: block;
898 width: 100%;
899 height: auto;
900 border-radius: 12px;
901 }
902 }
903 }
904
905 @media (max-width: 960px) {
906 .betterdocs-sd-fse {
907 flex-direction: column;
908 align-items: stretch;
909 gap: 28px;
910 padding: 24px;
911
912 .betterdocs-sd-fse-text { max-width: none; }
913 .betterdocs-sd-fse-preview { flex: 1 1 auto; }
914 }
915 }
916
917 @media (max-width: 782px) {
918 .betterdocs-sd-layout-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; max-width: none !important; }
919 }
920
921 /* ---------- "or build it yourself" manual instruction ---------- */
922 .betterdocs-sd-manual-divider {
923 display: flex;
924 align-items: center;
925 gap: 16px;
926 margin-top: 16px;
927 }
928 .betterdocs-sd-manual-line {
929 flex: 1;
930 height: 1px;
931 background: $sd-border-soft;
932 }
933 .betterdocs-sd-manual-label {
934 font-size: 13px;
935 color: var(--text-color-500, #98a2b3);
936 font-weight: 500;
937 white-space: nowrap;
938 }
939 .betterdocs-sd-manual {
940 margin-top: 16px;
941 background: $sd-card;
942 border: 1px dashed $sd-border;
943 border-radius: 12px;
944 padding: 32px 24px;
945 text-align: center;
946 }
947 .betterdocs-sd-manual-icon {
948 width: 48px;
949 height: 48px;
950 margin: 0 auto 12px;
951 border-radius: 12px;
952 background: $sd-meta-bg;
953 color: var(--text-color-500, #98a2b3);
954 display: flex;
955 align-items: center;
956 justify-content: center;
957 }
958 .betterdocs-sd-manual-title { font-size: 14px; font-weight: 600; color: $sd-ink-2; }
959 .betterdocs-sd-manual-text { font-size: 13px; color: $sd-muted; margin-top: 4px; }
960
961 /* ---------- Quick Setup: generated docs (read-only) ---------- */
962 .betterdocs-sd-qs-result {
963 margin-top: 24px;
964 }
965 .betterdocs-sd-qs-result-head {
966 font-size: 13px;
967 font-weight: 600;
968 color: $sd-muted;
969 margin-bottom: 16px;
970 }
971
972 /* ---------- Populated docs — All Docs grid look (read-only) ---------- */
973 .betterdocs-sd-populated {
974 background: var(--base-background, #fff);
975 border: 1px solid var(--text-color-150, #eef0f3);
976 border-radius: 16px;
977 overflow: hidden;
978 }
979 .betterdocs-sd-populated-header {
980 display: flex;
981 align-items: center;
982 justify-content: space-between;
983 padding: 18px 24px;
984 }
985 .betterdocs-sd-populated-header-left {
986 display: flex;
987 align-items: center;
988 gap: 12px;
989 }
990 .betterdocs-sd-populated-title {
991 margin: 0;
992 font-size: 20px;
993 font-weight: 600;
994 color: var(--text-color-900, #101828);
995 }
996 .betterdocs-sd-populated-badge {
997 font-size: 12px;
998 font-weight: 600;
999 color: $sd-muted;
1000 background: $sd-meta-bg;
1001 border-radius: 999px;
1002 padding: 3px 11px;
1003 }
1004 .betterdocs-sd-populated-grid {
1005 display: flex;
1006 flex-wrap: wrap;
1007 align-items: flex-start;
1008 gap: 24px;
1009 width: 100%;
1010 box-sizing: border-box;
1011 padding: 0 24px 24px;
1012 margin: 0;
1013
1014 .betterdocs-col {
1015 flex: 0 0 calc(50% - 12px);
1016 max-width: calc(50% - 12px);
1017 min-width: 0;
1018 box-sizing: border-box;
1019 }
1020 }
1021 .betterdocs-sd-cat-wrap {
1022 background: var(--base-background, #fff);
1023 border: 1px solid var(--text-color-150, #eef0f3);
1024 border-radius: 8px;
1025 overflow: hidden;
1026 }
1027 .betterdocs-sd-cat-header {
1028 padding: 10px;
1029 border-bottom: 1px solid var(--text-color-150, #eef0f3);
1030 }
1031 .betterdocs-sd-cat-name {
1032 margin: 0;
1033 color: var(--text-color-900, #101828);
1034 text-align: center;
1035 font-size: 14px;
1036 font-weight: 600;
1037 line-height: 1.5;
1038 }
1039 .betterdocs-sd-cat-list {
1040 list-style: none;
1041 margin: 16px 12px 8px;
1042 padding: 0;
1043 /* height follows content — no fixed height / scrollbar */
1044
1045 li {
1046 padding: 10px 32px;
1047 margin-bottom: 0;
1048 border-radius: 8px;
1049 position: relative;
1050 transition: background .2s ease;
1051
1052 &:hover { background: var(--text-color-100, #f2f4f7); }
1053 }
1054 }
1055 .betterdocs-sd-doc-drag {
1056 cursor: move;
1057 position: absolute;
1058 left: 10px;
1059 top: 50%;
1060 transform: translateY(-50%);
1061 line-height: 0;
1062 svg {
1063 display: block;
1064 width: 16px;
1065 height: 16px;
1066 fill: var(--text-color-500, #98a2b3);
1067 path { fill: var(--text-color-500, #98a2b3); }
1068 }
1069 }
1070 .betterdocs-sd-doc-title {
1071 color: var(--text-color-900, #101828);
1072 font-family: "IBM Plex Sans", sans-serif;
1073 font-size: 14px;
1074 font-weight: 500;
1075 line-height: 1.4;
1076 }
1077
1078 @media (max-width: 600px) {
1079 .betterdocs-sd-populated-grid .betterdocs-col {
1080 flex-basis: 100%;
1081 max-width: 100%;
1082 }
1083 }
1084