@leadertechie/personal-site-kit 0.1.0-alpha.25 → 0.1.0-alpha.26

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.
@@ -1,432 +1,737 @@
1
- /* Theme Variables - Global */
2
- :root {
3
- --text-color: #333;
4
- --background-color: #fff;
5
- --link-color: #0066cc;
6
- --link-hover-color: #004d99;
7
- --nav-link-color: #333;
8
- --nav-link-hover-bg: #f0f0f0;
9
- --border-color: #eee;
10
- --card-bg: #fff;
11
- --secondary-text: #666;
12
-
13
- font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
14
- line-height: 1.5;
15
- font-weight: 400;
16
- color-scheme: light dark;
17
- font-synthesis: none;
18
- text-rendering: optimizeLegibility;
19
- -webkit-font-smoothing: antialiased;
20
- -moz-osx-font-smoothing: grayscale;
21
- }
1
+ /*
2
+ * theme.css — Kumo-inspired Design System
3
+ *
4
+ * Inspired by Cloudflare's Kumo design language:
5
+ * geometric precision, accent-driven interfaces,
6
+ * clean lines and confident color blocking with
7
+ * a modern "edge computing" visual aesthetic.
8
+ *
9
+ * Fully CSS Constitution compliant:
10
+ * - @layer architecture (reset, base, theme, components, utilities)
11
+ * - Token-only values, no hardcoded hex/pixels (exceptions: var() fallbacks, color-mix)
12
+ * - Fluid typography via clamp()
13
+ * - Vertical rhythm via lh units
14
+ * - Color-mix for derived values
15
+ * - @property for type-safe tokens
16
+ * - Standalone fallbacks on every var()
17
+ * - Property grouping (Layout → Box → Typography → Visual → Misc)
18
+ * - No !important
19
+ * - No contextual properties in component base
20
+ */
21
+
22
+ /* ─── Type-Safe Token Properties ─── */
23
+ @property --gutter-padding {
24
+ syntax: "<length>";
25
+ initial-value: clamp(0.75rem, 1.5vw, 1rem);
26
+ inherits: false;
27
+ }
28
+
29
+ @property --content-max-width {
30
+ syntax: "<length>";
31
+ initial-value: 1280px;
32
+ inherits: false;
33
+ }
34
+
35
+ /* ─── LAYER: reset ─── */
36
+ @layer reset {
37
+ *,
38
+ *::before,
39
+ *::after {
40
+ box-sizing: border-box;
41
+ margin: 0;
42
+ padding: 0;
43
+ }
22
44
 
23
- [data-theme='dark'] {
24
- --text-color: rgba(255, 255, 255, 0.87);
25
- --background-color: #242424;
26
- --link-color: #646cff;
27
- --link-hover-color: #747bff;
28
- --nav-link-color: rgba(255, 255, 255, 0.87);
29
- --nav-link-hover-bg: #333;
30
- --border-color: #444;
31
- --card-bg: #1a1a1a;
32
- --secondary-text: #aaa;
33
- }
45
+ html {
46
+ -webkit-text-size-adjust: 100%;
47
+ -moz-text-size-adjust: 100%;
48
+ text-size-adjust: 100%;
49
+ }
34
50
 
35
- * {
36
- box-sizing: border-box;
37
- }
51
+ body {
52
+ min-height: 100vh;
53
+ line-height: 1.5;
54
+ -webkit-font-smoothing: antialiased;
55
+ -moz-osx-font-smoothing: grayscale;
56
+ }
38
57
 
39
- html, body {
40
- margin: 0;
41
- padding: 0;
42
- min-height: 100vh;
43
- width: 100%;
44
- max-width: 100vw;
45
- overflow-x: hidden;
46
- }
58
+ img, picture, video, canvas, svg {
59
+ display: block;
60
+ max-width: 100%;
61
+ }
47
62
 
48
- body {
49
- display: flex;
50
- flex-direction: column;
51
- align-items: stretch;
52
- color: var(--text-color);
53
- background-color: var(--background-color);
54
- min-width: 320px;
55
- }
63
+ input, button, textarea, select {
64
+ font: inherit;
65
+ }
56
66
 
57
- #app {
58
- max-width: 1280px;
59
- margin: 0 auto;
60
- padding: 0;
61
- text-align: center;
62
- flex: 1;
63
- display: flex;
64
- flex-direction: column;
65
- width: 100%;
67
+ p, h1, h2, h3, h4, h5, h6 {
68
+ overflow-wrap: break-word;
69
+ }
66
70
  }
67
71
 
