@knitli/docs-components 1.3.1 → 1.3.2

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 (56) hide show
  1. package/dist/assets/favicon/index.js +8 -10
  2. package/dist/assets/logos/index.js +25 -21
  3. package/dist/assets/styles/index.js +12 -14
  4. package/dist/data/products.js +17 -32
  5. package/dist/index.js +39 -44
  6. package/dist/styles/index.js +7 -4
  7. package/dist/types/index.js +1 -7
  8. package/package.json +12 -5
  9. package/dist/assets/favicon/android-chrome-192x192.png +0 -0
  10. package/dist/assets/favicon/android-chrome-512x512.png +0 -0
  11. package/dist/assets/favicon/apple-touch-icon.png +0 -0
  12. package/dist/assets/favicon/favicon-16x16.png +0 -0
  13. package/dist/assets/favicon/favicon-32x32.png +0 -0
  14. package/dist/assets/favicon/favicon.ico +0 -0
  15. package/dist/assets/favicon/favicon.svg +0 -86
  16. package/dist/assets/favicon/index.d.ts +0 -7
  17. package/dist/assets/favicon/index.d.ts.map +0 -1
  18. package/dist/assets/favicon/social.webp +0 -0
  19. package/dist/assets/logos/Thread_vector_mono_aubergine.svg +0 -41
  20. package/dist/assets/logos/Thread_vector_mono_copper.svg +0 -41
  21. package/dist/assets/logos/Thread_vector_mono_parchment.svg +0 -41
  22. package/dist/assets/logos/codeweaver-primary.svg +0 -103
  23. package/dist/assets/logos/codeweaver-reverse.svg +0 -103
  24. package/dist/assets/logos/headline_logo.webp +0 -0
  25. package/dist/assets/logos/headline_logo_dark.png +0 -0
  26. package/dist/assets/logos/headline_logo_dark.webp +0 -0
  27. package/dist/assets/logos/index.d.ts +0 -29
  28. package/dist/assets/logos/index.d.ts.map +0 -1
  29. package/dist/assets/logos/knitli_logo.svg +0 -143
  30. package/dist/assets/logos/knitli_wordmark.svg +0 -118
  31. package/dist/assets/logos/recoco-lg.webp +0 -0
  32. package/dist/assets/logos/recoco-med.webp +0 -0
  33. package/dist/assets/logos/recoco-sm.webp +0 -0
  34. package/dist/assets/logos/recoco-xl.webp +0 -0
  35. package/dist/assets/logos/recoco-xs.webp +0 -0
  36. package/dist/assets/styles/codeweaver-theme.css +0 -570
  37. package/dist/assets/styles/global.css +0 -166
  38. package/dist/assets/styles/index.d.ts +0 -15
  39. package/dist/assets/styles/index.d.ts.map +0 -1
  40. package/dist/assets/styles/knitli-theme.css +0 -215
  41. package/dist/assets/styles/textures.css +0 -668
  42. package/dist/assets/styles/typography.css +0 -262
  43. package/dist/assets/styles/variables.css +0 -238
  44. package/dist/data/products.d.ts +0 -44
  45. package/dist/data/products.d.ts.map +0 -1
  46. package/dist/data/products.json +0 -45
  47. package/dist/index.d.ts +0 -55
  48. package/dist/index.d.ts.map +0 -1
  49. package/dist/styles/custom.css +0 -73
  50. package/dist/styles/index.d.ts +0 -2
  51. package/dist/styles/index.d.ts.map +0 -1
  52. package/dist/templates/AstroConfigTemplate.d.mts +0 -3
  53. package/dist/templates/AstroConfigTemplate.d.mts.map +0 -1
  54. package/dist/templates/AstroConfigTemplate.mjs +0 -305
  55. package/dist/types/index.d.ts +0 -31
  56. package/dist/types/index.d.ts.map +0 -1
