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,1016 @@
1
+ /* ── Mono template styles ──
2
+ * Dark terminal-inspired theme with green accent, JetBrains Mono font.
3
+ * Extracted from mockup HTML files.
4
+ */
5
+
6
+ /* ── Design Tokens (inherited from theme system, fallbacks here) ── */
7
+
8
+ /* ── Dark Wrapper ── */
9
+ .mono {
10
+ background: var(--mono-bg, #0a0a0a);
11
+ color: var(--mono-text, #e0e0e0);
12
+ font-family: var(--font, 'JetBrains Mono', monospace);
13
+ font-size: 14px;
14
+ line-height: 1.6;
15
+ -webkit-font-smoothing: antialiased;
16
+ }
17
+ .mono a { color: var(--mono-accent, #4ade80); text-decoration: none; }
18
+ .mono a:hover { text-decoration: underline; }
19
+ .mono a:visited { color: var(--mono-accent, #4ade80); }
20
+ .mono a:focus-visible {
21
+ outline: 2px solid var(--mono-accent, #4ade80);
22
+ outline-offset: 2px;
23
+ }
24
+
25
+ /* ── Page Container ── */
26
+ .mono .mono-page {
27
+ max-width: 960px;
28
+ margin: 0 auto;
29
+ padding: 2.5rem 1.5rem;
30
+ }
31
+
32
+ /* ── Section (fade-in entrance) ── */
33
+ .mono .mono-section {
34
+ margin-bottom: 2.5rem;
35
+ opacity: 0;
36
+ transform: translateY(8px);
37
+ transition: opacity 0.4s ease, transform 0.4s ease;
38
+ }
39
+ .mono .mono-section.visible {
40
+ opacity: 1;
41
+ transform: translateY(0);
42
+ }
43
+ .mono.heyiam-project .mono-section {
44
+ margin-bottom: 3rem;
45
+ }
46
+
47
+ /* ── Section Heading ── */
48
+ .mono .mono-heading {
49
+ color: var(--mono-accent, #4ade80);
50
+ font-size: 0.8125rem;
51
+ font-weight: 600;
52
+ letter-spacing: 0.05em;
53
+ text-transform: uppercase;
54
+ margin-bottom: 1rem;
55
+ padding-bottom: 0.5rem;
56
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
57
+ }
58
+
59
+ /* ── Terminal Block ── */
60
+ .mono .terminal-block {
61
+ background: var(--mono-surface, #111111);
62
+ border: 1px solid var(--mono-border, #2a2a2a);
63
+ border-radius: 0px;
64
+ overflow: hidden;
65
+ }
66
+ .mono .terminal-header {
67
+ background: var(--mono-surface-raised, #1a1a1a);
68
+ padding: 0.5rem 1rem;
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 0.5rem;
72
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
73
+ font-size: 0.75rem;
74
+ color: var(--mono-text-dim, #666666);
75
+ }
76
+ .mono .terminal-dots {
77
+ display: flex;
78
+ gap: 6px;
79
+ }
80
+ .mono .terminal-dots span {
81
+ width: 10px;
82
+ height: 10px;
83
+ border-radius: 50%;
84
+ display: block;
85
+ }
86
+ .mono .terminal-dots .dot-red { background: #ef4444; }
87
+ .mono .terminal-dots .dot-yellow { background: #f59e0b; }
88
+ .mono .terminal-dots .dot-green { background: #4ade80; }
89
+ .mono .terminal-body {
90
+ padding: 1.25rem;
91
+ }
92
+
93
+ /* ── Cursor blink on active heading ── */
94
+ .mono .cursor-blink::after {
95
+ content: '_';
96
+ color: var(--mono-accent, #4ade80);
97
+ animation: mono-blink 0.7s step-end infinite;
98
+ }
99
+ @keyframes mono-blink {
100
+ 50% { opacity: 0; }
101
+ }
102
+
103
+ /* ── Tags ── */
104
+ .mono .tag {
105
+ display: inline-block;
106
+ padding: 0.125rem 0.5rem;
107
+ border: 1px solid var(--mono-border, #2a2a2a);
108
+ border-radius: 0px;
109
+ font-size: 0.75rem;
110
+ color: var(--mono-accent, #4ade80);
111
+ background: var(--mono-accent-dim, rgba(74, 222, 128, 0.15));
112
+ }
113
+ .mono .tag-list {
114
+ display: flex;
115
+ flex-wrap: wrap;
116
+ gap: 0.5rem;
117
+ }
118
+ .mono .sidebar-tags {
119
+ display: flex;
120
+ flex-wrap: wrap;
121
+ gap: 0.375rem;
122
+ }
123
+ .mono .sidebar-tags .tag {
124
+ padding: 0.0625rem 0.375rem;
125
+ font-size: 0.6875rem;
126
+ }
127
+
128
+ /* ── Footer ── */
129
+ .mono .mono-footer {
130
+ border-top: 1px solid var(--mono-border, #2a2a2a);
131
+ padding: 2rem 0;
132
+ margin-top: 2rem;
133
+ text-align: center;
134
+ font-size: 0.75rem;
135
+ color: var(--mono-text-dim, #666666);
136
+ }
137
+
138
+ /* ════════════════════════════════════════════════════════════════
139
+ PORTFOLIO
140
+ ════════════════════════════════════════════════════════════════ */
141
+
142
+ /* ── Hero Profile ── */
143
+ .mono .hero-profile {
144
+ display: flex;
145
+ gap: 1.5rem;
146
+ align-items: flex-start;
147
+ }
148
+ .mono .hero-photo {
149
+ width: 120px;
150
+ height: 150px;
151
+ border-radius: 0px;
152
+ object-fit: cover;
153
+ object-position: 55% 10%;
154
+ border: 1px solid var(--mono-accent, #4ade80);
155
+ flex-shrink: 0;
156
+ filter: grayscale(1) contrast(1.2) brightness(0.9);
157
+ }
158
+ .mono .hero-info {
159
+ flex: 1;
160
+ min-width: 0;
161
+ }
162
+ .mono .hero-title {
163
+ font-size: 2rem;
164
+ font-weight: 700;
165
+ color: var(--mono-accent, #4ade80);
166
+ margin-bottom: 0.25rem;
167
+ overflow: hidden;
168
+ white-space: nowrap;
169
+ border-right: 3px solid var(--mono-accent, #4ade80);
170
+ width: 0;
171
+ animation: mono-typing 1.2s steps(20, end) forwards, mono-cursor-blink 0.7s step-end infinite;
172
+ }
173
+ .mono .hero-handle {
174
+ font-size: 1rem;
175
+ color: var(--mono-text-dim, #666666);
176
+ margin-bottom: 1rem;
177
+ }
178
+ .mono .hero-bio {
179
+ color: var(--mono-text, #e0e0e0);
180
+ font-size: 0.875rem;
181
+ line-height: 1.7;
182
+ max-width: 640px;
183
+ }
184
+ .mono .hero-bio .comment {
185
+ color: var(--mono-text-dim, #666666);
186
+ }
187
+ .mono .hero-location {
188
+ color: var(--mono-text-dim, #666666);
189
+ font-size: 0.8125rem;
190
+ margin-top: 0.75rem;
191
+ }
192
+ .mono .hero-contact {
193
+ display: flex;
194
+ flex-wrap: wrap;
195
+ gap: 0.75rem;
196
+ margin-top: 1rem;
197
+ list-style: none;
198
+ }
199
+ .mono .hero-contact a {
200
+ display: inline-flex;
201
+ align-items: center;
202
+ gap: 0.375rem;
203
+ font-size: 0.8125rem;
204
+ color: var(--mono-text-dim, #666666);
205
+ transition: color 0.15s;
206
+ }
207
+ .mono .hero-contact a:visited { color: var(--mono-text-dim, #666666); }
208
+ .mono .hero-contact a:hover {
209
+ color: var(--mono-accent, #4ade80);
210
+ text-decoration: none;
211
+ }
212
+ .mono .hero-contact svg {
213
+ flex-shrink: 0;
214
+ }
215
+ .mono .hero-resume-btn {
216
+ display: inline-flex;
217
+ align-items: center;
218
+ gap: 0.375rem;
219
+ margin-top: 1rem;
220
+ padding: 0.375rem 0.75rem;
221
+ font-size: 0.8125rem;
222
+ color: var(--mono-bg, #0a0a0a);
223
+ background: var(--mono-accent, #4ade80);
224
+ border: none;
225
+ border-radius: 0px;
226
+ cursor: pointer;
227
+ text-decoration: none;
228
+ transition: opacity 0.15s;
229
+ }
230
+ .mono .hero-resume-btn:hover {
231
+ opacity: 0.85;
232
+ text-decoration: none;
233
+ color: var(--mono-bg, #0a0a0a);
234
+ }
235
+
236
+ @keyframes mono-typing {
237
+ from { width: 0; }
238
+ to { width: 10.5ch; }
239
+ }
240
+ @keyframes mono-cursor-blink {
241
+ 50% { border-color: transparent; }
242
+ }
243
+
244
+ /* ── Stats Grid (portfolio + project) ── */
245
+ .mono .stats-grid {
246
+ display: grid;
247
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
248
+ gap: 1px;
249
+ background: var(--mono-border, #2a2a2a);
250
+ border: 1px solid var(--mono-border, #2a2a2a);
251
+ border-radius: 0px;
252
+ overflow: hidden;
253
+ }
254
+ .mono .stat-cell {
255
+ background: var(--mono-surface, #111111);
256
+ padding: 0.75rem 1rem;
257
+ }
258
+ .mono .stat-key {
259
+ font-size: 0.6875rem;
260
+ color: var(--mono-text-dim, #666666);
261
+ margin-bottom: 0.125rem;
262
+ }
263
+ .mono .stat-value {
264
+ font-size: 1.25rem;
265
+ font-weight: 700;
266
+ color: var(--mono-accent, #4ade80);
267
+ }
268
+
269
+ /* ── Leverage terminal ── */
270
+ .mono .stat-cell--leverage {
271
+ grid-column: 1 / -1;
272
+ padding: 0.75rem 1rem;
273
+ }
274
+ .mono .leverage-terminal {
275
+ font-size: 0.8125rem;
276
+ line-height: 1.6;
277
+ }
278
+ .mono .leverage-terminal .lev-line {
279
+ display: flex;
280
+ gap: 0.5rem;
281
+ align-items: baseline;
282
+ }
283
+ .mono .leverage-terminal .lev-key {
284
+ color: var(--mono-text-dim, #666666);
285
+ min-width: 5.5em;
286
+ text-align: right;
287
+ }
288
+ .mono .leverage-terminal .lev-val {
289
+ color: var(--mono-text, #e0e0e0);
290
+ font-weight: 700;
291
+ min-width: 3.5em;
292
+ }
293
+ .mono .leverage-terminal .lev-val--agent {
294
+ color: var(--mono-accent, #4ade80);
295
+ }
296
+ .mono .leverage-terminal .lev-val--multi {
297
+ color: var(--mono-accent, #4ade80);
298
+ }
299
+ .mono .leverage-terminal .lev-bar {
300
+ color: rgba(255,255,255,0.25);
301
+ letter-spacing: 0;
302
+ }
303
+ .mono .leverage-terminal .lev-bar--agent {
304
+ color: var(--mono-accent, #4ade80);
305
+ }
306
+ .mono .leverage-terminal .lev-pct {
307
+ color: var(--mono-text-dim, #666666);
308
+ font-size: 0.75rem;
309
+ }
310
+
311
+ /* ── Project Cards (portfolio) ── */
312
+ .mono .project-list {
313
+ display: flex;
314
+ flex-direction: column;
315
+ gap: 1rem;
316
+ }
317
+ .mono .project-card {
318
+ border: 1px solid var(--mono-border, #2a2a2a);
319
+ border-radius: 0px;
320
+ background: var(--mono-surface, #111111);
321
+ transition: border-color 0.15s;
322
+ text-decoration: none;
323
+ color: inherit;
324
+ display: block;
325
+ }
326
+ .mono .project-card:hover {
327
+ border-color: var(--mono-accent, #4ade80);
328
+ }
329
+ .mono a.project-card:hover {
330
+ transform: translateY(-2px);
331
+ }
332
+ .mono .project-card-header {
333
+ padding: 1rem 1.25rem;
334
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
335
+ display: flex;
336
+ align-items: center;
337
+ justify-content: space-between;
338
+ gap: 1rem;
339
+ }
340
+ .mono .project-name {
341
+ font-size: 1rem;
342
+ font-weight: 600;
343
+ color: var(--mono-accent, #4ade80);
344
+ }
345
+ .mono .project-name a { color: inherit; }
346
+ .mono .project-name a:visited { color: inherit; }
347
+ .mono .project-source {
348
+ font-size: 0.75rem;
349
+ color: var(--mono-text-dim, #666666);
350
+ }
351
+ .mono .project-card-body {
352
+ padding: 1.25rem;
353
+ }
354
+ .mono .project-narrative {
355
+ font-size: 0.8125rem;
356
+ color: var(--mono-text, #e0e0e0);
357
+ line-height: 1.7;
358
+ margin-bottom: 1rem;
359
+ }
360
+ .mono .project-narrative::before {
361
+ content: '> ';
362
+ color: var(--mono-text-dim, #666666);
363
+ }
364
+ .mono .project-stats-row {
365
+ display: flex;
366
+ flex-wrap: wrap;
367
+ gap: 1.5rem;
368
+ margin-bottom: 1rem;
369
+ font-size: 0.8125rem;
370
+ }
371
+ .mono .project-stat {
372
+ color: var(--mono-text-dim, #666666);
373
+ }
374
+ .mono .project-stat strong {
375
+ color: var(--mono-text, #e0e0e0);
376
+ font-weight: 500;
377
+ }
378
+ .mono .project-tags {
379
+ display: flex;
380
+ flex-wrap: wrap;
381
+ gap: 0.5rem;
382
+ }
383
+
384
+ /* ── Source Bar ── */
385
+ .mono .source-bar {
386
+ display: flex;
387
+ height: 6px;
388
+ border-radius: 0px;
389
+ overflow: hidden;
390
+ margin-top: 0.75rem;
391
+ background: var(--mono-surface-raised, #1a1a1a);
392
+ }
393
+ .mono .source-bar-segment {
394
+ transition: width 0.6s ease;
395
+ }
396
+ .mono .source-bar-segment.claude { background: var(--mono-accent, #4ade80); }
397
+ .mono .source-bar-segment.cursor { background: var(--mono-text-dim, #666666); }
398
+ .mono .source-legend {
399
+ display: flex;
400
+ gap: 1rem;
401
+ margin-top: 0.5rem;
402
+ font-size: 0.6875rem;
403
+ color: var(--mono-text-dim, #666666);
404
+ }
405
+ .mono .source-legend-dot {
406
+ display: inline-block;
407
+ width: 8px;
408
+ height: 8px;
409
+ margin-inline-end: 4px;
410
+ vertical-align: middle;
411
+ }
412
+ .mono .source-legend-dot.claude { background: var(--mono-accent, #4ade80); }
413
+ .mono .source-legend-dot.cursor { background: var(--mono-text-dim, #666666); }
414
+
415
+ /* ── Work Timeline (ASCII Bar Chart) ── */
416
+ .mono .ascii-chart {
417
+ font-size: 0.8125rem;
418
+ line-height: 1.8;
419
+ }
420
+ .mono .ascii-row {
421
+ display: flex;
422
+ align-items: center;
423
+ gap: 0.75rem;
424
+ }
425
+ .mono .ascii-label {
426
+ width: 80px;
427
+ flex-shrink: 0;
428
+ color: var(--mono-text-dim, #666666);
429
+ text-align: end;
430
+ overflow: hidden;
431
+ text-overflow: ellipsis;
432
+ white-space: nowrap;
433
+ font-size: 0.6875rem;
434
+ }
435
+ .mono .ascii-bar {
436
+ flex: 1;
437
+ display: flex;
438
+ align-items: center;
439
+ gap: 0.5rem;
440
+ }
441
+ .mono .ascii-bar-fill {
442
+ color: var(--mono-accent, #4ade80);
443
+ letter-spacing: -1px;
444
+ line-height: 1;
445
+ }
446
+ .mono .ascii-bar-value {
447
+ color: var(--mono-text-dim, #666666);
448
+ font-size: 0.6875rem;
449
+ white-space: nowrap;
450
+ }
451
+
452
+ /* ════════════════════════════════════════════════════════════════
453
+ PROJECT
454
+ ════════════════════════════════════════════════════════════════ */
455
+
456
+ /* ── Breadcrumb ── */
457
+ .mono .breadcrumb {
458
+ font-size: 0.8125rem;
459
+ color: var(--mono-text-dim, #666666);
460
+ margin-bottom: 1.5rem;
461
+ }
462
+ .mono .breadcrumb a { color: var(--mono-text-dim, #666666); }
463
+ .mono .breadcrumb a:visited { color: var(--mono-text-dim, #666666); }
464
+ .mono .breadcrumb a:hover { color: var(--mono-accent, #4ade80); }
465
+ .mono .breadcrumb .sep {
466
+ margin: 0 0.25rem;
467
+ color: var(--mono-text-muted, #444444);
468
+ }
469
+
470
+ /* ── Project Hero ── */
471
+ .mono .hero-title--project {
472
+ font-size: 2rem;
473
+ font-weight: 700;
474
+ color: var(--mono-accent, #4ade80);
475
+ margin-bottom: 0.5rem;
476
+ overflow: hidden;
477
+ white-space: nowrap;
478
+ border-right: 3px solid var(--mono-accent, #4ade80);
479
+ width: 0;
480
+ animation: mono-typing-project 1s steps(10, end) forwards, mono-cursor-blink 0.7s step-end infinite;
481
+ }
482
+ .mono .hero-links {
483
+ font-size: 0.8125rem;
484
+ color: var(--mono-text-dim, #666666);
485
+ margin-bottom: 1rem;
486
+ display: flex;
487
+ flex-wrap: wrap;
488
+ gap: 1rem;
489
+ }
490
+
491
+ @keyframes mono-typing-project {
492
+ from { width: 0; }
493
+ to { width: 10ch; }
494
+ }
495
+
496
+ /* ── Screenshot Frame ── */
497
+ .mono .screenshot-frame {
498
+ background: var(--mono-surface, #111111);
499
+ border: 1px solid var(--mono-border, #2a2a2a);
500
+ border-radius: 0px;
501
+ overflow: hidden;
502
+ margin-bottom: 2rem;
503
+ }
504
+ .mono .screenshot-chrome {
505
+ background: var(--mono-surface-raised, #1a1a1a);
506
+ padding: 0.5rem 1rem;
507
+ display: flex;
508
+ align-items: center;
509
+ gap: 0.75rem;
510
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
511
+ }
512
+ .mono .screenshot-chrome .dots {
513
+ display: flex;
514
+ gap: 6px;
515
+ }
516
+ .mono .screenshot-chrome .dots span {
517
+ width: 10px;
518
+ height: 10px;
519
+ border-radius: 50%;
520
+ display: block;
521
+ }
522
+ .mono .screenshot-chrome .dot-r { background: #ef4444; }
523
+ .mono .screenshot-chrome .dot-y { background: #f59e0b; }
524
+ .mono .screenshot-chrome .dot-g { background: #4ade80; }
525
+ .mono .screenshot-chrome .url-bar {
526
+ flex: 1;
527
+ background: var(--mono-bg, #0a0a0a);
528
+ border: 1px solid var(--mono-border, #2a2a2a);
529
+ padding: 0.25rem 0.75rem;
530
+ font-size: 0.6875rem;
531
+ color: var(--mono-text-dim, #666666);
532
+ border-radius: 0px;
533
+ }
534
+ .mono .screenshot-body {
535
+ width: 100%;
536
+ display: block;
537
+ }
538
+
539
+ /* ── Narrative ── */
540
+ .mono .narrative-block {
541
+ padding: 1.25rem;
542
+ font-size: 0.875rem;
543
+ line-height: 1.8;
544
+ }
545
+ .mono .narrative-line {
546
+ margin-bottom: 1rem;
547
+ color: var(--mono-text, #e0e0e0);
548
+ }
549
+ .mono .narrative-line::before {
550
+ content: '> ';
551
+ color: var(--mono-text-dim, #666666);
552
+ }
553
+ .mono .narrative-line:last-child {
554
+ margin-bottom: 0;
555
+ }
556
+
557
+ /* ── Git Log Phases ── */
558
+ .mono .git-log {
559
+ font-size: 0.8125rem;
560
+ line-height: 2;
561
+ }
562
+ .mono .git-log-entry {
563
+ display: flex;
564
+ gap: 0.75rem;
565
+ align-items: flex-start;
566
+ }
567
+ .mono .git-log-graph {
568
+ display: flex;
569
+ flex-direction: column;
570
+ align-items: center;
571
+ flex-shrink: 0;
572
+ width: 20px;
573
+ }
574
+ .mono .git-log-node {
575
+ width: 10px;
576
+ height: 10px;
577
+ border-radius: 50%;
578
+ background: var(--mono-accent, #4ade80);
579
+ flex-shrink: 0;
580
+ }
581
+ .mono .git-log-line {
582
+ width: 2px;
583
+ flex: 1;
584
+ background: var(--mono-border, #2a2a2a);
585
+ min-height: 24px;
586
+ }
587
+ .mono .git-log-content {
588
+ flex: 1;
589
+ padding-bottom: 1rem;
590
+ }
591
+ .mono .git-log-hash {
592
+ color: var(--mono-accent, #4ade80);
593
+ font-weight: 600;
594
+ }
595
+ .mono .git-log-date {
596
+ color: var(--mono-text-dim, #666666);
597
+ font-size: 0.75rem;
598
+ }
599
+ .mono .git-log-msg {
600
+ color: var(--mono-text, #e0e0e0);
601
+ }
602
+ .mono .git-log-detail {
603
+ color: var(--mono-text-dim, #666666);
604
+ font-size: 0.75rem;
605
+ }
606
+
607
+ /* ── Key Decisions ── */
608
+ .mono .decisions-list {
609
+ list-style: none;
610
+ font-size: 0.875rem;
611
+ }
612
+ .mono .decisions-list li {
613
+ padding: 0.75rem 0;
614
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
615
+ display: flex;
616
+ gap: 0.75rem;
617
+ }
618
+ .mono .decisions-list li:last-child {
619
+ border-bottom: none;
620
+ }
621
+ .mono .decision-num {
622
+ color: var(--mono-accent, #4ade80);
623
+ font-weight: 600;
624
+ flex-shrink: 0;
625
+ }
626
+
627
+ /* ── Source Breakdown (project) ── */
628
+ .mono .source-breakdown {
629
+ display: flex;
630
+ gap: 2rem;
631
+ align-items: center;
632
+ flex-wrap: wrap;
633
+ margin-bottom: 0.75rem;
634
+ font-size: 0.875rem;
635
+ }
636
+ .mono.heyiam-project .source-bar {
637
+ height: 8px;
638
+ }
639
+
640
+ /* ── Session Cards (project page) ── */
641
+ .mono .session-grid {
642
+ display: grid;
643
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
644
+ gap: 1rem;
645
+ }
646
+ .mono .session-card {
647
+ border: 1px solid var(--mono-border, #2a2a2a);
648
+ border-radius: 0px;
649
+ background: var(--mono-surface, #111111);
650
+ transition: border-color 0.15s, transform 0.15s ease;
651
+ text-decoration: none;
652
+ color: inherit;
653
+ display: block;
654
+ }
655
+ .mono .session-card:hover {
656
+ border-color: var(--mono-accent, #4ade80);
657
+ transform: translateY(-2px);
658
+ }
659
+ .mono .session-card-header {
660
+ padding: 0.5rem 0.75rem;
661
+ background: var(--mono-surface-raised, #1a1a1a);
662
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
663
+ font-size: 0.6875rem;
664
+ color: var(--mono-text-dim, #666666);
665
+ display: flex;
666
+ align-items: center;
667
+ gap: 0.5rem;
668
+ }
669
+ .mono .session-card-body {
670
+ padding: 1rem;
671
+ font-size: 0.8125rem;
672
+ }
673
+ .mono .session-card-title {
674
+ color: var(--mono-accent, #4ade80);
675
+ font-weight: 600;
676
+ font-size: 0.875rem;
677
+ margin-bottom: 0.5rem;
678
+ }
679
+ .mono .session-card-title a { color: inherit; }
680
+ .mono .session-card-title a:visited { color: inherit; }
681
+ .mono .session-kv {
682
+ display: flex;
683
+ justify-content: space-between;
684
+ padding: 0.125rem 0;
685
+ font-size: 0.75rem;
686
+ }
687
+ .mono .session-kv-key { color: var(--mono-text-dim, #666666); }
688
+ .mono .session-kv-value { color: var(--mono-text, #e0e0e0); }
689
+ .mono .session-card-tag {
690
+ display: inline-block;
691
+ margin-top: 0.5rem;
692
+ padding: 0.0625rem 0.375rem;
693
+ border: 1px solid var(--mono-border, #2a2a2a);
694
+ border-radius: 0px;
695
+ font-size: 0.6875rem;
696
+ color: var(--mono-accent, #4ade80);
697
+ background: var(--mono-accent-dim, rgba(74, 222, 128, 0.15));
698
+ }
699
+
700
+ /* ════════════════════════════════════════════════════════════════
701
+ SESSION
702
+ ════════════════════════════════════════════════════════════════ */
703
+
704
+ /* ── Layout: Main + Sidebar ── */
705
+ .mono .session-layout {
706
+ display: grid;
707
+ grid-template-columns: 1fr 280px;
708
+ gap: 2rem;
709
+ align-items: start;
710
+ }
711
+
712
+ /* ── Session Hero ── */
713
+ .mono .hero-title--session {
714
+ font-size: 1.5rem;
715
+ font-weight: 700;
716
+ color: var(--mono-accent, #4ade80);
717
+ margin-bottom: 0.5rem;
718
+ line-height: 1.3;
719
+ }
720
+ .mono .hero-meta {
721
+ font-size: 0.8125rem;
722
+ color: var(--mono-text-dim, #666666);
723
+ display: flex;
724
+ flex-wrap: wrap;
725
+ gap: 1.25rem;
726
+ margin-bottom: 1rem;
727
+ }
728
+ .mono .hero-meta-item {
729
+ display: flex;
730
+ gap: 0.375rem;
731
+ }
732
+ .mono .hero-meta-key { color: var(--mono-text-muted, #444444); }
733
+ .mono .hero-meta-value { color: var(--mono-text, #e0e0e0); }
734
+
735
+ /* ── Stats Row (session) ── */
736
+ .mono .stats-row {
737
+ display: grid;
738
+ grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
739
+ gap: 1px;
740
+ background: var(--mono-border, #2a2a2a);
741
+ border: 1px solid var(--mono-border, #2a2a2a);
742
+ border-radius: 0px;
743
+ overflow: hidden;
744
+ }
745
+
746
+ /* ── Dev Take ── */
747
+ .mono .dev-take {
748
+ background: var(--mono-accent-dim, rgba(74, 222, 128, 0.15));
749
+ border-left: 3px solid var(--mono-accent, #4ade80);
750
+ padding: 1rem 1.25rem;
751
+ font-size: 0.875rem;
752
+ color: var(--mono-text, #e0e0e0);
753
+ line-height: 1.7;
754
+ margin-bottom: 2rem;
755
+ }
756
+ .mono .dev-take::before {
757
+ content: '// dev_take: ';
758
+ color: var(--mono-accent, #4ade80);
759
+ font-weight: 600;
760
+ }
761
+
762
+ /* ── Sidebar ── */
763
+ .mono .sidebar {
764
+ position: sticky;
765
+ top: 4rem;
766
+ }
767
+ .mono .sidebar-block {
768
+ background: var(--mono-surface, #111111);
769
+ border: 1px solid var(--mono-border, #2a2a2a);
770
+ border-radius: 0px;
771
+ margin-bottom: 1rem;
772
+ overflow: hidden;
773
+ }
774
+ .mono .sidebar-block-header {
775
+ background: var(--mono-surface-raised, #1a1a1a);
776
+ padding: 0.5rem 0.75rem;
777
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
778
+ font-size: 0.6875rem;
779
+ font-weight: 600;
780
+ color: var(--mono-accent, #4ade80);
781
+ text-transform: uppercase;
782
+ letter-spacing: 0.05em;
783
+ }
784
+ .mono .sidebar-block-body {
785
+ padding: 0.75rem;
786
+ }
787
+
788
+ /* ── Sidebar: Tool List ── */
789
+ .mono .tool-row {
790
+ display: flex;
791
+ justify-content: space-between;
792
+ padding: 0.25rem 0;
793
+ font-size: 0.75rem;
794
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
795
+ }
796
+ .mono .tool-row:last-child { border-bottom: none; }
797
+ .mono .tool-name { color: var(--mono-text, #e0e0e0); }
798
+ .mono .tool-count {
799
+ color: var(--mono-accent, #4ade80);
800
+ font-weight: 600;
801
+ }
802
+
803
+ /* ── Sidebar: Files ── */
804
+ .mono .file-row {
805
+ display: flex;
806
+ justify-content: space-between;
807
+ align-items: center;
808
+ padding: 0.25rem 0;
809
+ font-size: 0.6875rem;
810
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
811
+ gap: 0.5rem;
812
+ }
813
+ .mono .file-row:last-child { border-bottom: none; }
814
+ .mono .file-name {
815
+ color: var(--mono-text, #e0e0e0);
816
+ overflow: hidden;
817
+ text-overflow: ellipsis;
818
+ white-space: nowrap;
819
+ flex: 1;
820
+ min-width: 0;
821
+ }
822
+ .mono .file-diff {
823
+ color: var(--mono-accent, #4ade80);
824
+ font-weight: 600;
825
+ white-space: nowrap;
826
+ }
827
+
828
+ /* ── Execution Path (Beats) ── */
829
+ .mono .beat-list {
830
+ list-style: none;
831
+ }
832
+ .mono .beat-item {
833
+ padding: 1rem 0;
834
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
835
+ position: relative;
836
+ padding-inline-start: 2rem;
837
+ }
838
+ .mono .beat-item:last-child { border-bottom: none; }
839
+ .mono .beat-num {
840
+ position: absolute;
841
+ left: 0;
842
+ top: 1rem;
843
+ color: var(--mono-accent, #4ade80);
844
+ font-weight: 700;
845
+ font-size: 0.875rem;
846
+ }
847
+ .mono .beat-title {
848
+ font-weight: 600;
849
+ color: var(--mono-text, #e0e0e0);
850
+ font-size: 0.875rem;
851
+ margin-bottom: 0.25rem;
852
+ }
853
+ .mono .beat-desc {
854
+ font-size: 0.8125rem;
855
+ color: var(--mono-text-dim, #666666);
856
+ line-height: 1.7;
857
+ }
858
+ .mono .beat-item::before {
859
+ content: '';
860
+ position: absolute;
861
+ left: 4px;
862
+ top: 2rem;
863
+ bottom: 0;
864
+ width: 2px;
865
+ background: var(--mono-border, #2a2a2a);
866
+ }
867
+ .mono .beat-item:last-child::before {
868
+ display: none;
869
+ }
870
+
871
+ /* ── Q&A ── */
872
+ .mono .qa-block {
873
+ padding: 1.25rem;
874
+ font-size: 0.875rem;
875
+ line-height: 1.8;
876
+ }
877
+ .mono .qa-item {
878
+ margin-bottom: 1.5rem;
879
+ }
880
+ .mono .qa-item:last-child { margin-bottom: 0; }
881
+ .mono .qa-question {
882
+ color: var(--mono-accent, #4ade80);
883
+ margin-bottom: 0.5rem;
884
+ font-weight: 600;
885
+ }
886
+ .mono .qa-question::before {
887
+ content: 'Q: ';
888
+ color: var(--mono-text-muted, #444444);
889
+ }
890
+ .mono .qa-answer {
891
+ color: var(--mono-text, #e0e0e0);
892
+ padding-inline-start: 1rem;
893
+ border-inline-start: 2px solid var(--mono-border, #2a2a2a);
894
+ }
895
+ .mono .qa-answer::before {
896
+ content: 'A: ';
897
+ color: var(--mono-text-muted, #444444);
898
+ font-weight: 600;
899
+ }
900
+
901
+ /* ── Agent Summary ── */
902
+ .mono .agent-table {
903
+ width: 100%;
904
+ border-collapse: collapse;
905
+ font-size: 0.8125rem;
906
+ }
907
+ .mono .agent-table th,
908
+ .mono .agent-table td {
909
+ padding: 0.5rem 0.75rem;
910
+ text-align: start;
911
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
912
+ }
913
+ .mono .agent-table th {
914
+ color: var(--mono-text-dim, #666666);
915
+ font-weight: 500;
916
+ font-size: 0.75rem;
917
+ text-transform: uppercase;
918
+ letter-spacing: 0.05em;
919
+ }
920
+ .mono .agent-table td {
921
+ color: var(--mono-text, #e0e0e0);
922
+ }
923
+ .mono .agent-role {
924
+ display: flex;
925
+ align-items: center;
926
+ gap: 0.5rem;
927
+ }
928
+ .mono .agent-dot {
929
+ width: 8px;
930
+ height: 8px;
931
+ border-radius: 50%;
932
+ flex-shrink: 0;
933
+ }
934
+ .mono .agent-table .value-accent {
935
+ color: var(--mono-accent, #4ade80);
936
+ font-weight: 600;
937
+ }
938
+
939
+ /* ════════════════════════════════════════════════════════════════
940
+ RESPONSIVE
941
+ ════════════════════════════════════════════════════════════════ */
942
+
943
+ @media (max-width: 768px) {
944
+ .mono .mono-page { padding: 1.5rem 1rem; }
945
+ .mono .session-layout {
946
+ grid-template-columns: 1fr;
947
+ }
948
+ .mono .sidebar {
949
+ position: static;
950
+ order: -1;
951
+ display: grid;
952
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
953
+ gap: 1rem;
954
+ }
955
+ .mono .sidebar-block { margin-bottom: 0; }
956
+ .mono .hero-title { font-size: 1.5rem; }
957
+ .mono .hero-title--session { font-size: 1.25rem; }
958
+ .mono .hero-title--project {
959
+ font-size: 1.5rem;
960
+ }
961
+ .mono .hero-meta { gap: 0.75rem; }
962
+ .mono .stats-row,
963
+ .mono .stats-grid {
964
+ grid-template-columns: repeat(2, 1fr);
965
+ }
966
+ .mono .session-grid {
967
+ grid-template-columns: 1fr;
968
+ }
969
+ .mono .hero-profile {
970
+ flex-direction: column;
971
+ align-items: center;
972
+ text-align: center;
973
+ }
974
+ .mono .hero-photo {
975
+ width: 80px;
976
+ height: 100px;
977
+ }
978
+ .mono .hero-contact {
979
+ justify-content: center;
980
+ font-size: 0.75rem;
981
+ }
982
+ .mono .project-card-header {
983
+ flex-direction: column;
984
+ align-items: flex-start;
985
+ gap: 0.5rem;
986
+ }
987
+ .mono .ascii-label {
988
+ width: 60px;
989
+ font-size: 0.625rem;
990
+ }
991
+ .mono .agent-table { font-size: 0.75rem; }
992
+ .mono .agent-table th,
993
+ .mono .agent-table td { padding: 0.375rem 0.5rem; }
994
+ .mono .git-log-entry { font-size: 0.75rem; }
995
+ }
996
+
997
+ @media (prefers-reduced-motion: reduce) {
998
+ .mono .hero-title,
999
+ .mono .hero-title--project {
1000
+ animation: none;
1001
+ width: auto;
1002
+ border-right: none;
1003
+ }
1004
+ .mono .cursor-blink::after {
1005
+ animation: none;
1006
+ opacity: 1;
1007
+ }
1008
+ .mono .mono-section {
1009
+ opacity: 1;
1010
+ transform: none;
1011
+ transition: none;
1012
+ }
1013
+ .mono .source-bar-segment {
1014
+ transition: none;
1015
+ }
1016
+ }