heyiam 0.2.28 → 0.3.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 (177) hide show
  1. package/README.md +45 -0
  2. package/dist/config.js +10 -1
  3. package/dist/db.js +1 -2
  4. package/dist/export.js +40 -25
  5. package/dist/format-utils.js +5 -0
  6. package/dist/index.js +168 -0
  7. package/dist/mount.js +300 -102
  8. package/dist/parsers/claude.js +2 -28
  9. package/dist/parsers/codex.js +2 -26
  10. package/dist/parsers/cursor.js +2 -26
  11. package/dist/parsers/duration.js +35 -0
  12. package/dist/parsers/gemini.js +2 -20
  13. package/dist/parsers/types.js +0 -1
  14. package/dist/public/assets/index-BZ65TU_Y.js +40 -0
  15. package/dist/public/assets/index-CqCaW2cb.css +1 -0
  16. package/dist/public/index.html +2 -2
  17. package/dist/redact.js +4 -104
  18. package/dist/render/build-render-data.js +9 -2
  19. package/dist/render/index.js +32 -5
  20. package/dist/render/liquid.js +147 -7
  21. package/dist/render/mock-data.js +303 -0
  22. package/dist/render/templates/aurora/portfolio.liquid +204 -0
  23. package/dist/render/templates/aurora/project.liquid +260 -0
  24. package/dist/render/templates/aurora/session.liquid +223 -0
  25. package/dist/render/templates/aurora/styles.css +1178 -0
  26. package/dist/render/templates/bauhaus/portfolio.liquid +179 -0
  27. package/dist/render/templates/bauhaus/project.liquid +300 -0
  28. package/dist/render/templates/bauhaus/session.liquid +333 -0
  29. package/dist/render/templates/bauhaus/styles.css +1641 -0
  30. package/dist/render/templates/blueprint/portfolio.liquid +167 -0
  31. package/dist/render/templates/blueprint/project.liquid +286 -0
  32. package/dist/render/templates/blueprint/session.liquid +248 -0
  33. package/dist/render/templates/blueprint/styles.css +1285 -0
  34. package/dist/render/templates/canvas/portfolio.liquid +215 -0
  35. package/dist/render/templates/canvas/project.liquid +235 -0
  36. package/dist/render/templates/canvas/session.liquid +223 -0
  37. package/dist/render/templates/canvas/styles.css +1436 -0
  38. package/dist/render/templates/carbon/portfolio.liquid +170 -0
  39. package/dist/render/templates/carbon/project.liquid +249 -0
  40. package/dist/render/templates/carbon/session.liquid +190 -0
  41. package/dist/render/templates/carbon/styles.css +1091 -0
  42. package/dist/render/templates/chalk/portfolio.liquid +199 -0
  43. package/dist/render/templates/chalk/project.liquid +245 -0
  44. package/dist/render/templates/chalk/session.liquid +215 -0
  45. package/dist/render/templates/chalk/styles.css +1157 -0
  46. package/dist/render/templates/circuit/portfolio.liquid +162 -0
  47. package/dist/render/templates/circuit/project.liquid +247 -0
  48. package/dist/render/templates/circuit/session.liquid +205 -0
  49. package/dist/render/templates/circuit/styles.css +1403 -0
  50. package/dist/render/templates/cosmos/portfolio.liquid +232 -0
  51. package/dist/render/templates/cosmos/project.liquid +327 -0
  52. package/dist/render/templates/cosmos/session.liquid +239 -0
  53. package/dist/render/templates/cosmos/styles.css +1151 -0
  54. package/dist/render/templates/daylight/portfolio.liquid +217 -0
  55. package/dist/render/templates/daylight/project.liquid +229 -0
  56. package/dist/render/templates/daylight/session.liquid +219 -0
  57. package/dist/render/templates/daylight/styles.css +1311 -0
  58. package/dist/render/templates/editorial/portfolio.liquid +126 -0
  59. package/dist/render/templates/editorial/project.liquid +202 -0
  60. package/dist/render/templates/editorial/session.liquid +171 -0
  61. package/dist/render/templates/editorial/styles.css +822 -0
  62. package/dist/render/templates/ember/portfolio.liquid +318 -0
  63. package/dist/render/templates/ember/project.liquid +232 -0
  64. package/dist/render/templates/ember/session.liquid +202 -0
  65. package/dist/render/templates/ember/styles.css +1283 -0
  66. package/dist/render/templates/glacier/portfolio.liquid +271 -0
  67. package/dist/render/templates/glacier/project.liquid +288 -0
  68. package/dist/render/templates/glacier/session.liquid +217 -0
  69. package/dist/render/templates/glacier/styles.css +1200 -0
  70. package/dist/render/templates/grid/portfolio.liquid +265 -0
  71. package/dist/render/templates/grid/project.liquid +306 -0
  72. package/dist/render/templates/grid/session.liquid +260 -0
  73. package/dist/render/templates/grid/styles.css +1441 -0
  74. package/dist/render/templates/kinetic/portfolio.liquid +170 -0
  75. package/dist/render/templates/kinetic/project.liquid +242 -0
  76. package/dist/render/templates/kinetic/session.liquid +228 -0
  77. package/dist/render/templates/kinetic/styles.css +944 -0
  78. package/dist/render/templates/meridian/portfolio.liquid +255 -0
  79. package/dist/render/templates/meridian/project.liquid +376 -0
  80. package/dist/render/templates/meridian/session.liquid +298 -0
  81. package/dist/render/templates/meridian/styles.css +1369 -0
  82. package/dist/render/templates/minimal/portfolio.liquid +71 -0
  83. package/dist/render/templates/minimal/project.liquid +154 -0
  84. package/dist/render/templates/minimal/session.liquid +140 -0
  85. package/dist/render/templates/minimal/styles.css +525 -0
  86. package/dist/render/templates/mono/portfolio.liquid +291 -0
  87. package/dist/render/templates/mono/project.liquid +275 -0
  88. package/dist/render/templates/mono/session.liquid +276 -0
  89. package/dist/render/templates/mono/styles.css +1016 -0
  90. package/dist/render/templates/neon/portfolio.liquid +217 -0
  91. package/dist/render/templates/neon/project.liquid +225 -0
  92. package/dist/render/templates/neon/session.liquid +195 -0
  93. package/dist/render/templates/neon/styles.css +1265 -0
  94. package/dist/render/templates/noir/portfolio.liquid +137 -0
  95. package/dist/render/templates/noir/project.liquid +220 -0
  96. package/dist/render/templates/noir/session.liquid +241 -0
  97. package/dist/render/templates/noir/styles.css +1223 -0
  98. package/dist/render/templates/obsidian/portfolio.liquid +257 -0
  99. package/dist/render/templates/obsidian/project.liquid +280 -0
  100. package/dist/render/templates/obsidian/session.liquid +241 -0
  101. package/dist/render/templates/obsidian/styles.css +1401 -0
  102. package/dist/render/templates/paper/portfolio.liquid +267 -0
  103. package/dist/render/templates/paper/project.liquid +235 -0
  104. package/dist/render/templates/paper/session.liquid +271 -0
  105. package/dist/render/templates/paper/styles.css +1509 -0
  106. package/dist/render/templates/parallax/portfolio.liquid +305 -0
  107. package/dist/render/templates/parallax/project.liquid +275 -0
  108. package/dist/render/templates/parallax/session.liquid +295 -0
  109. package/dist/render/templates/parallax/styles.css +1874 -0
  110. package/dist/render/templates/parchment/portfolio.liquid +290 -0
  111. package/dist/render/templates/parchment/project.liquid +289 -0
  112. package/dist/render/templates/parchment/session.liquid +346 -0
  113. package/dist/render/templates/parchment/styles.css +1397 -0
  114. package/dist/render/templates/partials/_beats.liquid +16 -0
  115. package/dist/render/templates/partials/_breadcrumb.liquid +9 -0
  116. package/dist/render/templates/partials/_footer.liquid +7 -0
  117. package/dist/render/templates/partials/_growth-chart.liquid +7 -0
  118. package/dist/render/templates/partials/_key-decisions.liquid +20 -0
  119. package/dist/render/templates/partials/_links.liquid +16 -0
  120. package/dist/render/templates/partials/_narrative.liquid +8 -0
  121. package/dist/render/templates/partials/_phases.liquid +20 -0
  122. package/dist/render/templates/partials/_portfolio-header.liquid +20 -0
  123. package/dist/render/templates/partials/_portfolio-projects.liquid +16 -0
  124. package/dist/render/templates/partials/_portfolio-stats.liquid +19 -0
  125. package/dist/render/templates/partials/_qa.liquid +13 -0
  126. package/dist/render/templates/partials/_screenshot.liquid +15 -0
  127. package/dist/render/templates/partials/_session-cards.liquid +30 -0
  128. package/dist/render/templates/partials/_session-header.liquid +39 -0
  129. package/dist/render/templates/partials/_session-sidebar.liquid +30 -0
  130. package/dist/render/templates/partials/_skills.liquid +12 -0
  131. package/dist/render/templates/partials/_source-breakdown.liquid +22 -0
  132. package/dist/render/templates/partials/_stats.liquid +38 -0
  133. package/dist/render/templates/partials/_work-timeline.liquid +7 -0
  134. package/dist/render/templates/project.liquid +7 -4
  135. package/dist/render/templates/radar/portfolio.liquid +233 -0
  136. package/dist/render/templates/radar/project.liquid +278 -0
  137. package/dist/render/templates/radar/session.liquid +300 -0
  138. package/dist/render/templates/radar/styles.css +1049 -0
  139. package/dist/render/templates/showcase/portfolio.liquid +231 -0
  140. package/dist/render/templates/showcase/project.liquid +237 -0
  141. package/dist/render/templates/showcase/session.liquid +210 -0
  142. package/dist/render/templates/showcase/styles.css +1279 -0
  143. package/dist/render/templates/signal/portfolio.liquid +227 -0
  144. package/dist/render/templates/signal/project.liquid +278 -0
  145. package/dist/render/templates/signal/session.liquid +282 -0
  146. package/dist/render/templates/signal/styles.css +1395 -0
  147. package/dist/render/templates/strata/portfolio.liquid +192 -0
  148. package/dist/render/templates/strata/project.liquid +282 -0
  149. package/dist/render/templates/strata/session.liquid +261 -0
  150. package/dist/render/templates/strata/styles.css +1350 -0
  151. package/dist/render/templates/styles.css +1190 -0
  152. package/dist/render/templates/terminal/portfolio.liquid +118 -0
  153. package/dist/render/templates/terminal/project.liquid +161 -0
  154. package/dist/render/templates/terminal/session.liquid +145 -0
  155. package/dist/render/templates/terminal/styles.css +492 -0
  156. package/dist/render/templates/verdant/portfolio.liquid +333 -0
  157. package/dist/render/templates/verdant/project.liquid +309 -0
  158. package/dist/render/templates/verdant/session.liquid +237 -0
  159. package/dist/render/templates/verdant/styles.css +1257 -0
  160. package/dist/render/templates/zen/portfolio.liquid +136 -0
  161. package/dist/render/templates/zen/project.liquid +187 -0
  162. package/dist/render/templates/zen/session.liquid +203 -0
  163. package/dist/render/templates/zen/styles.css +1207 -0
  164. package/dist/render/templates.js +90 -0
  165. package/dist/routes/context.js +15 -10
  166. package/dist/routes/enhance.js +17 -40
  167. package/dist/routes/export.js +14 -4
  168. package/dist/routes/preview.js +480 -108
  169. package/dist/routes/projects.js +11 -19
  170. package/dist/routes/publish.js +15 -17
  171. package/dist/routes/settings.js +94 -1
  172. package/dist/routes/sse.js +9 -0
  173. package/dist/server.js +8 -2
  174. package/dist/settings.js +17 -9
  175. package/package.json +2 -4
  176. package/dist/public/assets/index-B_d6DlEI.js +0 -21
  177. package/dist/public/assets/index-Dalqz2mC.css +0 -1