@@ -1,570 +0,0 @@
1
- /*
2
- * SPDX-FileCopyrightText: 2025 Knitli Inc.
3
- * SPDX-FileContributor: Adam Poulemanos <adam@knit.li>
4
- *
5
- * SPDX-License-Identifier: LicenseRef-KnitliProprietary
6
- */
7
-
8
- /* ===================================================
9
- CODEWEAVER THEME - Cool Technical Aesthetic
10
- Analytical Precision, Technical Canvas
11
- =================================================== */
12
-
13
- /* === CODEWEAVER SECTION BASE === */
14
-
15
- .codeweaver-section {
16
- position: relative;
17
- background-color: var(--cw-crisp-white);
18
- color: var(--cw-text);
19
- }
20
-
21
- /* Note: ::before and ::after are now handled in textures.css for blueprint effect */
22
-
23
- /* === TECHNICAL ANNOTATIONS === */
24
-
25
- /* Revision stamp - sparse engineering documentation feel */
26
- .revision-stamp {
27
- font-family: var(--font-bridge);
28
- font-size: var(--font-sm);
29
- font-weight: 700;
30
- text-transform: uppercase;
31
- letter-spacing: 0.15em;
32
- color: rgba(69, 91, 107, 0.4);
33
- padding: 0.25rem 0.5rem;
34
- border: 1px solid rgba(69, 91, 107, 0.25);
35
- border-radius: 2px;
36
- position: absolute;
37
- transform: rotate(-2deg);
38
- pointer-events: none;
39
- user-select: none;
40
- }
41
-
42
- .revision-stamp::before {
43
- content: "";
44
- position: absolute;
45
- inset: 2px;
46
- border: 1px dashed rgba(69, 91, 107, 0.15);
47
- border-radius: 1px;
48
- }
49
-
50
- /* Measurement line annotation */
51
- .measure-line {
52
- position: absolute;
53
- display: flex;
54
- align-items: center;
55
- gap: 0.5rem;
56
- font-family: var(--font-cw-display);
57
- font-size: var(--font-3xs);
58
- color: rgba(181, 108, 48, 0.5);
59
- pointer-events: none;
60
- user-select: none;
61
- }
62
-
63
- .measure-line::before,
64
- .measure-line::after {
65
- content: "";
66
- flex: 1;
67
- height: 1px;
68
- background: linear-gradient(
69
- 90deg,
70
- rgba(181, 108, 48, 0.3) 0%,
71
- rgba(181, 108, 48, 0.5) 50%,
72
- rgba(181, 108, 48, 0.3) 100%
73
- );
74
- }
75
-
76
- /* Circled callout */
77
- .callout-circle {
78
- position: absolute;
79
- width: 2.5rem;
80
- height: 2.5rem;
81
- border: 2px solid rgba(181, 108, 48, 0.4);
82
- border-radius: 50%;
83
- display: flex;
84
- align-items: center;
85
- justify-content: center;
86
- font-family: var(--font-knitli-accent);
87
- font-size: var(--font-2xs);
88
- color: var(--cw-copper);
89
- transform: rotate(-5deg);
90
- pointer-events: none;
91
- user-select: none;
92
- }
93
-
94
- /* Arrow annotation pointing to key elements */
95
- .callout-arrow {
96
- position: absolute;
97
- font-family: var(--font-knitli-accent);
98
- font-size: var(--font-xs) rem;
99
- color: rgba(181, 108, 48, 0.7);
100
- white-space: nowrap;
101
- transform: rotate(-3deg);
102
- pointer-events: none;
103
- user-select: none;
104
- }
105
-
106
- /* === CODEWEAVER BUTTON STYLES === */
107
-
108
- .btn-codeweaver {
109
- background: linear-gradient(
110
- 180deg,
111
- var(--cw-blue-gray) 0%,
112
- color-mix(in oklch, var(--cw-blue-gray), black 10%) 100%
113
- );
114
- color: var(--cw-cream);
115
- font-family: var(--font-cw-body);
116
- font-weight: 600;
117
- padding: 1rem 2rem;
118
- border: 2px solid transparent;
119
- border-radius: 2px;
120
- cursor: pointer;
121
- display: inline-flex;
122
- align-items: center;
123
- gap: 0.75rem;
124
- text-decoration: none;
125
- transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
126
- box-shadow:
127
- 0 3px 6px var(--workshop-shadow),
128
- inset 0 1px 0 rgba(255, 255, 255, 0.15),
129
- inset 0 -2px 0 rgba(0, 0, 0, 0.15);
130
- position: relative;
131
- overflow: hidden;
132
- }
133
-
134
- /* Metallic sheen effect */
135
- .btn-codeweaver::before {
136
- content: "";
137
- position: absolute;
138
- top: 0;
139
- left: -100%;
140
- width: 100%;
141
- height: 100%;
142
- background: linear-gradient(
143
- 90deg,
144
- transparent 0%,
145
- rgba(255, 255, 255, 0.1) 50%,
146
- transparent 100%
147
- );
148
- transition: left 0.4s ease;
149
- pointer-events: none;
150
- }
151
-
152
- .btn-codeweaver:hover {
153
- border-color: var(--cw-copper);
154
- box-shadow:
155
- 0 6px 16px var(--workshop-shadow),
156
- 0 0 0 1px var(--cw-copper),
157
- inset 0 1px 0 rgba(255, 255, 255, 0.15),
158
- inset 0 -2px 0 rgba(0, 0, 0, 0.15);
159
- transform: translateY(-2px) scale(1.01);
160
- }
161
-
162
- .btn-codeweaver:hover::before {
163
- left: 100%;
164
- }
165
-
166
- .btn-codeweaver:active {
167
- transform: translateY(0) scale(0.99);
168
- box-shadow: 0 1px 2px var(--workshop-shadow);
169
- }
170
-
171
- .btn-codeweaver:focus-visible {
172
- outline: 3px solid var(--cw-copper);
173
- outline-offset: 4px;
174
- }
175
-
176
- /* Secondary variant */
177
- .btn-codeweaver-secondary {
178
- background: transparent;
179
- color: var(--cw-primary);
180
- border: 2px solid var(--cw-primary);
181
- font-family: var(--font-cw-body);
182
- }
183
-
184
- .btn-codeweaver-secondary:hover {
185
- background: var(--cw-primary);
186
- color: var(--cw-cream);
187
- border-color: var(--cw-primary);
188
- }
189
-
190
- /* === CODEWEAVER CARD STYLES === */
191
-
192
- .card-codeweaver {
193
- background: linear-gradient(
194
- 180deg,
195
- var(--cw-cream) 0%,
196
- color-mix(in oklch, var(--knitli-parchment), var(--cw-blue-gray) 3%) 100%
197
- );
198
- border: 2px solid var(--cw-primary);
199
- border-radius: 6px 2px 6px 2px;
200
- /* Asymmetric machined corners */
201
- padding: var(--cw-space-lg);
202
- box-shadow:
203
- 0 4px 12px var(--workshop-shadow),
204
- inset 0 1px 0 rgba(255, 255, 255, 0.8),
205
- inset 0 -1px 0 rgba(69, 91, 107, 0.1);
206
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
207
- position: relative;
208
- }
209
-
210
- /* Copper accent line at top - machined edge detail */
211
- .card-codeweaver::before {
212
- content: "";
213
- position: absolute;
214
- top: 0;
215
- left: 12px;
216
- right: 30%;
217
- height: 3px;
218
- background: linear-gradient(
219
- 90deg,
220
- var(--cw-blue-gray) 0%,
221
- var(--cw-blue-gray) 70%,
222
- transparent 100%
223
- );
224
- border-radius: 0 0 2px 2px;
225
- opacity: 0.6;
226
- transition:
227
- opacity 0.3s,
228
- right 0.3s;
229
- }
230
-
231
- .card-codeweaver:hover {
232
- border-color: var(--cw-copper);
233
- box-shadow:
234
- 0 0 0 1px var(--cw-copper),
235
- 0 8px 24px var(--workshop-shadow),
236
- inset 0 1px 0 rgba(255, 255, 255, 0.8),
237
- inset 0 -1px 0 rgba(69, 91, 107, 0.1);
238
- transform: translateY(-4px) scale(1.01);
239
- }
240
-
241
- .card-codeweaver:hover::before {
242
- opacity: 1;
243
- right: 20%;
244
- }
245
-
246
- /* === CODEWEAVER GRID ITEM === */
247
-
248
- .grid-item {
249
- background: linear-gradient(
250
- 180deg,
251
- var(--cw-crisp-white) 0%,
252
- color-mix(in oklch, var(--cw-crisp-white), var(--cw-blue-gray) 2%) 100%
253
- );
254
- border: 2px solid rgba(69, 91, 107, 0.15);
255
- border-radius: 4px 8px 4px 8px;
256
- /* Asymmetric corners */
257
- padding: var(--cw-space-lg);
258
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
259
- position: relative;
260
- box-shadow:
261
- 0 2px 6px rgba(30, 6, 27, 0.08),
262
- inset 0 1px 0 rgba(255, 255, 255, 0.7);
263
- }
264
-
265
- /* Subtle corner accent */
266
- .grid-item::before {
267
- content: "";
268
- position: absolute;
269
- top: -1px;
270
- left: -1px;
271
- width: 20px;
272
- height: 20px;
273
- border-top: 2px solid var(--cw-copper);
274
- border-left: 2px solid var(--cw-copper);
275
- border-radius: 4px 0 0 0;
276
- opacity: 0;
277
- transition:
278
- opacity 0.3s,
279
- width 0.3s,
280
- height 0.3s;
281
- }
282
-
283
- .grid-item:hover {
284
- border-color: var(--cw-copper);
285
- box-shadow:
286
- 0 0 0 1px var(--cw-copper),
287
- 0 8px 20px var(--workshop-shadow),
288
- inset 0 1px 0 rgba(255, 255, 255, 0.7);
289
- transform: translateY(-4px) scale(1.02);
290
- }
291
-
292
- .grid-item:hover::before {
293
- opacity: 0.8;
294
- width: 28px;
295
- height: 28px;
296
- }
297
-
298
- /* === CODEWEAVER ACCENT ELEMENTS === */
299
-
300
- .codeweaver-accent-box {
301
- background: linear-gradient(
302
- 135deg,
303
- rgba(69, 91, 107, 0.04) 0%,
304
- rgba(69, 91, 107, 0.08) 100%
305
- );
306
- border: none;
307
- border-radius: 6px 16px 6px 16px;
308
- /* Organic asymmetric corners */
309
- padding: var(--cw-space-md) var(--cw-space-lg);
310
- margin: var(--cw-space-lg) 0;
311
- position: relative;
312
- }
313
-
314
- /* Flowing copper accent at top */
315
- .codeweaver-accent-box::before {
316
- content: "";
317
- position: absolute;
318
- top: 0;
319
- left: 10%;
320
- right: 40%;
321
- height: 2px;
322
- background: linear-gradient(
323
- 90deg,
324
- transparent 0%,
325
- var(--cw-copper) 20%,
326
- var(--cw-copper) 80%,
327
- transparent 100%
328
- );
329
- border-radius: 0 0 2px 2px;
330
- }
331
-
332
- .codeweaver-divider {
333
- height: 2px;
334
- background: linear-gradient(
335
- 90deg,
336
- transparent 0%,
337
- var(--cw-primary) 3%,
338
- var(--cw-primary) 97%,
339
- transparent 100%
340
- );
341
- box-shadow: 0 1px 0 var(--workshop-bevel);
342
- margin: var(--cw-space-3xl) 0;
343
- }
344
-
345
- /* Flowing curved divider - echoes the bird logo's sweeping strokes */
346
- .codeweaver-divider-flowing {
347
- height: 24px;
348
- margin: var(--cw-space-2xl) 0;
349
- position: relative;
350
- overflow: hidden;
351
- }
352
-
353
- .codeweaver-divider-flowing::before {
354
- content: "";
355
- position: absolute;
356
- top: 50%;
357
- left: 5%;
358
- right: 20%;
359
- height: 3px;
360
- background: linear-gradient(
361
- 90deg,
362
- transparent 0%,
363
- var(--cw-copper) 15%,
364
- var(--cw-copper) 60%,
365
- var(--cw-blue-gray) 85%,
366
- transparent 100%
367
- );
368
- border-radius: 50%;
369
- transform: translateY(-50%) rotate(-1deg);
370
- }
371
-
372
- /* Subtle second stroke for depth */
373
- .codeweaver-divider-flowing::after {
374
- content: "";
375
- position: absolute;
376
- top: 55%;
377
- left: 15%;
378
- right: 35%;
379
- height: 2px;
380
- background: linear-gradient(
381
- 90deg,
382
- transparent 0%,
383
- var(--cw-blue-gray) 20%,
384
- var(--cw-blue-gray) 70%,
385
- transparent 100%
386
- );
387
- opacity: 0.3;
388
- transform: translateY(-50%) rotate(0.5deg);
389
- }
390
-
391
- /* === CODEWEAVER BADGE === */
392
-
393
- .badge-codeweaver {
394
- font-family: var(--font-bridge);
395
- font-size: var(--font-2xs);
396
- font-weight: 700;
397
- text-transform: uppercase;
398
- letter-spacing: 0.1em;
399
- padding: 0.375rem 0.875rem;
400
- background: var(--cw-primary);
401
- color: var(--cw-cream);
402
- border-radius: 2px;
403
- display: inline-block;
404
- box-shadow: 0 2px 4px rgba(69, 91, 107, 0.3);
405
- }
406
-
407
- .badge-codeweaver-copper {
408
- background: var(--cw-copper);
409
- color: var(--cw-cream);
410
- }
411
-
412
- /* === CODEWEAVER HIGHLIGHT === */
413
-
414
- .codeweaver-highlight {
415
- background: var(--cw-primary);
416
- color: var(--cw-cream);
417
- padding: 0.125rem 0.375rem;
418
- border-radius: 2px;
419
- font-family: var(--font-cw-display);
420
- font-size: var(--font-sm);
421
- }
422
-
423
- /* === CODEWEAVER LIST STYLING === */
424
-
425
- .codeweaver-section ul {
426
- list-style: none;
427
- }
428
-
429
- .codeweaver-section ul li::before {
430
- content: "▸";
431
- color: var(--cw-copper);
432
- font-weight: bold;
433
- display: inline-block;
434
- width: 1.5rem;
435
- margin-left: -1.5rem;
436
- }
437
-
438
- /* === CODE BLOCKS === */
439
-
440
- .code-snippet {
441
- font-family: var(--font-cw-display);
442
- font-size: var(--font-xs);
443
- line-height: 1.6;
444
- background: var(--cw-bg);
445
- color: var(--cw-text);
446
- padding: var(--cw-space-md);
447
- border: 2px solid var(--cw-primary);
448
- border-radius: 4px;
449
- overflow-x: auto;
450
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05);
451
- }
452
-
453
- .code-snippet::-webkit-scrollbar {
454
- height: 8px;
455
- }
456
-
457
- .code-snippet::-webkit-scrollbar-track {
458
- background: var(--cw-cream);
459
- }
460
-
461
- .code-snippet::-webkit-scrollbar-thumb {
462
- background: var(--cw-copper);
463
- border-radius: 4px;
464
- }
465
-
466
- /* === STAT DISPLAY === */
467
-
468
- .stat-display {
469
- text-align: center;
470
- padding: var(--cw-space-md);
471
- }
472
-
473
- .stat-number {
474
- font-family: var(--font-cw-display);
475
- font-size: clamp(3rem, 8vw, 4.5rem);
476
- font-weight: 700;
477
- line-height: 1;
478
- color: var(--cw-primary);
479
- display: flex;
480
- gap: 0.25rem;
481
- justify-content: center;
482
- margin-bottom: var(--cw-space-sm);
483
- }
484
-
485
- .stat-label {
486
- font-family: var(--font-cw-body);
487
- font-size: var(--font-sm);
488
- color: var(--cw-text);
489
- text-transform: uppercase;
490
- letter-spacing: 0.05em;
491
- }
492
-
493
- /* === TEXT READABILITY ON GRID === */
494
-
495
- /* Subtle text shadow for better legibility on busy backgrounds */
496
- .codeweaver-section p,
497
- .codeweaver-section li {
498
- text-shadow:
499
- 0 0 12px var(--cw-cream),
500
- 0 0 6px var(--cw-cream),
501
- 0 0 2px var(--cw-cream);
502
- }
503
-
504
- /* Use display font for paragraphs in CodeWeaver sections */
505
- .codeweaver-section p {
506
- font-family: var(--font-cw-display);
507
- }
508
-
509
- /* Disable text-shadow for terminal/code content where it interferes with readability */
510
- .terminal-content,
511
- .terminal-content *,
512
- .landscape-description {
513
- text-shadow: none;
514
- }
515
-
516
- /* Content containers get frosted background for text clarity */
517
- .codeweaver-section .status-story,
518
- .codeweaver-section .status-timeline,
519
- .codeweaver-section .vision-content,
520
- .codeweaver-section .product-buttons {
521
- background: rgba(250, 247, 240, 0.85);
522
- backdrop-filter: blur(2px);
523
- -webkit-backdrop-filter: blur(2px);
524
- padding: var(--cw-space-lg);
525
- border-radius: 4px;
526
- margin-left: calc(-1 * var(--cw-space-lg));
527
- margin-right: calc(-1 * var(--cw-space-lg));
528
- }
529
-
530
- /* Expectation cards (What Works / What's Rough) - solid paper background */
531
- .codeweaver-section .expectation-item {
532
- background: var(--cw-paper);
533
- }
534
-
535
- .codeweaver-section .expectation-item li {
536
- text-shadow: none;
537
- /* Card has solid background, no need */
538
- }
539
-
540
- /* === MOBILE ADJUSTMENTS === */
541
-
542
- @media (max-width: 768px) {
543
- .card-codeweaver {
544
- padding: var(--cw-space-md);
545
- }
546
-
547
- .codeweaver-accent-box {
548
- padding: var(--cw-space-sm);
549
- }
550
-
551
- .btn-codeweaver,
552
- .btn-codeweaver-secondary {
553
- width: 100%;
554
- justify-content: center;
555
- }
556
-
557
- .code-snippet {
558
- font-size: var(--font-2xs);
559
- padding: var(--cw-space-sm);
560
- }
561
- }
562
-
563
- /* === DARK MODE SUPPORT (FUTURE) === */
564
-
565
- @media (prefers-color-scheme: dark) {
566
- .codeweaver-section {
567
- /* Future: dark mode variant if needed */
568
- /* For now, maintain light technical aesthetic */
569
- }
570
- }
@@ -1,166 +0,0 @@
1
- /*
2
- * SPDX-FileCopyrightText: 2025 Knitli Inc.
3
- * SPDX-FileContributor: Adam Poulemanos <adam@knit.li>
4
- *
5
- * SPDX-License-Identifier: LicenseRef-KnitliProprietary
6
- */
7
-
8
- /* ===================================================
9
- GLOBAL STYLES - Knitli Landing Page
10
- Maximum Brand Distinctiveness Edition
11
- =================================================== */
12
-
13
- /* === RESET & BASE === */
14
-
15
- *,
16
- *::before,
17
- *::after {
18
- box-sizing: border-box;
19
- }
20
-
21
- /* Apply aggressive reset everywhere except blog content
22
- *:not(.blog-content):not(.blog-content *),
23
- *:not(.toc-collapsible):not(.toc-collapsible *),
24
- *:not(.blog-content):not(.blog-content *)::before,
25
- *:not(.toc-collapsible):not(.toc-collapsible *)::before,
26
- *:not(.blog-content):not(.blog-content *)::after,
27
- *:not(.toc-collapsible):not(.toc-collapsible *)::after {
28
- margin: 0;
29
- padding: 0;
30
- }
31
- */
32
-
33
- html {
34
- scroll-behavior: smooth;
35
- -webkit-font-smoothing: antialiased;
36
- -moz-osx-font-smoothing: grayscale;
37
- }
38
-
39
- body {
40
- min-height: 100vh;
41
- font-family: var(--font-knitli-body);
42
- color: var(--knitli-text);
43
- background: var(--knitli-parchment);
44
- line-height: 1.5;
45
- }
46
-
47
- /* === CONTAINER === */
48
-
49
- .container {
50
- width: 100%;
51
- max-width: 1200px;
52
- margin: 0 auto;
53
- padding: 0 var(--knitli-space-lg);
54
- }
55
-
56
- @media (max-width: 768px) {
57
- .container {
58
- padding: 0 var(--knitli-space-md);
59
- }
60
- }
61
-
62
- /* === SECTION SPACING === */
63
-
64
- .knitli-section {
65
- padding: var(--knitli-space-3xl) var(--knitli-space-lg);
66
- }
67
-
68
- .codeweaver-section {
69
- padding: var(--cw-space-2xl) var(--cw-space-lg);
70
- }
71
-
72
- @media (max-width: 768px) {
73
- .knitli-section {
74
- padding: var(--knitli-space-2xl) var(--knitli-space-md);
75
- }
76
-
77
- .codeweaver-section {
78
- padding: var(--cw-space-xl) var(--cw-space-md);
79
- }
80
- }
81
-
82
- /* === ACCESSIBILITY === */
83
-
84
- @media (prefers-reduced-motion: reduce) {
85
- *,
86
- *::before,
87
- *::after {
88
- animation-duration: 0.01ms;
89
- animation-iteration-count: 1;
90
- transition-duration: 0.01ms;
91
- }
92
- }
93
-
94
- .sr-only {
95
- position: absolute;
96
- width: 1px;
97
- height: 1px;
98
- padding: 0;
99
- margin: -1px;
100
- overflow: hidden;
101
- clip: rect(0, 0, 0, 0);
102
- white-space: nowrap;
103
- border: 0;
104
- }
105
-
106
- /* Focus visible (keyboard navigation) */
107
- :focus-visible {
108
- outline: 3px solid var(--knitli-rust);
109
- outline-offset: 4px;
110
- }
111
-
112
- /* === MOBILE BRAND DISTINCTION === */
113
-
114
- @media (max-width: 768px) {
115
- /* Color blocks maintain brand identity in single column */
116
- .knitli-section {
117
- border-left: 8px solid var(--knitli-rust);
118
- padding-left: 1.5rem;
119
- position: relative;
120
- }
121
-
122
- .knitli-section::after {
123
- content: "🧶";
124
- position: absolute;
125
- left: -20px;
126
- top: 2rem;
127
- font-size: var(--font-lg);
128
- background: var(--knitli-parchment);
129
- width: 40px;
130
- height: 40px;
131
- display: flex;
132
- align-items: center;
133
- justify-content: center;
134
- border-radius: 50%;
135
- box-shadow: 0 2px 8px var(--workshop-shadow);
136
- }
137
-
138
- .codeweaver-section {
139
- border-left: 8px solid var(--cw-blue-gray);
140
- padding-left: 1.5rem;
141
- position: relative;
142
- }
143
-
144
- .codeweaver-section::after {
145
- content: "";
146
- position: absolute;
147
- left: -20px;
148
- top: 2rem;
149
- font-size: var(--font-lg);
150
- background: var(--cw-crisp-white);
151
- width: 40px;
152
- height: 40px;
153
- display: flex;
154
- align-items: center;
155
- justify-content: center;
156
- border-radius: 50%;
157
- }
158
-
159
- /* Touch targets */
160
- .btn,
161
- .tab-button,
162
- a {
163
- min-height: 44px;
164
- min-width: 44px;
165
- }
166
- }