kward 0.68.0 → 0.69.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/pages.yml +48 -0
  3. data/.yardopts +1 -0
  4. data/CHANGELOG.md +34 -0
  5. data/Gemfile.lock +8 -2
  6. data/README.md +32 -25
  7. data/Rakefile +14 -1
  8. data/doc/authentication.md +74 -56
  9. data/doc/code-search.md +55 -28
  10. data/doc/configuration.md +18 -0
  11. data/doc/extensibility.md +89 -128
  12. data/doc/getting-started.md +52 -54
  13. data/doc/memory.md +51 -118
  14. data/doc/personas.md +417 -0
  15. data/doc/plugins.md +55 -97
  16. data/doc/releasing.md +3 -1
  17. data/doc/rpc.md +1 -1
  18. data/doc/usage.md +125 -144
  19. data/doc/web-search.md +80 -14
  20. data/exe/kward +2 -0
  21. data/lib/kward/agent.rb +1 -1
  22. data/lib/kward/cli/commands.rb +10 -3
  23. data/lib/kward/cli/compaction.rb +3 -3
  24. data/lib/kward/cli/interactive_turn.rb +3 -1
  25. data/lib/kward/cli/memory_commands.rb +16 -16
  26. data/lib/kward/cli/plugins.rb +3 -3
  27. data/lib/kward/cli/prompt_interface.rb +15 -13
  28. data/lib/kward/cli/rendering.rb +35 -46
  29. data/lib/kward/cli/runtime_helpers.rb +13 -2
  30. data/lib/kward/cli/sessions.rb +21 -21
  31. data/lib/kward/cli/settings.rb +49 -43
  32. data/lib/kward/cli/slash_commands.rb +6 -4
  33. data/lib/kward/cli/stats.rb +2 -2
  34. data/lib/kward/cli/sysprompt.rb +57 -0
  35. data/lib/kward/cli/tool_summaries.rb +5 -1
  36. data/lib/kward/cli.rb +14 -2
  37. data/lib/kward/cli_transcript_formatter.rb +36 -5
  38. data/lib/kward/compactor.rb +2 -2
  39. data/lib/kward/config_files.rb +45 -10
  40. data/lib/kward/conversation.rb +41 -9
  41. data/lib/kward/memory/manager.rb +131 -14
  42. data/lib/kward/message_access.rb +6 -0
  43. data/lib/kward/model/context_usage.rb +11 -10
  44. data/lib/kward/model/model_info.rb +18 -1
  45. data/lib/kward/model/payloads.rb +89 -10
  46. data/lib/kward/model/stream_parser.rb +258 -25
  47. data/lib/kward/prompt_interface/question_prompt.rb +1 -1
  48. data/lib/kward/prompt_interface/transcript_renderer.rb +20 -11
  49. data/lib/kward/prompts.rb +61 -7
  50. data/lib/kward/rpc/server.rb +7 -2
  51. data/lib/kward/rpc/session_manager.rb +18 -2
  52. data/lib/kward/rpc/session_metrics.rb +2 -2
  53. data/lib/kward/rpc/transcript_normalizer.rb +47 -0
  54. data/lib/kward/session_store.rb +40 -1
  55. data/lib/kward/starter_pack_installer.rb +2 -2
  56. data/lib/kward/tools/fetch_content.rb +41 -0
  57. data/lib/kward/tools/fetch_raw.rb +40 -0
  58. data/lib/kward/tools/registry.rb +9 -2
  59. data/lib/kward/tools/search/web.rb +3 -3
  60. data/lib/kward/tools/search/web_fetch.rb +202 -0
  61. data/lib/kward/tools/tool_call.rb +2 -0
  62. data/lib/kward/version.rb +1 -1
  63. data/templates/default/fulldoc/html/css/kward.css +1501 -0
  64. data/templates/default/fulldoc/html/images/kward_logo.png +0 -0
  65. data/templates/default/fulldoc/html/js/kward.js +296 -0
  66. data/templates/default/fulldoc/html/setup.rb +8 -0
  67. data/templates/default/layout/html/breadcrumb.erb +11 -0
  68. data/templates/default/layout/html/layout.erb +141 -0
  69. data/templates/default/layout/html/setup.rb +139 -0
  70. metadata +14 -1
