heyiam 0.2.28 → 0.3.0

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