heyiam 0.2.29 → 0.3.0

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