@webstir-io/webstir 0.1.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.
Files changed (123) hide show
  1. package/README.md +69 -0
  2. package/assets/features/client_nav/client_nav.ts +469 -0
  3. package/assets/features/content_nav/content_nav.css +170 -0
  4. package/assets/features/content_nav/content_nav.ts +358 -0
  5. package/assets/features/router/router-types.ts +6 -0
  6. package/assets/features/router/router.ts +118 -0
  7. package/assets/features/search/search.css +204 -0
  8. package/assets/features/search/search.ts +627 -0
  9. package/assets/templates/api/src/backend/index.ts +13 -0
  10. package/assets/templates/api/src/backend/tsconfig.json +15 -0
  11. package/assets/templates/api/src/shared/router-types.ts +23 -0
  12. package/assets/templates/api/src/shared/tsconfig.json +10 -0
  13. package/assets/templates/api/src/shared/types/index.ts +4 -0
  14. package/assets/templates/full/src/backend/index.ts +13 -0
  15. package/assets/templates/full/src/backend/tsconfig.json +15 -0
  16. package/assets/templates/full/src/frontend/app/app.css +65 -0
  17. package/assets/templates/full/src/frontend/app/app.html +13 -0
  18. package/assets/templates/full/src/frontend/app/app.ts +188 -0
  19. package/assets/templates/full/src/frontend/app/error.ts +127 -0
  20. package/assets/templates/full/src/frontend/app/hmr.js +355 -0
  21. package/assets/templates/full/src/frontend/app/navigation.ts +8 -0
  22. package/assets/templates/full/src/frontend/app/refresh.js +114 -0
  23. package/assets/templates/full/src/frontend/app/router.ts +126 -0
  24. package/assets/templates/full/src/frontend/app/styles/base.css +2 -0
  25. package/assets/templates/full/src/frontend/app/styles/reset.css +48 -0
  26. package/assets/templates/full/src/frontend/pages/home/index.css +21 -0
  27. package/assets/templates/full/src/frontend/pages/home/index.html +10 -0
  28. package/assets/templates/full/src/frontend/pages/home/index.ts +18 -0
  29. package/assets/templates/full/src/frontend/pages/home/tests/home.test.ts +21 -0
  30. package/assets/templates/full/src/frontend/tsconfig.json +20 -0
  31. package/assets/templates/full/src/shared/router-types.ts +23 -0
  32. package/assets/templates/full/src/shared/tsconfig.json +10 -0
  33. package/assets/templates/full/src/shared/types/index.ts +4 -0
  34. package/assets/templates/shared/Errors.404.html +23 -0
  35. package/assets/templates/shared/Errors.500.html +23 -0
  36. package/assets/templates/shared/Errors.default.html +23 -0
  37. package/assets/templates/shared/types/global.d.ts +32 -0
  38. package/assets/templates/shared/types.global.d.ts +32 -0
  39. package/assets/templates/spa/src/frontend/app/app.css +65 -0
  40. package/assets/templates/spa/src/frontend/app/app.html +13 -0
  41. package/assets/templates/spa/src/frontend/app/app.ts +188 -0
  42. package/assets/templates/spa/src/frontend/app/error.ts +127 -0
  43. package/assets/templates/spa/src/frontend/app/hmr.js +355 -0
  44. package/assets/templates/spa/src/frontend/app/navigation.ts +8 -0
  45. package/assets/templates/spa/src/frontend/app/refresh.js +114 -0
  46. package/assets/templates/spa/src/frontend/app/router.ts +126 -0
  47. package/assets/templates/spa/src/frontend/app/styles/base.css +2 -0
  48. package/assets/templates/spa/src/frontend/app/styles/reset.css +48 -0
  49. package/assets/templates/spa/src/frontend/pages/home/index.css +21 -0
  50. package/assets/templates/spa/src/frontend/pages/home/index.html +10 -0
  51. package/assets/templates/spa/src/frontend/pages/home/index.ts +18 -0
  52. package/assets/templates/spa/src/frontend/pages/home/tests/home.test.ts +21 -0
  53. package/assets/templates/spa/src/frontend/tsconfig.json +20 -0
  54. package/assets/templates/spa/src/shared/router-types.ts +23 -0
  55. package/assets/templates/spa/src/shared/tsconfig.json +10 -0
  56. package/assets/templates/spa/src/shared/types/index.ts +4 -0
  57. package/assets/templates/ssg/src/frontend/app/app.css +12 -0
  58. package/assets/templates/ssg/src/frontend/app/app.html +43 -0
  59. package/assets/templates/ssg/src/frontend/app/app.ts +190 -0
  60. package/assets/templates/ssg/src/frontend/app/error.ts +127 -0
  61. package/assets/templates/ssg/src/frontend/app/hmr.js +370 -0
  62. package/assets/templates/ssg/src/frontend/app/refresh.js +163 -0
  63. package/assets/templates/ssg/src/frontend/app/scripts/components/drawer.ts +183 -0
  64. package/assets/templates/ssg/src/frontend/app/scripts/components/menu.ts +75 -0
  65. package/assets/templates/ssg/src/frontend/app/styles/base.css +77 -0
  66. package/assets/templates/ssg/src/frontend/app/styles/components/buttons.css +108 -0
  67. package/assets/templates/ssg/src/frontend/app/styles/components/drawer.css +12 -0
  68. package/assets/templates/ssg/src/frontend/app/styles/components/header.css +164 -0
  69. package/assets/templates/ssg/src/frontend/app/styles/components/markdown.css +25 -0
  70. package/assets/templates/ssg/src/frontend/app/styles/layout.css +41 -0
  71. package/assets/templates/ssg/src/frontend/app/styles/reset.css +56 -0
  72. package/assets/templates/ssg/src/frontend/app/styles/tokens.css +72 -0
  73. package/assets/templates/ssg/src/frontend/app/styles/utilities.css +14 -0
  74. package/assets/templates/ssg/src/frontend/content/_sidebar.json +14 -0
  75. package/assets/templates/ssg/src/frontend/content/content-pipeline.md +82 -0
  76. package/assets/templates/ssg/src/frontend/content/css-playbook.md +68 -0
  77. package/assets/templates/ssg/src/frontend/content/hosting.md +48 -0
  78. package/assets/templates/ssg/src/frontend/pages/about/index.css +33 -0
  79. package/assets/templates/ssg/src/frontend/pages/about/index.html +60 -0
  80. package/assets/templates/ssg/src/frontend/pages/docs/index.css +505 -0
  81. package/assets/templates/ssg/src/frontend/pages/docs/index.html +52 -0
  82. package/assets/templates/ssg/src/frontend/pages/docs/index.ts +495 -0
  83. package/assets/templates/ssg/src/frontend/pages/home/index.css +91 -0
  84. package/assets/templates/ssg/src/frontend/pages/home/index.html +38 -0
  85. package/assets/templates/ssg/src/frontend/pages/home/tests/home.test.ts +24 -0
  86. package/assets/templates/ssg/src/frontend/tsconfig.json +13 -0
  87. package/package.json +41 -0
  88. package/scripts/pack-standalone.mjs +127 -0
  89. package/scripts/sync-assets.mjs +87 -0
  90. package/src/add-backend.ts +164 -0
  91. package/src/add.ts +112 -0
  92. package/src/api-watch.ts +84 -0
  93. package/src/backend-inspect.ts +45 -0
  94. package/src/backend-runtime.ts +286 -0
  95. package/src/build-plan.ts +12 -0
  96. package/src/build.ts +10 -0
  97. package/src/cli.ts +569 -0
  98. package/src/compile-tests.ts +61 -0
  99. package/src/dev-server.ts +393 -0
  100. package/src/enable-assets.ts +196 -0
  101. package/src/enable.ts +477 -0
  102. package/src/execute.ts +85 -0
  103. package/src/format.ts +254 -0
  104. package/src/frontend-watch.ts +145 -0
  105. package/src/full-watch.ts +80 -0
  106. package/src/index.ts +20 -0
  107. package/src/init-assets.ts +96 -0
  108. package/src/init.ts +339 -0
  109. package/src/paths.ts +26 -0
  110. package/src/providers.ts +88 -0
  111. package/src/publish.ts +8 -0
  112. package/src/refresh.ts +56 -0
  113. package/src/repair.ts +414 -0
  114. package/src/runtime.ts +48 -0
  115. package/src/smoke.ts +161 -0
  116. package/src/stop-signal.ts +26 -0
  117. package/src/test.ts +215 -0
  118. package/src/types.ts +29 -0
  119. package/src/watch-daemon-client.ts +171 -0
  120. package/src/watch-events.ts +195 -0
  121. package/src/watch.ts +66 -0
  122. package/src/workspace-watcher.ts +251 -0
  123. package/src/workspace.ts +55 -0
