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