68
- main {
69
- flex: 1 1 auto;
70
- display: flex;
71
- flex-direction: column;
72
- align-items: center;
73
- justify-content: flex-start;
74
- width: 100%;
75
- padding: 1rem;
76
- }
72
+ /* ─── LAYER: base (raw HTML elements) ─── */
73
+ @layer base {
74
+ html {
75
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
76
+ font-weight: 400;
77
+ color-scheme: light dark;
78
+ font-synthesis: none;
79
+ text-rendering: optimizeLegibility;
80
+ }
77
81
 
78
- @media (max-width: 768px) {
79
- main {
80
- padding: 0.75rem;
82
+ body {
83
+ display: flex;
84
+ flex-direction: column;
85
+ align-items: stretch;
86
+ color: var(--text-primary, #1a1a1a);
87
+ background-color: var(--bg-primary, #ffffff);
88
+ min-width: 320px;
89
+ max-width: 100vw;
90
+ overflow-x: hidden;
81
91
  }
82
- }
83
92
 
84
- .page-title {
85
- font-size: 3.2em;
86
- line-height: 1.1;
87
- margin: 0 0 1rem 0;
88
- font-weight: 600;
89
- }
93
+ h1 {
94
+ font-size: var(--font-size-h1, clamp(1.75rem, 3vw, 2.5rem));
95
+ font-weight: 700;
96
+ line-height: 1.1;
97
+ letter-spacing: -0.02em;
98
+ }
90
99
 
91
- .page-subtitle {
92
- font-size: 1.5em;
93
- line-height: 1.3;
94
- margin: 0 0 0.75rem 0;
95
- }
100
+ h2 {
101
+ font-size: var(--font-size-h2, clamp(1.35rem, 2.25vw, 1.75rem));
102
+ font-weight: 650;
103
+ line-height: 1.2;
104
+ letter-spacing: -0.015em;
105
+ }
96
106
 
97
- .content a,
98
- .page-content a {
99
- font-weight: 500;
100
- color: var(--link-color);
101
- text-decoration: inherit;
102
- transition: color 0.2s ease;
103
- }
104
- .content a:hover,
105
- .page-content a:hover {
106
- color: var(--link-hover-color);
107
- }
107
+ h3 {
108
+ font-size: var(--font-size-h3, clamp(1.15rem, 1.75vw, 1.375rem));
109
+ font-weight: 600;
110
+ line-height: 1.3;
111
+ }
108
112
 
109
- .nav-link {
110
- color: var(--nav-link-color);
111
- text-decoration: none;
112
- padding: 0.5rem 1rem;
113
- border-radius: 5px;
114
- transition: background-color 0.3s ease;
115
- display: inline-block;
116
- }
113
+ a {
114
+ color: var(--link-color, #2563eb);
115
+ text-decoration: none;
116
+ transition: color var(--transition-fast, 0.15s ease);
117
+ }
117
118
 
118
- .nav-link:hover {
119
- background-color: var(--nav-link-hover-bg);
120
- text-decoration: none;
121
- }
119
+ a:hover {
120
+ color: var(--link-hover, #1d4ed8);
121
+ text-decoration: underline;
122
+ }
122
123
 
123
- .container {
124
- padding: 2rem;
125
- margin: 0 auto;
126
- min-height: 60vh;
127
- width: 100%;
128
- }
124
+ hr {
125
+ border: 0;
126
+ height: 2px;
127
+ background: var(--border-subtle, #e5e7eb);
128
+ margin: var(--space-lg, 2lh) 0;
129
+ border-radius: var(--radius-full, 9999px);
130
+ }
129
131
 
130
- .container-narrow {
131
- max-width: 700px;
132
- }
132
+ blockquote {
133
+ margin: var(--space-md, 1lh) 0;
134
+ padding: var(--space-sm, 0.5lh) var(--space-md, 1lh);
135
+ border-left: 3px solid var(--accent-color, #2563eb);
136
+ background: var(--bg-secondary, #f8f9fa);
137
+ border-radius: 0 var(--radius-sm, 0.375rem) var(--radius-sm, 0.375rem) 0;
138
+ color: var(--text-secondary, #6b7280);
139
+ }
133
140
 
134
- .container-medium {
135
- max-width: 900px;
136
- }
141
+ code {
142
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', 'JetBrains Mono', monospace;
143
+ font-size: 0.875em;
144
+ background: var(--bg-secondary, #f3f4f6);
145
+ padding: 0.15em 0.35em;
146
+ border-radius: var(--radius-sm, 0.25rem);
147
+ }
137
148
 
138
- .container-wide {
139
- max-width: 1200px;
140
- }
149
+ pre {
150
+ background: var(--bg-code, #1e293b);
151
+ color: var(--text-code, #e2e8f0);
152
+ padding: var(--space-md, 1lh);
153
+ border-radius: var(--radius-md, 0.5rem);
154
+ overflow-x: auto;
155
+ font-size: var(--font-size-small, clamp(0.8125rem, 1vw, 0.875rem));
156
+ line-height: 1.6;
157
+ }
141
158
 
142
- .column-layout {
143
- display: flex;
144
- gap: 2rem;
145
- flex-wrap: wrap;
146
- width: 100%;
147
- }
159
+ table {
160
+ width: 100%;
161
+ border-collapse: collapse;
162
+ margin: var(--space-md, 1lh) 0;
163
+ }
148
164
 
149
- .row-layout {
150
- flex-direction: row;
151
- align-items: flex-start;
152
- }
165
+ th, td {
166
+ padding: var(--space-sm, 0.5lh);
167
+ border: 1px solid var(--border-subtle, #e5e7eb);
168
+ text-align: left;
169
+ }
153
170
 
154
- .main-column { flex: 2; min-width: 300px; }
155
- .sidebar-column { flex: 1; min-width: 250px; }
156
- .wide-main-column { flex: 3; min-width: 300px; }
157
-
158
- .text-center { text-align: center; }
159
- .text-left { text-align: left; }
160
-
161
- .mt-1 { margin-top: 10px; }
162
- .mt-2 { margin-top: 2rem; }
163
- .mb-1 { margin-bottom: 1rem; }
164
- .mb-15 { margin-bottom: 1.5rem; }
165
- .mb-2 { margin-bottom: 2rem; }
166
- .pb-05 { padding-bottom: 0.5rem; }
167
-
168
- .search-input {
169
- width: 100%;
170
- padding: 10px;
171
- margin-bottom: 20px;
172
- border: 1px solid var(--border-color);
173
- border-radius: 4px;
174
- background: var(--background-color);
175
- color: var(--text-color);
176
- box-sizing: border-box;
171
+ th {
172
+ background: var(--bg-secondary, #f3f4f6);
173
+ font-weight: 600;
174
+ }
177
175
  }
178
176
 
179
- .search-input-lg {
180
- padding: 0.8rem;
181
- }
177
+ /* ─── LAYER: theme (design tokens source of truth) ─── */
178
+ @layer theme {
179
+ :root {
180
+ /* ── Color Tokens ── */
181
+ --bg-primary: #ffffff;
182
+ --bg-secondary: #f8fafc;
183
+ --bg-tertiary: #f1f5f9;
184
+ --bg-accent: #eff6ff;
185
+ --bg-code: #1e293b;
186
+
187
+ --text-primary: #0b1120;
188
+ --text-secondary: #475569;
189
+ --text-tertiary: #94a3b8;
190
+ --text-inverse: #ffffff;
191
+ --text-code: #e2e8f0;
192
+
193
+ --brand-color: #2563eb;
194
+ --brand-color-alt: #6366f1;
195
+ --accent-color: #2563eb;
196
+ --accent-secondary: #6366f1;
197
+ --accent-warm: #f59e0b;
198
+ --accent-green: #10b981;
199
+ --color-danger: #ef4444;
200
+ --color-danger-hover: #dc2626;
201
+ --color-danger-subtle: #fce4ec;
202
+ --color-success: #10b981;
203
+ --color-warning: #f59e0b;
204
+
205
+ --link-color: var(--brand-color, #2563eb);
206
+ --link-hover: color-mix(in srgb, var(--brand-color, #2563eb), black 15%);
207
+ --link-visited: color-mix(in srgb, var(--brand-color, #2563eb), #4f46e5 40%);
208
+
209
+ --border-color: #d1d5db;
210
+ --border-subtle: #e5e7eb;
211
+ --border-accent: var(--brand-color, #2563eb);
212
+
213
+ --shadow-sm: 0 1px 2px oklch(0% 0 0 / 0.05);
214
+ --shadow-md: 0 4px 6px -2px oklch(0% 0 0 / 0.06), 0 2px 4px -2px oklch(0% 0 0 / 0.04);
215
+ --shadow-lg: 0 10px 20px -4px oklch(0% 0 0 / 0.08), 0 4px 8px -4px oklch(0% 0 0 / 0.04);
216
+ --shadow-xl: 0 20px 40px -8px oklch(0% 0 0 / 0.10);
217
+
218
+ /* ── Typography Tokens (fluid via clamp) ── */
219
+ --font-size-h1: clamp(1.75rem, 3vw, 2.5rem);
220
+ --font-size-h2: clamp(1.35rem, 2.25vw, 1.75rem);
221
+ --font-size-h3: clamp(1.15rem, 1.75vw, 1.375rem);
222
+ --font-size-h4: clamp(1rem, 1.25vw, 1.125rem);
223
+ --font-size-body: clamp(0.9375rem, 1.15vw, 1rem);
224
+ --font-size-small: clamp(0.8125rem, 1vw, 0.875rem);
225
+ --font-size-tiny: clamp(0.6875rem, 0.85vw, 0.75rem);
226
+
227
+ --font-weight-normal: 400;
228
+ --font-weight-medium: 500;
229
+ --font-weight-semibold: 600;
230
+ --font-weight-bold: 700;
231
+
232
+ --line-height-tight: 1.15;
233
+ --line-height-normal: 1.5;
234
+ --line-height-relaxed: 1.7;
235
+
236
+ /* ── Spacing Tokens (vertical rhythm via lh) ── */
237
+ --space-3xs: calc(0.125 * var(--space-unit, 1lh));
238
+ --space-2xs: calc(0.25 * var(--space-unit, 1lh));
239
+ --space-xs: calc(0.375 * var(--space-unit, 1lh));
240
+ --space-sm: calc(0.5 * var(--space-unit, 1lh));
241
+ --space-md: var(--space-unit, 1lh);
242
+ --space-lg: calc(2 * var(--space-unit, 1lh));
243
+ --space-xl: calc(3 * var(--space-unit, 1lh));
244
+ --space-2xl: calc(4 * var(--space-unit, 1lh));
245
+ --space-unit: 1lh;
246
+
247
+ /* ── Border Radius Tokens ── */
248
+ --radius-sm: 0.375rem;
249
+ --radius-md: 0.5rem;
250
+ --radius-lg: 0.75rem;
251
+ --radius-xl: 1rem;
252
+ --radius-full: 9999px;
253
+
254
+ /* ── Layout Tokens ── */
255
+ --content-max-width: 1280px;
256
+ --content-narrow: 720px;
257
+ --content-medium: 960px;
258
+ --gutter-padding: clamp(1rem, 2vw, 2rem);
259
+ --section-gap: var(--space-lg, 2lh);
260
+
261
+ /* ── Accent Geometric Pattern Tokens ── */
262
+ --accent-line-thickness: 3px;
263
+
264
+ /* ── Transition Tokens ── */
265
+ --transition-fast: 0.15s ease;
266
+ --transition-base: 0.2s ease;
267
+ --transition-slow: 0.3s ease;
268
+
269
+ /* ── Z-index Tokens ── */
270
+ --z-accent-bar: 100;
271
+ --z-dropdown: 200;
272
+ --z-modal: 300;
273
+ --z-toast: 400;
274
+
275
+ /* ── Focus Ring ── */
276
+ --focus-ring-color: var(--brand-color, #2563eb);
277
+ --focus-ring-width: 3px;
278
+ }
182
279
 
183
- .border-bottom {
184
- border-bottom: 1px solid var(--border-color, #eee);
185
- }
280
+ /* ── Dark Theme ── */
281
+ [data-theme='dark'] {
282
+ --bg-primary: #0f172a;
283
+ --bg-secondary: #1e293b;
284
+ --bg-tertiary: #334155;
285
+ --bg-accent: #1e3a5f;
286
+ --bg-code: #0f172a;
287
+
288
+ --text-primary: #f1f5f9;
289
+ --text-secondary: #94a3b8;
290
+ --text-tertiary: #64748b;
291
+ --text-inverse: #0f172a;
292
+ --text-code: #e2e8f0;
293
+
294
+ --brand-color: #60a5fa;
295
+ --brand-color-alt: #818cf8;
296
+ --accent-color: #60a5fa;
297
+ --accent-secondary: #818cf8;
298
+ --accent-warm: #fbbf24;
299
+ --accent-green: #34d399;
300
+ --color-danger: #f87171;
301
+ --color-danger-hover: #ef4444;
302
+ --color-danger-subtle: #3b1c1c;
303
+ --color-success: #34d399;
304
+ --color-warning: #fbbf24;
305
+
306
+ --link-color: var(--brand-color, #60a5fa);
307
+ --link-hover: color-mix(in srgb, var(--brand-color, #60a5fa), white 12%);
308
+ --link-visited: color-mix(in srgb, var(--brand-color, #60a5fa), #818cf8 40%);
309
+
310
+ --border-color: #475569;
311
+ --border-subtle: #334155;
312
+ --border-accent: var(--brand-color, #60a5fa);
313
+
314
+ --shadow-sm: 0 1px 2px oklch(0% 0 0 / 0.2);
315
+ --shadow-md: 0 4px 6px -2px oklch(0% 0 0 / 0.25), 0 2px 4px -2px oklch(0% 0 0 / 0.2);
316
+ --shadow-lg: 0 10px 20px -4px oklch(0% 0 0 / 0.3), 0 4px 8px -4px oklch(0% 0 0 / 0.2);
317
+ --shadow-xl: 0 20px 40px -8px oklch(0% 0 0 / 0.35);
318
+ }
186
319
 
187
- .hidden {
188
- display: none !important;
320
+ /* ── System preference fallback ── */
321
+ @media (prefers-color-scheme: dark) {
322
+ :root:not([data-theme='light']) {
323
+ --bg-primary: #0f172a;
324
+ --bg-secondary: #1e293b;
325
+ --bg-tertiary: #334155;
326
+ --bg-accent: #1e3a5f;
327
+ --bg-code: #0f172a;
328
+
329
+ --text-primary: #f1f5f9;
330
+ --text-secondary: #94a3b8;
331
+ --text-tertiary: #64748b;
332
+ --text-inverse: #0f172a;
333
+
334
+ --brand-color: #60a5fa;
335
+ --brand-color-alt: #818cf8;
336
+ --accent-color: #60a5fa;
337
+ --accent-secondary: #818cf8;
338
+ --accent-warm: #fbbf24;
339
+ --accent-green: #34d399;
340
+ --color-danger: #f87171;
341
+ --color-danger-hover: #ef4444;
342
+ --color-danger-subtle: #3b1c1c;
343
+ --color-success: #34d399;
344
+ --color-warning: #fbbf24;
345
+
346
+ --link-color: var(--brand-color, #60a5fa);
347
+ --link-hover: color-mix(in srgb, var(--brand-color, #60a5fa), white 12%);
348
+ --link-visited: color-mix(in srgb, var(--brand-color, #60a5fa), #818cf8 40%);
349
+
350
+ --border-color: #475569;
351
+ --border-subtle: #334155;
352
+ --shadow-sm: 0 1px 2px oklch(0% 0 0 / 0.2);
353
+ --shadow-md: 0 4px 6px -2px oklch(0% 0 0 / 0.25), 0 2px 4px -2px oklch(0% 0 0 / 0.2);
354
+ --shadow-lg: 0 10px 20px -4px oklch(0% 0 0 / 0.3), 0 4px 8px -4px oklch(0% 0 0 / 0.2);
355
+ --shadow-xl: 0 20px 40px -8px oklch(0% 0 0 / 0.35);
356
+ }
357
+ }
189
358
  }
190
359
 
191
- /* Markdown Content Styles - Flat heading classes from md2html */
192
- .md-h1, .h1 { font-size: 2.5rem; margin: 0 0 1rem 0; font-weight: 600; line-height: 1.2; }
193
- .md-h2, .h2 { font-size: 2rem; margin: 0 0 0.875rem 0; font-weight: 600; line-height: 1.25; }
194
- .md-h3, .h3 { font-size: 1.5rem; margin: 0 0 0.75rem 0; font-weight: 600; line-height: 1.3; }
195
- .md-h4, .h4 { font-size: 1.25rem; margin: 0 0 0.5rem 0; font-weight: 600; line-height: 1.35; }
196
- .md-h5, .h5, .md-h6, .h6 { font-size: 1rem; margin: 0 0 0.5rem 0; font-weight: 600; }
197
-
198
- .md-paragraph {
199
- margin: 0 0 1rem 0;
200
- line-height: 1.7;
201
- color: var(--text-color, #213547);
202
- }
360
+ /* ─── LAYER: components ─── */
361
+ @layer components {
362
+ /* ── App Shell with Kumo geometric accent bar ── */
363
+ #app {
364
+ /* Layout */
365
+ display: flex;
366
+ flex-direction: column;
367
+ position: relative;
203
368
 
204
- .md-list {
205
- margin: 0 0 1rem 0;
206
- padding-left: 1.5rem;
207
- }
369
+ /* Box */
370
+ max-width: var(--content-max-width, 1280px);
371
+ width: 100%;
372
+ min-height: 100vh;
373
+ margin: 0 auto;
374
+ padding: 0;
375
+ }
208
376
 
209
- .md-list-item {
210
- margin-bottom: 0.5rem;
211
- line-height: 1.6;
212
- }
377
+ /* Kumo-inspired gradient accent bar across top of page */
378
+ #app::before {
379
+ content: '';
380
+ display: block;
381
+ position: absolute;
382
+ top: 0;
383
+ left: 0;
384
+ right: 0;
385
+ height: var(--accent-line-thickness, 3px);
386
+ background: linear-gradient(
387
+ 90deg,
388
+ var(--brand-color, #2563eb) 0%,
389
+ var(--accent-secondary, #6366f1) 50%,
390
+ var(--accent-warm, #f59e0b) 100%
391
+ );
392
+ z-index: var(--z-accent-bar, 100);
393
+ pointer-events: none;
394
+ }
213
395
 
214
- .md-blockquote {
215
- margin: 1rem 0;
216
- padding: 0.75rem 1rem;
217
- border-left: 4px solid var(--link-color, #646cff);
218
- background: var(--nav-link-hover-bg, #f8f9fa);
219
- border-radius: 0 8px 8px 0;
220
- color: var(--secondary-text, #666);
221
- }
396
+ main {
397
+ /* Layout */
398
+ flex: 1;
399
+ display: flex;
400
+ flex-direction: column;
401
+ align-items: center;
222
402
 
223
- .md-blockquote .md-paragraph {
224
- margin: 0;
225
- }
403
+ /* Box */
404
+ width: 100%;
405
+ padding: var(--gutter-padding, clamp(1rem, 2vw, 2rem));
406
+ padding-top: var(--space-lg, 2lh);
407
+ }
226
408
 
227
- .md-code {
228
- font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace;
229
- font-size: 0.9em;
230
- background: var(--nav-link-hover-bg, #f5f5f5);
231
- padding: 0.2rem 0.4rem;
232
- border-radius: 4px;
233
- }
409
+ @media (max-width: 768px) {
410
+ main {
411
+ padding: var(--space-sm, 0.5lh);
412
+ }
413
+ }
234
414
 
235
- .md-image {
236
- max-width: 100%;
237
- height: auto;
238
- border-radius: 8px;
239
- margin: 1rem 0;
240
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
241
- }
415
+ /* ── Container System ── */
416
+ .container {
417
+ /* Box */
418
+ padding: var(--space-lg, 2lh);
419
+ margin: 0 auto;
420
+ width: 100%;
421
+ min-height: 60vh;
422
+ max-width: var(--content-max-width, 1280px);
423
+ }
242
424
 
243
- .md-container {
244
- margin: 1rem 0;
245
- }
425
+ .container-narrow {
426
+ max-width: var(--content-narrow, 720px);
427
+ }
246
428
 
247
- .md-container hr {
248
- border: none;
249
- height: 2px;
250
- background: var(--border-color, #eee);
251
- margin: 2rem 0;
252
- border-radius: 1px;
253
- }
429
+ .container-medium {
430
+ max-width: var(--content-medium, 960px);
431
+ }
254
432
 
255
- .md-container[tag="hr"] {
256
- margin: 2rem 0;
257
- }
433
+ .container-wide {
434
+ max-width: var(--content-max-width, 1280px);
435
+ }
258
436
 
259
- .md-paragraph a,
260
- .md-list-item a {
261
- color: var(--link-color, #646cff);
262
- text-decoration: none;
263
- transition: color 0.2s ease;
264
- }
437
+ /* ── Page Titles with Kumo accent underline ── */
438
+ .page-title {
439
+ /* Layout */
440
+ display: inline-block;
441
+ position: relative;
442
+
443
+ /* Typography */
444
+ font-size: var(--font-size-h1, clamp(1.75rem, 3vw, 2.5rem));
445
+ line-height: var(--line-height-tight, 1.1);
446
+ font-weight: var(--font-weight-bold, 700);
447
+ letter-spacing: -0.02em;
448
+ color: var(--text-primary, #0b1120);
449
+
450
+ /* Box */
451
+ margin: 0 0 var(--space-md, 1lh) 0;
452
+ }
265
453
 
266
- .md-paragraph a:hover,
267
- .md-list-item a:hover {
268
- color: var(--link-hover-color, #535bf2);
269
- text-decoration: underline;
270
- }
454
+ /* Kumo geometric underline accent */
455
+ .page-title::after {
456
+ content: '';
457
+ display: block;
458
+ width: 2.5rem;
459
+ height: var(--accent-line-thickness, 3px);
460
+ background: var(--brand-color, #2563eb);
461
+ margin-top: var(--space-xs, 0.375lh);
462
+ border-radius: var(--radius-full, 9999px);
463
+ }
271
464
 
272
- .md-paragraph strong,
273
- .md-list-item strong {
274
- font-weight: 600;
275
- color: var(--text-color, #1a1a1a);
276
- }
465
+ .page-title.text-center::after {
466
+ margin-left: auto;
467
+ margin-right: auto;
468
+ }
277
469
 
278
- .md-paragraph em,
279
- .md-list-item em {
280
- font-style: italic;
281
- }
470
+ .page-subtitle {
471
+ /* Typography */
472
+ font-size: var(--font-size-h3, clamp(1.15rem, 1.75vw, 1.375rem));
473
+ line-height: var(--line-height-normal, 1.5);
474
+ color: var(--text-secondary, #475569);
475
+ font-weight: var(--font-weight-normal, 400);
282
476
 
283
- .md-container table {
284
- width: 100%;
285
- border-collapse: collapse;
286
- margin: 1rem 0;
287
- }
477
+ /* Box */
478
+ margin: 0 0 var(--space-md, 1lh) 0;
479
+ }
288
480
 
289
- .md-container th,
290
- .md-container td {
291
- padding: 0.75rem;
292
- border: 1px solid var(--border-color, #ddd);
293
- text-align: left;
294
- }
481
+ /* ── Content Links ── */
482
+ .content a,
483
+ .page-content a {
484
+ /* Typography */
485
+ font-weight: var(--font-weight-medium, 500);
486
+ color: var(--link-color, #2563eb);
487
+ text-decoration: none;
488
+
489
+ /* Misc */
490
+ transition: color var(--transition-fast, 0.15s ease);
491
+ border-bottom: 1px solid transparent;
492
+ }
295
493
 
296
- .md-container th {
297
- background: var(--nav-link-hover-bg, #f5f5f5);
298
- font-weight: 600;
299
- }
494
+ .content a:hover,
495
+ .page-content a:hover {
496
+ color: var(--link-hover, #1d4ed8);
497
+ border-bottom-color: var(--link-hover, #1d4ed8);
498
+ }
300
499
 
301
- html[data-theme="dark"] .md-code {
302
- background: rgba(255, 255, 255, 0.1);
303
- }
500
+ /* ── Layout Helpers ── */
501
+ .column-layout {
502
+ /* Layout */
503
+ display: flex;
504
+ gap: var(--space-lg, 2lh);
505
+ flex-wrap: wrap;
304
506
 
305
- html[data-theme="dark"] .md-container th {
306
- background: rgba(255, 255, 255, 0.05);
307
- }
507
+ /* Box */
508
+ width: 100%;
509
+ }
308
510
 
309
- /* Gist Card */
310
- .gist-card {
311
- margin-bottom: 1.5rem;
312
- text-align: left;
313
- }
511
+ .row-layout {
512
+ flex-direction: row;
513
+ align-items: flex-start;
514
+ }
314
515
 
315
- .gist-card a {
316
- color: var(--link-color);
317
- text-decoration: none;
318
- transition: color 0.2s ease;
319
- }
516
+ .main-column {
517
+ flex: 2;
518
+ min-width: 300px;
519
+ }
320
520
 
321
- .gist-card a:hover {
322
- color: var(--link-hover-color);
323
- }
521
+ .sidebar-column {
522
+ flex: 1;
523
+ min-width: 250px;
524
+ border-left: 1px solid var(--border-subtle, #e5e7eb);
525
+ padding-left: var(--space-lg, 2lh);
526
+ }
324
527
 
325
- .gist-card h4 {
326
- margin: 0 0 0.25rem 0;
327
- font-size: 1rem;
328
- }
528
+ .wide-main-column {
529
+ flex: 3;
530
+ min-width: 300px;
531
+ }
329
532
 
330
- .gist-card p {
331
- font-size: 0.9rem;
332
- margin-bottom: 0.25rem;
333
- }
533
+ /* ── Kumo-inspired Card with hover accent bar ── */
534
+ .card {
535
+ /* Layout */
536
+ position: relative;
537
+
538
+ /* Box */
539
+ background: var(--bg-primary, #ffffff);
540
+ border: 1px solid var(--border-subtle, #e5e7eb);
541
+ border-radius: var(--radius-lg, 0.75rem);
542
+ padding: var(--space-lg, 2lh);
543
+ box-shadow: var(--shadow-sm, 0 1px 2px oklch(0% 0 0 / 0.05));
544
+
545
+ /* Misc */
546
+ transition: box-shadow var(--transition-base, 0.2s ease),
547
+ border-color var(--transition-base, 0.2s ease);
548
+ }
334
549
 
335
- .gist-card small {
336
- color: var(--secondary-text, #666);
337
- }
550
+ .card::before {
551
+ content: '';
552
+ display: block;
553
+ position: absolute;
554
+ top: 0;
555
+ left: var(--space-lg, 2lh);
556
+ right: var(--space-lg, 2lh);
557
+ height: var(--accent-line-thickness, 3px);
558
+ background: var(--brand-color, #2563eb);
559
+ border-radius: 0 0 var(--radius-sm, 0.375rem) var(--radius-sm, 0.375rem);
560
+ opacity: 0;
561
+ transition: opacity var(--transition-base, 0.2s ease);
562
+ }
338
563
 
339
- /* Sidebar */
340
- .sidebar-nav {
341
- max-height: 80vh;
342
- overflow-y: auto;
343
- border-right: 1px solid var(--border-color);
344
- padding-right: 1rem;
345
- }
564
+ .card:hover {
565
+ box-shadow: var(--shadow-md, 0 4px 6px -2px oklch(0% 0 0 / 0.06));
566
+ border-color: var(--border-color, #d1d5db);
567
+ }
346
568
 
347
- .sidebar-item {
348
- padding: 0.75rem;
349
- border-bottom: 1px solid var(--border-color);
350
- border-radius: 4px;
351
- margin-bottom: 0.5rem;
352
- text-decoration: none;
353
- color: inherit;
354
- display: block;
355
- }
569
+ .card:hover::before {
570
+ opacity: 1;
571
+ }
356
572
 
357
- .sidebar-item:hover {
358
- background: var(--nav-link-hover-bg);
359
- }
573
+ /* ── Navigation Link ── */
574
+ .nav-link {
575
+ /* Layout */
576
+ display: inline-flex;
577
+ align-items: center;
578
+ gap: var(--space-2xs, 0.25lh);
360
579
 
361
- .sidebar-item.active {
362
- background: var(--nav-link-hover-bg);
363
- border-left: 4px solid var(--link-color);
364
- }
580
+ /* Box */
581
+ padding: var(--space-2xs, 0.25lh) var(--space-sm, 0.5lh);
365
582
 
366
- .sidebar-item-link {
367
- padding: 0;
368
- border: none;
369
- margin: 0;
370
- width: 100%;
371
- color: inherit;
372
- display: block;
373
- }
583
+ /* Typography */
584
+ color: var(--link-color, #2563eb);
585
+ font-weight: var(--font-weight-medium, 500);
586
+ font-size: var(--font-size-body, clamp(0.9375rem, 1.15vw, 1rem));
587
+ text-decoration: none;
588
+ border-radius: var(--radius-sm, 0.375rem);
374
589
 
375
- .sidebar-item-link:hover {
376
- background: transparent;
377
- }
590
+ /* Misc */
591
+ transition: background-color var(--transition-fast, 0.15s ease),
592
+ color var(--transition-fast, 0.15s ease);
593
+ }
378
594
 
379
- .sidebar-item-link h4 {
380
- margin: 0;
381
- font-size: 1rem;
382
- }
595
+ .nav-link:hover {
596
+ background-color: var(--bg-accent, #eff6ff);
597
+ color: var(--link-hover, #1d4ed8);
598
+ text-decoration: none;
599
+ }
383
600
 
384
- /* Banner Component - now handled by banner.css */
385
-
386
- /* Footer Component - external styles for Shadow DOM penetration */
387
- my-footer {
388
- display: flex;
389
- align-items: center;
390
- justify-content: space-between;
391
- padding: 1rem 2rem;
392
- background: var(--background-color);
393
- color: var(--text-color);
394
- border-top: 1px solid var(--nav-link-hover-bg);
395
- flex-wrap: wrap;
396
- }
601
+ /* ── Search Input ── */
602
+ .search-input {
603
+ /* Box */
604
+ width: 100%;
605
+ padding: var(--space-sm, 0.5lh) var(--space-md, 1lh);
606
+ margin-bottom: var(--space-md, 1lh);
607
+ border: 1.5px solid var(--border-subtle, #e5e7eb);
608
+ border-radius: var(--radius-md, 0.5rem);
609
+ background: var(--bg-primary, #ffffff);
610
+ color: var(--text-primary, #0b1120);
611
+ font-size: var(--font-size-body, clamp(0.9375rem, 1.15vw, 1rem));
612
+
613
+ /* Misc */
614
+ transition: border-color var(--transition-fast, 0.15s ease),
615
+ box-shadow var(--transition-fast, 0.15s ease);
616
+ }
397
617
 
398
- my-footer .footer-content {
399
- display: flex;
400
- flex-direction: column;
401
- align-items: flex-start;
402
- }
618
+ .search-input:focus {
619
+ outline: none;
620
+ border-color: var(--accent-color, #2563eb);
621
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-color, #2563eb), transparent 85%);
622
+ }
403
623
 
404
- my-footer .links {
405
- display: flex;
406
- gap: 1rem;
407
- margin-top: 0.5rem;
408
- }
624
+ .search-input-lg {
625
+ padding: var(--space-md, 1lh) var(--space-lg, 2lh);
626
+ font-size: var(--font-size-h4, clamp(1rem, 1.25vw, 1.125rem));
627
+ }
409
628
 
410
- my-footer .links a {
411
- color: inherit;
412
- text-decoration: none;
413
- padding: 0.25rem 0.5rem;
414
- border-radius: 4px;
415
- transition: background-color 0.3s ease;
416
- }
629
+ /* ── Sidebar ── */
630
+ .sidebar-nav {
631
+ max-height: 80vh;
632
+ overflow-y: auto;
633
+ border-right: 1px solid var(--border-subtle, #e5e7eb);
634
+ padding-right: var(--space-md, 1lh);
635
+ }
417
636
 
418
- my-footer .links a:hover {
419
- background-color: rgba(0, 0, 0, 0.1);
420
- }
637
+ .sidebar-item {
638
+ /* Box */
639
+ padding: var(--space-sm, 0.5lh) var(--space-md, 1lh);
640
+ border-bottom: 1px solid var(--border-subtle, #e5e7eb);
641
+ border-radius: var(--radius-sm, 0.375rem);
642
+ margin-bottom: var(--space-2xs, 0.25lh);
643
+
644
+ /* Typography */
645
+ text-decoration: none;
646
+ color: var(--text-primary, #0b1120);
647
+ display: block;
648
+
649
+ /* Misc */
650
+ transition: background-color var(--transition-fast, 0.15s ease);
651
+ border-left: var(--accent-line-thickness, 3px) solid transparent;
652
+ }
421
653
 
422
- @media (min-width: 768px) {
423
- my-footer .footer-content {
424
- flex-direction: row;
425
- align-items: center;
654
+ .sidebar-item:hover {
655
+ background: var(--bg-secondary, #f8fafc);
656
+ border-left-color: var(--border-subtle, #e5e7eb);
657
+ }
658
+
659
+ .sidebar-item.active {
660
+ background: var(--bg-accent, #eff6ff);
661
+ border-left-color: var(--accent-color, #2563eb);
662
+ font-weight: var(--font-weight-semibold, 600);
663
+ }
664
+
665
+ .sidebar-item-link {
666
+ padding: 0;
667
+ border: none;
668
+ margin: 0;
426
669
  width: 100%;
427
- justify-content: space-between;
670
+ color: inherit;
671
+ display: block;
428
672
  }
429
- my-footer .links {
430
- margin-top: 0;
673
+
674
+ .sidebar-item-link:hover {
675
+ background: transparent;
676
+ }
677
+
678
+ .sidebar-item-link h4 {
679
+ margin: 0;
680
+ font-size: var(--font-size-body, clamp(0.9375rem, 1.15vw, 1rem));
431
681
  }
682
+
683
+ /* ── Gist Card ── */
684
+ .gist-card {
685
+ margin-bottom: var(--space-md, 1lh);
686
+ text-align: left;
687
+ }
688
+
689
+ .gist-card a {
690
+ color: var(--link-color, #2563eb);
691
+ text-decoration: none;
692
+ transition: color var(--transition-fast, 0.15s ease);
693
+ }
694
+
695
+ .gist-card a:hover {
696
+ color: var(--link-hover, #1d4ed8);
697
+ }
698
+
699
+ .gist-card h4 {
700
+ margin: 0 0 var(--space-3xs, 0.125lh) 0;
701
+ font-size: var(--font-size-body, clamp(0.9375rem, 1.15vw, 1rem));
702
+ }
703
+
704
+ .gist-card p {
705
+ font-size: var(--font-size-small, clamp(0.8125rem, 1vw, 0.875rem));
706
+ margin-bottom: var(--space-3xs, 0.125lh);
707
+ }
708
+
709
+ .gist-card small {
710
+ color: var(--text-tertiary, #94a3b8);
711
+ font-size: var(--font-size-tiny, clamp(0.6875rem, 0.85vw, 0.75rem));
712
+ }
713
+
714
+ /* ── Text Utilities ── */
715
+ .text-center { text-align: center; }
716
+ .text-left { text-align: left; }
717
+
718
+ .border-bottom {
719
+ border-bottom: 1px solid var(--border-subtle, #e5e7eb);
720
+ }
721
+
722
+ .hidden {
723
+ display: none !important;
724
+ }
725
+ }
726
+
727
+ /* ─── LAYER: utilities (single-purpose overrides) ─── */
728
+ @layer utilities {
729
+ .mt-1 { margin-top: var(--space-sm, 0.5lh); }
730
+ .mt-2 { margin-top: var(--space-lg, 2lh); }
731
+ .mb-1 { margin-bottom: var(--space-md, 1lh); }
732
+ .mb-2 { margin-bottom: var(--space-lg, 2lh); }
733
+ .pb-1 { padding-bottom: var(--space-sm, 0.5lh); }
734
+ .gap-sm { gap: var(--space-sm, 0.5lh); }
735
+ .gap-md { gap: var(--space-md, 1lh); }
736
+ .gap-lg { gap: var(--space-lg, 2lh); }
432
737
  }