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,1509 @@
1
+ /* ── paper template styles ─────────────────────────────────── */
2
+
3
+ /* ── Reset ── */
4
+ *,
5
+ *::before,
6
+ *::after {
7
+ box-sizing: border-box;
8
+ margin: 0;
9
+ padding: 0;
10
+ }
11
+
12
+ /* ── Paper Design Tokens ── */
13
+ :root {
14
+ /* Surfaces */
15
+ --paper-bg: #fffff8;
16
+ --paper-surface: #f5f5f0;
17
+ --paper-surface-hover: #ededea;
18
+
19
+ /* Accent */
20
+ --paper-accent: #1a1a1a;
21
+
22
+ /* Text hierarchy */
23
+ --paper-text: #1a1a1a;
24
+ --paper-text-secondary: #555550;
25
+ --paper-text-tertiary: #8a8a82;
26
+
27
+ /* Borders */
28
+ --paper-border: #1a1a1a;
29
+ --paper-border-light: #d4d4cc;
30
+ --paper-border-faint: #e8e8e0;
31
+
32
+ /* Typography */
33
+ --paper-font-display: 'Newsreader', Georgia, serif;
34
+ --paper-font-body: 'Source Serif 4', Georgia, serif;
35
+ --paper-font-mono: 'IBM Plex Mono', monospace;
36
+
37
+ /* Radii (none — newspaper edges) */
38
+ --paper-radius: 0px;
39
+
40
+ /* Motion */
41
+ --paper-duration: 400ms;
42
+ --paper-ease: ease-out;
43
+
44
+ /* Agent role colors */
45
+ --color-frontend: #7c3aed;
46
+ --color-backend: #0891b2;
47
+ --color-qa: #059669;
48
+ --color-security: #475569;
49
+ --color-reviewer: #e11d48;
50
+ --color-ux: #d97706;
51
+ }
52
+
53
+ /* ── Base Styles ── */
54
+ html {
55
+ scroll-behavior: smooth;
56
+ }
57
+
58
+ body {
59
+ font-family: var(--paper-font-body);
60
+ color: var(--paper-text);
61
+ background: var(--paper-bg);
62
+ line-height: 1.65;
63
+ -webkit-font-smoothing: antialiased;
64
+ -moz-osx-font-smoothing: grayscale;
65
+ font-size: 17px;
66
+ }
67
+
68
+ /* ── Links ── */
69
+ a {
70
+ color: var(--paper-text);
71
+ text-decoration: underline;
72
+ text-decoration-thickness: 1px;
73
+ text-underline-offset: 2px;
74
+ }
75
+ a:hover {
76
+ text-decoration-thickness: 2px;
77
+ }
78
+ a:visited {
79
+ color: var(--paper-text);
80
+ }
81
+ a:focus-visible {
82
+ outline: 2px solid var(--paper-accent);
83
+ outline-offset: 2px;
84
+ }
85
+
86
+ /* ── Skip Link ── */
87
+ .skip-link {
88
+ position: absolute;
89
+ top: -100%;
90
+ left: 1rem;
91
+ background: var(--paper-accent);
92
+ color: var(--paper-bg);
93
+ padding: 0.5rem 1rem;
94
+ z-index: 1000;
95
+ font-family: var(--paper-font-mono);
96
+ font-size: 0.8125rem;
97
+ text-decoration: none;
98
+ border-radius: var(--paper-radius);
99
+ }
100
+ .skip-link:focus {
101
+ top: 0.5rem;
102
+ }
103
+
104
+ /* ── Layout Container ── */
105
+ .page-wrapper {
106
+ max-width: 1100px;
107
+ margin: 0 auto;
108
+ padding: 0 1.5rem;
109
+ }
110
+
111
+ /* ── Masthead ── */
112
+ .masthead {
113
+ text-align: center;
114
+ padding: 2.5rem 0 1.25rem;
115
+ border-bottom: 3px double var(--paper-border);
116
+ }
117
+ .heyiam-portfolio .masthead {
118
+ padding: 3rem 0 1.5rem;
119
+ }
120
+ .masthead__title {
121
+ font-family: var(--paper-font-display);
122
+ font-size: clamp(2rem, 5vw, 3.5rem);
123
+ font-weight: 700;
124
+ letter-spacing: -0.02em;
125
+ line-height: 1.1;
126
+ text-transform: uppercase;
127
+ }
128
+ .heyiam-portfolio .masthead__title {
129
+ font-size: clamp(2.5rem, 6vw, 4.5rem);
130
+ }
131
+ .masthead__title a {
132
+ text-decoration: none;
133
+ }
134
+ .masthead__edition {
135
+ font-family: var(--paper-font-display);
136
+ font-size: 1rem;
137
+ font-style: italic;
138
+ color: var(--paper-text-secondary);
139
+ margin-top: 0.375rem;
140
+ }
141
+ .masthead__rule {
142
+ display: block;
143
+ width: 60px;
144
+ height: 2px;
145
+ background: var(--paper-accent);
146
+ margin: 0.75rem auto;
147
+ border: none;
148
+ }
149
+ .masthead__dateline {
150
+ font-family: var(--paper-font-mono);
151
+ font-size: 0.75rem;
152
+ color: var(--paper-text-secondary);
153
+ margin-top: 0.5rem;
154
+ letter-spacing: 0.08em;
155
+ text-transform: uppercase;
156
+ }
157
+
158
+ /* ── Navigation Bar ── */
159
+ .nav-bar {
160
+ display: flex;
161
+ justify-content: center;
162
+ gap: 2rem;
163
+ padding: 0.75rem 0;
164
+ border-bottom: 1px solid var(--paper-border);
165
+ font-family: var(--paper-font-mono);
166
+ font-size: 0.8125rem;
167
+ text-transform: uppercase;
168
+ letter-spacing: 0.06em;
169
+ }
170
+ .nav-bar a {
171
+ text-decoration: none;
172
+ color: var(--paper-text);
173
+ padding-bottom: 2px;
174
+ transition: opacity var(--paper-duration) var(--paper-ease);
175
+ }
176
+ .nav-bar a:hover {
177
+ text-decoration: underline;
178
+ text-underline-offset: 4px;
179
+ }
180
+ .nav-bar a[aria-current="page"] {
181
+ font-weight: 600;
182
+ border-bottom: 2px solid var(--paper-accent);
183
+ }
184
+
185
+ /* ── Breadcrumb ── */
186
+ .breadcrumb {
187
+ font-family: var(--paper-font-mono);
188
+ font-size: 0.75rem;
189
+ color: var(--paper-text-tertiary);
190
+ padding: 1rem 0;
191
+ text-transform: uppercase;
192
+ letter-spacing: 0.04em;
193
+ }
194
+ .breadcrumb a {
195
+ color: var(--paper-text-tertiary);
196
+ }
197
+ .breadcrumb a:hover {
198
+ color: var(--paper-text);
199
+ }
200
+ .breadcrumb__separator {
201
+ margin: 0 0.375rem;
202
+ user-select: none;
203
+ }
204
+
205
+ /* ── Byline / Bio Section ── */
206
+ .byline {
207
+ text-align: center;
208
+ padding: 2.5rem 0;
209
+ border-bottom: 1px solid var(--paper-border-light);
210
+ }
211
+ .byline__name {
212
+ font-family: var(--paper-font-display);
213
+ font-size: 1.25rem;
214
+ font-weight: 600;
215
+ font-style: italic;
216
+ }
217
+ .byline__location {
218
+ font-family: var(--paper-font-mono);
219
+ font-size: 0.75rem;
220
+ color: var(--paper-text-tertiary);
221
+ margin-top: 0.25rem;
222
+ text-transform: uppercase;
223
+ letter-spacing: 0.06em;
224
+ }
225
+ .byline__bio {
226
+ max-width: 600px;
227
+ margin: 1rem auto 0;
228
+ font-size: 1.0625rem;
229
+ color: var(--paper-text-secondary);
230
+ line-height: 1.7;
231
+ }
232
+ .byline__photo {
233
+ width: 100px;
234
+ height: 130px;
235
+ border-radius: 2px;
236
+ object-fit: cover;
237
+ object-position: 55% 10%;
238
+ border: 2px solid var(--paper-border);
239
+ margin: 0 auto 1rem;
240
+ display: block;
241
+ filter: grayscale(1);
242
+ }
243
+ .byline__links {
244
+ display: flex;
245
+ flex-wrap: wrap;
246
+ justify-content: center;
247
+ gap: 0.75rem 1.5rem;
248
+ margin-top: 1rem;
249
+ font-family: var(--paper-font-mono);
250
+ font-size: 0.75rem;
251
+ }
252
+ .byline__links a {
253
+ display: inline-flex;
254
+ align-items: center;
255
+ gap: 0.375rem;
256
+ color: var(--paper-text-secondary);
257
+ text-decoration: none;
258
+ transition: color var(--paper-duration) var(--paper-ease);
259
+ }
260
+ .byline__links a:hover {
261
+ color: var(--paper-text);
262
+ text-decoration: underline;
263
+ text-underline-offset: 2px;
264
+ }
265
+ .byline__links a svg {
266
+ flex-shrink: 0;
267
+ }
268
+
269
+ /* ── Stats Data Table ── */
270
+ .stats-section {
271
+ padding: 2rem 0;
272
+ border-bottom: 1px solid var(--paper-border-light);
273
+ }
274
+ .stats-section__heading {
275
+ font-family: var(--paper-font-mono);
276
+ font-size: 0.6875rem;
277
+ text-transform: uppercase;
278
+ letter-spacing: 0.1em;
279
+ color: var(--paper-text-tertiary);
280
+ margin-bottom: 1rem;
281
+ text-align: center;
282
+ }
283
+ .stats-table {
284
+ width: 100%;
285
+ max-width: 600px;
286
+ margin: 0 auto;
287
+ border-collapse: collapse;
288
+ font-family: var(--paper-font-mono);
289
+ font-size: 0.875rem;
290
+ }
291
+ .stats-table thead {
292
+ border-bottom: 2px solid var(--paper-border);
293
+ }
294
+ .stats-table th,
295
+ .stats-table td {
296
+ padding: 0.625rem 1rem;
297
+ text-align: left;
298
+ border-bottom: 1px solid var(--paper-border-faint);
299
+ }
300
+ .stats-table th {
301
+ font-weight: 500;
302
+ color: var(--paper-text-tertiary);
303
+ font-size: 0.6875rem;
304
+ text-transform: uppercase;
305
+ letter-spacing: 0.06em;
306
+ }
307
+ .stats-table td {
308
+ color: var(--paper-text);
309
+ }
310
+ .stats-table td:last-child {
311
+ text-align: right;
312
+ font-weight: 600;
313
+ font-size: 1rem;
314
+ }
315
+ .stats-table th:last-child {
316
+ text-align: right;
317
+ }
318
+ .stats-table tbody tr:last-child td {
319
+ border-bottom: none;
320
+ }
321
+ .heyiam-project .stats-table th,
322
+ .heyiam-project .stats-table td {
323
+ padding: 0.5rem 1rem;
324
+ }
325
+ .heyiam-project .stats-table th {
326
+ font-size: 0.75rem;
327
+ }
328
+ .heyiam-project .stats-table td:last-child {
329
+ font-weight: 500;
330
+ }
331
+
332
+ /* ── Section Rule ── */
333
+ .section-rule {
334
+ border: none;
335
+ border-top: 1px solid var(--paper-border-light);
336
+ margin: 0;
337
+ }
338
+ .section-rule--thick {
339
+ border-top-width: 2px;
340
+ border-top-color: var(--paper-border);
341
+ }
342
+
343
+ /* ── Section Label ── */
344
+ .section-label {
345
+ font-family: var(--paper-font-mono);
346
+ font-size: 0.6875rem;
347
+ text-transform: uppercase;
348
+ letter-spacing: 0.1em;
349
+ color: var(--paper-text-tertiary);
350
+ margin-bottom: 1rem;
351
+ text-align: center;
352
+ }
353
+ .heyiam-session .section-label {
354
+ margin-bottom: 1.25rem;
355
+ padding-bottom: 0.5rem;
356
+ border-bottom: 1px solid var(--paper-border-faint);
357
+ }
358
+
359
+ /* ── Projects Section ── */
360
+ .projects-section {
361
+ padding: 2.5rem 0;
362
+ }
363
+ .projects-section__heading {
364
+ font-family: var(--paper-font-display);
365
+ font-size: 1.75rem;
366
+ font-weight: 700;
367
+ text-align: center;
368
+ margin-bottom: 0.25rem;
369
+ }
370
+ .projects-section__subheading {
371
+ font-family: var(--paper-font-mono);
372
+ font-size: 0.6875rem;
373
+ text-transform: uppercase;
374
+ letter-spacing: 0.1em;
375
+ color: var(--paper-text-tertiary);
376
+ text-align: center;
377
+ margin-bottom: 2rem;
378
+ }
379
+
380
+ /* Multi-column layout for desktop */
381
+ .projects-columns {
382
+ column-count: 1;
383
+ column-gap: 2.5rem;
384
+ column-rule: 1px solid var(--paper-border-light);
385
+ }
386
+ @media (min-width: 768px) {
387
+ .projects-columns {
388
+ column-count: 2;
389
+ }
390
+ }
391
+
392
+ /* ── Project Card (article excerpt) ── */
393
+ .project-card {
394
+ break-inside: avoid;
395
+ padding: 1.5rem 0;
396
+ border-bottom: 1px solid var(--paper-border-faint);
397
+ }
398
+ .project-card:last-child {
399
+ border-bottom: none;
400
+ }
401
+ .project-card__number {
402
+ font-family: var(--paper-font-mono);
403
+ font-size: 0.625rem;
404
+ text-transform: uppercase;
405
+ letter-spacing: 0.1em;
406
+ color: var(--paper-text-tertiary);
407
+ margin-bottom: 0.375rem;
408
+ }
409
+ .project-card__headline {
410
+ font-family: var(--paper-font-display);
411
+ font-size: 1.5rem;
412
+ font-weight: 700;
413
+ line-height: 1.2;
414
+ margin-bottom: 0.625rem;
415
+ }
416
+ .project-card__narrative {
417
+ font-size: 0.9375rem;
418
+ line-height: 1.75;
419
+ color: var(--paper-text-secondary);
420
+ margin-bottom: 0.875rem;
421
+ }
422
+ .project-card__meta {
423
+ font-family: var(--paper-font-mono);
424
+ font-size: 0.75rem;
425
+ color: var(--paper-text-tertiary);
426
+ margin-bottom: 0.5rem;
427
+ line-height: 1.6;
428
+ }
429
+ .project-card__meta span + span::before {
430
+ content: " \00b7 ";
431
+ }
432
+ .project-card__source {
433
+ font-family: var(--paper-font-mono);
434
+ font-size: 0.6875rem;
435
+ color: var(--paper-text-tertiary);
436
+ text-transform: uppercase;
437
+ letter-spacing: 0.04em;
438
+ margin-bottom: 0.625rem;
439
+ }
440
+ .project-card__source-bar {
441
+ height: 3px;
442
+ display: flex;
443
+ margin-bottom: 0.75rem;
444
+ background: var(--paper-border-faint);
445
+ }
446
+ .project-card__source-bar-fill {
447
+ height: 100%;
448
+ background: var(--paper-accent);
449
+ }
450
+ .project-card__headline a {
451
+ text-decoration: none;
452
+ }
453
+ .project-card__headline a:hover {
454
+ text-decoration: underline;
455
+ text-underline-offset: 3px;
456
+ }
457
+ .project-card__skills {
458
+ display: flex;
459
+ flex-wrap: wrap;
460
+ gap: 0.375rem;
461
+ margin-top: 0.5rem;
462
+ }
463
+
464
+ /* ── Skill Tag ── */
465
+ .skill-tag {
466
+ font-family: var(--paper-font-mono);
467
+ font-size: 0.6875rem;
468
+ color: var(--paper-text-secondary);
469
+ border: 1px solid var(--paper-border-light);
470
+ padding: 0.1875rem 0.5rem;
471
+ background: var(--paper-surface);
472
+ line-height: 1.4;
473
+ }
474
+
475
+ .heyiam-project .skill-tag {
476
+ padding: 0.125rem 0.5rem;
477
+ }
478
+
479
+ /* ── Aggregate Skills Section ── */
480
+ .aggregate-skills {
481
+ padding: 2rem 0;
482
+ border-top: 1px solid var(--paper-border-light);
483
+ text-align: center;
484
+ }
485
+ .aggregate-skills__list {
486
+ display: flex;
487
+ flex-wrap: wrap;
488
+ gap: 0.375rem;
489
+ justify-content: center;
490
+ max-width: 700px;
491
+ margin: 0 auto;
492
+ }
493
+
494
+ /* ── Article Header ── */
495
+ .article-header {
496
+ padding: 2rem 0 1.5rem;
497
+ border-bottom: 1px solid var(--paper-border-light);
498
+ text-align: center;
499
+ }
500
+ .article-header__kicker {
501
+ font-family: var(--paper-font-mono);
502
+ font-size: 0.6875rem;
503
+ text-transform: uppercase;
504
+ letter-spacing: 0.1em;
505
+ color: var(--paper-text-tertiary);
506
+ margin-bottom: 0.75rem;
507
+ }
508
+ .article-header__headline {
509
+ font-family: var(--paper-font-display);
510
+ font-size: clamp(1.75rem, 4vw, 3rem);
511
+ font-weight: 700;
512
+ line-height: 1.15;
513
+ margin-bottom: 1rem;
514
+ letter-spacing: -0.01em;
515
+ }
516
+ .article-header__links {
517
+ font-family: var(--paper-font-mono);
518
+ font-size: 0.8125rem;
519
+ color: var(--paper-text-secondary);
520
+ }
521
+ .article-header__links a {
522
+ color: var(--paper-text-secondary);
523
+ }
524
+ .article-header__dateline {
525
+ font-family: var(--paper-font-mono);
526
+ font-size: 0.8125rem;
527
+ color: var(--paper-text-secondary);
528
+ }
529
+ .article-header__source {
530
+ font-family: var(--paper-font-mono);
531
+ font-size: 0.6875rem;
532
+ text-transform: uppercase;
533
+ letter-spacing: 0.06em;
534
+ color: var(--paper-text-tertiary);
535
+ margin-top: 0.375rem;
536
+ }
537
+ .heyiam-session .article-header {
538
+ text-align: left;
539
+ }
540
+ .heyiam-session .article-header__headline {
541
+ font-size: clamp(1.75rem, 3.5vw, 2.5rem);
542
+ line-height: 1.2;
543
+ max-width: 700px;
544
+ }
545
+
546
+ /* ── Screenshot ── */
547
+ .screenshot {
548
+ margin: 2rem auto;
549
+ max-width: 800px;
550
+ border: 1px solid var(--paper-border-light);
551
+ background: var(--paper-surface);
552
+ overflow: hidden;
553
+ }
554
+ .screenshot__chrome {
555
+ background: var(--paper-surface);
556
+ border-bottom: 1px solid var(--paper-border-faint);
557
+ padding: 0.5rem 0.75rem;
558
+ display: flex;
559
+ align-items: center;
560
+ gap: 0.5rem;
561
+ }
562
+ .screenshot__dot {
563
+ width: 8px;
564
+ height: 8px;
565
+ border-radius: 50%;
566
+ background: var(--paper-border-light);
567
+ }
568
+ .screenshot__url {
569
+ font-family: var(--paper-font-mono);
570
+ font-size: 0.6875rem;
571
+ color: var(--paper-text-tertiary);
572
+ margin-inline-start: 0.5rem;
573
+ }
574
+ .screenshot__body {
575
+ height: 280px;
576
+ background: linear-gradient(135deg, #e8e8e0 0%, #d4d4cc 100%);
577
+ display: flex;
578
+ align-items: center;
579
+ justify-content: center;
580
+ font-family: var(--paper-font-mono);
581
+ font-size: 0.8125rem;
582
+ color: var(--paper-text-tertiary);
583
+ }
584
+
585
+ /* ── Narrative (drop cap) ── */
586
+ .narrative {
587
+ padding: 2.5rem 0;
588
+ }
589
+ .narrative p {
590
+ font-size: 1.0625rem;
591
+ line-height: 1.75;
592
+ margin-bottom: 1.25rem;
593
+ color: var(--paper-text-secondary);
594
+ }
595
+ .narrative p:last-child {
596
+ margin-bottom: 0;
597
+ }
598
+ .narrative p:first-child::first-letter {
599
+ font-family: var(--paper-font-display);
600
+ font-size: 3.75rem;
601
+ float: left;
602
+ line-height: 0.8;
603
+ padding-right: 0.125rem;
604
+ padding-top: 0.125rem;
605
+ font-weight: 700;
606
+ color: var(--paper-text);
607
+ }
608
+
609
+ /* ── Session Meta Grid ── */
610
+ .session-meta {
611
+ display: grid;
612
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
613
+ gap: 0;
614
+ padding: 1.5rem 0;
615
+ border-bottom: 1px solid var(--paper-border-light);
616
+ }
617
+ .session-meta__item {
618
+ padding: 0.75rem 1rem;
619
+ border-inline-end: 1px solid var(--paper-border-faint);
620
+ }
621
+ .session-meta__item:last-child {
622
+ border-inline-end: none;
623
+ }
624
+ .session-meta__label {
625
+ font-family: var(--paper-font-mono);
626
+ font-size: 0.625rem;
627
+ text-transform: uppercase;
628
+ letter-spacing: 0.08em;
629
+ color: var(--paper-text-tertiary);
630
+ margin-bottom: 0.25rem;
631
+ }
632
+ .session-meta__value {
633
+ font-family: var(--paper-font-display);
634
+ font-size: 1.25rem;
635
+ font-weight: 600;
636
+ }
637
+ .session-meta__value--small {
638
+ font-size: 1rem;
639
+ }
640
+
641
+ /* ── Content Layout (main + sidebar) ── */
642
+ .content-layout {
643
+ display: grid;
644
+ grid-template-columns: 1fr;
645
+ gap: 2.5rem;
646
+ padding: 2.5rem 0;
647
+ }
648
+ @media (min-width: 768px) {
649
+ .content-layout {
650
+ grid-template-columns: 1fr 280px;
651
+ }
652
+ }
653
+
654
+ /* ── Main Column ── */
655
+ .main-column {
656
+ min-width: 0;
657
+ }
658
+
659
+ /* ── Dev Take (pullquote) ── */
660
+ .dev-take {
661
+ padding: 1.75rem 0;
662
+ border-top: 2px solid var(--paper-accent);
663
+ border-bottom: 1px solid var(--paper-border-light);
664
+ margin-bottom: 2.5rem;
665
+ }
666
+ .dev-take__label {
667
+ font-family: var(--paper-font-mono);
668
+ font-size: 0.6875rem;
669
+ text-transform: uppercase;
670
+ letter-spacing: 0.1em;
671
+ color: var(--paper-text-tertiary);
672
+ margin-bottom: 0.625rem;
673
+ }
674
+ .dev-take__text {
675
+ font-family: var(--paper-font-display);
676
+ font-size: 1.375rem;
677
+ font-style: italic;
678
+ line-height: 1.5;
679
+ color: var(--paper-text);
680
+ }
681
+ .dev-take__attribution {
682
+ font-family: var(--paper-font-mono);
683
+ font-size: 0.75rem;
684
+ color: var(--paper-text-tertiary);
685
+ margin-top: 0.5rem;
686
+ }
687
+
688
+ /* ── Execution Path ── */
689
+ .execution-section {
690
+ margin-bottom: 2.5rem;
691
+ }
692
+ .beat-list {
693
+ list-style: none;
694
+ counter-reset: beat;
695
+ }
696
+ .beat-item {
697
+ counter-increment: beat;
698
+ padding: 1.25rem 0;
699
+ padding-inline-start: 3rem;
700
+ position: relative;
701
+ border-bottom: 1px solid var(--paper-border-faint);
702
+ }
703
+ .beat-item:last-child {
704
+ border-bottom: none;
705
+ }
706
+ .beat-item::before {
707
+ content: counter(beat);
708
+ position: absolute;
709
+ left: 0;
710
+ top: 1.25rem;
711
+ font-family: var(--paper-font-display);
712
+ font-weight: 700;
713
+ font-size: 1.75rem;
714
+ color: var(--paper-border-light);
715
+ line-height: 1;
716
+ }
717
+ .beat-item__title {
718
+ font-family: var(--paper-font-display);
719
+ font-size: 1.125rem;
720
+ font-weight: 600;
721
+ margin-bottom: 0.375rem;
722
+ line-height: 1.3;
723
+ }
724
+ .beat-item__description {
725
+ font-size: 0.9375rem;
726
+ line-height: 1.75;
727
+ color: var(--paper-text-secondary);
728
+ }
729
+
730
+ /* ── Ornamental Dingbat ── */
731
+ .dingbat {
732
+ text-align: center;
733
+ padding: 1.5rem 0;
734
+ font-family: var(--paper-font-display);
735
+ font-size: 1.25rem;
736
+ color: var(--paper-border-light);
737
+ letter-spacing: 0.5rem;
738
+ user-select: none;
739
+ }
740
+
741
+ /* ── Q&A ── */
742
+ .qa-section {
743
+ margin-bottom: 2.5rem;
744
+ }
745
+ .qa-item {
746
+ padding: 1.5rem 0;
747
+ border-bottom: 1px solid var(--paper-border-faint);
748
+ }
749
+ .qa-item:last-child {
750
+ border-bottom: none;
751
+ }
752
+ .qa-item__question {
753
+ font-family: var(--paper-font-display);
754
+ font-size: 1.0625rem;
755
+ font-weight: 600;
756
+ font-style: italic;
757
+ margin-bottom: 0.625rem;
758
+ line-height: 1.5;
759
+ color: var(--paper-text);
760
+ }
761
+ .qa-item__question::before {
762
+ content: "Q: ";
763
+ font-style: normal;
764
+ font-weight: 700;
765
+ color: var(--paper-text-tertiary);
766
+ }
767
+ .qa-item__answer {
768
+ font-size: 0.9375rem;
769
+ line-height: 1.75;
770
+ color: var(--paper-text-secondary);
771
+ }
772
+ .qa-item__answer::before {
773
+ content: "A: ";
774
+ font-family: var(--paper-font-display);
775
+ font-weight: 700;
776
+ color: var(--paper-text-tertiary);
777
+ }
778
+
779
+ /* ── Agent Summary Table ── */
780
+ .agents-section {
781
+ margin-bottom: 2.5rem;
782
+ }
783
+ .agents-table {
784
+ width: 100%;
785
+ border-collapse: collapse;
786
+ font-size: 0.875rem;
787
+ }
788
+ .agents-table thead {
789
+ border-bottom: 2px solid var(--paper-border);
790
+ }
791
+ .agents-table th {
792
+ font-family: var(--paper-font-mono);
793
+ font-weight: 500;
794
+ font-size: 0.6875rem;
795
+ text-transform: uppercase;
796
+ letter-spacing: 0.06em;
797
+ color: var(--paper-text-tertiary);
798
+ text-align: left;
799
+ padding: 0.5rem 0.75rem;
800
+ }
801
+ .agents-table td {
802
+ padding: 0.625rem 0.75rem;
803
+ border-bottom: 1px solid var(--paper-border-faint);
804
+ vertical-align: middle;
805
+ font-family: var(--paper-font-mono);
806
+ font-size: 0.8125rem;
807
+ }
808
+ .agents-table td:first-child {
809
+ font-family: var(--paper-font-body);
810
+ font-size: 0.875rem;
811
+ }
812
+ .agents-table .text-right {
813
+ text-align: right;
814
+ }
815
+ .agents-table tbody tr:last-child td {
816
+ border-bottom: none;
817
+ }
818
+ .agent-color-dot {
819
+ display: inline-block;
820
+ width: 8px;
821
+ height: 8px;
822
+ margin-inline-end: 0.5rem;
823
+ vertical-align: middle;
824
+ border-radius: 50%;
825
+ }
826
+
827
+ /* Agent proportion bar */
828
+ .agent-bar {
829
+ margin-top: 1rem;
830
+ height: 6px;
831
+ display: flex;
832
+ overflow: hidden;
833
+ }
834
+ .agent-bar__segment {
835
+ height: 100%;
836
+ }
837
+
838
+ /* ── Highlights ── */
839
+ .highlights-section {
840
+ margin-bottom: 2.5rem;
841
+ }
842
+ .highlights-list {
843
+ list-style: none;
844
+ padding: 0;
845
+ }
846
+ .highlights-list li {
847
+ font-size: 0.9375rem;
848
+ color: var(--paper-text-secondary);
849
+ line-height: 1.75;
850
+ padding: 0.5rem 0;
851
+ border-bottom: 1px solid var(--paper-border-faint);
852
+ padding-inline-start: 1.25rem;
853
+ position: relative;
854
+ }
855
+ .highlights-list li::before {
856
+ content: "\2022";
857
+ position: absolute;
858
+ left: 0;
859
+ color: var(--paper-border-light);
860
+ }
861
+ .highlights-list li:last-child {
862
+ border-bottom: none;
863
+ }
864
+
865
+ /* ── Sidebar ── */
866
+ .sidebar {
867
+ font-size: 0.875rem;
868
+ }
869
+ @media (min-width: 768px) {
870
+ .sidebar {
871
+ border-inline-start: 1px solid var(--paper-border-light);
872
+ padding-inline-start: 1.5rem;
873
+ }
874
+ }
875
+ .sidebar-section {
876
+ margin-bottom: 2rem;
877
+ }
878
+ .sidebar-section__heading {
879
+ font-family: var(--paper-font-mono);
880
+ font-size: 0.625rem;
881
+ text-transform: uppercase;
882
+ letter-spacing: 0.1em;
883
+ color: var(--paper-text-tertiary);
884
+ margin-bottom: 0.75rem;
885
+ padding-bottom: 0.375rem;
886
+ border-bottom: 1px solid var(--paper-border-faint);
887
+ }
888
+
889
+ /* Sidebar: Session Info */
890
+ .sidebar-info {
891
+ list-style: none;
892
+ }
893
+ .sidebar-info li {
894
+ display: flex;
895
+ justify-content: space-between;
896
+ padding: 0.3125rem 0;
897
+ border-bottom: 1px solid var(--paper-border-faint);
898
+ font-size: 0.8125rem;
899
+ }
900
+ .sidebar-info li:last-child {
901
+ border-bottom: none;
902
+ }
903
+ .sidebar-info__label {
904
+ font-family: var(--paper-font-mono);
905
+ font-size: 0.6875rem;
906
+ color: var(--paper-text-tertiary);
907
+ text-transform: uppercase;
908
+ letter-spacing: 0.04em;
909
+ }
910
+ .sidebar-info__value {
911
+ font-family: var(--paper-font-mono);
912
+ font-size: 0.8125rem;
913
+ font-weight: 500;
914
+ color: var(--paper-text-secondary);
915
+ }
916
+
917
+ /* Sidebar: Tools */
918
+ .tools-list {
919
+ list-style: none;
920
+ }
921
+ .tools-list li {
922
+ display: flex;
923
+ justify-content: space-between;
924
+ align-items: center;
925
+ padding: 0.375rem 0;
926
+ border-bottom: 1px solid var(--paper-border-faint);
927
+ font-family: var(--paper-font-mono);
928
+ font-size: 0.8125rem;
929
+ }
930
+ .tools-list li:last-child {
931
+ border-bottom: none;
932
+ }
933
+ .tools-list__name {
934
+ color: var(--paper-text-secondary);
935
+ }
936
+ .tools-list__count {
937
+ color: var(--paper-text-tertiary);
938
+ font-weight: 500;
939
+ }
940
+ .tools-list__bar {
941
+ flex: 1;
942
+ max-width: 80px;
943
+ height: 3px;
944
+ background: var(--paper-border-faint);
945
+ margin: 0 0.5rem;
946
+ }
947
+ .tools-list__bar-fill {
948
+ height: 100%;
949
+ background: var(--paper-accent);
950
+ }
951
+
952
+ /* Sidebar: Files */
953
+ .files-list {
954
+ list-style: none;
955
+ }
956
+ .files-list li {
957
+ display: flex;
958
+ justify-content: space-between;
959
+ align-items: baseline;
960
+ padding: 0.375rem 0;
961
+ border-bottom: 1px solid var(--paper-border-faint);
962
+ font-family: var(--paper-font-mono);
963
+ font-size: 0.75rem;
964
+ gap: 0.5rem;
965
+ }
966
+ .files-list li:last-child {
967
+ border-bottom: none;
968
+ }
969
+ .files-list__path {
970
+ color: var(--paper-text-secondary);
971
+ word-break: break-all;
972
+ min-width: 0;
973
+ }
974
+ .files-list__diff {
975
+ color: var(--paper-text-tertiary);
976
+ font-weight: 500;
977
+ white-space: nowrap;
978
+ flex-shrink: 0;
979
+ }
980
+ .files-list__diff--positive {
981
+ color: var(--color-qa);
982
+ }
983
+
984
+ /* Sidebar: Skills */
985
+ .sidebar-skills {
986
+ display: flex;
987
+ flex-wrap: wrap;
988
+ gap: 0.3125rem;
989
+ }
990
+
991
+ /* ── Phases (dateline timeline) ── */
992
+ .phases-section {
993
+ padding: 2.5rem 0;
994
+ border-bottom: 1px solid var(--paper-border-light);
995
+ }
996
+ .phases-list {
997
+ list-style: none;
998
+ max-width: 680px;
999
+ margin: 0 auto;
1000
+ }
1001
+ .phase-item {
1002
+ display: grid;
1003
+ grid-template-columns: 140px 1fr;
1004
+ gap: 1rem;
1005
+ padding: 0.75rem 0;
1006
+ border-bottom: 1px solid var(--paper-border-faint);
1007
+ }
1008
+ .phase-item:last-child {
1009
+ border-bottom: none;
1010
+ }
1011
+ .phase-item__dateline {
1012
+ font-family: var(--paper-font-mono);
1013
+ font-size: 0.75rem;
1014
+ color: var(--paper-text-tertiary);
1015
+ text-transform: uppercase;
1016
+ letter-spacing: 0.04em;
1017
+ padding-top: 0.125rem;
1018
+ }
1019
+ .phase-item__name {
1020
+ font-family: var(--paper-font-display);
1021
+ font-size: 1.125rem;
1022
+ font-weight: 600;
1023
+ margin-bottom: 0.25rem;
1024
+ }
1025
+ .phase-item__description {
1026
+ font-size: 0.9375rem;
1027
+ color: var(--paper-text-secondary);
1028
+ line-height: 1.6;
1029
+ }
1030
+
1031
+ /* ── Key Decisions ── */
1032
+ .decisions-section {
1033
+ padding: 2.5rem 0;
1034
+ border-bottom: 1px solid var(--paper-border-light);
1035
+ }
1036
+ .decisions-list {
1037
+ list-style: none;
1038
+ max-width: 680px;
1039
+ margin: 0 auto;
1040
+ counter-reset: decision;
1041
+ }
1042
+ .decision-item {
1043
+ counter-increment: decision;
1044
+ padding: 0.75rem 0;
1045
+ padding-inline-start: 2rem;
1046
+ position: relative;
1047
+ font-size: 1rem;
1048
+ line-height: 1.7;
1049
+ color: var(--paper-text-secondary);
1050
+ border-bottom: 1px solid var(--paper-border-faint);
1051
+ }
1052
+ .decision-item:last-child {
1053
+ border-bottom: none;
1054
+ }
1055
+ .decision-item::before {
1056
+ content: counter(decision) ".";
1057
+ position: absolute;
1058
+ left: 0;
1059
+ font-family: var(--paper-font-display);
1060
+ font-weight: 700;
1061
+ font-size: 1.125rem;
1062
+ color: var(--paper-text);
1063
+ }
1064
+
1065
+ /* ── Skills Section ── */
1066
+ .skills-section {
1067
+ padding: 2rem 0;
1068
+ border-bottom: 1px solid var(--paper-border-light);
1069
+ }
1070
+ .skills-list {
1071
+ display: flex;
1072
+ flex-wrap: wrap;
1073
+ gap: 0.375rem;
1074
+ justify-content: center;
1075
+ max-width: 680px;
1076
+ margin: 0 auto;
1077
+ }
1078
+
1079
+ /* ── Source Breakdown ── */
1080
+ .source-section {
1081
+ padding: 2rem 0;
1082
+ border-bottom: 1px solid var(--paper-border-light);
1083
+ text-align: center;
1084
+ }
1085
+ .source-bar {
1086
+ max-width: 500px;
1087
+ margin: 1rem auto 0;
1088
+ height: 6px;
1089
+ display: flex;
1090
+ overflow: hidden;
1091
+ }
1092
+ .source-bar__segment {
1093
+ height: 100%;
1094
+ }
1095
+ .source-bar__segment--claude {
1096
+ background: var(--paper-accent);
1097
+ }
1098
+ .source-bar__segment--cursor {
1099
+ background: var(--paper-border-light);
1100
+ }
1101
+ .source-labels {
1102
+ display: flex;
1103
+ justify-content: center;
1104
+ gap: 2rem;
1105
+ margin-top: 0.75rem;
1106
+ font-family: var(--paper-font-mono);
1107
+ font-size: 0.75rem;
1108
+ color: var(--paper-text-secondary);
1109
+ }
1110
+ .source-label__swatch {
1111
+ display: inline-block;
1112
+ width: 10px;
1113
+ height: 10px;
1114
+ margin-inline-end: 0.375rem;
1115
+ vertical-align: middle;
1116
+ }
1117
+ .source-label__swatch--claude { background: var(--paper-accent); }
1118
+ .source-label__swatch--cursor { background: var(--paper-border-light); }
1119
+ .source-bar__segment--dark { background: var(--paper-accent); }
1120
+ .source-bar__segment--light { background: var(--paper-border-light); }
1121
+ .source-label__swatch--dark { background: var(--paper-accent); }
1122
+ .source-label__swatch--light { background: var(--paper-border-light); }
1123
+
1124
+ /* ── Source Summary Section ── */
1125
+ .source-summary {
1126
+ padding: 2rem 0;
1127
+ border-top: 1px solid var(--paper-border-light);
1128
+ text-align: center;
1129
+ }
1130
+
1131
+ /* ── Sessions Section ── */
1132
+ .sessions-section {
1133
+ padding: 2.5rem 0;
1134
+ }
1135
+ .sessions-columns {
1136
+ column-count: 1;
1137
+ column-gap: 2.5rem;
1138
+ column-rule: 1px solid var(--paper-border-light);
1139
+ }
1140
+ @media (min-width: 768px) {
1141
+ .sessions-columns {
1142
+ column-count: 2;
1143
+ }
1144
+ }
1145
+
1146
+ /* ── Session Card ── */
1147
+ .session-card {
1148
+ break-inside: avoid;
1149
+ padding: 1.25rem 0;
1150
+ border-bottom: 1px solid var(--paper-border-faint);
1151
+ }
1152
+ .session-card:last-child {
1153
+ border-bottom: none;
1154
+ }
1155
+ .session-card__number {
1156
+ font-family: var(--paper-font-display);
1157
+ font-size: 0.875rem;
1158
+ font-weight: 700;
1159
+ color: var(--paper-text-tertiary);
1160
+ margin-bottom: 0.25rem;
1161
+ }
1162
+ .session-card__headline {
1163
+ font-family: var(--paper-font-display);
1164
+ font-size: 1.125rem;
1165
+ font-weight: 600;
1166
+ line-height: 1.3;
1167
+ margin-bottom: 0.375rem;
1168
+ }
1169
+ .session-card__headline a {
1170
+ text-decoration: none;
1171
+ }
1172
+ .session-card__headline a:hover {
1173
+ text-decoration: underline;
1174
+ }
1175
+ .session-card__meta {
1176
+ font-family: var(--paper-font-mono);
1177
+ font-size: 0.6875rem;
1178
+ color: var(--paper-text-tertiary);
1179
+ letter-spacing: 0.02em;
1180
+ }
1181
+ .session-card__meta span + span::before {
1182
+ content: " \00b7 ";
1183
+ }
1184
+ .session-card__tag {
1185
+ font-family: var(--paper-font-mono);
1186
+ font-size: 0.625rem;
1187
+ text-transform: uppercase;
1188
+ letter-spacing: 0.06em;
1189
+ color: var(--paper-text-tertiary);
1190
+ border: 1px solid var(--paper-border-faint);
1191
+ padding: 0.0625rem 0.375rem;
1192
+ margin-inline-start: 0.5rem;
1193
+ }
1194
+
1195
+ /* ── Clickable session cards (for a-wrapped variants) ── */
1196
+ a.session-card {
1197
+ text-decoration: none;
1198
+ color: inherit;
1199
+ display: block;
1200
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
1201
+ }
1202
+ a.session-card:hover {
1203
+ transform: translateY(-2px);
1204
+ }
1205
+
1206
+ /* ── Timeline Table ── */
1207
+ .timeline-section {
1208
+ padding: 2.5rem 0;
1209
+ border-bottom: 1px solid var(--paper-border-light);
1210
+ }
1211
+ .timeline-table {
1212
+ width: 100%;
1213
+ border-collapse: collapse;
1214
+ font-size: 0.875rem;
1215
+ }
1216
+ .timeline-table th {
1217
+ font-family: var(--paper-font-mono);
1218
+ font-weight: 500;
1219
+ font-size: 0.6875rem;
1220
+ text-transform: uppercase;
1221
+ letter-spacing: 0.06em;
1222
+ color: var(--paper-text-tertiary);
1223
+ text-align: left;
1224
+ padding: 0.5rem 0.75rem;
1225
+ border-bottom: 2px solid var(--paper-border);
1226
+ }
1227
+ .timeline-table td {
1228
+ padding: 0.5rem 0.75rem;
1229
+ border-bottom: 1px solid var(--paper-border-faint);
1230
+ vertical-align: top;
1231
+ }
1232
+ .timeline-table td:first-child {
1233
+ font-family: var(--paper-font-mono);
1234
+ font-size: 0.8125rem;
1235
+ color: var(--paper-text-tertiary);
1236
+ white-space: nowrap;
1237
+ }
1238
+ .timeline-table td:nth-child(2) {
1239
+ font-family: var(--paper-font-display);
1240
+ font-weight: 500;
1241
+ }
1242
+ .timeline-table td:nth-child(n+3) {
1243
+ font-family: var(--paper-font-mono);
1244
+ font-size: 0.8125rem;
1245
+ color: var(--paper-text-secondary);
1246
+ }
1247
+ .timeline-table .text-right {
1248
+ text-align: right;
1249
+ }
1250
+
1251
+ /* ── Activity Table ── */
1252
+ .activity-section {
1253
+ padding: 2.5rem 0;
1254
+ border-top: 1px solid var(--paper-border-light);
1255
+ }
1256
+ .activity-table {
1257
+ width: 100%;
1258
+ border-collapse: collapse;
1259
+ font-size: 0.875rem;
1260
+ }
1261
+ .activity-table thead {
1262
+ border-bottom: 2px solid var(--paper-border);
1263
+ }
1264
+ .activity-table th {
1265
+ font-family: var(--paper-font-mono);
1266
+ font-weight: 500;
1267
+ font-size: 0.6875rem;
1268
+ text-transform: uppercase;
1269
+ letter-spacing: 0.06em;
1270
+ color: var(--paper-text-tertiary);
1271
+ text-align: left;
1272
+ padding: 0.5rem 0.75rem;
1273
+ }
1274
+ .activity-table td {
1275
+ padding: 0.5rem 0.75rem;
1276
+ border-bottom: 1px solid var(--paper-border-faint);
1277
+ vertical-align: top;
1278
+ }
1279
+ .activity-table td:first-child {
1280
+ font-family: var(--paper-font-display);
1281
+ font-weight: 600;
1282
+ }
1283
+ .activity-table td:nth-child(n+2) {
1284
+ font-family: var(--paper-font-mono);
1285
+ font-size: 0.8125rem;
1286
+ color: var(--paper-text-secondary);
1287
+ }
1288
+ .activity-table .text-right {
1289
+ text-align: right;
1290
+ }
1291
+ .activity-table tbody tr:last-child td {
1292
+ border-bottom: none;
1293
+ }
1294
+
1295
+ /* Table scroll wrapper for mobile */
1296
+ .table-scroll {
1297
+ overflow-x: auto;
1298
+ -webkit-overflow-scrolling: touch;
1299
+ }
1300
+
1301
+ /* ── Colophon ── */
1302
+ .colophon {
1303
+ padding: 2rem 0;
1304
+ border-top: 1px solid var(--paper-border-light);
1305
+ text-align: center;
1306
+ }
1307
+ .colophon__text {
1308
+ font-family: var(--paper-font-display);
1309
+ font-style: italic;
1310
+ font-size: 0.9375rem;
1311
+ color: var(--paper-text-tertiary);
1312
+ max-width: 500px;
1313
+ margin: 0 auto;
1314
+ line-height: 1.6;
1315
+ }
1316
+
1317
+ /* ── Footer ── */
1318
+ .page-footer {
1319
+ text-align: center;
1320
+ padding: 2rem 0 3rem;
1321
+ border-top: 3px double var(--paper-border);
1322
+ margin-top: 2rem;
1323
+ }
1324
+ .page-footer__text {
1325
+ font-family: var(--paper-font-mono);
1326
+ font-size: 0.75rem;
1327
+ color: var(--paper-text-tertiary);
1328
+ letter-spacing: 0.04em;
1329
+ }
1330
+ .page-footer__text a {
1331
+ color: var(--paper-text-tertiary);
1332
+ }
1333
+
1334
+ /* ── Fade-in Animation ── */
1335
+ .fade-in {
1336
+ opacity: 0;
1337
+ transform: translateY(8px);
1338
+ animation: paperFadeIn var(--paper-duration) var(--paper-ease) forwards;
1339
+ }
1340
+ .fade-in-d1 { animation-delay: 0ms; }
1341
+ .fade-in-d2 { animation-delay: 80ms; }
1342
+ .fade-in-d3 { animation-delay: 160ms; }
1343
+ .fade-in-d4 { animation-delay: 240ms; }
1344
+ .fade-in-d5 { animation-delay: 320ms; }
1345
+ .fade-in-d6 { animation-delay: 400ms; }
1346
+ .fade-in-d7 { animation-delay: 480ms; }
1347
+ .fade-in-d8 { animation-delay: 560ms; }
1348
+ .fade-in-d9 { animation-delay: 640ms; }
1349
+ .fade-in-d10 { animation-delay: 720ms; }
1350
+
1351
+ @keyframes paperFadeIn {
1352
+ to {
1353
+ opacity: 1;
1354
+ transform: translateY(0);
1355
+ }
1356
+ }
1357
+
1358
+ /* ── Reduced Motion ── */
1359
+ @media (prefers-reduced-motion: reduce) {
1360
+ html {
1361
+ scroll-behavior: auto;
1362
+ }
1363
+ .fade-in {
1364
+ opacity: 1;
1365
+ transform: none;
1366
+ animation: none;
1367
+ }
1368
+ }
1369
+
1370
+ /* ── Print Styles ── */
1371
+ @media print {
1372
+ .nav-bar,
1373
+ .skip-link {
1374
+ display: none;
1375
+ }
1376
+ body {
1377
+ font-size: 11pt;
1378
+ }
1379
+ .page-wrapper {
1380
+ max-width: none;
1381
+ }
1382
+ .projects-columns {
1383
+ column-count: 2;
1384
+ }
1385
+ .content-layout {
1386
+ grid-template-columns: 1fr 220px;
1387
+ }
1388
+ }
1389
+
1390
+ /* ── Responsive ── */
1391
+ @media (max-width: 767px) {
1392
+ body {
1393
+ font-size: 16px;
1394
+ }
1395
+ .page-wrapper {
1396
+ padding: 0 1rem;
1397
+ }
1398
+ .masthead {
1399
+ padding: 2rem 0 1.25rem;
1400
+ }
1401
+ .masthead__title {
1402
+ font-size: 1.75rem;
1403
+ }
1404
+ .masthead__edition {
1405
+ font-size: 0.875rem;
1406
+ }
1407
+ .byline {
1408
+ padding: 1.5rem 0;
1409
+ }
1410
+ .byline__bio {
1411
+ font-size: 0.9375rem;
1412
+ }
1413
+ .stats-table th,
1414
+ .stats-table td {
1415
+ padding: 0.4rem 0.5rem;
1416
+ font-size: 0.8125rem;
1417
+ }
1418
+ .stats-table td:last-child {
1419
+ font-size: 0.875rem;
1420
+ }
1421
+ .projects-section__heading {
1422
+ font-size: 1.5rem;
1423
+ }
1424
+ .project-card__headline {
1425
+ font-size: 1.25rem;
1426
+ }
1427
+ .article-header__headline {
1428
+ font-size: 1.5rem;
1429
+ }
1430
+ .session-meta {
1431
+ grid-template-columns: repeat(3, 1fr);
1432
+ }
1433
+ .session-meta__item {
1434
+ padding: 0.5rem 0.5rem;
1435
+ }
1436
+ .session-meta__value {
1437
+ font-size: 1rem;
1438
+ }
1439
+ .beat-item {
1440
+ padding-inline-start: 2.25rem;
1441
+ }
1442
+ .beat-item::before {
1443
+ font-size: 1.375rem;
1444
+ }
1445
+ .dev-take__text {
1446
+ font-size: 1.125rem;
1447
+ }
1448
+ .activity-table {
1449
+ font-size: 0.8125rem;
1450
+ }
1451
+ .activity-table th,
1452
+ .activity-table td {
1453
+ padding: 0.375rem 0.5rem;
1454
+ }
1455
+ .source-labels {
1456
+ flex-direction: column;
1457
+ gap: 0.5rem;
1458
+ }
1459
+ .phase-item {
1460
+ grid-template-columns: 1fr;
1461
+ gap: 0.25rem;
1462
+ }
1463
+ .timeline-table {
1464
+ font-size: 0.8125rem;
1465
+ }
1466
+ .timeline-table th,
1467
+ .timeline-table td {
1468
+ padding: 0.375rem 0.5rem;
1469
+ }
1470
+ .agents-table th,
1471
+ .agents-table td {
1472
+ padding: 0.375rem 0.5rem;
1473
+ }
1474
+ .nav-bar {
1475
+ gap: 1.25rem;
1476
+ font-size: 0.75rem;
1477
+ }
1478
+ .screenshot__body {
1479
+ height: 180px;
1480
+ }
1481
+ }
1482
+
1483
+ /* ── Medium breakpoint ── */
1484
+ @media (min-width: 768px) and (max-width: 1023px) {
1485
+ .projects-columns {
1486
+ column-gap: 2rem;
1487
+ }
1488
+ .content-layout {
1489
+ grid-template-columns: 1fr 240px;
1490
+ gap: 2rem;
1491
+ }
1492
+ }
1493
+
1494
+ /* ── Large screens ── */
1495
+ @media (min-width: 1200px) {
1496
+ .page-wrapper {
1497
+ padding: 0 2.5rem;
1498
+ }
1499
+ .projects-columns {
1500
+ column-gap: 3rem;
1501
+ }
1502
+ .masthead {
1503
+ padding: 4rem 0 2rem;
1504
+ }
1505
+ .content-layout {
1506
+ grid-template-columns: 1fr 300px;
1507
+ gap: 3rem;
1508
+ }
1509
+ }