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