heyiam 0.2.29 → 0.3.1

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