@@ -0,0 +1,505 @@
1
+ /* Docs Styles (shared by /docs and Markdown docs pages) */
2
+
3
+ @layer overrides {
4
+ .docs-layout {
5
+ --ws-docs-layout-gap: 44px;
6
+ --ws-docs-layout-gap-sm: 24px;
7
+ --ws-docs-layout-pad-bottom: 112px;
8
+ --ws-docs-layout-pad-bottom-sm: 96px;
9
+ --ws-docs-sidebar-pad-top: 24px;
10
+ --ws-docs-toc-pad-top: 32px;
11
+ --ws-docs-ui-gap: 4px;
12
+ --ws-docs-ui-gap-lg: 8px;
13
+ --ws-docs-ui-gap-tight: 10px;
14
+ --ws-docs-ui-pad: 8px 10px;
15
+ --ws-docs-tree-indent: 14px;
16
+ --ws-docs-surface-padding: 14px 16px;
17
+
18
+ padding: var(--ws-sticky-gap, 16px) 0 var(--ws-docs-layout-pad-bottom, 112px);
19
+ --ws-container: var(--ws-shell-container);
20
+ }
21
+
22
+ .docs-layout__inner {
23
+ display: grid;
24
+ grid-template-columns: var(--ws-docs-sidebar) 1fr;
25
+ gap: var(--ws-docs-layout-gap, 44px);
26
+ align-items: start;
27
+ }
28
+
29
+ .docs-layout.has-toc .docs-layout__inner {
30
+ grid-template-columns: var(--ws-docs-sidebar) minmax(0, 1fr) var(--ws-docs-toc);
31
+ }
32
+
33
+ .docs-sidebar {
34
+ position: sticky;
35
+ top: calc(var(--ws-header-sticky-offset, 0px) + var(--ws-sticky-gap, 16px));
36
+ align-self: start;
37
+ padding-top: var(--ws-docs-sidebar-pad-top, 24px);
38
+ }
39
+
40
+ @media (max-width: 40rem) {
41
+ .docs-layout {
42
+ padding: var(--ws-sticky-gap, 16px) 0 var(--ws-docs-layout-pad-bottom-sm, 96px);
43
+ }
44
+
45
+ .docs-layout__inner {
46
+ gap: var(--ws-docs-layout-gap-sm, 24px);
47
+ }
48
+
49
+ .docs-sidebar {
50
+ display: none;
51
+ }
52
+ }
53
+
54
+ .docs-sidebar__header {
55
+ margin-top: var(--ws-docs-ui-gap-lg, 8px);
56
+ margin-bottom: var(--ws-docs-ui-gap-tight, 10px);
57
+ }
58
+
59
+ .docs-sidebar__title {
60
+ font-weight: 800;
61
+ color: var(--ws-fg);
62
+ text-decoration: none;
63
+ }
64
+
65
+ .docs-nav {
66
+ border-top: 1px solid var(--ws-border);
67
+ padding-top: calc(var(--ws-docs-ui-gap, 4px) + var(--ws-docs-ui-gap-lg, 8px));
68
+ }
69
+
70
+ .docs-links {
71
+ list-style: none;
72
+ margin: 0;
73
+ padding: 0;
74
+ display: grid;
75
+ gap: var(--ws-docs-ui-gap, 4px);
76
+ }
77
+
78
+ .docs-links__section {
79
+ list-style: none;
80
+ margin: 0;
81
+ padding: 0;
82
+ display: grid;
83
+ gap: var(--ws-docs-ui-gap, 4px);
84
+ }
85
+
86
+ .docs-tree__toggle {
87
+ appearance: none;
88
+ width: 100%;
89
+ display: flex;
90
+ align-items: center;
91
+ gap: var(--ws-docs-ui-gap-lg, 8px);
92
+ padding: var(--ws-docs-ui-pad, 8px 10px);
93
+ border-radius: var(--ws-radius-1);
94
+ border: 0;
95
+ background: transparent;
96
+ color: var(--ws-fg);
97
+ font-weight: 700;
98
+ cursor: pointer;
99
+ text-align: left;
100
+ }
101
+
102
+ .docs-tree__toggle:hover {
103
+ background: rgba(17, 24, 39, 0.04);
104
+ }
105
+
106
+ .docs-tree__caret {
107
+ width: 0;
108
+ height: 0;
109
+ border-left: 5px solid rgba(229, 231, 235, 0.7);
110
+ border-top: 4px solid transparent;
111
+ border-bottom: 4px solid transparent;
112
+ transform: rotate(90deg);
113
+ transition: transform 120ms ease;
114
+ }
115
+
116
+ .docs-tree__toggle[aria-expanded="false"] .docs-tree__caret {
117
+ transform: rotate(0deg);
118
+ }
119
+
120
+ .docs-tree__children {
121
+ list-style: none;
122
+ margin: var(--ws-docs-ui-gap, 4px) 0 var(--ws-docs-ui-gap-tight, 10px) var(--ws-docs-tree-indent, 14px);
123
+ padding: 0 0 0 var(--ws-docs-ui-gap-tight, 10px);
124
+ border-left: 1px solid rgba(229, 231, 235, 0.16);
125
+ display: grid;
126
+ gap: var(--ws-docs-ui-gap, 4px);
127
+ }
128
+
129
+ .docs-tree__children[hidden] {
130
+ display: none;
131
+ }
132
+
133
+ .docs-links a {
134
+ display: block;
135
+ padding: var(--ws-docs-ui-pad, 8px 10px);
136
+ border-radius: var(--ws-radius-1);
137
+ color: var(--ws-fg);
138
+ text-decoration: none;
139
+ font-weight: 600;
140
+ }
141
+
142
+ .docs-links a:hover {
143
+ background: rgba(17, 24, 39, 0.04);
144
+ text-decoration: none;
145
+ }
146
+
147
+ .docs-links a[aria-current="page"] {
148
+ background: rgba(37, 99, 235, 0.10);
149
+ color: var(--ws-fg);
150
+ }
151
+
152
+ .docs-breadcrumb {
153
+ margin: 0 0 calc(var(--ws-docs-ui-gap-lg, 8px) * 2);
154
+ }
155
+
156
+ .docs-breadcrumb__list {
157
+ list-style: none;
158
+ margin: 0;
159
+ padding: 0;
160
+ display: flex;
161
+ flex-wrap: wrap;
162
+ align-items: center;
163
+ gap: var(--ws-docs-ui-gap, 4px);
164
+ color: var(--ws-fg);
165
+ font-size: 0.82rem;
166
+ font-weight: 600;
167
+ }
168
+
169
+ .docs-breadcrumb__list li {
170
+ display: inline-flex;
171
+ align-items: center;
172
+ gap: calc(var(--ws-docs-ui-gap, 4px) + 2px);
173
+ }
174
+
175
+ .docs-breadcrumb__list li + li::before {
176
+ content: '›';
177
+ margin-inline: 2px;
178
+ color: rgba(148, 163, 184, 0.8);
179
+ }
180
+
181
+ .docs-breadcrumb__item {
182
+ display: inline-flex;
183
+ align-items: center;
184
+ gap: var(--ws-docs-ui-gap-lg, 8px);
185
+ color: inherit;
186
+ text-decoration: none;
187
+ line-height: 1;
188
+ }
189
+
190
+ .docs-breadcrumb__label {
191
+ display: inline-flex;
192
+ align-items: center;
193
+ padding: 0.35rem 0.7rem;
194
+ border-radius: 999px;
195
+ border: 1px solid transparent;
196
+ }
197
+
198
+ .docs-breadcrumb__item:hover {
199
+ color: var(--ws-fg);
200
+ text-decoration: none;
201
+ }
202
+
203
+ .docs-breadcrumb__label--current {
204
+ color: var(--ws-fg);
205
+ background: rgba(17, 24, 39, 0.06);
206
+ border-color: var(--ws-border);
207
+ }
208
+
209
+ .docs-breadcrumb__icon {
210
+ display: inline-flex;
211
+ align-items: center;
212
+ justify-content: center;
213
+ }
214
+
215
+ .docs-breadcrumb__icon svg {
216
+ display: block;
217
+ }
218
+
219
+ .docs-breadcrumb__icon {
220
+ color: var(--ws-fg);
221
+ }
222
+
223
+ .docs-section {
224
+ margin-top: 12px;
225
+ }
226
+
227
+ .docs-section:first-child {
228
+ margin-top: 0;
229
+ }
230
+
231
+ .docs-section__title {
232
+ color: var(--ws-muted);
233
+ font-size: 0.9rem;
234
+ font-weight: 700;
235
+ letter-spacing: 0.02em;
236
+ text-transform: uppercase;
237
+ margin: 8px 0;
238
+ }
239
+
240
+ .docs-main {
241
+ padding-top: 16px;
242
+ width: min(100%, 92ch);
243
+ margin-inline: auto;
244
+ min-width: 0;
245
+ }
246
+
247
+ @media (max-width: 40rem) {
248
+ .docs-main {
249
+ padding-top: 8px;
250
+ width: 100%;
251
+ max-width: none;
252
+ margin-inline: 0;
253
+ }
254
+ }
255
+
256
+ .docs-toc {
257
+ position: sticky;
258
+ top: calc(var(--ws-header-sticky-offset, 0px) + var(--ws-sticky-gap, 16px));
259
+ align-self: start;
260
+ padding-top: var(--ws-docs-toc-pad-top, 32px);
261
+ }
262
+
263
+ @media (max-width: 68.75rem) {
264
+ .docs-toc {
265
+ display: none;
266
+ }
267
+
268
+ .docs-layout.has-toc .docs-layout__inner {
269
+ grid-template-columns: var(--ws-docs-sidebar) minmax(0, 1fr);
270
+ }
271
+ }
272
+
273
+ @media (max-width: 53.75rem), (max-width: 860px) {
274
+ .docs-layout__inner,
275
+ .docs-layout.has-toc .docs-layout__inner {
276
+ grid-template-columns: 1fr;
277
+ }
278
+
279
+ .docs-sidebar {
280
+ display: none;
281
+ }
282
+ }
283
+
284
+ .docs-toc__title {
285
+ color: var(--ws-muted);
286
+ font-size: 0.9rem;
287
+ font-weight: 700;
288
+ letter-spacing: 0.02em;
289
+ text-transform: uppercase;
290
+ margin: var(--ws-docs-ui-gap-lg, 8px) 0 var(--ws-docs-ui-gap-tight, 10px);
291
+ }
292
+
293
+ .docs-toc__links {
294
+ list-style: none;
295
+ margin: 0;
296
+ padding: 0;
297
+ display: grid;
298
+ gap: 6px;
299
+ }
300
+
301
+ .docs-toc__links a {
302
+ color: var(--ws-muted);
303
+ text-decoration: none;
304
+ font-weight: 600;
305
+ font-size: 0.95rem;
306
+ line-height: 1.3;
307
+ }
308
+
309
+ .docs-toc__links a:hover {
310
+ color: var(--ws-fg);
311
+ text-decoration: none;
312
+ }
313
+
314
+ .docs-toc__links a[aria-current="true"] {
315
+ color: var(--ws-fg);
316
+ }
317
+
318
+ .docs-toc__links .docs-toc__sub {
319
+ padding-left: calc(var(--ws-docs-ui-gap, 4px) + var(--ws-docs-ui-gap-lg, 8px));
320
+ }
321
+
322
+ .docs-hero {
323
+ margin-bottom: 28px;
324
+ }
325
+
326
+ .docs-hero h1 {
327
+ font-size: 2.25rem;
328
+ letter-spacing: -0.02em;
329
+ margin: 0 0 calc(var(--ws-docs-ui-gap, 4px) + var(--ws-docs-ui-gap-lg, 8px));
330
+ }
331
+
332
+ .docs-lead {
333
+ color: var(--ws-muted);
334
+ font-size: 1.1rem;
335
+ margin: 0;
336
+ }
337
+
338
+ .docs-cards {
339
+ display: grid;
340
+ grid-template-columns: repeat(1, minmax(0, 1fr));
341
+ gap: calc(var(--ws-docs-ui-gap, 4px) + var(--ws-docs-ui-gap-lg, 8px));
342
+ margin: 22px 0 36px;
343
+ }
344
+
345
+ .docs-card {
346
+ border: 1px solid var(--ws-border);
347
+ border-radius: var(--ws-radius-2);
348
+ padding: var(--ws-docs-surface-padding, 14px 16px);
349
+ text-decoration: none;
350
+ color: var(--ws-fg);
351
+ background: #ffffff;
352
+ }
353
+
354
+ .docs-card:hover {
355
+ text-decoration: none;
356
+ border-color: rgba(37, 99, 235, 0.4);
357
+ }
358
+
359
+ .docs-card__title {
360
+ font-weight: 800;
361
+ margin-bottom: 6px;
362
+ }
363
+
364
+ .docs-card__body {
365
+ color: var(--ws-muted);
366
+ }
367
+
368
+ /* Markdown docs content */
369
+ .docs-article h1 {
370
+ margin-bottom: 1.25rem;
371
+ font-size: 2.25rem;
372
+ letter-spacing: -0.02em;
373
+ }
374
+
375
+ .docs-article p {
376
+ margin: 0 0 1.4rem 0;
377
+ }
378
+
379
+ .docs-article h2 {
380
+ margin-top: 3.25rem;
381
+ margin-bottom: 0.75rem;
382
+ font-size: 1.5rem;
383
+ }
384
+
385
+ .docs-article h3 {
386
+ margin-top: 2.25rem;
387
+ margin-bottom: 0.6rem;
388
+ font-size: 1.2rem;
389
+ }
390
+
391
+ .docs-article ul,
392
+ .docs-article ol {
393
+ margin: 0 0 1.25rem 0;
394
+ padding-left: 22px;
395
+ }
396
+
397
+ .docs-article li {
398
+ margin: 0.6rem 0;
399
+ }
400
+
401
+ .docs-article pre {
402
+ margin: 1rem 0 1.5rem;
403
+ }
404
+
405
+ .docs-article pre code.hljs {
406
+ display: block;
407
+ padding: var(--ws-docs-surface-padding, 14px 16px);
408
+ border-radius: var(--ws-radius-3);
409
+ border: 1px solid var(--ws-border);
410
+ background: rgba(17, 24, 39, 0.04);
411
+ overflow-x: auto;
412
+ font-size: 0.95rem;
413
+ line-height: 1.55;
414
+ }
415
+
416
+ .docs-article :not(pre) > code {
417
+ padding: 0.15em 0.4em;
418
+ border-radius: var(--ws-radius-1);
419
+ border: 1px solid rgba(229, 231, 235, 0.18);
420
+ background: rgba(17, 24, 39, 0.04);
421
+ overflow-wrap: anywhere;
422
+ word-break: break-word;
423
+ }
424
+
425
+ .hljs-comment,
426
+ .hljs-quote {
427
+ color: var(--ws-muted);
428
+ font-style: italic;
429
+ }
430
+
431
+ .hljs-keyword,
432
+ .hljs-selector-tag,
433
+ .hljs-literal,
434
+ .hljs-built_in {
435
+ color: #2563eb;
436
+ }
437
+
438
+ .hljs-string,
439
+ .hljs-attr,
440
+ .hljs-symbol {
441
+ color: #059669;
442
+ }
443
+
444
+ .hljs-number,
445
+ .hljs-meta {
446
+ color: #b45309;
447
+ }
448
+
449
+ .hljs-title,
450
+ .hljs-section,
451
+ .hljs-function {
452
+ color: #7c3aed;
453
+ }
454
+
455
+ .hljs-type {
456
+ color: #0f766e;
457
+ }
458
+
459
+ .docs-callout {
460
+ margin: 1.2rem 0 1.6rem;
461
+ padding: var(--ws-docs-surface-padding, 14px 16px);
462
+ border-radius: var(--ws-radius-3);
463
+ border: 1px solid var(--ws-border);
464
+ border-left-width: 4px;
465
+ background: rgba(17, 24, 39, 0.03);
466
+ }
467
+
468
+ .docs-callout__title {
469
+ font-weight: 800;
470
+ margin-bottom: var(--ws-docs-ui-gap-lg, 8px);
471
+ }
472
+
473
+ .docs-callout__body > :last-child {
474
+ margin-bottom: 0;
475
+ }
476
+
477
+ .docs-callout__body p {
478
+ margin-bottom: 0.9rem;
479
+ }
480
+
481
+ .docs-callout__body ul,
482
+ .docs-callout__body ol {
483
+ margin-bottom: 0.9rem;
484
+ }
485
+
486
+ .docs-callout--note {
487
+ border-left-color: rgba(37, 99, 235, 0.7);
488
+ }
489
+
490
+ .docs-callout--tip {
491
+ border-left-color: rgba(5, 150, 105, 0.7);
492
+ }
493
+
494
+ .docs-callout--info {
495
+ border-left-color: rgba(14, 116, 144, 0.7);
496
+ }
497
+
498
+ .docs-callout--warning {
499
+ border-left-color: rgba(180, 83, 9, 0.75);
500
+ }
501
+
502
+ .docs-callout--danger {
503
+ border-left-color: rgba(220, 38, 38, 0.7);
504
+ }
505
+ }
@@ -0,0 +1,52 @@
1
+ <head>
2
+ <title>Docs</title>
3
+ <link rel="stylesheet" href="index.css" />
4
+ </head>
5
+ <body>
6
+ <main>
7
+ <section class="docs-layout" data-scope="docs">
8
+ <div class="ws-container docs-layout__inner">
9
+ <aside class="docs-sidebar" aria-label="Docs navigation">
10
+ <div class="docs-sidebar__header">
11
+ <a class="docs-sidebar__title" href="/docs/">Docs</a>
12
+ </div>
13
+ <nav class="docs-nav" aria-label="Docs pages">
14
+ <ul id="docs-links" class="docs-links">
15
+ <li><a href="/docs/content-pipeline/">Content pipeline</a></li>
16
+ <li><a href="/docs/css-playbook/">CSS Playbook</a></li>
17
+ </ul>
18
+ </nav>
19
+ </aside>
20
+
21
+ <div class="docs-main">
22
+ <header class="docs-hero">
23
+ <h1>Documentation</h1>
24
+ <p class="docs-lead">
25
+ Drop Markdown files into <code>src/frontend/content/</code> and Webstir turns them into real pages under
26
+ <code>/docs/</code>.
27
+ </p>
28
+ </header>
29
+
30
+ <section class="docs-cards">
31
+ <a class="docs-card" href="/docs/content-pipeline/">
32
+ <div class="docs-card__title">Start here</div>
33
+ <div class="docs-card__body">How the content pipeline works.</div>
34
+ </a>
35
+ <a class="docs-card" href="/docs/css-playbook/">
36
+ <div class="docs-card__title">CSS Playbook</div>
37
+ <div class="docs-card__body">Minimal tokens, layout, and components.</div>
38
+ </a>
39
+ </section>
40
+ </div>
41
+
42
+ <aside class="docs-toc" aria-label="On this page" hidden>
43
+ <div class="docs-toc__title">On this page</div>
44
+ <nav class="docs-toc__nav">
45
+ <ul id="docs-toc" class="docs-toc__links"></ul>
46
+ </nav>
47
+ </aside>
48
+ </div>
49
+ </section>
50
+ </main>
51
+ <script type="module" src="index.js"></script>
52
+ </body>