@@ -0,0 +1,1501 @@
1
+ {{{__super__}}}
2
+
3
+ :root {
4
+ --kward-bg: #070b07;
5
+ --kward-panel: rgba(14, 20, 12, 0.84);
6
+ --kward-panel-strong: rgba(17, 25, 14, 0.94);
7
+ --kward-ink: #efe8d0;
8
+ --kward-muted: #afa88f;
9
+ --kward-border: rgba(149, 169, 52, 0.26);
10
+ --kward-accent: #9caf35;
11
+ --kward-accent-bright: #d2df62;
12
+ --kward-code: #030604;
13
+ }
14
+
15
+ html {
16
+ background: var(--kward-bg);
17
+ }
18
+
19
+ body.kward-docs {
20
+ background:
21
+ radial-gradient(circle at 72% 18%, rgba(88, 112, 30, 0.24), transparent 34rem),
22
+ radial-gradient(circle at 10% 8%, rgba(72, 89, 24, 0.18), transparent 26rem),
23
+ linear-gradient(180deg, #080d08 0%, #060806 100%);
24
+ color: var(--kward-ink);
25
+ display: block;
26
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
27
+ margin: 0;
28
+ min-height: 100%;
29
+ opacity: 1;
30
+ overflow: auto;
31
+ transition: opacity 120ms ease;
32
+ width: 100%;
33
+ }
34
+
35
+ html.kward-page-loading body.kward-docs {
36
+ cursor: progress;
37
+ opacity: 0.72;
38
+ }
39
+
40
+ body.kward-docs::before {
41
+ background-image:
42
+ linear-gradient(rgba(255, 255, 255, 0.025) 1px, transparent 1px),
43
+ linear-gradient(90deg, rgba(255, 255, 255, 0.02) 1px, transparent 1px);
44
+ background-size: 36px 36px;
45
+ content: "";
46
+ inset: 0;
47
+ pointer-events: none;
48
+ position: fixed;
49
+ z-index: -1;
50
+ }
51
+
52
+ .kward-topbar {
53
+ align-items: center;
54
+ background: rgba(5, 9, 5, 0.9);
55
+ border-bottom: 1px solid rgba(149, 169, 52, 0.22);
56
+ box-sizing: border-box;
57
+ display: grid;
58
+ gap: 24px;
59
+ grid-template-columns: 1fr auto 1fr;
60
+ height: 88px;
61
+ left: 0;
62
+ padding: 0 44px;
63
+ position: fixed;
64
+ right: 0;
65
+ top: 0;
66
+ z-index: 30;
67
+ }
68
+
69
+ .kward-brand {
70
+ align-items: center;
71
+ color: var(--kward-ink);
72
+ display: flex;
73
+ gap: 14px;
74
+ text-decoration: none;
75
+ text-transform: uppercase;
76
+ }
77
+
78
+ .kward-brand:hover {
79
+ background: transparent;
80
+ color: var(--kward-ink);
81
+ }
82
+
83
+ .kward-brand-logo {
84
+ display: block;
85
+ height: 48px;
86
+ image-rendering: auto;
87
+ object-fit: contain;
88
+ width: 48px;
89
+ }
90
+
91
+ .kward-brand strong {
92
+ color: var(--kward-ink);
93
+ display: block;
94
+ font-size: 29px;
95
+ font-weight: 800;
96
+ letter-spacing: 0.08em;
97
+ line-height: 1;
98
+ }
99
+
100
+ .kward-topnav {
101
+ align-items: stretch;
102
+ display: flex;
103
+ gap: 18px;
104
+ height: 100%;
105
+ justify-content: center;
106
+ }
107
+
108
+ .kward-sr-only {
109
+ clip: rect(0, 0, 0, 0);
110
+ border: 0;
111
+ height: 1px;
112
+ margin: -1px;
113
+ overflow: hidden;
114
+ padding: 0;
115
+ position: absolute;
116
+ white-space: nowrap;
117
+ width: 1px;
118
+ }
119
+
120
+ .kward-guide-search {
121
+ justify-self: end;
122
+ position: relative;
123
+ width: min(280px, 24vw);
124
+ }
125
+
126
+ .kward-guide-search input {
127
+ background: rgba(3, 6, 4, 0.72);
128
+ border: 1px solid rgba(156, 175, 53, 0.42);
129
+ border-radius: 999px;
130
+ box-sizing: border-box;
131
+ color: var(--kward-ink);
132
+ font: inherit;
133
+ outline: none;
134
+ padding: 10px 14px;
135
+ width: 100%;
136
+ }
137
+
138
+ .kward-guide-search input::placeholder {
139
+ color: var(--kward-muted);
140
+ }
141
+
142
+ .kward-guide-search input:focus {
143
+ border-color: var(--kward-accent-bright);
144
+ box-shadow: 0 0 0 3px rgba(156, 175, 53, 0.18);
145
+ }
146
+
147
+ .kward-guide-search-results {
148
+ background: rgba(5, 9, 5, 0.98);
149
+ border: 1px solid rgba(156, 175, 53, 0.32);
150
+ border-radius: 12px;
151
+ box-shadow: 0 24px 70px rgba(0, 0, 0, 0.48);
152
+ display: none;
153
+ margin-top: 10px;
154
+ max-height: min(460px, calc(100vh - 120px));
155
+ overflow: auto;
156
+ padding: 8px;
157
+ position: absolute;
158
+ right: 0;
159
+ top: 100%;
160
+ width: min(440px, calc(100vw - 32px));
161
+ z-index: 9200;
162
+ }
163
+
164
+ .kward-guide-search-results.open {
165
+ display: block;
166
+ }
167
+
168
+ .kward-guide-search-results a,
169
+ .kward-guide-search-empty {
170
+ border-radius: 8px;
171
+ color: var(--kward-ink);
172
+ display: block;
173
+ padding: 10px 12px;
174
+ text-decoration: none;
175
+ }
176
+
177
+ .kward-guide-search-results a:hover,
178
+ .kward-guide-search-results a:focus {
179
+ background: rgba(156, 175, 53, 0.13);
180
+ color: var(--kward-ink);
181
+ }
182
+
183
+ .kward-guide-search-results strong {
184
+ color: var(--kward-accent-bright);
185
+ display: block;
186
+ font-size: 14px;
187
+ margin-bottom: 4px;
188
+ }
189
+
190
+ .kward-guide-search-results span,
191
+ .kward-guide-search-empty {
192
+ color: var(--kward-muted);
193
+ font-size: 12px;
194
+ line-height: 1.45;
195
+ }
196
+
197
+ .kward-nav-toggle {
198
+ background: transparent;
199
+ border: 1px solid rgba(156, 175, 53, 0.52);
200
+ border-radius: 8px;
201
+ color: var(--kward-accent-bright);
202
+ cursor: pointer;
203
+ display: none;
204
+ font: inherit;
205
+ justify-self: end;
206
+ padding: 12px 16px;
207
+ text-decoration: none;
208
+ }
209
+
210
+ .kward-nav-toggle:hover {
211
+ background: rgba(156, 175, 53, 0.12);
212
+ color: var(--kward-accent-bright);
213
+ }
214
+
215
+ body.kward-docs .nav_wrap,
216
+ body.kward-docs #resizer {
217
+ display: none;
218
+ }
219
+
220
+ body.kward-docs #main {
221
+ margin: 0;
222
+ position: static;
223
+ }
224
+
225
+ body.kward-docs #header {
226
+ background: transparent;
227
+ border: 0;
228
+ margin: 0;
229
+ padding: 0 0 18px;
230
+ }
231
+
232
+ body.kward-docs #content {
233
+ background: var(--kward-panel-strong);
234
+ border: 1px solid var(--kward-border);
235
+ border-radius: 14px;
236
+ box-shadow: 0 26px 70px rgba(0, 0, 0, 0.28);
237
+ padding: 38px;
238
+ }
239
+
240
+ body.kward-docs #content h1 {
241
+ color: var(--kward-ink);
242
+ font-size: clamp(36px, 5vw, 62px);
243
+ letter-spacing: -0.04em;
244
+ line-height: 0.98;
245
+ margin-top: 0;
246
+ }
247
+
248
+ body.kward-docs #content h2,
249
+ body.kward-docs #content h3 {
250
+ color: var(--kward-accent-bright);
251
+ }
252
+
253
+ body.kward-docs #content p,
254
+ body.kward-docs #content li {
255
+ color: var(--kward-ink);
256
+ font-size: 15px;
257
+ line-height: 1.7;
258
+ }
259
+
260
+ body.kward-docs a {
261
+ color: var(--kward-accent-bright);
262
+ }
263
+
264
+ body.kward-docs pre {
265
+ background: var(--kward-code);
266
+ border: 1px solid rgba(149, 169, 52, 0.22);
267
+ border-radius: 10px;
268
+ color: var(--kward-ink);
269
+ overflow: auto;
270
+ padding: 18px;
271
+ }
272
+
273
+ body.kward-docs code {
274
+ border-radius: 6px;
275
+ }
276
+
277
+ body.kward-docs .copy-code-button {
278
+ background: transparent;
279
+ border: 1px solid rgba(156, 175, 53, 0.48);
280
+ border-radius: 7px;
281
+ color: var(--kward-accent-bright);
282
+ cursor: pointer;
283
+ float: right;
284
+ font-size: 11px;
285
+ margin: 10px 10px -34px 0;
286
+ padding: 5px 8px;
287
+ position: relative;
288
+ z-index: 1;
289
+ }
290
+
291
+ body.kward-docs #footer {
292
+ color: var(--kward-muted);
293
+ }
294
+
295
+ @media (max-width: 920px) {
296
+ .kward-topbar {
297
+ gap: 12px;
298
+ grid-template-columns: 1fr auto;
299
+ height: 76px;
300
+ padding: 0 16px;
301
+ }
302
+
303
+ .kward-brand-logo {
304
+ height: 40px;
305
+ width: 40px;
306
+ }
307
+
308
+ .kward-brand strong {
309
+ font-size: 23px;
310
+ }
311
+
312
+ .kward-topnav,
313
+ .kward-guide-search {
314
+ display: none;
315
+ }
316
+
317
+ .kward-nav-toggle {
318
+ display: inline-block;
319
+ }
320
+
321
+
322
+ body.kward-docs #content {
323
+ padding: 24px 18px;
324
+ }
325
+ }
326
+
327
+ .kward-home {
328
+ background: transparent;
329
+ box-sizing: border-box;
330
+ display: block;
331
+ margin: 0 auto;
332
+ max-width: 1180px;
333
+ padding: 132px 28px 32px;
334
+ position: static;
335
+ }
336
+
337
+ .kward-home section {
338
+ box-sizing: border-box;
339
+ }
340
+
341
+ .kward-hero {
342
+ align-items: center;
343
+ display: grid;
344
+ gap: 52px;
345
+ grid-template-columns: minmax(0, 1.05fr) minmax(320px, 0.95fr);
346
+ min-height: 520px;
347
+ }
348
+
349
+ .kward-eyebrow {
350
+ align-items: center;
351
+ border: 1px solid rgba(156, 175, 53, 0.4);
352
+ border-radius: 8px;
353
+ color: var(--kward-accent-bright);
354
+ display: inline-flex;
355
+ font-size: 13px;
356
+ letter-spacing: 0.04em;
357
+ margin: 0 0 28px;
358
+ padding: 12px 16px;
359
+ text-transform: uppercase;
360
+ }
361
+
362
+ .kward-hero h1 {
363
+ color: var(--kward-ink);
364
+ font-size: clamp(48px, 7vw, 76px);
365
+ letter-spacing: -0.06em;
366
+ line-height: 0.98;
367
+ margin: 0 0 26px;
368
+ }
369
+
370
+ .kward-hero h1 span {
371
+ color: var(--kward-accent-bright);
372
+ }
373
+
374
+ .kward-lede {
375
+ color: var(--kward-ink);
376
+ font-size: 19px;
377
+ line-height: 1.7;
378
+ margin: 0;
379
+ max-width: 620px;
380
+ }
381
+
382
+ .kward-actions {
383
+ display: flex;
384
+ flex-wrap: wrap;
385
+ gap: 18px;
386
+ margin-top: 30px;
387
+ }
388
+
389
+ .kward-primary-button,
390
+ .kward-secondary-button {
391
+ align-items: center;
392
+ border-radius: 8px;
393
+ display: inline-flex;
394
+ font-size: 16px;
395
+ min-height: 48px;
396
+ padding: 0 24px;
397
+ text-decoration: none;
398
+ }
399
+
400
+ .kward-primary-button {
401
+ background: linear-gradient(135deg, #7c8f25, #485814);
402
+ border: 1px solid rgba(210, 223, 98, 0.5);
403
+ color: #fbf6d7;
404
+ }
405
+
406
+ .kward-secondary-button {
407
+ background: rgba(255, 255, 255, 0.03);
408
+ border: 1px solid rgba(239, 232, 208, 0.52);
409
+ color: var(--kward-ink);
410
+ }
411
+
412
+ .kward-supports {
413
+ color: var(--kward-muted);
414
+ margin-top: 24px;
415
+ }
416
+
417
+ .kward-supports span {
418
+ color: var(--kward-accent-bright);
419
+ }
420
+
421
+ .kward-hero-art {
422
+ align-items: center;
423
+ display: flex;
424
+ justify-content: center;
425
+ min-height: 440px;
426
+ position: relative;
427
+ }
428
+
429
+ .kward-hero-art::before {
430
+ background: radial-gradient(circle, rgba(156, 175, 53, 0.16), transparent 66%);
431
+ border: 1px solid rgba(156, 175, 53, 0.12);
432
+ border-radius: 999px;
433
+ content: "";
434
+ height: min(32vw, 410px);
435
+ position: absolute;
436
+ width: min(32vw, 410px);
437
+ }
438
+
439
+ .kward-hero-art img {
440
+ display: block;
441
+ max-height: 430px;
442
+ max-width: min(100%, 430px);
443
+ object-fit: contain;
444
+ position: relative;
445
+ }
446
+
447
+ .kward-feature-strip,
448
+ .kward-install-card,
449
+ .kward-capabilities,
450
+ .kward-cta {
451
+ background: rgba(12, 18, 10, 0.78);
452
+ border: 1px solid var(--kward-border);
453
+ border-radius: 10px;
454
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.22);
455
+ margin-top: 20px;
456
+ }
457
+
458
+ .kward-feature-strip {
459
+ display: grid;
460
+ grid-template-columns: repeat(6, 1fr);
461
+ overflow: hidden;
462
+ }
463
+
464
+ .kward-feature-strip article {
465
+ border-right: 1px solid rgba(149, 169, 52, 0.14);
466
+ display: grid;
467
+ grid-template-rows: 38px 74px auto;
468
+ justify-items: center;
469
+ padding: 26px 22px;
470
+ text-align: center;
471
+ }
472
+
473
+ .kward-feature-strip article:last-child {
474
+ border-right: 0;
475
+ }
476
+
477
+ .kward-feature-strip strong {
478
+ align-self: start;
479
+ color: var(--kward-accent);
480
+ display: block;
481
+ font-size: 32px;
482
+ line-height: 1;
483
+ margin: 0;
484
+ }
485
+
486
+ .kward-feature-strip h2 {
487
+ align-items: center;
488
+ align-self: stretch;
489
+ border-bottom: 1px solid rgba(239, 232, 208, 0.72);
490
+ box-sizing: border-box;
491
+ color: var(--kward-ink);
492
+ display: flex;
493
+ font-size: 16px;
494
+ justify-content: center;
495
+ line-height: 1.35;
496
+ margin: 0;
497
+ min-height: 0;
498
+ padding: 0 0 10px;
499
+ width: 100%;
500
+ }
501
+
502
+ .kward-feature-strip p {
503
+ align-self: start;
504
+ color: var(--kward-muted);
505
+ font-size: 13px;
506
+ line-height: 1.5;
507
+ margin: 14px 0 0;
508
+ }
509
+
510
+ .kward-install-card {
511
+ display: grid;
512
+ gap: 28px;
513
+ grid-template-columns: 330px minmax(0, 1fr);
514
+ padding: 26px 28px;
515
+ }
516
+
517
+ .kward-install-copy {
518
+ border-right: 1px solid rgba(149, 169, 52, 0.18);
519
+ padding-right: 28px;
520
+ }
521
+
522
+ .kward-install-copy h2,
523
+ .kward-capabilities h2,
524
+ .kward-cta h2 {
525
+ color: var(--kward-accent-bright);
526
+ font-size: 28px;
527
+ margin: 0 0 18px;
528
+ }
529
+
530
+ .kward-install-copy p,
531
+ .kward-cta p {
532
+ color: var(--kward-muted);
533
+ line-height: 1.6;
534
+ }
535
+
536
+ .kward-install-copy pre {
537
+ margin: 16px 0 24px;
538
+ }
539
+
540
+ .kward-tabs {
541
+ align-items: center;
542
+ display: flex;
543
+ gap: 18px;
544
+ margin-bottom: 8px;
545
+ }
546
+
547
+ .kward-tabs span:first-child {
548
+ border: 1px solid rgba(156, 175, 53, 0.42);
549
+ border-radius: 999px;
550
+ color: var(--kward-accent-bright);
551
+ padding: 10px 16px;
552
+ }
553
+
554
+ .kward-tabs span:last-child {
555
+ color: var(--kward-muted);
556
+ }
557
+
558
+ .kward-terminal-card pre {
559
+ margin: 0;
560
+ }
561
+
562
+ .kward-capabilities {
563
+ padding: 28px;
564
+ }
565
+
566
+ .kward-capabilities ul {
567
+ display: grid;
568
+ gap: 18px 34px;
569
+ grid-template-columns: repeat(3, 1fr);
570
+ list-style: none;
571
+ margin: 0;
572
+ padding: 0;
573
+ }
574
+
575
+ .kward-capabilities li {
576
+ color: var(--kward-ink);
577
+ line-height: 1.55;
578
+ padding-left: 30px;
579
+ position: relative;
580
+ }
581
+
582
+ .kward-capabilities li::before {
583
+ border: 1px solid var(--kward-accent);
584
+ border-radius: 999px;
585
+ color: var(--kward-accent-bright);
586
+ content: "✓";
587
+ font-size: 12px;
588
+ height: 17px;
589
+ left: 0;
590
+ line-height: 17px;
591
+ position: absolute;
592
+ text-align: center;
593
+ top: 2px;
594
+ width: 17px;
595
+ }
596
+
597
+ .kward-cta {
598
+ align-items: center;
599
+ display: flex;
600
+ justify-content: space-between;
601
+ padding: 26px 28px;
602
+ }
603
+
604
+ .kward-cta > div {
605
+ align-items: center;
606
+ display: grid;
607
+ gap: 0 22px;
608
+ grid-template-columns: 64px 1fr;
609
+ }
610
+
611
+ .kward-cta strong {
612
+ align-items: center;
613
+ border: 1px solid rgba(156, 175, 53, 0.38);
614
+ border-radius: 10px;
615
+ color: var(--kward-accent-bright);
616
+ display: flex;
617
+ font-size: 30px;
618
+ grid-row: span 2;
619
+ height: 62px;
620
+ justify-content: center;
621
+ width: 62px;
622
+ }
623
+
624
+ .kward-cta h2 {
625
+ color: var(--kward-ink);
626
+ font-size: 22px;
627
+ margin: 0 0 8px;
628
+ }
629
+
630
+ .kward-cta p {
631
+ margin: 0;
632
+ }
633
+
634
+ body.kward-docs .kward-home #footer {
635
+ border-top: 1px solid rgba(149, 169, 52, 0.18);
636
+ margin-top: 20px;
637
+ padding-top: 24px;
638
+ }
639
+
640
+ body.kward-docs .kward-home #footer p {
641
+ color: var(--kward-muted);
642
+ }
643
+
644
+ @media (max-width: 980px) {
645
+ .kward-home {
646
+ padding: 104px 16px 32px;
647
+ }
648
+
649
+ .kward-hero,
650
+ .kward-install-card {
651
+ grid-template-columns: 1fr;
652
+ }
653
+
654
+ .kward-hero-art {
655
+ min-height: 280px;
656
+ }
657
+
658
+ .kward-hero-art img {
659
+ max-height: 280px;
660
+ }
661
+
662
+ .kward-feature-strip,
663
+ .kward-capabilities ul {
664
+ grid-template-columns: repeat(2, 1fr);
665
+ }
666
+
667
+ .kward-install-copy {
668
+ border-right: 0;
669
+ padding-right: 0;
670
+ }
671
+
672
+ .kward-cta {
673
+ align-items: flex-start;
674
+ flex-direction: column;
675
+ gap: 22px;
676
+ }
677
+ }
678
+
679
+ @media (max-width: 620px) {
680
+ .kward-feature-strip,
681
+ .kward-capabilities ul {
682
+ grid-template-columns: 1fr;
683
+ }
684
+
685
+ .kward-feature-strip article {
686
+ border-right: 0;
687
+ border-bottom: 1px solid rgba(149, 169, 52, 0.14);
688
+ }
689
+
690
+ .kward-feature-strip article:last-child {
691
+ border-bottom: 0;
692
+ }
693
+ }
694
+
695
+ /* Keep YARD's generated pages inside the Kward visual system. */
696
+ body.kward-docs #main {
697
+ background: transparent;
698
+ color: var(--kward-ink);
699
+ display: block;
700
+ flex: none;
701
+ height: auto;
702
+ min-height: auto;
703
+ overflow: visible;
704
+ padding: 0;
705
+ }
706
+
707
+ body.kward-docs #menu,
708
+ body.kward-docs #search {
709
+ color: var(--kward-muted);
710
+ }
711
+
712
+ body.kward-docs #menu a,
713
+ body.kward-docs #menu .title,
714
+ body.kward-docs #search a {
715
+ color: var(--kward-muted);
716
+ }
717
+
718
+ body.kward-docs #content a,
719
+ body.kward-docs #content a:visited,
720
+ body.kward-docs #filecontents a,
721
+ body.kward-docs #filecontents a:visited {
722
+ color: var(--kward-accent-bright);
723
+ }
724
+
725
+ body.kward-docs #content a:hover,
726
+ body.kward-docs #filecontents a:hover {
727
+ background: rgba(156, 175, 53, 0.16);
728
+ border-radius: 4px;
729
+ color: #f0f7a0;
730
+ }
731
+
732
+ body.kward-docs #content h1,
733
+ body.kward-docs #filecontents h1 {
734
+ border-top: 0;
735
+ color: var(--kward-ink);
736
+ font-size: clamp(42px, 6vw, 72px);
737
+ letter-spacing: -0.06em;
738
+ line-height: 0.95;
739
+ margin: 0 0 28px;
740
+ padding-top: 0;
741
+ }
742
+
743
+ body.kward-docs #content h2,
744
+ body.kward-docs #filecontents h2 {
745
+ border-bottom: 1px solid rgba(239, 232, 208, 0.42);
746
+ color: var(--kward-accent-bright);
747
+ font-size: 28px;
748
+ margin-top: 42px;
749
+ padding-bottom: 8px;
750
+ }
751
+
752
+ body.kward-docs #content h3,
753
+ body.kward-docs #filecontents h3 {
754
+ color: var(--kward-accent-bright);
755
+ }
756
+
757
+ body.kward-docs #content p,
758
+ body.kward-docs #content li,
759
+ body.kward-docs #filecontents p,
760
+ body.kward-docs #filecontents li {
761
+ color: var(--kward-ink);
762
+ font-size: 17px;
763
+ line-height: 1.72;
764
+ }
765
+
766
+ body.kward-docs #content ul,
767
+ body.kward-docs #filecontents ul,
768
+ body.kward-docs #content ol,
769
+ body.kward-docs #filecontents ol {
770
+ padding-left: 1.55rem;
771
+ }
772
+
773
+ body.kward-docs :not(pre) > code,
774
+ body.kward-docs #content :not(pre) > code,
775
+ body.kward-docs #filecontents :not(pre) > code {
776
+ background: rgba(239, 232, 208, 0.08);
777
+ border: 1px solid rgba(239, 232, 208, 0.18);
778
+ border-radius: 6px;
779
+ color: #fff7d6;
780
+ padding: 0.08em 0.32em;
781
+ }
782
+
783
+ body.kward-docs pre,
784
+ body.kward-docs pre.code,
785
+ body.kward-docs #content pre,
786
+ body.kward-docs #content pre.code,
787
+ body.kward-docs #filecontents pre,
788
+ body.kward-docs #filecontents pre.code,
789
+ body.kward-docs .docstring pre.code,
790
+ body.kward-docs .source_code pre,
791
+ body.kward-docs .tags pre.example {
792
+ background: #020503;
793
+ border: 1px solid rgba(149, 169, 52, 0.34);
794
+ border-radius: 10px;
795
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
796
+ color: var(--kward-ink);
797
+ overflow: auto;
798
+ padding: 18px 20px;
799
+ }
800
+
801
+ body.kward-docs pre code,
802
+ body.kward-docs pre.code code,
803
+ body.kward-docs #filecontents pre.code code {
804
+ background: transparent;
805
+ border: 0;
806
+ color: inherit;
807
+ padding: 0;
808
+ }
809
+
810
+ body.kward-docs pre.code .comment {
811
+ color: #8f927f;
812
+ }
813
+
814
+ body.kward-docs pre.code .tstring_content,
815
+ body.kward-docs pre.code .string,
816
+ body.kward-docs pre.code .dstring {
817
+ color: #d2df62;
818
+ }
819
+
820
+ body.kward-docs table {
821
+ background: rgba(3, 6, 4, 0.42);
822
+ border-color: rgba(149, 169, 52, 0.24);
823
+ color: var(--kward-ink);
824
+ }
825
+
826
+ body.kward-docs th,
827
+ body.kward-docs td {
828
+ border-color: rgba(149, 169, 52, 0.24);
829
+ }
830
+
831
+ body.kward-docs .summary_signature,
832
+ body.kward-docs .signature,
833
+ body.kward-docs .docstring,
834
+ body.kward-docs .tags {
835
+ background: transparent;
836
+ color: var(--kward-ink);
837
+ }
838
+
839
+ body.kward-docs .summary_signature {
840
+ border-color: rgba(149, 169, 52, 0.22);
841
+ }
842
+
843
+ body.kward-docs .kward-home #footer {
844
+ background: transparent;
845
+ border: 0;
846
+ color: var(--kward-muted);
847
+ margin: 22px 0 0;
848
+ padding: 22px 0 0;
849
+ }
850
+
851
+ /* Primary navigation: Home, Guides dropdown, Docs/API. */
852
+ .kward-topnav > a,
853
+ .kward-nav-menu-link,
854
+ .kward-nav-menu-button {
855
+ align-items: center;
856
+ background: transparent;
857
+ border: 0;
858
+ color: var(--kward-ink);
859
+ display: flex;
860
+ font: inherit;
861
+ font-weight: 700;
862
+ height: 100%;
863
+ letter-spacing: 0.02em;
864
+ text-decoration: none;
865
+ }
866
+
867
+ .kward-topnav > a {
868
+ padding: 0 8px;
869
+ }
870
+
871
+ .kward-nav-menu {
872
+ align-items: stretch;
873
+ display: flex;
874
+ position: relative;
875
+ }
876
+
877
+ .kward-topnav > a,
878
+ .kward-nav-menu {
879
+ position: relative;
880
+ }
881
+
882
+ .kward-topnav > a::after,
883
+ .kward-nav-menu::after {
884
+ background: transparent;
885
+ bottom: 0;
886
+ content: "";
887
+ height: 3px;
888
+ left: 0;
889
+ position: absolute;
890
+ right: 0;
891
+ }
892
+
893
+ .kward-topnav > a:hover,
894
+ .kward-topnav > a.active,
895
+ .kward-nav-menu:hover .kward-nav-menu-link,
896
+ .kward-nav-menu:hover .kward-nav-menu-button,
897
+ .kward-nav-menu.active .kward-nav-menu-link,
898
+ .kward-nav-menu.active .kward-nav-menu-button,
899
+ .kward-nav-menu.open .kward-nav-menu-link,
900
+ .kward-nav-menu.open .kward-nav-menu-button {
901
+ background: transparent;
902
+ color: var(--kward-accent-bright);
903
+ }
904
+
905
+ .kward-topnav > a:hover::after,
906
+ .kward-topnav > a.active::after,
907
+ .kward-nav-menu:hover::after,
908
+ .kward-nav-menu.active::after,
909
+ .kward-nav-menu.open::after {
910
+ background: var(--kward-accent-bright);
911
+ }
912
+
913
+ .kward-nav-menu-link {
914
+ padding: 0 2px 0 8px;
915
+ }
916
+
917
+ .kward-nav-menu-button {
918
+ cursor: pointer;
919
+ padding: 0 8px 0 2px;
920
+ }
921
+
922
+ .kward-nav-dropdown {
923
+ background: rgba(5, 9, 5, 0.98);
924
+ border: 1px solid rgba(156, 175, 53, 0.32);
925
+ border-radius: 12px;
926
+ box-shadow: 0 24px 70px rgba(0, 0, 0, 0.48);
927
+ display: none;
928
+ gap: 22px;
929
+ grid-template-columns: repeat(4, minmax(170px, 1fr));
930
+ left: 50%;
931
+ opacity: 0;
932
+ padding: 28px 22px 22px;
933
+ pointer-events: none;
934
+ position: absolute;
935
+ top: 100%;
936
+ transform: translate(-50%, -8px);
937
+ transition: opacity 140ms ease, transform 140ms ease;
938
+ width: min(920px, calc(100vw - 48px));
939
+ }
940
+
941
+ .kward-nav-dropdown::before {
942
+ content: "";
943
+ height: 18px;
944
+ left: 0;
945
+ position: absolute;
946
+ right: 0;
947
+ top: -18px;
948
+ }
949
+
950
+ .kward-nav-menu:hover .kward-nav-dropdown,
951
+ .kward-nav-menu:focus-within .kward-nav-dropdown,
952
+ .kward-nav-menu.open .kward-nav-dropdown {
953
+ display: grid;
954
+ opacity: 1;
955
+ pointer-events: auto;
956
+ transform: translate(-50%, 0);
957
+ }
958
+
959
+ .kward-nav-menu-link:focus + .kward-nav-menu-button + .kward-nav-dropdown {
960
+ display: none;
961
+ }
962
+
963
+ .kward-nav-menu-button:focus + .kward-nav-dropdown,
964
+ .kward-nav-menu.open .kward-nav-dropdown {
965
+ display: grid;
966
+ }
967
+
968
+ .kward-nav-dropdown h2 {
969
+ border-bottom: 1px solid rgba(239, 232, 208, 0.24);
970
+ color: var(--kward-accent-bright);
971
+ font-size: 12px;
972
+ letter-spacing: 0.14em;
973
+ margin: 0 0 10px;
974
+ padding-bottom: 9px;
975
+ text-transform: uppercase;
976
+ }
977
+
978
+ .kward-nav-dropdown a {
979
+ border: 0;
980
+ border-radius: 8px;
981
+ color: var(--kward-ink);
982
+ display: block;
983
+ height: auto;
984
+ padding: 8px 10px;
985
+ text-decoration: none;
986
+ }
987
+
988
+ .kward-nav-dropdown a:hover {
989
+ background: rgba(156, 175, 53, 0.13);
990
+ color: var(--kward-accent-bright);
991
+ }
992
+
993
+ @media (max-width: 920px) {
994
+ .kward-topnav {
995
+ background: rgba(5, 9, 5, 0.98);
996
+ border: 1px solid rgba(156, 175, 53, 0.32);
997
+ border-radius: 12px;
998
+ box-shadow: 0 24px 70px rgba(0, 0, 0, 0.48);
999
+ display: none;
1000
+ gap: 0;
1001
+ height: auto;
1002
+ left: 16px;
1003
+ padding: 12px;
1004
+ position: fixed;
1005
+ right: 16px;
1006
+ top: 88px;
1007
+ z-index: 40;
1008
+ }
1009
+
1010
+ body.kward-nav-open .kward-topnav {
1011
+ display: block;
1012
+ }
1013
+
1014
+ .kward-nav-menu {
1015
+ display: block;
1016
+ }
1017
+
1018
+ .kward-topnav > a,
1019
+ .kward-nav-menu-link,
1020
+ .kward-nav-menu-button {
1021
+ border: 0;
1022
+ border-radius: 8px;
1023
+ box-sizing: border-box;
1024
+ display: inline-flex;
1025
+ height: auto;
1026
+ padding: 11px 12px;
1027
+ }
1028
+
1029
+ .kward-topnav > a {
1030
+ width: 100%;
1031
+ }
1032
+
1033
+ .kward-nav-menu-link {
1034
+ width: calc(100% - 48px);
1035
+ }
1036
+
1037
+ .kward-nav-menu-button {
1038
+ justify-content: center;
1039
+ width: 44px;
1040
+ }
1041
+
1042
+ .kward-nav-dropdown {
1043
+ background: rgba(255, 255, 255, 0.03);
1044
+ border: 0;
1045
+ box-shadow: none;
1046
+ grid-template-columns: 1fr;
1047
+ left: auto;
1048
+ opacity: 1;
1049
+ padding: 8px 0 8px 14px;
1050
+ pointer-events: auto;
1051
+ position: static;
1052
+ top: auto;
1053
+ transform: none;
1054
+ width: auto;
1055
+ }
1056
+
1057
+ .kward-page {
1058
+ padding: 104px 16px 42px;
1059
+ }
1060
+
1061
+ .kward-home {
1062
+ width: calc(100% - 32px);
1063
+ }
1064
+ }
1065
+
1066
+ /* Pages no longer use YARD's iframe/sidebar layout. */
1067
+ .kward-page {
1068
+ box-sizing: border-box;
1069
+ margin: 0 auto;
1070
+ max-width: 1180px;
1071
+ padding: 124px 28px 56px;
1072
+ }
1073
+
1074
+ .kward-content-page {
1075
+ background: transparent;
1076
+ box-sizing: border-box;
1077
+ display: block;
1078
+ margin: 0 auto;
1079
+ max-width: 980px;
1080
+ padding: 0;
1081
+ width: 100%;
1082
+ }
1083
+
1084
+ .kward-guide-page,
1085
+ .kward-api-page {
1086
+ max-width: 1100px;
1087
+ }
1088
+
1089
+ .kward-content-page #content {
1090
+ margin: 0;
1091
+ }
1092
+
1093
+ /* Center the frontpage as one coherent page, not a left-side YARD pane. */
1094
+ body.kward-docs #main.kward-home {
1095
+ margin-left: auto;
1096
+ margin-right: auto;
1097
+ max-width: 1180px;
1098
+ }
1099
+
1100
+ .kward-home {
1101
+ left: auto;
1102
+ right: auto;
1103
+ width: min(1180px, calc(100% - 56px));
1104
+ }
1105
+
1106
+ .kward-hero {
1107
+ justify-content: center;
1108
+ }
1109
+
1110
+ /* The generated YARD TOC is useful for API pages but too noisy on guide pages. */
1111
+ .kward-guide-page #toc {
1112
+ display: none;
1113
+ }
1114
+
1115
+
1116
+ /* Code blocks own their copy action. */
1117
+ body.kward-docs .code-copy-wrapper {
1118
+ margin: 16px 0 24px;
1119
+ position: relative;
1120
+ width: 100%;
1121
+ }
1122
+
1123
+ body.kward-docs .code-copy-wrapper pre,
1124
+ body.kward-docs .code-copy-wrapper pre.code {
1125
+ box-sizing: border-box;
1126
+ margin: 0;
1127
+ padding-right: 78px;
1128
+ width: 100%;
1129
+ }
1130
+
1131
+ body.kward-docs .code-copy-wrapper .copy-code-button {
1132
+ float: none;
1133
+ margin: 0;
1134
+ position: absolute;
1135
+ right: 12px;
1136
+ top: 12px;
1137
+ }
1138
+
1139
+
1140
+ /* YARD's generated TOC must stay below navigation overlays and match the theme. */
1141
+ body.kward-docs .kward-topbar {
1142
+ z-index: 9000;
1143
+ }
1144
+
1145
+ body.kward-docs .kward-nav-dropdown {
1146
+ z-index: 9100;
1147
+ }
1148
+
1149
+ body.kward-docs #toc,
1150
+ body.kward-docs #toc.hidden,
1151
+ body.kward-docs #toc.hidden:hover {
1152
+ background: rgba(5, 9, 5, 0.98);
1153
+ border: 1px solid rgba(156, 175, 53, 0.32);
1154
+ border-radius: 12px;
1155
+ box-shadow: 0 24px 70px rgba(0, 0, 0, 0.48);
1156
+ color: var(--kward-ink);
1157
+ z-index: 100;
1158
+ }
1159
+
1160
+ body.kward-docs #toc .title,
1161
+ body.kward-docs #toc .title a,
1162
+ body.kward-docs #toc li,
1163
+ body.kward-docs #toc a,
1164
+ body.kward-docs #toc a:visited {
1165
+ color: var(--kward-accent-bright);
1166
+ }
1167
+
1168
+ /* Content pages start at the content panel; the navbar stays in normal flow. */
1169
+ body.kward-content-body .kward-topbar {
1170
+ position: relative;
1171
+ }
1172
+
1173
+ body.kward-content-body .kward-page {
1174
+ padding-top: 40px;
1175
+ }
1176
+
1177
+ body.kward-home-body .kward-topbar {
1178
+ position: fixed;
1179
+ }
1180
+
1181
+ /* Do not let YARD's focus handling scroll focused main content under the header. */
1182
+ body.kward-docs #main {
1183
+ outline: none;
1184
+ }
1185
+
1186
+ body.kward-content-body #main {
1187
+ scroll-margin-top: 140px;
1188
+ }
1189
+
1190
+ /* Give the landing hero a calmer amount of air below the fixed navbar. */
1191
+ body.kward-home-body #main.kward-home {
1192
+ padding-top: 168px;
1193
+ }
1194
+
1195
+ /* Normalize generated table-of-contents spacing. */
1196
+ body.kward-docs #toc,
1197
+ body.kward-docs #toc.hidden,
1198
+ body.kward-docs #toc.hidden:hover {
1199
+ box-sizing: border-box;
1200
+ padding: 24px;
1201
+ }
1202
+
1203
+ body.kward-docs #toc .title {
1204
+ margin: 0 0 18px;
1205
+ }
1206
+
1207
+ body.kward-docs #toc .title a {
1208
+ text-decoration: none;
1209
+ }
1210
+
1211
+ body.kward-docs #toc ol {
1212
+ margin: 0;
1213
+ padding-left: 1.7em;
1214
+ }
1215
+
1216
+ body.kward-docs #toc li {
1217
+ line-height: 1.55;
1218
+ margin: 0 0 8px;
1219
+ padding-left: 0.15em;
1220
+ }
1221
+
1222
+ body.kward-docs #toc li:last-child {
1223
+ margin-bottom: 0;
1224
+ }
1225
+
1226
+ /* Keep TOC width, but make inner spacing feel even around wrapped list items. */
1227
+ body.kward-docs #toc,
1228
+ body.kward-docs #toc.hidden,
1229
+ body.kward-docs #toc.hidden:hover {
1230
+ padding: 24px 28px;
1231
+ }
1232
+
1233
+ body.kward-docs #toc ol {
1234
+ list-style-position: outside;
1235
+ padding-left: 1.35em;
1236
+ }
1237
+
1238
+ body.kward-docs #toc li {
1239
+ padding-left: 0.45em;
1240
+ }
1241
+
1242
+ body.kward-docs #toc a {
1243
+ display: inline;
1244
+ }
1245
+
1246
+ /* Proper TOC list indentation: markers stay inside the box, text wraps cleanly. */
1247
+ body.kward-docs #toc ol {
1248
+ counter-reset: kward-toc-item;
1249
+ list-style: none;
1250
+ margin: 0;
1251
+ padding-left: 0;
1252
+ }
1253
+
1254
+ body.kward-docs #toc li {
1255
+ column-gap: 0.45em;
1256
+ counter-increment: kward-toc-item;
1257
+ display: grid;
1258
+ grid-template-columns: 2em minmax(0, 1fr);
1259
+ margin: 0 0 8px;
1260
+ padding-left: 0;
1261
+ }
1262
+
1263
+ body.kward-docs #toc li::before {
1264
+ color: var(--kward-accent-bright);
1265
+ content: counter(kward-toc-item) ".";
1266
+ grid-column: 1;
1267
+ }
1268
+
1269
+ body.kward-docs #toc li > a {
1270
+ grid-column: 2;
1271
+ }
1272
+
1273
+ body.kward-docs #toc li > ol {
1274
+ grid-column: 2;
1275
+ margin-top: 6px;
1276
+ }
1277
+
1278
+
1279
+ /* Keep TOC hover states readable on the dark theme. */
1280
+ body.kward-docs #toc a:hover,
1281
+ body.kward-docs #toc li:hover > a {
1282
+ background: rgba(156, 175, 53, 0.16);
1283
+ border-radius: 6px;
1284
+ color: #f0f7a0;
1285
+ text-decoration: none;
1286
+ }
1287
+
1288
+ /* The default YARD mobile search/menu button conflicts with Kward's nav. */
1289
+ body.kward-docs #search {
1290
+ display: none !important;
1291
+ }
1292
+
1293
+ body.kward-docs .kward-nav-toggle {
1294
+ position: relative;
1295
+ z-index: 9200;
1296
+ }
1297
+
1298
+ /* Mobile navigation fallback: make the toggle independent of YARD JS timing. */
1299
+ @media (max-width: 920px) {
1300
+ body.kward-docs .kward-topnav {
1301
+ z-index: 9300;
1302
+ }
1303
+
1304
+ body.kward-docs.kward-nav-open #kward-primary-nav,
1305
+ body.kward-docs.kward-nav-open .kward-topnav {
1306
+ display: block !important;
1307
+ }
1308
+ }
1309
+
1310
+ /* Mobile uses tap state, not hover, for the Guides dropdown. */
1311
+ @media (max-width: 920px) {
1312
+ body.kward-docs .kward-nav-menu:hover .kward-nav-dropdown,
1313
+ body.kward-docs .kward-nav-menu:focus-within .kward-nav-dropdown {
1314
+ display: none;
1315
+ }
1316
+
1317
+ body.kward-docs .kward-nav-menu.open .kward-nav-dropdown {
1318
+ display: grid;
1319
+ opacity: 1;
1320
+ pointer-events: auto;
1321
+ transform: none;
1322
+ }
1323
+
1324
+ body.kward-docs .kward-nav-menu:hover .kward-nav-menu-link,
1325
+ body.kward-docs .kward-nav-menu:hover .kward-nav-menu-button {
1326
+ border-bottom-color: transparent;
1327
+ }
1328
+
1329
+ body.kward-docs .kward-nav-menu.open .kward-nav-menu-link,
1330
+ body.kward-docs .kward-nav-menu.open .kward-nav-menu-button,
1331
+ body.kward-docs .kward-nav-menu.active .kward-nav-menu-link,
1332
+ body.kward-docs .kward-nav-menu.active .kward-nav-menu-button {
1333
+ color: var(--kward-accent-bright);
1334
+ }
1335
+ }
1336
+
1337
+ /* The hero logo is now transparent; remove the old placeholder halo. */
1338
+ .kward-hero-art::before {
1339
+ display: none;
1340
+ }
1341
+
1342
+ /* Remove remaining YARD light controls from API pages. */
1343
+ body.kward-docs dl,
1344
+ body.kward-docs dt,
1345
+ body.kward-docs dd,
1346
+ body.kward-docs .defines,
1347
+ body.kward-docs .showSource,
1348
+ body.kward-docs .showSource a,
1349
+ body.kward-docs .showSource a:visited,
1350
+ body.kward-docs h2 small a,
1351
+ body.kward-docs .summary_toggle,
1352
+ body.kward-docs .constants_summary_toggle {
1353
+ background: transparent;
1354
+ color: var(--kward-accent-bright);
1355
+ }
1356
+
1357
+ body.kward-docs dl {
1358
+ border: 0;
1359
+ }
1360
+
1361
+ body.kward-docs dt,
1362
+ body.kward-docs dd {
1363
+ border-color: rgba(149, 169, 52, 0.24);
1364
+ }
1365
+
1366
+ body.kward-docs .showSource,
1367
+ body.kward-docs h2 small a,
1368
+ body.kward-docs .summary_toggle,
1369
+ body.kward-docs .constants_summary_toggle {
1370
+ border: 1px solid rgba(156, 175, 53, 0.38);
1371
+ border-radius: 6px;
1372
+ display: inline-flex;
1373
+ align-items: center;
1374
+ line-height: 1.2;
1375
+ min-height: 24px;
1376
+ padding: 4px 10px;
1377
+ text-decoration: none;
1378
+ }
1379
+
1380
+ body.kward-docs .showSource:hover,
1381
+ body.kward-docs h2 small a:hover,
1382
+ body.kward-docs .summary_toggle:hover,
1383
+ body.kward-docs .constants_summary_toggle:hover {
1384
+ background: rgba(156, 175, 53, 0.14);
1385
+ color: #f0f7a0;
1386
+ }
1387
+
1388
+ /* API metadata boxes inherit alternating white rows from YARD; theme them explicitly. */
1389
+ body.kward-docs .box_info dl dt,
1390
+ body.kward-docs .box_info dl dd,
1391
+ body.kward-docs .box_info dl:nth-child(odd) > *,
1392
+ body.kward-docs .box_info dl:nth-child(even) > * {
1393
+ background: rgba(3, 6, 4, 0.72);
1394
+ border-color: rgba(149, 169, 52, 0.28);
1395
+ color: var(--kward-ink);
1396
+ }
1397
+
1398
+ body.kward-docs .box_info dl dt {
1399
+ color: var(--kward-accent-bright);
1400
+ }
1401
+
1402
+ body.kward-docs .box_info a,
1403
+ body.kward-docs .box_info a:visited,
1404
+ body.kward-docs .box_info .defines {
1405
+ background: transparent;
1406
+ color: var(--kward-accent-bright);
1407
+ }
1408
+
1409
+ /* Let API metadata rows use the full content width. */
1410
+ body.kward-docs .box_info dl dd {
1411
+ max-width: none;
1412
+ }
1413
+
1414
+ /* Markdown tables should match the dark documentation theme. */
1415
+ body.kward-docs #content table,
1416
+ body.kward-docs #filecontents table {
1417
+ background: rgba(3, 6, 4, 0.72);
1418
+ border: 1px solid rgba(149, 169, 52, 0.34);
1419
+ border-collapse: collapse;
1420
+ color: var(--kward-ink);
1421
+ width: 100%;
1422
+ }
1423
+
1424
+ body.kward-docs #content th,
1425
+ body.kward-docs #content td,
1426
+ body.kward-docs #filecontents th,
1427
+ body.kward-docs #filecontents td {
1428
+ background: transparent;
1429
+ border: 1px solid rgba(149, 169, 52, 0.28);
1430
+ color: var(--kward-ink);
1431
+ padding: 10px 14px;
1432
+ }
1433
+
1434
+ body.kward-docs #content tr:nth-child(even) td,
1435
+ body.kward-docs #filecontents tr:nth-child(even) td {
1436
+ background: rgba(156, 175, 53, 0.06);
1437
+ }
1438
+
1439
+ body.kward-docs #content th,
1440
+ body.kward-docs #filecontents th {
1441
+ background: rgba(156, 175, 53, 0.12);
1442
+ color: var(--kward-accent-bright);
1443
+ }
1444
+
1445
+ /* Override YARD's row-level white table striping. */
1446
+ body.kward-docs .docstring table tr,
1447
+ body.kward-docs #filecontents table tr,
1448
+ body.kward-docs .docstring table tr:nth-child(odd),
1449
+ body.kward-docs #filecontents table tr:nth-child(odd),
1450
+ body.kward-docs .docstring table tr:nth-child(even),
1451
+ body.kward-docs #filecontents table tr:nth-child(even) {
1452
+ background: rgba(3, 6, 4, 0.72);
1453
+ }
1454
+
1455
+ body.kward-docs .docstring table tr:nth-child(even),
1456
+ body.kward-docs #filecontents table tr:nth-child(even) {
1457
+ background: rgba(156, 175, 53, 0.06);
1458
+ }
1459
+
1460
+ body.kward-docs .docstring table th,
1461
+ body.kward-docs #filecontents table th {
1462
+ background: rgba(156, 175, 53, 0.12);
1463
+ }
1464
+
1465
+ /* Index/listing pills should not inherit YARD's light backgrounds. */
1466
+ body.kward-docs .index_inline_list li,
1467
+ body.kward-docs ul.toplevel li {
1468
+ background: transparent;
1469
+ }
1470
+
1471
+ body.kward-docs .index_inline_list a,
1472
+ body.kward-docs ul.toplevel a,
1473
+ body.kward-docs .index_inline_list a:visited,
1474
+ body.kward-docs ul.toplevel a:visited {
1475
+ background: rgba(3, 6, 4, 0.72);
1476
+ border: 1px solid rgba(156, 175, 53, 0.32);
1477
+ border-radius: 6px;
1478
+ color: var(--kward-accent-bright);
1479
+ display: inline-block;
1480
+ line-height: 1.2;
1481
+ padding: 6px 10px;
1482
+ text-decoration: none;
1483
+ }
1484
+
1485
+ body.kward-docs .index_inline_list a:hover,
1486
+ body.kward-docs ul.toplevel a:hover {
1487
+ background: rgba(156, 175, 53, 0.16);
1488
+ color: #f0f7a0;
1489
+ }
1490
+
1491
+ /* Browser/YARD hover defaults can invert index pills; keep them readable. */
1492
+ body.kward-docs .index_inline_list a:hover,
1493
+ body.kward-docs .index_inline_list a:focus,
1494
+ body.kward-docs .index_inline_list a:active,
1495
+ body.kward-docs ul.toplevel a:hover,
1496
+ body.kward-docs ul.toplevel a:focus,
1497
+ body.kward-docs ul.toplevel a:active {
1498
+ background: rgba(156, 175, 53, 0.22) !important;
1499
+ color: #f0f7a0 !important;
1500
+ text-decoration: none;
1501
+ }