heyiam 0.2.29 → 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-CC9G8EF1.js +0 -21
  177. package/dist/public/assets/index-Dalqz2mC.css +0 -1
@@ -0,0 +1,1441 @@
1
+ /* ── Grid Template Styles ── */
2
+
3
+ /* ── Tokens ── */
4
+ .grid {
5
+ --bg: #fafafa;
6
+ --fg: #1e293b;
7
+ --fg-muted: #64748b;
8
+ --fg-faint: #94a3b8;
9
+ --accent: #6366f1;
10
+ --accent-light: #a5b4fc;
11
+ --accent-bg: #eef2ff;
12
+ --surface: #ffffff;
13
+ --border: #e2e8f0;
14
+ --border-light: #f1f5f9;
15
+ --radius-sm: 12px;
16
+ --radius: 16px;
17
+ --font-display: 'Space Grotesk', sans-serif;
18
+ --font-body: 'Inter', sans-serif;
19
+ --font-mono: 'IBM Plex Mono', monospace;
20
+ --shadow-sm: 0 1px 2px rgba(0,0,0,0.04);
21
+ --shadow: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
22
+ --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.06), 0 2px 4px -2px rgba(0,0,0,0.04);
23
+
24
+ /* Agent colors */
25
+ --clr-frontend: #7c3aed;
26
+ --clr-backend: #0891b2;
27
+ --clr-qa: #059669;
28
+ --clr-security: #475569;
29
+ --clr-reviewer: #e11d48;
30
+ --clr-ux: #d97706;
31
+
32
+ font-family: var(--font-body);
33
+ color: var(--fg);
34
+ background-color: var(--bg);
35
+ line-height: 1.6;
36
+ -webkit-font-smoothing: antialiased;
37
+ }
38
+
39
+ /* ── Visited links ── */
40
+ .grid a:visited {
41
+ color: inherit;
42
+ }
43
+
44
+ /* ── Skip link ── */
45
+ .grid .skip-link {
46
+ position: absolute;
47
+ inset-inline-start: -9999px;
48
+ top: 0;
49
+ background: var(--accent);
50
+ color: #fff;
51
+ padding: 8px 16px;
52
+ font-family: var(--font-mono);
53
+ font-size: 13px;
54
+ z-index: 100;
55
+ border-radius: var(--radius-sm);
56
+ text-decoration: none;
57
+ }
58
+ .grid .skip-link:focus {
59
+ inset-inline-start: 8px;
60
+ top: 8px;
61
+ }
62
+
63
+ /* ── Layout ── */
64
+ .grid .container {
65
+ max-width: 1120px;
66
+ margin-inline: auto;
67
+ padding-inline: 24px;
68
+ }
69
+
70
+ /* ── Nav ── */
71
+ .grid .nav {
72
+ border-bottom: 1px solid var(--border);
73
+ padding: 16px 0;
74
+ background: rgba(250,250,250,0.92);
75
+ backdrop-filter: blur(8px);
76
+ position: sticky;
77
+ top: 0;
78
+ z-index: 50;
79
+ }
80
+ .grid .nav-inner {
81
+ display: flex;
82
+ align-items: center;
83
+ justify-content: space-between;
84
+ }
85
+ .grid .nav-brand {
86
+ font-family: var(--font-display);
87
+ font-size: 16px;
88
+ font-weight: 700;
89
+ color: var(--fg);
90
+ text-decoration: none;
91
+ letter-spacing: -0.02em;
92
+ }
93
+ .grid .nav-brand span {
94
+ color: var(--accent);
95
+ }
96
+ .grid .nav-links {
97
+ display: flex;
98
+ gap: 8px;
99
+ list-style: none;
100
+ }
101
+ .grid .nav-links a {
102
+ font-family: var(--font-body);
103
+ font-size: 14px;
104
+ font-weight: 500;
105
+ color: var(--fg-muted);
106
+ text-decoration: none;
107
+ padding: 6px 14px;
108
+ border-radius: var(--radius-sm);
109
+ transition: color 0.15s, background-color 0.15s;
110
+ }
111
+ .grid .nav-links a:hover {
112
+ color: var(--fg);
113
+ background: var(--border-light);
114
+ }
115
+ .grid .nav-links a[aria-current="page"] {
116
+ color: var(--accent);
117
+ background: var(--accent-bg);
118
+ }
119
+ .grid .nav-links a:focus-visible {
120
+ outline: 2px solid var(--accent);
121
+ outline-offset: 2px;
122
+ border-radius: var(--radius-sm);
123
+ }
124
+
125
+ /* ── Breadcrumb ── */
126
+ .grid .breadcrumb {
127
+ padding: 16px 0;
128
+ font-family: var(--font-mono);
129
+ font-size: 13px;
130
+ color: var(--fg-faint);
131
+ }
132
+ .grid .breadcrumb a {
133
+ color: var(--fg-muted);
134
+ text-decoration: none;
135
+ }
136
+ .grid .breadcrumb a:hover {
137
+ color: var(--accent);
138
+ }
139
+ .grid .breadcrumb a:focus-visible {
140
+ outline: 2px solid var(--accent);
141
+ outline-offset: 2px;
142
+ border-radius: 4px;
143
+ }
144
+ .grid .breadcrumb-sep {
145
+ margin-inline: 6px;
146
+ color: var(--fg-faint);
147
+ }
148
+
149
+ /* ── Bento Grid ── */
150
+ .grid .bento {
151
+ display: grid;
152
+ grid-template-columns: repeat(4, 1fr);
153
+ gap: 16px;
154
+ padding: 32px 0 64px;
155
+ }
156
+ .grid.heyiam-project .bento,
157
+ .grid.heyiam-session .bento {
158
+ padding-bottom: 64px;
159
+ padding-top: 0;
160
+ }
161
+
162
+ .grid .bento-cell {
163
+ background: var(--surface);
164
+ border: 1px solid var(--border);
165
+ border-radius: var(--radius);
166
+ padding: 24px;
167
+ box-shadow: var(--shadow-sm);
168
+ opacity: 0;
169
+ transform: translateY(12px);
170
+ animation: gridCellFadeIn 0.4s ease forwards;
171
+ }
172
+
173
+ @keyframes gridCellFadeIn {
174
+ to {
175
+ opacity: 1;
176
+ transform: translateY(0);
177
+ }
178
+ }
179
+
180
+ @media (prefers-reduced-motion: reduce) {
181
+ .grid .bento-cell {
182
+ opacity: 1;
183
+ transform: none;
184
+ animation: none;
185
+ }
186
+ }
187
+
188
+ /* Stagger delays */
189
+ .grid .bento-cell:nth-child(1) { animation-delay: 0s; }
190
+ .grid .bento-cell:nth-child(2) { animation-delay: 0.06s; }
191
+ .grid .bento-cell:nth-child(3) { animation-delay: 0.12s; }
192
+ .grid .bento-cell:nth-child(4) { animation-delay: 0.18s; }
193
+ .grid .bento-cell:nth-child(5) { animation-delay: 0.24s; }
194
+ .grid .bento-cell:nth-child(6) { animation-delay: 0.30s; }
195
+ .grid .bento-cell:nth-child(7) { animation-delay: 0.36s; }
196
+ .grid .bento-cell:nth-child(8) { animation-delay: 0.42s; }
197
+ .grid .bento-cell:nth-child(9) { animation-delay: 0.48s; }
198
+ .grid .bento-cell:nth-child(10) { animation-delay: 0.54s; }
199
+ .grid .bento-cell:nth-child(11) { animation-delay: 0.60s; }
200
+ .grid .bento-cell:nth-child(12) { animation-delay: 0.66s; }
201
+
202
+ /* Session stagger (mockup uses 0.06s for child 2&3 shared) */
203
+ .grid.heyiam-session .bento-cell:nth-child(3) { animation-delay: 0.06s; }
204
+
205
+ /* ── Cell heading utility ── */
206
+ .grid .cell-heading {
207
+ font-family: var(--font-display);
208
+ font-size: 14px;
209
+ font-weight: 600;
210
+ color: var(--fg);
211
+ margin-bottom: 16px;
212
+ display: flex;
213
+ align-items: center;
214
+ gap: 8px;
215
+ }
216
+ .grid .cell-heading svg {
217
+ width: 16px;
218
+ height: 16px;
219
+ color: var(--accent);
220
+ flex-shrink: 0;
221
+ }
222
+
223
+ /* ── Identity Cell (2-wide) ── */
224
+ .grid .cell-identity {
225
+ grid-column: span 2;
226
+ display: flex;
227
+ flex-direction: column;
228
+ gap: 12px;
229
+ }
230
+ .grid .cell-identity h1 {
231
+ font-family: var(--font-display);
232
+ font-size: 28px;
233
+ font-weight: 700;
234
+ letter-spacing: -0.02em;
235
+ line-height: 1.2;
236
+ }
237
+ .grid .cell-identity .location {
238
+ font-size: 13px;
239
+ color: var(--fg-muted);
240
+ display: flex;
241
+ align-items: center;
242
+ gap: 6px;
243
+ }
244
+ .grid .cell-identity .location svg {
245
+ width: 14px;
246
+ height: 14px;
247
+ color: var(--fg-faint);
248
+ flex-shrink: 0;
249
+ }
250
+ .grid .cell-identity .bio {
251
+ font-size: 14px;
252
+ color: var(--fg-muted);
253
+ line-height: 1.6;
254
+ max-width: 48ch;
255
+ margin-top: 6px;
256
+ }
257
+ .grid .identity-text {
258
+ flex: 1;
259
+ min-width: 0;
260
+ }
261
+
262
+ /* ── Profile photo ── */
263
+ .grid .cell-identity .profile-photo {
264
+ width: 100px;
265
+ height: 130px;
266
+ border-radius: 16px;
267
+ object-fit: cover;
268
+ object-position: 70% 5%;
269
+ border: 2px solid var(--border);
270
+ flex-shrink: 0;
271
+ }
272
+ .grid .identity-top {
273
+ display: flex;
274
+ align-items: flex-start;
275
+ gap: 16px;
276
+ margin-bottom: 8px;
277
+ }
278
+
279
+ /* ── Contact links ── */
280
+ .grid .contact-row {
281
+ display: flex;
282
+ flex-wrap: wrap;
283
+ gap: 8px 16px;
284
+ margin-top: 8px;
285
+ font-family: var(--font-mono);
286
+ font-size: 12px;
287
+ }
288
+ .grid .contact-row a,
289
+ .grid .contact-row span {
290
+ display: inline-flex;
291
+ align-items: center;
292
+ gap: 5px;
293
+ color: var(--fg-muted);
294
+ text-decoration: none;
295
+ transition: color 0.15s;
296
+ }
297
+ .grid .contact-row a:hover {
298
+ color: var(--accent);
299
+ }
300
+ .grid .contact-row a:focus-visible {
301
+ outline: 2px solid var(--accent);
302
+ outline-offset: 2px;
303
+ border-radius: var(--radius-sm);
304
+ }
305
+ .grid .contact-row svg {
306
+ flex-shrink: 0;
307
+ }
308
+ .grid .resume-btn {
309
+ display: inline-flex;
310
+ align-items: center;
311
+ gap: 5px;
312
+ padding: 3px 10px;
313
+ border: 1px solid var(--border);
314
+ border-radius: 8px;
315
+ font-family: var(--font-mono);
316
+ font-size: 12px;
317
+ color: var(--fg-muted);
318
+ text-decoration: none;
319
+ transition: border-color 0.15s, color 0.15s;
320
+ background: transparent;
321
+ }
322
+ .grid .resume-btn:hover {
323
+ border-color: var(--accent);
324
+ color: var(--accent);
325
+ }
326
+
327
+ /* ── Stat Cell ── */
328
+ .grid .cell-stat {
329
+ display: flex;
330
+ flex-direction: column;
331
+ justify-content: space-between;
332
+ min-height: 120px;
333
+ }
334
+ .grid .stat-label {
335
+ font-family: var(--font-mono);
336
+ font-size: 11px;
337
+ text-transform: uppercase;
338
+ letter-spacing: 0.06em;
339
+ color: var(--fg-muted);
340
+ }
341
+ .grid .stat-number {
342
+ font-family: var(--font-display);
343
+ font-size: 36px;
344
+ font-weight: 700;
345
+ letter-spacing: -0.03em;
346
+ color: var(--fg);
347
+ line-height: 1;
348
+ }
349
+ .grid .stat-number .stat-unit {
350
+ font-size: 16px;
351
+ font-weight: 500;
352
+ color: var(--fg-muted);
353
+ margin-inline-start: 2px;
354
+ }
355
+ .grid .stat-icon {
356
+ width: 32px;
357
+ height: 32px;
358
+ border-radius: 8px;
359
+ background: var(--accent-bg);
360
+ display: flex;
361
+ align-items: center;
362
+ justify-content: center;
363
+ }
364
+ .grid .stat-icon svg {
365
+ width: 16px;
366
+ height: 16px;
367
+ color: var(--accent);
368
+ }
369
+
370
+ /* Project stat overrides */
371
+ .grid.heyiam-project .cell-stat {
372
+ min-height: 110px;
373
+ }
374
+ .grid.heyiam-project .stat-number {
375
+ font-size: 28px;
376
+ }
377
+ .grid.heyiam-project .stat-number .stat-unit {
378
+ font-size: 14px;
379
+ }
380
+
381
+ /* Session stat overrides */
382
+ .grid.heyiam-session .cell-stat {
383
+ min-height: 100px;
384
+ }
385
+ .grid.heyiam-session .stat-number {
386
+ font-size: 28px;
387
+ }
388
+ .grid.heyiam-session .stat-number .stat-unit {
389
+ font-size: 14px;
390
+ }
391
+
392
+ /* ── Source Mix Cell ── */
393
+ .grid .cell-source {
394
+ grid-column: span 2;
395
+ }
396
+ .grid .cell-source h2 {
397
+ font-family: var(--font-display);
398
+ font-size: 14px;
399
+ font-weight: 600;
400
+ margin-bottom: 16px;
401
+ color: var(--fg);
402
+ }
403
+ .grid .source-bars {
404
+ display: flex;
405
+ flex-direction: column;
406
+ gap: 12px;
407
+ }
408
+ .grid .source-item {
409
+ display: flex;
410
+ align-items: center;
411
+ gap: 12px;
412
+ }
413
+ .grid .source-name {
414
+ font-family: var(--font-mono);
415
+ font-size: 12px;
416
+ color: var(--fg-muted);
417
+ width: 80px;
418
+ flex-shrink: 0;
419
+ }
420
+ .grid .source-bar-track {
421
+ flex: 1;
422
+ height: 8px;
423
+ background: var(--border-light);
424
+ border-radius: 4px;
425
+ overflow: hidden;
426
+ }
427
+ .grid .source-bar-fill {
428
+ height: 100%;
429
+ border-radius: 4px;
430
+ background: var(--accent);
431
+ }
432
+ .grid .source-bar-fill--secondary {
433
+ background: var(--accent-light);
434
+ }
435
+ .grid .source-pct {
436
+ font-family: var(--font-mono);
437
+ font-size: 12px;
438
+ color: var(--fg);
439
+ font-weight: 500;
440
+ width: 40px;
441
+ text-align: end;
442
+ }
443
+ /* Portfolio source-pct is slightly narrower */
444
+ .grid.heyiam-portfolio .source-pct {
445
+ width: 36px;
446
+ }
447
+
448
+ /* ── Project Card Cell ── */
449
+ .grid .cell-project {
450
+ grid-column: span 2;
451
+ display: flex;
452
+ flex-direction: column;
453
+ gap: 16px;
454
+ transition: box-shadow 0.2s, transform 0.2s;
455
+ text-decoration: none;
456
+ color: inherit;
457
+ cursor: pointer;
458
+ }
459
+ .grid .cell-project:hover {
460
+ box-shadow: var(--shadow-md);
461
+ transform: translateY(-2px);
462
+ }
463
+ .grid .cell-project:focus-visible {
464
+ outline: 2px solid var(--accent);
465
+ outline-offset: 2px;
466
+ }
467
+ .grid .project-header {
468
+ display: flex;
469
+ align-items: flex-start;
470
+ justify-content: space-between;
471
+ gap: 12px;
472
+ }
473
+ .grid .project-title {
474
+ font-family: var(--font-display);
475
+ font-size: 18px;
476
+ font-weight: 700;
477
+ letter-spacing: -0.01em;
478
+ color: var(--fg);
479
+ }
480
+ .grid .project-arrow {
481
+ width: 20px;
482
+ height: 20px;
483
+ color: var(--fg-faint);
484
+ flex-shrink: 0;
485
+ margin-top: 2px;
486
+ }
487
+ .grid .project-narrative {
488
+ font-size: 14px;
489
+ color: var(--fg-muted);
490
+ line-height: 1.6;
491
+ }
492
+ .grid .project-meta {
493
+ display: flex;
494
+ gap: 16px;
495
+ flex-wrap: wrap;
496
+ }
497
+ .grid .project-meta-item {
498
+ font-family: var(--font-mono);
499
+ font-size: 12px;
500
+ color: var(--fg-muted);
501
+ }
502
+ .grid .project-meta-item strong {
503
+ color: var(--fg);
504
+ font-weight: 600;
505
+ }
506
+ .grid .project-skills {
507
+ display: flex;
508
+ flex-wrap: wrap;
509
+ gap: 6px;
510
+ }
511
+ .grid .skill-chip {
512
+ font-family: var(--font-mono);
513
+ font-size: 11px;
514
+ padding: 3px 10px;
515
+ border-radius: 20px;
516
+ background: var(--accent-bg);
517
+ color: var(--accent);
518
+ font-weight: 500;
519
+ white-space: nowrap;
520
+ }
521
+ /* Project/session pages use slightly larger skill chips */
522
+ .grid.heyiam-project .skill-chip,
523
+ .grid.heyiam-session .skill-chip {
524
+ padding: 4px 12px;
525
+ }
526
+
527
+ /* ── Project source bar (portfolio card) ── */
528
+ .grid .project-source-bar {
529
+ display: flex;
530
+ height: 4px;
531
+ border-radius: 2px;
532
+ overflow: hidden;
533
+ gap: 2px;
534
+ }
535
+ .grid .project-source-segment {
536
+ height: 100%;
537
+ border-radius: 2px;
538
+ }
539
+
540
+ /* ── Skills Aggregate Cell (portfolio) ── */
541
+ .grid .cell-all-skills {
542
+ grid-column: span 2;
543
+ }
544
+ .grid .cell-all-skills h2 {
545
+ font-family: var(--font-display);
546
+ font-size: 14px;
547
+ font-weight: 600;
548
+ margin-bottom: 16px;
549
+ color: var(--fg);
550
+ display: flex;
551
+ align-items: center;
552
+ gap: 8px;
553
+ }
554
+ .grid .cell-all-skills h2 svg {
555
+ width: 16px;
556
+ height: 16px;
557
+ color: var(--accent);
558
+ flex-shrink: 0;
559
+ }
560
+ .grid .all-skills-grid {
561
+ display: flex;
562
+ flex-wrap: wrap;
563
+ gap: 6px;
564
+ }
565
+
566
+ /* ── Activity Heatmap Cell (portfolio) ── */
567
+ .grid .cell-activity {
568
+ grid-column: span 2;
569
+ }
570
+ .grid .cell-activity h2 {
571
+ font-family: var(--font-display);
572
+ font-size: 14px;
573
+ font-weight: 600;
574
+ margin-bottom: 16px;
575
+ color: var(--fg);
576
+ display: flex;
577
+ align-items: center;
578
+ gap: 8px;
579
+ }
580
+ .grid .cell-activity h2 svg {
581
+ width: 16px;
582
+ height: 16px;
583
+ color: var(--accent);
584
+ flex-shrink: 0;
585
+ }
586
+ .grid .heatmap {
587
+ display: grid;
588
+ grid-template-columns: repeat(12, 1fr);
589
+ gap: 4px;
590
+ }
591
+ .grid .heatmap-cell {
592
+ aspect-ratio: 1;
593
+ border-radius: 4px;
594
+ background: var(--border-light);
595
+ }
596
+ .grid .heatmap-cell--l1 { background: #e0e7ff; }
597
+ .grid .heatmap-cell--l2 { background: #c7d2fe; }
598
+ .grid .heatmap-cell--l3 { background: #a5b4fc; }
599
+ .grid .heatmap-cell--l4 { background: #6366f1; }
600
+ .grid .heatmap-legend {
601
+ display: flex;
602
+ align-items: center;
603
+ gap: 6px;
604
+ margin-top: 10px;
605
+ justify-content: flex-end;
606
+ }
607
+ .grid .heatmap-legend-label {
608
+ font-family: var(--font-mono);
609
+ font-size: 10px;
610
+ color: var(--fg-faint);
611
+ }
612
+ .grid .heatmap-legend-cell {
613
+ width: 12px;
614
+ height: 12px;
615
+ border-radius: 3px;
616
+ }
617
+
618
+ /* ── Recent Sessions Cell (portfolio) ── */
619
+ .grid .cell-recent {
620
+ grid-column: span 4;
621
+ }
622
+ .grid .cell-recent h2 {
623
+ font-family: var(--font-display);
624
+ font-size: 14px;
625
+ font-weight: 600;
626
+ margin-bottom: 16px;
627
+ color: var(--fg);
628
+ display: flex;
629
+ align-items: center;
630
+ gap: 8px;
631
+ }
632
+ .grid .cell-recent h2 svg {
633
+ width: 16px;
634
+ height: 16px;
635
+ color: var(--accent);
636
+ flex-shrink: 0;
637
+ }
638
+ .grid .recent-list {
639
+ display: flex;
640
+ flex-direction: column;
641
+ gap: 0;
642
+ }
643
+ .grid .recent-row {
644
+ display: grid;
645
+ grid-template-columns: 1fr 120px 60px 60px;
646
+ gap: 12px;
647
+ align-items: center;
648
+ padding: 10px 0;
649
+ border-bottom: 1px solid var(--border-light);
650
+ font-size: 13px;
651
+ }
652
+ .grid .recent-row:last-child {
653
+ border-bottom: none;
654
+ }
655
+ .grid .recent-title {
656
+ color: var(--fg);
657
+ font-weight: 500;
658
+ white-space: nowrap;
659
+ overflow: hidden;
660
+ text-overflow: ellipsis;
661
+ }
662
+ .grid .recent-project {
663
+ font-family: var(--font-mono);
664
+ font-size: 12px;
665
+ color: var(--accent);
666
+ }
667
+ .grid .recent-date {
668
+ font-family: var(--font-mono);
669
+ font-size: 11px;
670
+ color: var(--fg-faint);
671
+ text-align: end;
672
+ }
673
+ .grid .recent-duration {
674
+ font-family: var(--font-mono);
675
+ font-size: 12px;
676
+ color: var(--fg-muted);
677
+ text-align: end;
678
+ }
679
+
680
+ /* ── Title Cell (3-wide) ── */
681
+ .grid .cell-title {
682
+ grid-column: span 3;
683
+ display: flex;
684
+ flex-direction: column;
685
+ gap: 12px;
686
+ }
687
+ .grid .cell-title h1 {
688
+ font-family: var(--font-display);
689
+ font-size: 32px;
690
+ font-weight: 700;
691
+ letter-spacing: -0.02em;
692
+ line-height: 1.2;
693
+ }
694
+ .grid .cell-title .project-links {
695
+ display: flex;
696
+ gap: 16px;
697
+ flex-wrap: wrap;
698
+ }
699
+ .grid .cell-title .project-links a {
700
+ font-family: var(--font-mono);
701
+ font-size: 13px;
702
+ color: var(--accent);
703
+ text-decoration: none;
704
+ display: inline-flex;
705
+ align-items: center;
706
+ gap: 6px;
707
+ }
708
+ .grid .cell-title .project-links a:hover {
709
+ text-decoration: underline;
710
+ }
711
+ .grid .cell-title .project-links a:focus-visible {
712
+ outline: 2px solid var(--accent);
713
+ outline-offset: 2px;
714
+ border-radius: 4px;
715
+ }
716
+ .grid .cell-title .project-links svg {
717
+ width: 14px;
718
+ height: 14px;
719
+ flex-shrink: 0;
720
+ }
721
+
722
+ /* Session title overrides */
723
+ .grid.heyiam-session .cell-title {
724
+ gap: 10px;
725
+ }
726
+ .grid.heyiam-session .cell-title h1 {
727
+ font-size: 26px;
728
+ line-height: 1.3;
729
+ }
730
+
731
+ /* ── Screenshot Cell ── */
732
+ .grid .cell-screenshot {
733
+ grid-row: span 2;
734
+ padding: 16px;
735
+ display: flex;
736
+ flex-direction: column;
737
+ }
738
+ .grid .browser-chrome {
739
+ background: var(--border-light);
740
+ border-radius: var(--radius-sm) var(--radius-sm) 0 0;
741
+ padding: 10px 14px;
742
+ display: flex;
743
+ align-items: center;
744
+ gap: 8px;
745
+ }
746
+ .grid .browser-dot {
747
+ width: 10px;
748
+ height: 10px;
749
+ border-radius: 50%;
750
+ background: var(--border);
751
+ }
752
+ .grid .browser-dot:first-child { background: #fca5a5; }
753
+ .grid .browser-dot:nth-child(2) { background: #fde68a; }
754
+ .grid .browser-dot:nth-child(3) { background: #86efac; }
755
+ .grid .browser-bar {
756
+ flex: 1;
757
+ height: 22px;
758
+ background: var(--surface);
759
+ border-radius: 6px;
760
+ margin-inline-start: 8px;
761
+ font-family: var(--font-mono);
762
+ font-size: 11px;
763
+ color: var(--fg-faint);
764
+ display: flex;
765
+ align-items: center;
766
+ padding-inline-start: 10px;
767
+ }
768
+ .grid .browser-viewport {
769
+ flex: 1;
770
+ min-height: 160px;
771
+ background: linear-gradient(135deg, var(--accent-bg) 0%, #e0e7ff 50%, #c7d2fe 100%);
772
+ border-radius: 0 0 var(--radius-sm) var(--radius-sm);
773
+ display: flex;
774
+ align-items: center;
775
+ justify-content: center;
776
+ }
777
+ .grid .browser-viewport-label {
778
+ font-family: var(--font-mono);
779
+ font-size: 12px;
780
+ color: var(--accent);
781
+ opacity: 0.6;
782
+ }
783
+
784
+ /* ── Narrative Cell (3-wide) ── */
785
+ .grid .cell-narrative {
786
+ grid-column: span 3;
787
+ }
788
+ .grid .cell-narrative p {
789
+ font-size: 15px;
790
+ color: var(--fg-muted);
791
+ line-height: 1.7;
792
+ margin-bottom: 12px;
793
+ }
794
+ .grid .cell-narrative p:last-child {
795
+ margin-bottom: 0;
796
+ }
797
+ .grid .highlights-list {
798
+ list-style: none;
799
+ padding: 0;
800
+ }
801
+ .grid .highlights-list li {
802
+ font-size: 14px;
803
+ color: var(--fg-muted);
804
+ line-height: 1.7;
805
+ padding: 6px 0;
806
+ border-bottom: 1px solid var(--border-light);
807
+ }
808
+ .grid .highlights-list li:last-child {
809
+ border-bottom: none;
810
+ }
811
+
812
+ /* ── Phases Cell (2-wide) ── */
813
+ .grid .cell-phases {
814
+ grid-column: span 2;
815
+ }
816
+ .grid .phase-list {
817
+ list-style: none;
818
+ display: flex;
819
+ flex-direction: column;
820
+ gap: 12px;
821
+ }
822
+ .grid .phase-item {
823
+ display: flex;
824
+ gap: 12px;
825
+ align-items: flex-start;
826
+ }
827
+ .grid .phase-number {
828
+ width: 28px;
829
+ height: 28px;
830
+ border-radius: 8px;
831
+ background: var(--accent-bg);
832
+ color: var(--accent);
833
+ font-family: var(--font-mono);
834
+ font-size: 12px;
835
+ font-weight: 600;
836
+ display: flex;
837
+ align-items: center;
838
+ justify-content: center;
839
+ flex-shrink: 0;
840
+ }
841
+ .grid .phase-content {
842
+ flex: 1;
843
+ min-width: 0;
844
+ }
845
+ .grid .phase-name {
846
+ font-family: var(--font-display);
847
+ font-size: 14px;
848
+ font-weight: 600;
849
+ color: var(--fg);
850
+ }
851
+ .grid .phase-dates {
852
+ font-family: var(--font-mono);
853
+ font-size: 11px;
854
+ color: var(--fg-faint);
855
+ margin-top: 2px;
856
+ }
857
+ .grid .phase-desc {
858
+ font-size: 13px;
859
+ color: var(--fg-muted);
860
+ margin-top: 4px;
861
+ }
862
+
863
+ /* ── Skills Cell (2-wide) ── */
864
+ .grid .cell-skills {
865
+ grid-column: span 2;
866
+ }
867
+ .grid .skills-grid {
868
+ display: flex;
869
+ flex-wrap: wrap;
870
+ gap: 6px;
871
+ }
872
+
873
+ /* Session skills cell is 1-wide */
874
+ .grid.heyiam-session .cell-skills {
875
+ grid-column: span 1;
876
+ }
877
+
878
+ /* ── Decisions Cell (2-wide) ── */
879
+ .grid .cell-decisions {
880
+ grid-column: span 2;
881
+ }
882
+ .grid .decision-list {
883
+ list-style: none;
884
+ display: flex;
885
+ flex-direction: column;
886
+ gap: 10px;
887
+ counter-reset: decision;
888
+ }
889
+ .grid .decision-item {
890
+ display: flex;
891
+ gap: 10px;
892
+ align-items: flex-start;
893
+ counter-increment: decision;
894
+ }
895
+ .grid .decision-item::before {
896
+ content: counter(decision);
897
+ width: 22px;
898
+ height: 22px;
899
+ border-radius: 6px;
900
+ background: var(--accent-bg);
901
+ color: var(--accent);
902
+ font-family: var(--font-mono);
903
+ font-size: 11px;
904
+ font-weight: 600;
905
+ display: flex;
906
+ align-items: center;
907
+ justify-content: center;
908
+ flex-shrink: 0;
909
+ margin-top: 1px;
910
+ }
911
+ .grid .decision-text {
912
+ font-size: 14px;
913
+ color: var(--fg-muted);
914
+ line-height: 1.5;
915
+ }
916
+
917
+ /* ── Timeline Chart Cell (4-wide) ── */
918
+ .grid .cell-timeline {
919
+ grid-column: span 4;
920
+ }
921
+ .grid .timeline-chart {
922
+ display: flex;
923
+ flex-direction: column;
924
+ gap: 0;
925
+ }
926
+ .grid .timeline-row {
927
+ display: grid;
928
+ grid-template-columns: 28px 1fr 60px 50px 50px;
929
+ gap: 12px;
930
+ align-items: center;
931
+ padding: 10px 0;
932
+ border-bottom: 1px solid var(--border-light);
933
+ font-size: 13px;
934
+ }
935
+ .grid .timeline-row:last-child {
936
+ border-bottom: none;
937
+ }
938
+ .grid .timeline-header {
939
+ font-family: var(--font-mono);
940
+ font-size: 10px;
941
+ text-transform: uppercase;
942
+ letter-spacing: 0.06em;
943
+ color: var(--fg-faint);
944
+ border-bottom: 1px solid var(--border);
945
+ padding-bottom: 8px;
946
+ }
947
+ .grid .timeline-num {
948
+ font-family: var(--font-mono);
949
+ font-size: 12px;
950
+ color: var(--fg-faint);
951
+ text-align: center;
952
+ }
953
+ .grid .timeline-title {
954
+ color: var(--fg);
955
+ font-weight: 500;
956
+ white-space: nowrap;
957
+ overflow: hidden;
958
+ text-overflow: ellipsis;
959
+ }
960
+ .grid .timeline-date {
961
+ font-family: var(--font-mono);
962
+ font-size: 11px;
963
+ color: var(--fg-faint);
964
+ text-align: end;
965
+ }
966
+ .grid .timeline-duration {
967
+ font-family: var(--font-mono);
968
+ font-size: 12px;
969
+ color: var(--fg-muted);
970
+ text-align: end;
971
+ }
972
+ .grid .timeline-loc {
973
+ font-family: var(--font-mono);
974
+ font-size: 12px;
975
+ color: var(--fg-muted);
976
+ text-align: end;
977
+ }
978
+
979
+ /* ── Session Subtitle ── */
980
+ .grid .session-subtitle {
981
+ display: flex;
982
+ gap: 16px;
983
+ flex-wrap: wrap;
984
+ align-items: center;
985
+ font-family: var(--font-mono);
986
+ font-size: 13px;
987
+ color: var(--fg-muted);
988
+ }
989
+ .grid .session-subtitle .source-badge {
990
+ display: inline-flex;
991
+ align-items: center;
992
+ gap: 6px;
993
+ padding: 3px 10px;
994
+ border-radius: 20px;
995
+ background: var(--accent-bg);
996
+ color: var(--accent);
997
+ font-weight: 500;
998
+ font-size: 12px;
999
+ }
1000
+ .grid .session-subtitle .source-badge svg {
1001
+ width: 12px;
1002
+ height: 12px;
1003
+ }
1004
+
1005
+ /* ── Dev Take Cell (4-wide) ── */
1006
+ .grid .cell-devtake {
1007
+ grid-column: span 4;
1008
+ background: var(--accent-bg);
1009
+ border-color: var(--accent-light);
1010
+ position: relative;
1011
+ padding-inline-start: 48px;
1012
+ }
1013
+ .grid .cell-devtake::before {
1014
+ content: '';
1015
+ position: absolute;
1016
+ inset-inline-start: 24px;
1017
+ top: 24px;
1018
+ bottom: 24px;
1019
+ width: 3px;
1020
+ border-radius: 2px;
1021
+ background: var(--accent);
1022
+ }
1023
+ .grid .cell-devtake blockquote {
1024
+ font-size: 15px;
1025
+ font-style: italic;
1026
+ color: var(--fg);
1027
+ line-height: 1.7;
1028
+ }
1029
+ .grid .cell-devtake .devtake-label {
1030
+ font-family: var(--font-mono);
1031
+ font-size: 11px;
1032
+ text-transform: uppercase;
1033
+ letter-spacing: 0.06em;
1034
+ color: var(--accent);
1035
+ font-weight: 600;
1036
+ margin-bottom: 8px;
1037
+ }
1038
+
1039
+ /* ── Tools Cell (2-wide) ── */
1040
+ .grid .cell-tools {
1041
+ grid-column: span 2;
1042
+ }
1043
+ .grid .tools-list {
1044
+ display: flex;
1045
+ flex-direction: column;
1046
+ gap: 8px;
1047
+ }
1048
+ .grid .tool-row {
1049
+ display: flex;
1050
+ align-items: center;
1051
+ justify-content: space-between;
1052
+ gap: 12px;
1053
+ }
1054
+ .grid .tool-name {
1055
+ font-family: var(--font-mono);
1056
+ font-size: 13px;
1057
+ color: var(--fg);
1058
+ font-weight: 500;
1059
+ }
1060
+ .grid .tool-bar-wrap {
1061
+ flex: 1;
1062
+ display: flex;
1063
+ align-items: center;
1064
+ gap: 8px;
1065
+ }
1066
+ .grid .tool-bar-track {
1067
+ flex: 1;
1068
+ height: 6px;
1069
+ background: var(--border-light);
1070
+ border-radius: 3px;
1071
+ overflow: hidden;
1072
+ }
1073
+ .grid .tool-bar-fill {
1074
+ height: 100%;
1075
+ border-radius: 3px;
1076
+ background: var(--accent);
1077
+ }
1078
+ .grid .tool-count {
1079
+ font-family: var(--font-mono);
1080
+ font-size: 12px;
1081
+ color: var(--fg-muted);
1082
+ width: 24px;
1083
+ text-align: end;
1084
+ }
1085
+
1086
+ /* ── Files Cell (2-wide) ── */
1087
+ .grid .cell-files {
1088
+ grid-column: span 2;
1089
+ }
1090
+ .grid .files-list {
1091
+ display: flex;
1092
+ flex-direction: column;
1093
+ gap: 8px;
1094
+ }
1095
+ .grid .file-row {
1096
+ display: flex;
1097
+ align-items: center;
1098
+ justify-content: space-between;
1099
+ gap: 8px;
1100
+ }
1101
+ .grid .file-name {
1102
+ font-family: var(--font-mono);
1103
+ font-size: 12px;
1104
+ color: var(--fg);
1105
+ white-space: nowrap;
1106
+ overflow: hidden;
1107
+ text-overflow: ellipsis;
1108
+ min-width: 0;
1109
+ flex: 1;
1110
+ }
1111
+ .grid .file-diff {
1112
+ font-family: var(--font-mono);
1113
+ font-size: 12px;
1114
+ color: var(--clr-qa);
1115
+ font-weight: 500;
1116
+ flex-shrink: 0;
1117
+ }
1118
+
1119
+ /* ── Beats Cell (3-wide) ── */
1120
+ .grid .cell-beats {
1121
+ grid-column: span 3;
1122
+ }
1123
+ .grid .beats-list {
1124
+ list-style: none;
1125
+ display: flex;
1126
+ flex-direction: column;
1127
+ gap: 0;
1128
+ }
1129
+ .grid .beat-item {
1130
+ display: flex;
1131
+ gap: 16px;
1132
+ padding: 14px 0;
1133
+ border-bottom: 1px solid var(--border-light);
1134
+ }
1135
+ .grid .beat-item:last-child {
1136
+ border-bottom: none;
1137
+ padding-bottom: 0;
1138
+ }
1139
+ .grid .beat-item:first-child {
1140
+ padding-top: 0;
1141
+ }
1142
+ .grid .beat-indicator {
1143
+ display: flex;
1144
+ flex-direction: column;
1145
+ align-items: center;
1146
+ gap: 0;
1147
+ flex-shrink: 0;
1148
+ width: 28px;
1149
+ }
1150
+ .grid .beat-dot {
1151
+ width: 10px;
1152
+ height: 10px;
1153
+ border-radius: 50%;
1154
+ background: var(--accent);
1155
+ flex-shrink: 0;
1156
+ margin-top: 4px;
1157
+ }
1158
+ .grid .beat-line {
1159
+ width: 2px;
1160
+ flex: 1;
1161
+ background: var(--border);
1162
+ margin-top: 4px;
1163
+ }
1164
+ .grid .beat-item:last-child .beat-line {
1165
+ display: none;
1166
+ }
1167
+ .grid .beat-content {
1168
+ flex: 1;
1169
+ min-width: 0;
1170
+ }
1171
+ .grid .beat-title {
1172
+ font-family: var(--font-display);
1173
+ font-size: 14px;
1174
+ font-weight: 600;
1175
+ color: var(--fg);
1176
+ margin-bottom: 4px;
1177
+ }
1178
+ .grid .beat-desc {
1179
+ font-size: 14px;
1180
+ color: var(--fg-muted);
1181
+ line-height: 1.6;
1182
+ }
1183
+
1184
+ /* ── Q&A Cell (4-wide) ── */
1185
+ .grid .cell-qa {
1186
+ grid-column: span 4;
1187
+ }
1188
+ .grid .qa-list {
1189
+ display: flex;
1190
+ flex-direction: column;
1191
+ gap: 20px;
1192
+ }
1193
+ .grid .qa-item {
1194
+ display: flex;
1195
+ flex-direction: column;
1196
+ gap: 8px;
1197
+ }
1198
+ .grid .qa-question {
1199
+ font-family: var(--font-display);
1200
+ font-size: 14px;
1201
+ font-weight: 600;
1202
+ color: var(--fg);
1203
+ display: flex;
1204
+ gap: 8px;
1205
+ align-items: flex-start;
1206
+ }
1207
+ .grid .qa-q-badge {
1208
+ display: inline-flex;
1209
+ align-items: center;
1210
+ justify-content: center;
1211
+ width: 22px;
1212
+ height: 22px;
1213
+ border-radius: 6px;
1214
+ background: var(--accent-bg);
1215
+ color: var(--accent);
1216
+ font-family: var(--font-mono);
1217
+ font-size: 11px;
1218
+ font-weight: 600;
1219
+ flex-shrink: 0;
1220
+ margin-top: 1px;
1221
+ }
1222
+ .grid .qa-answer {
1223
+ font-size: 14px;
1224
+ color: var(--fg-muted);
1225
+ line-height: 1.7;
1226
+ padding-inline-start: 30px;
1227
+ }
1228
+
1229
+ /* ── Agents Cell (4-wide) ── */
1230
+ .grid .cell-agents {
1231
+ grid-column: span 4;
1232
+ }
1233
+ .grid .agents-grid {
1234
+ display: grid;
1235
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
1236
+ gap: 12px;
1237
+ }
1238
+ .grid .agent-card {
1239
+ display: flex;
1240
+ align-items: center;
1241
+ gap: 12px;
1242
+ padding: 12px 16px;
1243
+ border-radius: var(--radius-sm);
1244
+ background: var(--border-light);
1245
+ }
1246
+ .grid .agent-color {
1247
+ width: 10px;
1248
+ height: 10px;
1249
+ border-radius: 50%;
1250
+ flex-shrink: 0;
1251
+ }
1252
+ .grid .agent-info {
1253
+ flex: 1;
1254
+ min-width: 0;
1255
+ }
1256
+ .grid .agent-role {
1257
+ font-family: var(--font-mono);
1258
+ font-size: 12px;
1259
+ font-weight: 500;
1260
+ color: var(--fg);
1261
+ }
1262
+ .grid .agent-meta {
1263
+ font-family: var(--font-mono);
1264
+ font-size: 11px;
1265
+ color: var(--fg-muted);
1266
+ }
1267
+
1268
+ /* ── Session Card Cell (2-wide) ── */
1269
+ .grid .cell-session {
1270
+ grid-column: span 2;
1271
+ display: flex;
1272
+ flex-direction: column;
1273
+ gap: 12px;
1274
+ transition: box-shadow 0.2s, transform 0.2s;
1275
+ text-decoration: none;
1276
+ color: inherit;
1277
+ cursor: pointer;
1278
+ }
1279
+ .grid .cell-session:hover {
1280
+ box-shadow: var(--shadow-md);
1281
+ transform: translateY(-2px);
1282
+ }
1283
+ .grid .cell-session:focus-visible {
1284
+ outline: 2px solid var(--accent);
1285
+ outline-offset: 2px;
1286
+ }
1287
+ .grid .session-header {
1288
+ display: flex;
1289
+ align-items: flex-start;
1290
+ justify-content: space-between;
1291
+ gap: 8px;
1292
+ }
1293
+ .grid .session-title {
1294
+ font-family: var(--font-display);
1295
+ font-size: 15px;
1296
+ font-weight: 600;
1297
+ color: var(--fg);
1298
+ line-height: 1.3;
1299
+ }
1300
+ .grid .session-tag {
1301
+ font-family: var(--font-mono);
1302
+ font-size: 10px;
1303
+ font-weight: 500;
1304
+ padding: 2px 8px;
1305
+ border-radius: 20px;
1306
+ background: var(--accent-bg);
1307
+ color: var(--accent);
1308
+ white-space: nowrap;
1309
+ flex-shrink: 0;
1310
+ }
1311
+ .grid .session-meta {
1312
+ display: flex;
1313
+ gap: 12px;
1314
+ flex-wrap: wrap;
1315
+ font-family: var(--font-mono);
1316
+ font-size: 12px;
1317
+ color: var(--fg-muted);
1318
+ }
1319
+ .grid .session-agents {
1320
+ display: flex;
1321
+ gap: 4px;
1322
+ }
1323
+ .grid .agent-dot {
1324
+ width: 8px;
1325
+ height: 8px;
1326
+ border-radius: 50%;
1327
+ }
1328
+
1329
+ /* ── Clickable session cards ── */
1330
+ .grid a.session-card {
1331
+ text-decoration: none;
1332
+ color: inherit;
1333
+ display: block;
1334
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
1335
+ }
1336
+ .grid a.session-card:hover {
1337
+ transform: translateY(-2px);
1338
+ }
1339
+
1340
+ /* ── Footer ── */
1341
+ .grid .footer {
1342
+ border-top: 1px solid var(--border);
1343
+ padding: 24px 0;
1344
+ text-align: center;
1345
+ }
1346
+ .grid .footer p {
1347
+ font-family: var(--font-mono);
1348
+ font-size: 12px;
1349
+ color: var(--fg-faint);
1350
+ }
1351
+ .grid .footer a {
1352
+ color: var(--accent);
1353
+ text-decoration: none;
1354
+ }
1355
+ .grid .footer a:hover {
1356
+ text-decoration: underline;
1357
+ }
1358
+
1359
+ /* ── Responsive ── */
1360
+ @media (max-width: 768px) {
1361
+ .grid .bento {
1362
+ grid-template-columns: 1fr;
1363
+ gap: 12px;
1364
+ }
1365
+ .grid .cell-identity,
1366
+ .grid .cell-source,
1367
+ .grid .cell-project,
1368
+ .grid .cell-title,
1369
+ .grid .cell-narrative,
1370
+ .grid .cell-phases,
1371
+ .grid .cell-skills,
1372
+ .grid .cell-decisions,
1373
+ .grid .cell-timeline,
1374
+ .grid .cell-session,
1375
+ .grid .cell-screenshot,
1376
+ .grid .cell-devtake,
1377
+ .grid .cell-tools,
1378
+ .grid .cell-files,
1379
+ .grid .cell-beats,
1380
+ .grid .cell-qa,
1381
+ .grid .cell-agents,
1382
+ .grid .cell-all-skills,
1383
+ .grid .cell-activity,
1384
+ .grid .cell-recent {
1385
+ grid-column: span 1;
1386
+ grid-row: span 1;
1387
+ }
1388
+ .grid .cell-identity h1 {
1389
+ font-size: 22px;
1390
+ }
1391
+ .grid .cell-title h1 {
1392
+ font-size: 22px;
1393
+ }
1394
+ .grid.heyiam-project .cell-title h1 {
1395
+ font-size: 24px;
1396
+ }
1397
+ .grid.heyiam-session .cell-title h1 {
1398
+ font-size: 20px;
1399
+ }
1400
+ .grid .stat-number {
1401
+ font-size: 28px;
1402
+ }
1403
+ .grid.heyiam-portfolio .stat-number {
1404
+ font-size: 28px;
1405
+ }
1406
+ .grid.heyiam-project .stat-number,
1407
+ .grid.heyiam-session .stat-number {
1408
+ font-size: 24px;
1409
+ }
1410
+ .grid .identity-top {
1411
+ flex-direction: column;
1412
+ }
1413
+ .grid .cell-identity .profile-photo {
1414
+ width: 80px;
1415
+ height: 100px;
1416
+ }
1417
+ .grid .agents-grid {
1418
+ grid-template-columns: 1fr;
1419
+ }
1420
+ .grid .recent-row {
1421
+ grid-template-columns: 1fr 60px;
1422
+ }
1423
+ .grid .recent-date,
1424
+ .grid .recent-project {
1425
+ display: none;
1426
+ }
1427
+ .grid .timeline-row {
1428
+ grid-template-columns: 24px 1fr 50px;
1429
+ }
1430
+ .grid .timeline-date,
1431
+ .grid .timeline-loc {
1432
+ display: none;
1433
+ }
1434
+ .grid .nav-links {
1435
+ gap: 4px;
1436
+ }
1437
+ .grid .nav-links a {
1438
+ font-size: 13px;
1439
+ padding: 6px 10px;
1440
+ }
1441
+ }