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