@opentf/web-docs 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.
@@ -0,0 +1,639 @@
1
+ /* @opentf/web-docs — default theme.
2
+ *
3
+ * Plain CSS (no Tailwind directives) so it can be `@import`ed by an app's stylesheet
4
+ * and inlined at build time, independent of the consumer's utility-class scanner.
5
+ * Components use semantic `otfw-*` class names; everything below is driven by the
6
+ * design-token CSS variables, which flip on `[data-theme='dark']`.
7
+ */
8
+
9
+ :root {
10
+ --otfw-bg: #ffffff;
11
+ --otfw-bg-surface: #f8fafc;
12
+ --otfw-bg-elevated: #ffffff;
13
+ --otfw-text: #0f172a;
14
+ --otfw-text-muted: #64748b;
15
+ --otfw-border: #e2e8f0;
16
+ --otfw-accent: #ff851b;
17
+ --otfw-accent-contrast: #ffffff;
18
+ --otfw-accent-soft: rgba(255, 133, 27, 0.12);
19
+ --otfw-code-bg: #f1f5f9;
20
+ --otfw-code-text: #be4f0c;
21
+ --otfw-selection: rgba(255, 133, 27, 0.22);
22
+
23
+ --otfw-sidebar-width: 17rem;
24
+ --otfw-toc-width: 15rem;
25
+ --otfw-content-max: 48rem;
26
+ --otfw-navbar-height: 3.75rem;
27
+ --otfw-radius: 0.625rem;
28
+ --otfw-font: "Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
29
+ --otfw-mono: ui-monospace, "SFMono-Regular", "JetBrains Mono", Menlo, monospace;
30
+ }
31
+
32
+ [data-theme="dark"] {
33
+ --otfw-bg: #020617;
34
+ --otfw-bg-surface: #0b1220;
35
+ --otfw-bg-elevated: #0f172a;
36
+ --otfw-text: #e2e8f0;
37
+ --otfw-text-muted: #94a3b8;
38
+ --otfw-border: #1e293b;
39
+ --otfw-accent: #ff943d;
40
+ --otfw-accent-contrast: #0b1220;
41
+ --otfw-accent-soft: rgba(255, 148, 61, 0.16);
42
+ --otfw-code-bg: #0f172a;
43
+ --otfw-code-text: #ffb784;
44
+ --otfw-selection: rgba(255, 148, 61, 0.3);
45
+ }
46
+
47
+ html {
48
+ scroll-behavior: smooth;
49
+ scroll-padding-top: calc(var(--otfw-navbar-height) + 1rem);
50
+ }
51
+
52
+ body {
53
+ margin: 0;
54
+ font-family: var(--otfw-font);
55
+ background: var(--otfw-bg);
56
+ color: var(--otfw-text);
57
+ -webkit-font-smoothing: antialiased;
58
+ transition: background-color 0.2s ease, color 0.2s ease;
59
+ }
60
+
61
+ ::selection {
62
+ background: var(--otfw-selection);
63
+ }
64
+
65
+ /* Custom elements are inline by default. Structural hosts become block-level grid
66
+ * items; pure wrapper hosts (a link, a list node) become layout-transparent
67
+ * (`display: contents`) so their inner semantic element participates directly in the
68
+ * surrounding flex/grid/list. */
69
+ web-docs-layout,
70
+ web-navbar,
71
+ web-sidebar,
72
+ web-toc,
73
+ web-footer,
74
+ web-breadcrumbs,
75
+ web-pagination,
76
+ web-callout,
77
+ web-tabs,
78
+ web-code-group,
79
+ web-table {
80
+ display: block;
81
+ }
82
+ web-link,
83
+ web-sidebar-node {
84
+ display: contents;
85
+ }
86
+
87
+ /* ── Shell ─────────────────────────────────────────────────────────────────── */
88
+ .otfw-shell {
89
+ display: flex;
90
+ flex-direction: column;
91
+ min-height: 100vh;
92
+ }
93
+ .otfw-shell-body {
94
+ flex: 1;
95
+ }
96
+
97
+ /* ── Navbar ────────────────────────────────────────────────────────────────── */
98
+ .otfw-navbar {
99
+ position: sticky;
100
+ top: 0;
101
+ z-index: 50;
102
+ height: var(--otfw-navbar-height);
103
+ background: color-mix(in srgb, var(--otfw-bg) 85%, transparent);
104
+ backdrop-filter: blur(8px);
105
+ border-bottom: 1px solid var(--otfw-border);
106
+ }
107
+ .otfw-navbar-inner {
108
+ height: 100%;
109
+ max-width: 90rem;
110
+ margin: 0 auto;
111
+ padding: 0 1.5rem;
112
+ display: flex;
113
+ align-items: center;
114
+ gap: 1.5rem;
115
+ }
116
+ .otfw-navbar-brand {
117
+ display: flex;
118
+ align-items: center;
119
+ gap: 0.5rem;
120
+ font-weight: 700;
121
+ font-size: 1.05rem;
122
+ color: var(--otfw-text);
123
+ text-decoration: none;
124
+ }
125
+ .otfw-navbar-logo {
126
+ width: 1.75rem;
127
+ height: 1.75rem;
128
+ }
129
+ .otfw-navbar-nav {
130
+ display: flex;
131
+ gap: 1.25rem;
132
+ margin-right: auto;
133
+ font-size: 0.9rem;
134
+ }
135
+ .otfw-navbar-link {
136
+ color: var(--otfw-text-muted);
137
+ text-decoration: none;
138
+ font-weight: 500;
139
+ transition: color 0.15s;
140
+ }
141
+ .otfw-navbar-link:hover {
142
+ color: var(--otfw-text);
143
+ }
144
+ .otfw-navbar-actions {
145
+ display: flex;
146
+ align-items: center;
147
+ gap: 0.5rem;
148
+ }
149
+ .otfw-navbar-icon {
150
+ display: inline-flex;
151
+ padding: 0.4rem;
152
+ border-radius: 0.5rem;
153
+ color: var(--otfw-text-muted);
154
+ }
155
+ .otfw-navbar-icon:hover {
156
+ color: var(--otfw-text);
157
+ background: var(--otfw-bg-surface);
158
+ }
159
+
160
+ .otfw-theme-toggle,
161
+ .otfw-search-trigger {
162
+ display: inline-flex;
163
+ align-items: center;
164
+ gap: 0.4rem;
165
+ border: 1px solid var(--otfw-border);
166
+ background: var(--otfw-bg-surface);
167
+ color: var(--otfw-text-muted);
168
+ border-radius: 0.5rem;
169
+ cursor: pointer;
170
+ font-family: inherit;
171
+ }
172
+ .otfw-theme-toggle {
173
+ padding: 0.4rem;
174
+ }
175
+ .otfw-theme-toggle:hover,
176
+ .otfw-search-trigger:hover {
177
+ color: var(--otfw-accent);
178
+ border-color: var(--otfw-accent);
179
+ }
180
+ .otfw-search-trigger {
181
+ padding: 0.4rem 0.65rem;
182
+ font-size: 0.82rem;
183
+ }
184
+ .otfw-search-kbd {
185
+ border: 1px solid var(--otfw-border);
186
+ border-radius: 0.3rem;
187
+ padding: 0 0.3rem;
188
+ font-size: 0.7rem;
189
+ font-family: var(--otfw-mono);
190
+ }
191
+ .otfw-search-label {
192
+ display: none;
193
+ }
194
+ @media (min-width: 768px) {
195
+ .otfw-search-label {
196
+ display: inline;
197
+ }
198
+ }
199
+
200
+ /* ── Docs grid ─────────────────────────────────────────────────────────────── */
201
+ .otfw-docs {
202
+ max-width: 90rem;
203
+ margin: 0 auto;
204
+ padding: 0 1.5rem;
205
+ display: grid;
206
+ grid-template-columns: 1fr;
207
+ gap: 2.5rem;
208
+ }
209
+ @media (min-width: 768px) {
210
+ .otfw-docs {
211
+ grid-template-columns: var(--otfw-sidebar-width) minmax(0, 1fr);
212
+ }
213
+ }
214
+ @media (min-width: 1280px) {
215
+ .otfw-docs {
216
+ grid-template-columns: var(--otfw-sidebar-width) minmax(0, 1fr) var(--otfw-toc-width);
217
+ }
218
+ }
219
+
220
+ /* ── Sidebar ───────────────────────────────────────────────────────────────── */
221
+ .otfw-sidebar {
222
+ display: none;
223
+ }
224
+ @media (min-width: 768px) {
225
+ .otfw-sidebar {
226
+ display: block;
227
+ position: sticky;
228
+ top: var(--otfw-navbar-height);
229
+ align-self: start;
230
+ max-height: calc(100vh - var(--otfw-navbar-height));
231
+ overflow-y: auto;
232
+ padding: 2rem 0.5rem 2rem 0;
233
+ }
234
+ }
235
+ .otfw-sidebar-list,
236
+ .otfw-sidebar-sublist {
237
+ list-style: none;
238
+ margin: 0;
239
+ padding: 0;
240
+ }
241
+ .otfw-sidebar-sublist {
242
+ margin: 0.25rem 0 0.75rem 0.25rem;
243
+ padding-left: 0.75rem;
244
+ border-left: 1px solid var(--otfw-border);
245
+ }
246
+ .otfw-sidebar-node {
247
+ margin: 0.1rem 0;
248
+ }
249
+ .otfw-sidebar-group-title {
250
+ display: block;
251
+ margin: 1.1rem 0 0.4rem;
252
+ font-size: 0.72rem;
253
+ font-weight: 700;
254
+ text-transform: uppercase;
255
+ letter-spacing: 0.05em;
256
+ color: var(--otfw-text-muted);
257
+ }
258
+ .otfw-sidebar-link {
259
+ display: block;
260
+ padding: 0.3rem 0.6rem;
261
+ border-radius: 0.45rem;
262
+ font-size: 0.875rem;
263
+ color: var(--otfw-text-muted);
264
+ text-decoration: none;
265
+ transition: color 0.12s, background 0.12s;
266
+ }
267
+ .otfw-sidebar-link:hover {
268
+ color: var(--otfw-text);
269
+ background: var(--otfw-bg-surface);
270
+ }
271
+ .otfw-sidebar-link.otfw-active {
272
+ color: var(--otfw-accent);
273
+ background: var(--otfw-accent-soft);
274
+ font-weight: 600;
275
+ }
276
+
277
+ /* ── Content ───────────────────────────────────────────────────────────────── */
278
+ .otfw-content {
279
+ min-width: 0;
280
+ padding: 2.25rem 0 4rem;
281
+ }
282
+ .otfw-prose {
283
+ max-width: var(--otfw-content-max);
284
+ }
285
+ .otfw-prose h1 {
286
+ font-size: 2.1rem;
287
+ font-weight: 800;
288
+ line-height: 1.15;
289
+ margin: 0 0 1rem;
290
+ letter-spacing: -0.02em;
291
+ }
292
+ .otfw-prose h2 {
293
+ font-size: 1.5rem;
294
+ font-weight: 700;
295
+ margin: 2.5rem 0 1rem;
296
+ padding-bottom: 0.4rem;
297
+ border-bottom: 1px solid var(--otfw-border);
298
+ letter-spacing: -0.01em;
299
+ }
300
+ .otfw-prose h3 {
301
+ font-size: 1.2rem;
302
+ font-weight: 700;
303
+ margin: 2rem 0 0.75rem;
304
+ }
305
+ .otfw-prose h2,
306
+ .otfw-prose h3 {
307
+ scroll-margin-top: calc(var(--otfw-navbar-height) + 1rem);
308
+ }
309
+ .otfw-prose p,
310
+ .otfw-prose ul,
311
+ .otfw-prose ol {
312
+ line-height: 1.75;
313
+ margin: 0 0 1.1rem;
314
+ color: var(--otfw-text);
315
+ }
316
+ .otfw-prose ul,
317
+ .otfw-prose ol {
318
+ padding-left: 1.4rem;
319
+ }
320
+ .otfw-prose li {
321
+ margin: 0.35rem 0;
322
+ }
323
+ .otfw-prose a {
324
+ color: var(--otfw-accent);
325
+ text-decoration: none;
326
+ font-weight: 500;
327
+ }
328
+ .otfw-prose a:hover {
329
+ text-decoration: underline;
330
+ }
331
+ .otfw-prose strong {
332
+ font-weight: 700;
333
+ }
334
+ .otfw-prose code {
335
+ font-family: var(--otfw-mono);
336
+ font-size: 0.86em;
337
+ background: var(--otfw-code-bg);
338
+ color: var(--otfw-code-text);
339
+ padding: 0.15em 0.4em;
340
+ border-radius: 0.35rem;
341
+ }
342
+ .otfw-prose pre {
343
+ margin: 0 0 1.4rem;
344
+ padding: 1rem 1.1rem;
345
+ border-radius: var(--otfw-radius);
346
+ border: 1px solid var(--otfw-border);
347
+ overflow-x: auto;
348
+ font-family: var(--otfw-mono);
349
+ font-size: 0.85rem;
350
+ line-height: 1.6;
351
+ }
352
+ /* Build-time highlighted code (syntect) sets its own inline background. */
353
+ .otfw-prose pre code {
354
+ background: none;
355
+ color: inherit;
356
+ padding: 0;
357
+ font-size: inherit;
358
+ }
359
+ .otfw-prose blockquote {
360
+ margin: 0 0 1.2rem;
361
+ padding: 0.25rem 1.1rem;
362
+ border-left: 3px solid var(--otfw-accent);
363
+ color: var(--otfw-text-muted);
364
+ }
365
+ .otfw-prose hr {
366
+ border: none;
367
+ border-top: 1px solid var(--otfw-border);
368
+ margin: 2rem 0;
369
+ }
370
+ .otfw-prose img {
371
+ max-width: 100%;
372
+ border-radius: var(--otfw-radius);
373
+ }
374
+ .otfw-prose table {
375
+ width: 100%;
376
+ border-collapse: collapse;
377
+ margin: 0 0 1.4rem;
378
+ font-size: 0.9rem;
379
+ }
380
+ .otfw-prose th,
381
+ .otfw-prose td {
382
+ text-align: left;
383
+ padding: 0.55rem 0.8rem;
384
+ border: 1px solid var(--otfw-border);
385
+ }
386
+ .otfw-prose th {
387
+ background: var(--otfw-bg-surface);
388
+ font-weight: 600;
389
+ }
390
+
391
+ /* ── TOC ───────────────────────────────────────────────────────────────────── */
392
+ .otfw-toc {
393
+ display: none;
394
+ }
395
+ @media (min-width: 1280px) {
396
+ .otfw-toc {
397
+ display: block;
398
+ position: sticky;
399
+ top: var(--otfw-navbar-height);
400
+ align-self: start;
401
+ max-height: calc(100vh - var(--otfw-navbar-height));
402
+ overflow-y: auto;
403
+ padding: 2.25rem 0 2rem;
404
+ }
405
+ }
406
+ .otfw-toc-heading {
407
+ font-size: 0.72rem;
408
+ font-weight: 700;
409
+ text-transform: uppercase;
410
+ letter-spacing: 0.05em;
411
+ color: var(--otfw-text-muted);
412
+ margin-bottom: 0.6rem;
413
+ }
414
+ .otfw-toc-list {
415
+ list-style: none;
416
+ margin: 0;
417
+ padding: 0;
418
+ border-left: 1px solid var(--otfw-border);
419
+ }
420
+ .otfw-toc-item {
421
+ margin: 0;
422
+ }
423
+ .otfw-toc-sub .otfw-toc-link {
424
+ padding-left: 1.5rem;
425
+ }
426
+ .otfw-toc-link {
427
+ display: block;
428
+ padding: 0.25rem 0 0.25rem 0.85rem;
429
+ margin-left: -1px;
430
+ border-left: 2px solid transparent;
431
+ font-size: 0.82rem;
432
+ color: var(--otfw-text-muted);
433
+ text-decoration: none;
434
+ }
435
+ .otfw-toc-link:hover {
436
+ color: var(--otfw-text);
437
+ }
438
+ .otfw-toc-link.otfw-active {
439
+ color: var(--otfw-accent);
440
+ border-left-color: var(--otfw-accent);
441
+ font-weight: 600;
442
+ }
443
+
444
+ /* ── Breadcrumbs ───────────────────────────────────────────────────────────── */
445
+ .otfw-breadcrumbs {
446
+ display: flex;
447
+ flex-wrap: wrap;
448
+ align-items: center;
449
+ gap: 0.35rem;
450
+ margin-bottom: 1.25rem;
451
+ font-size: 0.8rem;
452
+ color: var(--otfw-text-muted);
453
+ }
454
+ .otfw-crumb {
455
+ display: inline-flex;
456
+ align-items: center;
457
+ gap: 0.35rem;
458
+ }
459
+ .otfw-crumb-sep {
460
+ opacity: 0.5;
461
+ }
462
+ .otfw-crumb-link {
463
+ color: var(--otfw-text-muted);
464
+ text-decoration: none;
465
+ }
466
+ .otfw-crumb-link:hover {
467
+ color: var(--otfw-accent);
468
+ }
469
+
470
+ /* ── Pagination ────────────────────────────────────────────────────────────── */
471
+ .otfw-pagination {
472
+ display: flex;
473
+ justify-content: space-between;
474
+ gap: 1rem;
475
+ margin-top: 3rem;
476
+ padding-top: 1.5rem;
477
+ border-top: 1px solid var(--otfw-border);
478
+ }
479
+ .otfw-page-link {
480
+ display: flex;
481
+ flex-direction: column;
482
+ gap: 0.2rem;
483
+ padding: 0.85rem 1.1rem;
484
+ border: 1px solid var(--otfw-border);
485
+ border-radius: var(--otfw-radius);
486
+ text-decoration: none;
487
+ min-width: 0;
488
+ transition: border-color 0.15s;
489
+ }
490
+ .otfw-page-link:hover {
491
+ border-color: var(--otfw-accent);
492
+ }
493
+ .otfw-page-next {
494
+ text-align: right;
495
+ margin-left: auto;
496
+ }
497
+ .otfw-page-dir {
498
+ font-size: 0.75rem;
499
+ color: var(--otfw-text-muted);
500
+ }
501
+ .otfw-page-title {
502
+ font-weight: 600;
503
+ color: var(--otfw-text);
504
+ }
505
+ .otfw-page-spacer {
506
+ display: block;
507
+ }
508
+
509
+ /* ── Footer ────────────────────────────────────────────────────────────────── */
510
+ .otfw-footer {
511
+ border-top: 1px solid var(--otfw-border);
512
+ background: var(--otfw-bg-surface);
513
+ margin-top: 2rem;
514
+ }
515
+ .otfw-footer-inner {
516
+ max-width: 90rem;
517
+ margin: 0 auto;
518
+ padding: 2rem 1.5rem;
519
+ display: flex;
520
+ flex-wrap: wrap;
521
+ justify-content: space-between;
522
+ gap: 1rem;
523
+ font-size: 0.85rem;
524
+ color: var(--otfw-text-muted);
525
+ }
526
+ .otfw-footer-links {
527
+ display: flex;
528
+ gap: 1.25rem;
529
+ }
530
+ .otfw-footer-link {
531
+ color: var(--otfw-text-muted);
532
+ text-decoration: none;
533
+ }
534
+ .otfw-footer-link:hover {
535
+ color: var(--otfw-text);
536
+ }
537
+
538
+ /* ── Callout ───────────────────────────────────────────────────────────────── */
539
+ .otfw-callout {
540
+ margin: 1.5rem 0;
541
+ padding: 1rem 1.1rem;
542
+ border: 1px solid var(--otfw-border);
543
+ border-left-width: 3px;
544
+ border-radius: var(--otfw-radius);
545
+ background: var(--otfw-bg-surface);
546
+ }
547
+ .otfw-callout-title {
548
+ display: flex;
549
+ align-items: center;
550
+ gap: 0.5rem;
551
+ font-weight: 700;
552
+ margin-bottom: 0.4rem;
553
+ }
554
+ .otfw-callout-body > :last-child {
555
+ margin-bottom: 0;
556
+ }
557
+ .otfw-callout-note {
558
+ border-left-color: var(--otfw-text-muted);
559
+ }
560
+ .otfw-callout-tip {
561
+ border-left-color: #10b981;
562
+ }
563
+ .otfw-callout-info {
564
+ border-left-color: #3b82f6;
565
+ }
566
+ .otfw-callout-warning {
567
+ border-left-color: #f59e0b;
568
+ }
569
+ .otfw-callout-danger {
570
+ border-left-color: #ef4444;
571
+ }
572
+
573
+ /* ── Tabs / CodeGroup ──────────────────────────────────────────────────────── */
574
+ .otfw-tabs,
575
+ .otfw-codegroup {
576
+ margin: 1.5rem 0;
577
+ border: 1px solid var(--otfw-border);
578
+ border-radius: var(--otfw-radius);
579
+ overflow: hidden;
580
+ }
581
+ .otfw-tabs-list,
582
+ .otfw-codegroup-tabs {
583
+ display: flex;
584
+ gap: 0.25rem;
585
+ padding: 0.4rem;
586
+ background: var(--otfw-bg-surface);
587
+ border-bottom: 1px solid var(--otfw-border);
588
+ }
589
+ .otfw-tab,
590
+ .otfw-codegroup-tab {
591
+ padding: 0.35rem 0.85rem;
592
+ border: none;
593
+ border-radius: 0.4rem;
594
+ background: transparent;
595
+ color: var(--otfw-text-muted);
596
+ font-family: inherit;
597
+ font-size: 0.85rem;
598
+ font-weight: 600;
599
+ cursor: pointer;
600
+ }
601
+ .otfw-tab.otfw-active,
602
+ .otfw-codegroup-tab.otfw-active {
603
+ background: var(--otfw-bg);
604
+ color: var(--otfw-accent);
605
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
606
+ }
607
+ .otfw-tabs-panels,
608
+ .otfw-codegroup-panel {
609
+ padding: 1rem 1.1rem;
610
+ }
611
+ .otfw-codegroup-panel pre,
612
+ .otfw-tabs-panels pre {
613
+ margin: 0;
614
+ border: none;
615
+ }
616
+ .otfw-hidden {
617
+ display: none;
618
+ }
619
+
620
+ /* ── Table wrapper ─────────────────────────────────────────────────────────── */
621
+ .otfw-table-wrap {
622
+ overflow-x: auto;
623
+ margin: 0 0 1.4rem;
624
+ }
625
+ .otfw-table {
626
+ width: 100%;
627
+ border-collapse: collapse;
628
+ font-size: 0.9rem;
629
+ }
630
+ .otfw-table th,
631
+ .otfw-table td {
632
+ text-align: left;
633
+ padding: 0.55rem 0.8rem;
634
+ border: 1px solid var(--otfw-border);
635
+ }
636
+ .otfw-table th {
637
+ background: var(--otfw-bg-surface);
638
+ font-weight: 600;
639
+ }