@@ -0,0 +1,1200 @@
1
+ /* ── Glacier Theme ── */
2
+
3
+ /* ── Tokens ── */
4
+ :root {
5
+ --bg: #f0f9ff;
6
+ --bg-white: #ffffff;
7
+ --fg: #0c4a6e;
8
+ --fg-dark: #082f49;
9
+ --fg-muted: #64748b;
10
+ --accent: #38bdf8;
11
+ --accent-dark: #0ea5e9;
12
+ --accent-light: #e0f2fe;
13
+ --border: rgba(255, 255, 255, 0.3);
14
+ --border-solid: #bae6fd;
15
+ --surface: rgba(255, 255, 255, 0.7);
16
+ --surface-solid: rgba(255, 255, 255, 0.85);
17
+ --shadow: 0 4px 24px rgba(56, 189, 248, 0.08), 0 1px 4px rgba(0, 0, 0, 0.04);
18
+ --shadow-lg: 0 8px 40px rgba(56, 189, 248, 0.12), 0 2px 8px rgba(0, 0, 0, 0.06);
19
+ --radius: 16px;
20
+ --radius-lg: 20px;
21
+ --radius-sm: 10px;
22
+ --font-display: 'Space Grotesk', sans-serif;
23
+ --font-body: 'Inter', sans-serif;
24
+ --font-mono: 'IBM Plex Mono', monospace;
25
+ --blur: blur(12px);
26
+ }
27
+
28
+ /* ── Layout ── */
29
+ .container {
30
+ max-width: 960px;
31
+ margin-inline: auto;
32
+ padding-inline: 24px;
33
+ }
34
+
35
+ /* ── Frost card base ── */
36
+ .frost {
37
+ background: var(--surface);
38
+ backdrop-filter: var(--blur);
39
+ -webkit-backdrop-filter: var(--blur);
40
+ border: 1px solid var(--border);
41
+ border-radius: var(--radius);
42
+ box-shadow: var(--shadow);
43
+ }
44
+
45
+ /* ── Portfolio header ── */
46
+ .header {
47
+ padding: 64px 0 48px;
48
+ text-align: center;
49
+ }
50
+ .header-avatar {
51
+ width: 80px;
52
+ height: 80px;
53
+ border-radius: 50%;
54
+ background: linear-gradient(135deg, var(--accent), #7dd3fc);
55
+ margin-inline: auto;
56
+ margin-bottom: 20px;
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ font-family: var(--font-display);
61
+ font-size: 28px;
62
+ font-weight: 700;
63
+ color: white;
64
+ box-shadow: 0 4px 20px rgba(56, 189, 248, 0.25);
65
+ }
66
+ .header-photo {
67
+ width: 120px;
68
+ height: 120px;
69
+ border-radius: 16px;
70
+ object-fit: cover;
71
+ object-position: center 15%;
72
+ margin-inline: auto;
73
+ margin-block-end: 1.25rem;
74
+ display: block;
75
+ border: 3px solid var(--border);
76
+ box-shadow: var(--shadow-lg);
77
+ backdrop-filter: var(--blur);
78
+ }
79
+ .header h1 {
80
+ font-family: var(--font-display);
81
+ font-size: clamp(28px, 5vw, 40px);
82
+ font-weight: 700;
83
+ color: var(--fg-dark);
84
+ letter-spacing: -0.03em;
85
+ line-height: 1.2;
86
+ margin-bottom: 12px;
87
+ }
88
+ .header-bio {
89
+ font-size: 16px;
90
+ color: var(--fg-muted);
91
+ max-width: 560px;
92
+ margin-inline: auto;
93
+ margin-bottom: 8px;
94
+ }
95
+ .header-location {
96
+ font-size: 14px;
97
+ color: var(--fg-muted);
98
+ font-family: var(--font-mono);
99
+ }
100
+ .header-links {
101
+ display: flex;
102
+ flex-wrap: wrap;
103
+ justify-content: center;
104
+ gap: 1rem;
105
+ margin-block-start: 1.25rem;
106
+ list-style: none;
107
+ }
108
+ .header-links a {
109
+ display: inline-flex;
110
+ align-items: center;
111
+ gap: 0.375rem;
112
+ font-family: var(--font-mono);
113
+ font-size: 13px;
114
+ color: var(--fg-muted);
115
+ text-decoration: none;
116
+ transition: color 0.2s;
117
+ }
118
+ .header-links a:hover {
119
+ color: var(--accent-dark);
120
+ }
121
+ .header-links svg {
122
+ flex-shrink: 0;
123
+ }
124
+
125
+ /* ── Stats row ── */
126
+ .stats {
127
+ display: grid;
128
+ grid-template-columns: repeat(4, 1fr);
129
+ gap: 16px;
130
+ margin-bottom: 48px;
131
+ }
132
+ .stat-card {
133
+ padding: 24px 16px;
134
+ text-align: center;
135
+ }
136
+ .stat-value {
137
+ font-family: var(--font-display);
138
+ font-size: 32px;
139
+ font-weight: 700;
140
+ color: var(--accent-dark);
141
+ line-height: 1.2;
142
+ display: block;
143
+ }
144
+ .stat-label {
145
+ font-size: 13px;
146
+ color: var(--fg-muted);
147
+ font-family: var(--font-mono);
148
+ margin-top: 4px;
149
+ display: block;
150
+ }
151
+
152
+ /* ── Project stat overrides ── */
153
+ .glacier.heyiam-project .stats {
154
+ grid-template-columns: repeat(3, 1fr);
155
+ margin-bottom: 40px;
156
+ }
157
+ @media (min-width: 769px) {
158
+ .glacier.heyiam-project .stats { grid-template-columns: repeat(6, 1fr); }
159
+ }
160
+ .glacier.heyiam-project .stat-card {
161
+ padding: 20px 12px;
162
+ }
163
+ .glacier.heyiam-project .stat-value {
164
+ font-size: 24px;
165
+ }
166
+ .glacier.heyiam-project .stat-label {
167
+ font-size: 11px;
168
+ text-transform: uppercase;
169
+ letter-spacing: 0.04em;
170
+ }
171
+
172
+ /* ── Project skill chip override ── */
173
+ .glacier.heyiam-project .skill-chip {
174
+ font-size: 13px;
175
+ padding: 6px 16px;
176
+ }
177
+
178
+ /* ── Leverage card ── */
179
+ .gl-leverage {
180
+ display: flex;
181
+ flex-direction: column;
182
+ align-items: center;
183
+ gap: 0.75rem;
184
+ padding: 1.5rem;
185
+ margin-block-start: 1rem;
186
+ }
187
+ .gl-leverage svg {
188
+ display: block;
189
+ }
190
+ .gl-leverage__values {
191
+ display: flex;
192
+ align-items: baseline;
193
+ gap: 1rem;
194
+ font-family: var(--font-display);
195
+ }
196
+ .gl-leverage__human {
197
+ font-size: 1rem;
198
+ font-weight: 700;
199
+ color: var(--fg-dark);
200
+ }
201
+ .gl-leverage__human small,
202
+ .gl-leverage__agent small {
203
+ font-size: 0.625rem;
204
+ font-weight: 400;
205
+ color: var(--fg-muted);
206
+ font-family: var(--font-mono);
207
+ text-transform: uppercase;
208
+ letter-spacing: 0.06em;
209
+ margin-inline-start: 0.25rem;
210
+ }
211
+ .gl-leverage__agent {
212
+ font-size: 1rem;
213
+ font-weight: 700;
214
+ color: var(--accent-dark);
215
+ }
216
+
217
+ /* ── Visited links ── */
218
+ .glacier a:visited { color: inherit; }
219
+ .glacier .breadcrumb a:visited { color: var(--accent-dark); }
220
+ .glacier .project-name:visited { color: var(--fg-dark); }
221
+ .glacier .session-title-link:visited { color: var(--fg-dark); }
222
+ .glacier .featured-name:visited { color: var(--fg-dark); }
223
+
224
+ /* ── Skip link ── */
225
+ .skip-link {
226
+ position: absolute;
227
+ inset-inline-start: -9999px;
228
+ top: 0;
229
+ background: var(--fg-dark);
230
+ color: var(--bg-white);
231
+ padding: 8px 16px;
232
+ font-family: var(--font-mono);
233
+ font-size: 13px;
234
+ z-index: 100;
235
+ border-radius: var(--radius-sm);
236
+ }
237
+ .skip-link:focus {
238
+ inset-inline-start: 8px;
239
+ top: 8px;
240
+ }
241
+
242
+ /* ── Footer ── */
243
+ .footer {
244
+ padding: 32px 0;
245
+ text-align: center;
246
+ font-size: 13px;
247
+ color: var(--fg-muted);
248
+ font-family: var(--font-mono);
249
+ border-top: 1px solid var(--border-solid);
250
+ }
251
+
252
+ /* ── Section heading ── */
253
+ .section-heading {
254
+ font-family: var(--font-display);
255
+ font-size: 22px;
256
+ font-weight: 700;
257
+ color: var(--fg-dark);
258
+ margin-bottom: 24px;
259
+ letter-spacing: -0.02em;
260
+ }
261
+ .glacier.heyiam-project .section-heading,
262
+ .glacier.heyiam-session .section-heading {
263
+ font-size: 20px;
264
+ margin-bottom: 20px;
265
+ }
266
+
267
+ /* ── Project cards (portfolio) ── */
268
+ .projects {
269
+ padding-bottom: 64px;
270
+ }
271
+ .project-list {
272
+ display: flex;
273
+ flex-direction: column;
274
+ gap: 20px;
275
+ }
276
+ .project-card {
277
+ padding: 28px;
278
+ transition: transform 0.2s, box-shadow 0.2s;
279
+ }
280
+ .project-card:hover {
281
+ transform: translateY(-2px);
282
+ box-shadow: var(--shadow-lg);
283
+ }
284
+ .project-card-header {
285
+ display: flex;
286
+ align-items: flex-start;
287
+ justify-content: space-between;
288
+ margin-bottom: 12px;
289
+ gap: 16px;
290
+ }
291
+ .project-name {
292
+ font-family: var(--font-display);
293
+ font-size: 20px;
294
+ font-weight: 700;
295
+ color: var(--fg-dark);
296
+ text-decoration: none;
297
+ letter-spacing: -0.02em;
298
+ }
299
+ .project-name:hover {
300
+ color: var(--accent-dark);
301
+ }
302
+ .project-name:focus-visible {
303
+ outline: 2px solid var(--accent);
304
+ outline-offset: 4px;
305
+ border-radius: 4px;
306
+ }
307
+ .project-narrative {
308
+ font-size: 15px;
309
+ color: var(--fg-muted);
310
+ margin-bottom: 16px;
311
+ line-height: 1.6;
312
+ }
313
+ .project-skills {
314
+ display: flex;
315
+ flex-wrap: wrap;
316
+ gap: 8px;
317
+ margin-bottom: 16px;
318
+ }
319
+ .skill-chip {
320
+ font-family: var(--font-mono);
321
+ font-size: 12px;
322
+ padding: 4px 12px;
323
+ border-radius: 999px;
324
+ background: var(--accent-light);
325
+ color: var(--accent-dark);
326
+ font-weight: 500;
327
+ }
328
+ .project-stats {
329
+ display: flex;
330
+ gap: 20px;
331
+ font-size: 13px;
332
+ color: var(--fg-muted);
333
+ font-family: var(--font-mono);
334
+ padding-top: 16px;
335
+ border-top: 1px solid rgba(56, 189, 248, 0.12);
336
+ }
337
+ .project-stats span {
338
+ display: inline-flex;
339
+ align-items: center;
340
+ gap: 6px;
341
+ }
342
+
343
+ /* Clickable cards */
344
+ a.session-card, a.featured-card {
345
+ text-decoration: none;
346
+ color: inherit;
347
+ display: block;
348
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
349
+ }
350
+ a.session-card:hover, a.featured-card:hover {
351
+ transform: translateY(-2px);
352
+ }
353
+
354
+ /* ── Breadcrumb ── */
355
+ .breadcrumb {
356
+ padding: 20px 0 0;
357
+ font-family: var(--font-mono);
358
+ font-size: 13px;
359
+ color: var(--fg-muted);
360
+ }
361
+ .breadcrumb a {
362
+ color: var(--accent-dark);
363
+ text-decoration: none;
364
+ }
365
+ .breadcrumb a:hover { text-decoration: underline; }
366
+ .breadcrumb a:focus-visible {
367
+ outline: 2px solid var(--accent);
368
+ outline-offset: 2px;
369
+ border-radius: 4px;
370
+ }
371
+ .breadcrumb-sep { margin: 0 8px; color: var(--border-solid); }
372
+
373
+ /* ── Project header ── */
374
+ .project-header {
375
+ padding: 40px 0 32px;
376
+ }
377
+ .project-title {
378
+ font-family: var(--font-display);
379
+ font-size: clamp(28px, 5vw, 40px);
380
+ font-weight: 700;
381
+ color: var(--fg-dark);
382
+ letter-spacing: -0.03em;
383
+ line-height: 1.2;
384
+ margin-bottom: 12px;
385
+ }
386
+ .project-links {
387
+ display: flex;
388
+ gap: 20px;
389
+ font-family: var(--font-mono);
390
+ font-size: 13px;
391
+ margin-bottom: 24px;
392
+ }
393
+ .project-links a {
394
+ color: var(--accent-dark);
395
+ text-decoration: none;
396
+ }
397
+ .project-links a:hover { text-decoration: underline; }
398
+ .project-links a:focus-visible {
399
+ outline: 2px solid var(--accent);
400
+ outline-offset: 2px;
401
+ border-radius: 4px;
402
+ }
403
+
404
+ /* ── Screenshot ── */
405
+ .screenshot {
406
+ border-radius: var(--radius-lg);
407
+ overflow: hidden;
408
+ margin-bottom: 40px;
409
+ border: 1px solid var(--border-solid);
410
+ box-shadow: var(--shadow-lg);
411
+ }
412
+
413
+ /* ── Screenshot chrome ── */
414
+ .screenshot-chrome {
415
+ background: rgba(255, 255, 255, 0.9);
416
+ padding: 12px 16px;
417
+ display: flex;
418
+ align-items: center;
419
+ gap: 8px;
420
+ }
421
+ .screenshot-dot {
422
+ width: 12px;
423
+ height: 12px;
424
+ border-radius: 50%;
425
+ background: var(--border-solid);
426
+ }
427
+ .screenshot-dot:nth-child(1) { background: #fca5a5; }
428
+ .screenshot-dot:nth-child(2) { background: #fcd34d; }
429
+ .screenshot-dot:nth-child(3) { background: #86efac; }
430
+ .screenshot-url {
431
+ flex: 1;
432
+ text-align: center;
433
+ font-family: var(--font-mono);
434
+ font-size: 12px;
435
+ color: var(--fg-muted);
436
+ }
437
+ .screenshot-body {
438
+ max-height: 320px;
439
+ overflow-y: auto;
440
+ }
441
+ .screenshot-body img {
442
+ width: 100%;
443
+ display: block;
444
+ }
445
+
446
+ /* ── Narrative ── */
447
+ .narrative {
448
+ margin-bottom: 40px;
449
+ }
450
+ .narrative p {
451
+ font-size: 15px;
452
+ color: var(--fg);
453
+ margin-bottom: 16px;
454
+ line-height: 1.7;
455
+ }
456
+ .narrative p:last-child { margin-bottom: 0; }
457
+
458
+ /* ── Chart sections ── */
459
+ .chart-section {
460
+ margin-bottom: 40px;
461
+ }
462
+ .chart-container {
463
+ padding: 24px;
464
+ }
465
+ .chart-svg {
466
+ width: 100%;
467
+ height: 200px;
468
+ }
469
+ .chart-bar {
470
+ fill: var(--accent);
471
+ rx: 6;
472
+ ry: 6;
473
+ opacity: 0.85;
474
+ transition: opacity 0.2s;
475
+ }
476
+ .chart-bar:hover { opacity: 1; }
477
+ .chart-label {
478
+ fill: var(--fg-muted);
479
+ font-family: var(--font-mono);
480
+ font-size: 11px;
481
+ }
482
+ .chart-value {
483
+ fill: var(--fg-dark);
484
+ font-family: var(--font-display);
485
+ font-size: 12px;
486
+ font-weight: 600;
487
+ }
488
+ .chart-grid-line {
489
+ stroke: rgba(56, 189, 248, 0.1);
490
+ stroke-width: 1;
491
+ }
492
+
493
+ /* ── Phases ── */
494
+ .phases {
495
+ margin-bottom: 40px;
496
+ }
497
+ .phase-list {
498
+ display: flex;
499
+ flex-direction: column;
500
+ gap: 12px;
501
+ }
502
+ .phase-item {
503
+ padding: 20px 24px;
504
+ display: flex;
505
+ gap: 16px;
506
+ align-items: flex-start;
507
+ }
508
+ .phase-number {
509
+ font-family: var(--font-display);
510
+ font-size: 18px;
511
+ font-weight: 700;
512
+ color: var(--accent);
513
+ min-width: 28px;
514
+ }
515
+ .phase-content { flex: 1; }
516
+ .phase-name {
517
+ font-family: var(--font-display);
518
+ font-size: 15px;
519
+ font-weight: 600;
520
+ color: var(--fg-dark);
521
+ margin-bottom: 4px;
522
+ }
523
+ .phase-dates {
524
+ font-family: var(--font-mono);
525
+ font-size: 12px;
526
+ color: var(--fg-muted);
527
+ }
528
+ .phase-desc {
529
+ font-size: 14px;
530
+ color: var(--fg-muted);
531
+ margin-top: 4px;
532
+ }
533
+
534
+ /* ── Skills ── */
535
+ .skills-section {
536
+ margin-bottom: 40px;
537
+ }
538
+ .skills-grid {
539
+ display: flex;
540
+ flex-wrap: wrap;
541
+ gap: 10px;
542
+ }
543
+
544
+ /* ── Key decisions ── */
545
+ .decisions {
546
+ margin-bottom: 40px;
547
+ }
548
+ .decision-list {
549
+ display: flex;
550
+ flex-direction: column;
551
+ gap: 12px;
552
+ }
553
+ .decision-item {
554
+ padding: 20px 24px;
555
+ display: flex;
556
+ gap: 16px;
557
+ align-items: flex-start;
558
+ }
559
+ .decision-number {
560
+ font-family: var(--font-display);
561
+ font-size: 16px;
562
+ font-weight: 700;
563
+ color: var(--accent);
564
+ min-width: 24px;
565
+ }
566
+ .decision-text {
567
+ font-size: 14px;
568
+ color: var(--fg);
569
+ line-height: 1.6;
570
+ }
571
+
572
+ /* ── Source breakdown ── */
573
+ .source-section {
574
+ margin-bottom: 40px;
575
+ }
576
+ .source-card {
577
+ padding: 24px;
578
+ }
579
+ .source-bar {
580
+ height: 8px;
581
+ border-radius: 4px;
582
+ background: #e2e8f0;
583
+ overflow: hidden;
584
+ margin-bottom: 12px;
585
+ }
586
+ .source-bar-fill {
587
+ height: 100%;
588
+ border-radius: 4px;
589
+ background: linear-gradient(90deg, var(--accent), #7dd3fc);
590
+ }
591
+ .source-legend {
592
+ display: flex;
593
+ gap: 24px;
594
+ font-size: 14px;
595
+ color: var(--fg-muted);
596
+ font-family: var(--font-mono);
597
+ }
598
+ .source-legend-dot {
599
+ display: inline-block;
600
+ width: 10px;
601
+ height: 10px;
602
+ border-radius: 50%;
603
+ margin-inline-end: 6px;
604
+ vertical-align: middle;
605
+ }
606
+
607
+ /* ── Portfolio source bar overrides ── */
608
+ .glacier.heyiam-portfolio .source-bar {
609
+ height: 6px;
610
+ border-radius: 3px;
611
+ margin-top: 12px;
612
+ margin-bottom: 0;
613
+ }
614
+ .glacier.heyiam-portfolio .source-bar-fill {
615
+ border-radius: 3px;
616
+ }
617
+ .glacier.heyiam-portfolio .source-legend {
618
+ gap: 16px;
619
+ margin-top: 6px;
620
+ font-size: 12px;
621
+ }
622
+ .glacier.heyiam-portfolio .source-legend-dot {
623
+ width: 8px;
624
+ height: 8px;
625
+ margin-inline-end: 4px;
626
+ }
627
+
628
+ /* ── Sessions table ── */
629
+ .sessions-section {
630
+ margin-bottom: 40px;
631
+ }
632
+ .sessions-table-wrap {
633
+ padding: 4px;
634
+ overflow-x: auto;
635
+ }
636
+ .sessions-table {
637
+ width: 100%;
638
+ border-collapse: collapse;
639
+ font-size: 14px;
640
+ }
641
+ .sessions-table th {
642
+ font-family: var(--font-mono);
643
+ font-size: 11px;
644
+ text-transform: uppercase;
645
+ letter-spacing: 0.06em;
646
+ color: var(--fg-muted);
647
+ padding: 12px 16px;
648
+ text-align: start;
649
+ border-bottom: 1px solid var(--border-solid);
650
+ font-weight: 500;
651
+ }
652
+ .sessions-table td {
653
+ padding: 14px 16px;
654
+ border-bottom: 1px solid rgba(56, 189, 248, 0.08);
655
+ vertical-align: middle;
656
+ }
657
+ .sessions-table tbody tr {
658
+ transition: background 0.15s;
659
+ }
660
+ .sessions-table tbody tr:hover {
661
+ background: rgba(56, 189, 248, 0.04);
662
+ }
663
+ .session-title-link {
664
+ color: var(--fg-dark);
665
+ text-decoration: none;
666
+ font-weight: 500;
667
+ }
668
+ .session-title-link:hover { color: var(--accent-dark); }
669
+ .session-title-link:focus-visible {
670
+ outline: 2px solid var(--accent);
671
+ outline-offset: 2px;
672
+ border-radius: 4px;
673
+ }
674
+ .session-source-badge {
675
+ font-family: var(--font-mono);
676
+ font-size: 11px;
677
+ padding: 2px 8px;
678
+ border-radius: 999px;
679
+ background: var(--accent-light);
680
+ color: var(--accent-dark);
681
+ }
682
+ .agent-dots {
683
+ display: flex;
684
+ gap: 3px;
685
+ }
686
+ .agent-dot {
687
+ width: 8px;
688
+ height: 8px;
689
+ border-radius: 50%;
690
+ }
691
+
692
+ /* ── Project source ── */
693
+ .project-source {
694
+ font-family: var(--font-mono);
695
+ font-size: 12px;
696
+ color: var(--fg-muted);
697
+ white-space: nowrap;
698
+ }
699
+
700
+ /* ── Featured sessions ── */
701
+ .featured-section {
702
+ margin-bottom: 40px;
703
+ }
704
+ .featured-grid {
705
+ display: grid;
706
+ grid-template-columns: repeat(2, 1fr);
707
+ gap: 16px;
708
+ }
709
+ .featured-card {
710
+ padding: 20px;
711
+ transition: transform 0.2s, box-shadow 0.2s;
712
+ }
713
+ .featured-card:hover {
714
+ transform: translateY(-2px);
715
+ box-shadow: var(--shadow-lg);
716
+ }
717
+ .featured-tag {
718
+ font-family: var(--font-mono);
719
+ font-size: 11px;
720
+ text-transform: uppercase;
721
+ letter-spacing: 0.06em;
722
+ color: var(--accent-dark);
723
+ margin-bottom: 8px;
724
+ display: block;
725
+ }
726
+ .featured-name {
727
+ font-family: var(--font-display);
728
+ font-size: 15px;
729
+ font-weight: 600;
730
+ color: var(--fg-dark);
731
+ margin-bottom: 10px;
732
+ text-decoration: none;
733
+ display: block;
734
+ }
735
+ .featured-name:hover { color: var(--accent-dark); }
736
+ .featured-name:focus-visible {
737
+ outline: 2px solid var(--accent);
738
+ outline-offset: 2px;
739
+ border-radius: 4px;
740
+ }
741
+ .featured-stats {
742
+ display: flex;
743
+ gap: 12px;
744
+ font-size: 12px;
745
+ font-family: var(--font-mono);
746
+ color: var(--fg-muted);
747
+ }
748
+
749
+ /* ── Session header ── */
750
+ .session-header {
751
+ padding: 40px 0 32px;
752
+ }
753
+ .session-title {
754
+ font-family: var(--font-display);
755
+ font-size: clamp(24px, 4vw, 36px);
756
+ font-weight: 700;
757
+ color: var(--fg-dark);
758
+ letter-spacing: -0.03em;
759
+ line-height: 1.2;
760
+ margin-bottom: 16px;
761
+ }
762
+ .session-meta {
763
+ display: flex;
764
+ flex-wrap: wrap;
765
+ gap: 20px;
766
+ font-family: var(--font-mono);
767
+ font-size: 13px;
768
+ color: var(--fg-muted);
769
+ }
770
+ .session-meta-item {
771
+ display: flex;
772
+ align-items: center;
773
+ gap: 6px;
774
+ }
775
+ .session-meta-label {
776
+ color: var(--fg-muted);
777
+ }
778
+ .session-meta-value {
779
+ color: var(--fg-dark);
780
+ font-weight: 500;
781
+ }
782
+ .source-badge {
783
+ font-family: var(--font-mono);
784
+ font-size: 12px;
785
+ padding: 3px 10px;
786
+ border-radius: 999px;
787
+ background: var(--accent-light);
788
+ color: var(--accent-dark);
789
+ font-weight: 500;
790
+ }
791
+
792
+ /* ── Session content layout ── */
793
+ .content-layout {
794
+ display: grid;
795
+ grid-template-columns: 1fr 280px;
796
+ gap: 28px;
797
+ margin-bottom: 48px;
798
+ }
799
+
800
+ /* ── Session stats ── */
801
+ .session-stats {
802
+ display: grid;
803
+ grid-template-columns: repeat(3, 1fr);
804
+ gap: 12px;
805
+ margin-bottom: 32px;
806
+ }
807
+ .session-stat-card {
808
+ padding: 16px;
809
+ text-align: center;
810
+ }
811
+ .session-stat-value {
812
+ font-family: var(--font-display);
813
+ font-size: 22px;
814
+ font-weight: 700;
815
+ color: var(--accent-dark);
816
+ display: block;
817
+ }
818
+ .session-stat-label {
819
+ font-family: var(--font-mono);
820
+ font-size: 11px;
821
+ color: var(--fg-muted);
822
+ text-transform: uppercase;
823
+ letter-spacing: 0.04em;
824
+ display: block;
825
+ margin-top: 2px;
826
+ }
827
+
828
+ /* ── Dev take ── */
829
+ .dev-take {
830
+ padding: 24px;
831
+ margin-bottom: 32px;
832
+ border-inline-start: 3px solid var(--accent);
833
+ }
834
+ .dev-take-label {
835
+ font-family: var(--font-mono);
836
+ font-size: 11px;
837
+ text-transform: uppercase;
838
+ letter-spacing: 0.06em;
839
+ color: var(--accent-dark);
840
+ margin-bottom: 8px;
841
+ display: block;
842
+ }
843
+ .dev-take-text {
844
+ font-size: 15px;
845
+ color: var(--fg);
846
+ line-height: 1.7;
847
+ font-style: italic;
848
+ }
849
+
850
+ /* ── Narrative section (session) ── */
851
+ .narrative-section {
852
+ margin-bottom: 32px;
853
+ }
854
+ .narrative-section p {
855
+ font-size: 15px;
856
+ color: var(--fg);
857
+ line-height: 1.7;
858
+ }
859
+
860
+ /* ── Highlights ── */
861
+ .highlights-section {
862
+ margin-bottom: 32px;
863
+ }
864
+ .highlights-list {
865
+ list-style: disc;
866
+ padding-inline-start: 1.5em;
867
+ font-size: 14px;
868
+ color: var(--fg);
869
+ line-height: 1.7;
870
+ }
871
+
872
+ /* ── Execution path / beats ── */
873
+ .beats {
874
+ margin-bottom: 32px;
875
+ }
876
+ .beat-list {
877
+ display: flex;
878
+ flex-direction: column;
879
+ gap: 0;
880
+ position: relative;
881
+ }
882
+ .beat-list::before {
883
+ content: '';
884
+ position: absolute;
885
+ inset-inline-start: 15px;
886
+ top: 24px;
887
+ bottom: 24px;
888
+ width: 2px;
889
+ background: linear-gradient(180deg, var(--accent), rgba(56, 189, 248, 0.15));
890
+ border-radius: 1px;
891
+ }
892
+ .beat-item {
893
+ display: flex;
894
+ gap: 20px;
895
+ align-items: flex-start;
896
+ padding: 16px 0;
897
+ position: relative;
898
+ }
899
+ .beat-dot {
900
+ width: 32px;
901
+ height: 32px;
902
+ border-radius: 50%;
903
+ background: var(--surface-solid);
904
+ backdrop-filter: var(--blur);
905
+ -webkit-backdrop-filter: var(--blur);
906
+ border: 2px solid var(--accent);
907
+ display: flex;
908
+ align-items: center;
909
+ justify-content: center;
910
+ font-family: var(--font-display);
911
+ font-size: 13px;
912
+ font-weight: 700;
913
+ color: var(--accent-dark);
914
+ flex-shrink: 0;
915
+ z-index: 1;
916
+ }
917
+ .beat-content { flex: 1; }
918
+ .beat-title {
919
+ font-family: var(--font-display);
920
+ font-size: 15px;
921
+ font-weight: 600;
922
+ color: var(--fg-dark);
923
+ margin-bottom: 4px;
924
+ }
925
+ .beat-desc {
926
+ font-size: 14px;
927
+ color: var(--fg-muted);
928
+ line-height: 1.6;
929
+ }
930
+
931
+ /* ── Q&A ── */
932
+ .qa-section {
933
+ margin-bottom: 32px;
934
+ }
935
+ .qa-list {
936
+ display: flex;
937
+ flex-direction: column;
938
+ gap: 16px;
939
+ }
940
+ .qa-item {
941
+ padding: 24px;
942
+ }
943
+ .qa-question {
944
+ font-family: var(--font-display);
945
+ font-size: 15px;
946
+ font-weight: 600;
947
+ color: var(--fg-dark);
948
+ margin-bottom: 12px;
949
+ line-height: 1.5;
950
+ }
951
+ .qa-question::before {
952
+ content: 'Q: ';
953
+ color: var(--accent-dark);
954
+ }
955
+ .qa-answer {
956
+ font-size: 14px;
957
+ color: var(--fg);
958
+ line-height: 1.7;
959
+ }
960
+ .qa-answer::before {
961
+ content: 'A: ';
962
+ font-weight: 600;
963
+ color: var(--accent-dark);
964
+ }
965
+
966
+ /* ── Agent summary ── */
967
+ .agents-section {
968
+ margin-bottom: 32px;
969
+ }
970
+ .agent-table-wrap {
971
+ padding: 4px;
972
+ overflow-x: auto;
973
+ }
974
+ .agent-table {
975
+ width: 100%;
976
+ border-collapse: collapse;
977
+ font-size: 14px;
978
+ }
979
+ .agent-table th {
980
+ font-family: var(--font-mono);
981
+ font-size: 11px;
982
+ text-transform: uppercase;
983
+ letter-spacing: 0.06em;
984
+ color: var(--fg-muted);
985
+ padding: 12px 16px;
986
+ text-align: start;
987
+ border-bottom: 1px solid var(--border-solid);
988
+ font-weight: 500;
989
+ }
990
+ .agent-table td {
991
+ padding: 14px 16px;
992
+ border-bottom: 1px solid rgba(56, 189, 248, 0.08);
993
+ vertical-align: middle;
994
+ }
995
+ .agent-table tbody tr {
996
+ transition: background 0.15s;
997
+ }
998
+ .agent-table tbody tr:hover {
999
+ background: rgba(56, 189, 248, 0.04);
1000
+ }
1001
+ .agent-role-dot {
1002
+ display: inline-block;
1003
+ width: 10px;
1004
+ height: 10px;
1005
+ border-radius: 50%;
1006
+ margin-inline-end: 8px;
1007
+ vertical-align: middle;
1008
+ }
1009
+ .agent-bar-cell {
1010
+ min-width: 120px;
1011
+ }
1012
+ .agent-bar {
1013
+ height: 6px;
1014
+ border-radius: 3px;
1015
+ background: rgba(56, 189, 248, 0.12);
1016
+ overflow: hidden;
1017
+ }
1018
+ .agent-bar-fill {
1019
+ height: 100%;
1020
+ border-radius: 3px;
1021
+ background: linear-gradient(90deg, var(--accent), #7dd3fc);
1022
+ transition: width 0.6s ease;
1023
+ }
1024
+
1025
+ /* ── Sidebar ── */
1026
+ .sidebar {
1027
+ display: flex;
1028
+ flex-direction: column;
1029
+ gap: 20px;
1030
+ }
1031
+ .sidebar-card {
1032
+ padding: 20px;
1033
+ }
1034
+ .sidebar-title {
1035
+ font-family: var(--font-display);
1036
+ font-size: 14px;
1037
+ font-weight: 700;
1038
+ color: var(--fg-dark);
1039
+ margin-bottom: 16px;
1040
+ letter-spacing: -0.01em;
1041
+ }
1042
+
1043
+ /* ── Tools used ── */
1044
+ .tool-list {
1045
+ display: flex;
1046
+ flex-direction: column;
1047
+ gap: 10px;
1048
+ }
1049
+ .tool-item {
1050
+ display: flex;
1051
+ justify-content: space-between;
1052
+ align-items: center;
1053
+ font-size: 13px;
1054
+ }
1055
+ .tool-name {
1056
+ font-family: var(--font-mono);
1057
+ color: var(--fg);
1058
+ font-weight: 500;
1059
+ }
1060
+ .tool-count {
1061
+ font-family: var(--font-mono);
1062
+ color: var(--accent-dark);
1063
+ font-weight: 600;
1064
+ }
1065
+ .tool-bar {
1066
+ height: 4px;
1067
+ border-radius: 2px;
1068
+ background: rgba(56, 189, 248, 0.1);
1069
+ overflow: hidden;
1070
+ margin-top: 4px;
1071
+ }
1072
+ .tool-bar-fill {
1073
+ height: 100%;
1074
+ border-radius: 2px;
1075
+ background: linear-gradient(90deg, var(--accent), #7dd3fc);
1076
+ }
1077
+
1078
+ /* ── Files changed ── */
1079
+ .file-list {
1080
+ display: flex;
1081
+ flex-direction: column;
1082
+ gap: 10px;
1083
+ }
1084
+ .file-item {
1085
+ display: flex;
1086
+ justify-content: space-between;
1087
+ align-items: flex-start;
1088
+ font-size: 12px;
1089
+ gap: 8px;
1090
+ }
1091
+ .file-name {
1092
+ font-family: var(--font-mono);
1093
+ color: var(--fg);
1094
+ word-break: break-all;
1095
+ line-height: 1.4;
1096
+ }
1097
+ .file-diff {
1098
+ font-family: var(--font-mono);
1099
+ color: #059669;
1100
+ font-weight: 600;
1101
+ white-space: nowrap;
1102
+ flex-shrink: 0;
1103
+ }
1104
+
1105
+ /* ── Sidebar skills ── */
1106
+ .sidebar-skills {
1107
+ display: flex;
1108
+ flex-wrap: wrap;
1109
+ gap: 6px;
1110
+ }
1111
+
1112
+ /* ── Animations ── */
1113
+ .fade-up {
1114
+ opacity: 0;
1115
+ transform: translateY(20px);
1116
+ transition: opacity 0.5s ease, transform 0.5s ease;
1117
+ }
1118
+ .fade-up.visible {
1119
+ opacity: 1;
1120
+ transform: translateY(0);
1121
+ }
1122
+
1123
+ @media (prefers-reduced-motion: reduce) {
1124
+ .fade-up { opacity: 1; transform: none; transition: none; }
1125
+ .project-card:hover { transform: none; }
1126
+ .featured-card:hover { transform: none; }
1127
+ .agent-bar-fill { transition: none; }
1128
+ .agent-table tbody tr { transition: none; }
1129
+ .sessions-table tbody tr { transition: none; }
1130
+ .chart-bar { transition: none; }
1131
+ }
1132
+
1133
+ /* ── Responsive ── */
1134
+ @media (max-width: 768px) {
1135
+ .stats {
1136
+ grid-template-columns: repeat(2, 1fr);
1137
+ }
1138
+ .content-layout {
1139
+ grid-template-columns: 1fr;
1140
+ }
1141
+ .sidebar {
1142
+ order: -1;
1143
+ }
1144
+ .project-card-header {
1145
+ flex-direction: column;
1146
+ }
1147
+ .project-stats {
1148
+ flex-wrap: wrap;
1149
+ gap: 12px;
1150
+ }
1151
+ .header {
1152
+ padding: 40px 0 32px;
1153
+ }
1154
+ .header-photo {
1155
+ width: 80px;
1156
+ height: 80px;
1157
+ }
1158
+ .featured-grid { grid-template-columns: 1fr; }
1159
+ .sessions-table { font-size: 13px; }
1160
+ .sessions-table th,
1161
+ .sessions-table td { padding: 10px 12px; }
1162
+ .session-meta {
1163
+ gap: 12px;
1164
+ }
1165
+ .session-stats {
1166
+ grid-template-columns: repeat(3, 1fr);
1167
+ gap: 8px;
1168
+ }
1169
+ .session-stat-card { padding: 12px; }
1170
+ .session-stat-value { font-size: 18px; }
1171
+ .session-header { padding: 28px 0 24px; }
1172
+ .project-header { padding: 28px 0 24px; }
1173
+ .source-legend { flex-direction: column; gap: 8px; }
1174
+ }
1175
+
1176
+ @media (max-width: 480px) {
1177
+ .stats {
1178
+ grid-template-columns: 1fr 1fr;
1179
+ gap: 10px;
1180
+ }
1181
+ .stat-card {
1182
+ padding: 16px 12px;
1183
+ }
1184
+ .stat-value {
1185
+ font-size: 24px;
1186
+ }
1187
+ .project-card {
1188
+ padding: 20px;
1189
+ }
1190
+ .session-stats {
1191
+ grid-template-columns: 1fr 1fr;
1192
+ }
1193
+ .beat-item { gap: 14px; }
1194
+ .beat-dot { width: 28px; height: 28px; font-size: 12px; }
1195
+ .beat-list::before { inset-inline-start: 13px; }
1196
+ .session-meta { flex-direction: column; gap: 8px; }
1197
+ .phase-item { flex-direction: column; gap: 8px; }
1198
+ .decision-item { flex-direction: column; gap: 8px; }
1199
+ .featured-stats { flex-wrap: wrap; }
1200
+ }