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,948 @@
1
+ /* ── Kinetic template styles ──
2
+ * Extracted from mockup HTML files.
3
+ * Dark theme with orange accent, Space Grotesk display font.
4
+ */
5
+
6
+ :root {
7
+ --bg: #09090b;
8
+ --surface: #111113;
9
+ --surface-2: #18181b;
10
+ --border: rgba(255,255,255,0.06);
11
+ --text: #fafafa;
12
+ --text-2: rgba(255,255,255,0.65);
13
+ --text-3: rgba(255,255,255,0.4);
14
+ --orange: #f97316;
15
+ --orange-dim: rgba(249,115,22,0.1);
16
+ --orange-glow: rgba(249,115,22,0.2);
17
+ --blue: #3b82f6;
18
+ --font-display: 'Space Grotesk', sans-serif;
19
+ --font-body: 'Inter', -apple-system, sans-serif;
20
+ --font-mono: 'IBM Plex Mono', monospace;
21
+ }
22
+
23
+ body {
24
+ font-family: var(--font-body);
25
+ background: var(--bg);
26
+ color: var(--text);
27
+ -webkit-font-smoothing: antialiased;
28
+ overflow-x: hidden;
29
+ line-height: 1.6;
30
+ }
31
+
32
+ .kinetic {
33
+ background: var(--bg);
34
+ color: var(--text);
35
+ }
36
+
37
+ .kinetic a { color: inherit; text-decoration: none; }
38
+ .kinetic a:visited { color: inherit; }
39
+
40
+ /* ── Focus ── */
41
+ .kinetic :focus-visible { outline: 2px solid var(--orange); outline-offset: 2px; }
42
+
43
+ /* ── Hero (portfolio) ── */
44
+ .kinetic .hero {
45
+ min-height: 80vh;
46
+ display: flex;
47
+ flex-direction: column;
48
+ justify-content: center;
49
+ padding: 8rem 2.5rem 4rem;
50
+ position: relative;
51
+ overflow: hidden;
52
+ }
53
+ .kinetic .hero-bg-text {
54
+ position: absolute;
55
+ top: 50%; left: 50%;
56
+ transform: translate(-50%, -50%);
57
+ font-family: var(--font-display);
58
+ font-size: clamp(10rem, 20vw, 22rem);
59
+ font-weight: 700;
60
+ color: rgba(255,255,255,0.015);
61
+ white-space: nowrap;
62
+ pointer-events: none;
63
+ user-select: none;
64
+ letter-spacing: -0.05em;
65
+ }
66
+ .kinetic .hero-content {
67
+ position: relative;
68
+ z-index: 1;
69
+ }
70
+ .kinetic .eyebrow {
71
+ display: inline-flex; align-items: center; gap: 0.75rem;
72
+ font-family: var(--font-mono);
73
+ font-size: 0.75rem;
74
+ color: var(--orange);
75
+ margin-bottom: 2rem;
76
+ letter-spacing: 0.05em;
77
+ text-transform: uppercase;
78
+ }
79
+ .kinetic .eyebrow::before {
80
+ content: '';
81
+ width: 40px; height: 1px;
82
+ background: var(--orange);
83
+ }
84
+ .kinetic .hero h1 {
85
+ font-family: var(--font-display);
86
+ font-size: clamp(3rem, 6vw, 4rem);
87
+ font-weight: 700;
88
+ letter-spacing: -0.04em;
89
+ line-height: 1.05;
90
+ margin-bottom: 1.5rem;
91
+ }
92
+ .kinetic .hero-bio {
93
+ font-size: 1.125rem;
94
+ color: var(--text-2);
95
+ line-height: 1.8;
96
+ font-weight: 300;
97
+ max-width: 50ch;
98
+ margin-bottom: 2rem;
99
+ }
100
+ .kinetic .hero-location {
101
+ font-family: var(--font-mono);
102
+ font-size: 0.75rem;
103
+ color: var(--text-3);
104
+ letter-spacing: 0.05em;
105
+ }
106
+
107
+ /* ── Profile photo ── */
108
+ .kinetic .profile-photo {
109
+ width: 100px;
110
+ border-radius: 8px;
111
+ object-fit: cover;
112
+ object-position: 55% 10%;
113
+ border: 2px solid var(--border);
114
+ flex-shrink: 0;
115
+ align-self: stretch;
116
+ }
117
+ .kinetic .hero-profile-row {
118
+ display: flex;
119
+ align-items: stretch;
120
+ gap: 2rem;
121
+ }
122
+
123
+ /* ── Contact links ── */
124
+ .kinetic .contact-row {
125
+ display: flex;
126
+ flex-wrap: wrap;
127
+ gap: 10px 20px;
128
+ margin-top: 1.25rem;
129
+ font-family: var(--font-mono);
130
+ font-size: 0.75rem;
131
+ }
132
+ .kinetic .contact-row a,
133
+ .kinetic .contact-row span {
134
+ display: inline-flex;
135
+ align-items: center;
136
+ gap: 6px;
137
+ color: var(--text-3);
138
+ text-decoration: none;
139
+ transition: color 0.2s;
140
+ }
141
+ .kinetic .contact-row a:hover {
142
+ color: var(--orange);
143
+ }
144
+ .kinetic .contact-row svg {
145
+ flex-shrink: 0;
146
+ }
147
+ .kinetic .resume-btn {
148
+ display: inline-flex;
149
+ align-items: center;
150
+ gap: 6px;
151
+ padding: 4px 12px;
152
+ border: 1px solid var(--border);
153
+ border-radius: 6px;
154
+ font-family: var(--font-mono);
155
+ font-size: 0.75rem;
156
+ color: var(--text-3);
157
+ text-decoration: none;
158
+ transition: border-color 0.2s, color 0.2s;
159
+ background: transparent;
160
+ }
161
+ .kinetic .resume-btn:hover {
162
+ border-color: var(--orange);
163
+ color: var(--orange);
164
+ }
165
+
166
+ /* ── Stats row ── */
167
+ .kinetic .stats-row {
168
+ display: flex;
169
+ gap: 2.5rem;
170
+ padding: 2rem 0;
171
+ border-top: 1px solid var(--border);
172
+ border-bottom: 1px solid var(--border);
173
+ margin: 0 auto;
174
+ max-width: 900px;
175
+ }
176
+ .kinetic .stat-item {
177
+ display: flex;
178
+ flex-direction: column;
179
+ }
180
+ .kinetic .stat-value {
181
+ font-family: var(--font-display);
182
+ font-size: 1.25rem;
183
+ font-weight: 700;
184
+ }
185
+ .kinetic .stat-label {
186
+ font-family: var(--font-mono);
187
+ font-size: 0.5rem;
188
+ text-transform: uppercase;
189
+ letter-spacing: 0.08em;
190
+ color: var(--text-3);
191
+ margin-top: 0.125rem;
192
+ }
193
+ .kinetic .stat-highlight { color: var(--orange); }
194
+ .kinetic .stat-item--leverage {
195
+ flex: 1 1 100%;
196
+ display: flex;
197
+ flex-direction: column;
198
+ gap: 0.5rem;
199
+ }
200
+ .kinetic .leverage-row {
201
+ display: flex;
202
+ align-items: baseline;
203
+ gap: 1.5rem;
204
+ }
205
+ .kinetic .leverage-row .leverage-num {
206
+ font-family: var(--font-display);
207
+ font-size: 1.25rem;
208
+ font-weight: 700;
209
+ color: var(--text);
210
+ }
211
+ .kinetic .leverage-row .leverage-num--agent {
212
+ color: var(--orange);
213
+ }
214
+ .kinetic .leverage-row .leverage-num--multi {
215
+ color: var(--orange);
216
+ }
217
+ .kinetic .leverage-row .leverage-sub {
218
+ font-family: var(--font-mono);
219
+ font-size: 0.5rem;
220
+ text-transform: uppercase;
221
+ letter-spacing: 0.08em;
222
+ color: var(--text-3);
223
+ }
224
+ .kinetic .leverage-bar {
225
+ height: 4px;
226
+ border-radius: 2px;
227
+ background: rgba(255,255,255,0.06);
228
+ display: flex;
229
+ overflow: hidden;
230
+ }
231
+ .kinetic .leverage-bar__human {
232
+ height: 100%;
233
+ background: rgba(255,255,255,0.25);
234
+ border-radius: 2px 0 0 2px;
235
+ }
236
+ .kinetic .leverage-bar__agent {
237
+ height: 100%;
238
+ background: var(--orange);
239
+ border-radius: 0 2px 2px 0;
240
+ }
241
+ .kinetic .leverage-legend {
242
+ display: flex;
243
+ justify-content: space-between;
244
+ font-family: var(--font-mono);
245
+ font-size: 0.5rem;
246
+ text-transform: uppercase;
247
+ letter-spacing: 0.08em;
248
+ color: var(--text-3);
249
+ }
250
+
251
+ /* ── Sections ── */
252
+ .kinetic .section {
253
+ padding: 6rem 2.5rem;
254
+ max-width: 1100px;
255
+ margin: 0 auto;
256
+ }
257
+ .kinetic .section--flush { padding-top: 0; }
258
+ .kinetic .section-tag {
259
+ font-family: var(--font-mono);
260
+ font-size: 0.6875rem;
261
+ text-transform: uppercase;
262
+ letter-spacing: 0.12em;
263
+ color: var(--orange);
264
+ margin-bottom: 1rem;
265
+ display: flex; align-items: center; gap: 0.75rem;
266
+ }
267
+ .kinetic .section-tag::before {
268
+ content: '';
269
+ width: 24px; height: 1px;
270
+ background: var(--orange);
271
+ }
272
+ .kinetic .section-title {
273
+ font-family: var(--font-display);
274
+ font-size: clamp(2rem, 4vw, 3rem);
275
+ font-weight: 700;
276
+ letter-spacing: -0.03em;
277
+ margin-bottom: 1.5rem;
278
+ line-height: 1.1;
279
+ }
280
+ .kinetic .section-desc {
281
+ font-size: 1.0625rem;
282
+ color: var(--text-2);
283
+ max-width: 50ch;
284
+ font-weight: 300;
285
+ line-height: 1.7;
286
+ }
287
+
288
+ /* ── Project cards (portfolio) ── */
289
+ .kinetic .projects-grid {
290
+ display: grid;
291
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, 360px), 1fr));
292
+ gap: 2rem;
293
+ margin-top: 3rem;
294
+ }
295
+ .kinetic .project-card {
296
+ border: 1px solid var(--border);
297
+ border-radius: 10px;
298
+ overflow: hidden;
299
+ box-shadow: 0 20px 50px rgba(0,0,0,0.3);
300
+ transition: border-color 0.3s, transform 0.15s ease, box-shadow 0.15s ease;
301
+ text-decoration: none;
302
+ color: inherit;
303
+ display: block;
304
+ }
305
+ .kinetic .project-card:hover {
306
+ border-color: rgba(249,115,22,0.15);
307
+ transform: translateY(-2px);
308
+ }
309
+ .kinetic .project-chrome {
310
+ display: flex; align-items: center; gap: 0.75rem;
311
+ padding: 0.625rem 1rem;
312
+ background: var(--surface-2);
313
+ border-bottom: 1px solid var(--border);
314
+ }
315
+ .kinetic .project-chrome-dots { display: flex; gap: 5px; }
316
+ .kinetic .project-chrome-dots span {
317
+ width: 8px; height: 8px; border-radius: 50%;
318
+ background: rgba(255,255,255,0.08);
319
+ }
320
+ .kinetic .project-chrome-url {
321
+ font-family: var(--font-mono);
322
+ font-size: 0.6875rem;
323
+ color: var(--text-3);
324
+ }
325
+ .kinetic .project-body {
326
+ padding: 2rem;
327
+ background: var(--surface);
328
+ }
329
+ .kinetic .project-card-title {
330
+ font-family: var(--font-display);
331
+ font-size: 1.375rem;
332
+ font-weight: 700;
333
+ letter-spacing: -0.02em;
334
+ margin-bottom: 1rem;
335
+ }
336
+ .kinetic .project-stats-row {
337
+ display: flex; gap: 1.5rem;
338
+ margin-bottom: 1.5rem;
339
+ padding-bottom: 1.25rem;
340
+ border-bottom: 1px solid var(--border);
341
+ flex-wrap: wrap;
342
+ }
343
+ .kinetic .project-stat-item { display: flex; flex-direction: column; }
344
+ .kinetic .project-stat-value {
345
+ font-family: var(--font-display);
346
+ font-size: 1.25rem;
347
+ font-weight: 700;
348
+ }
349
+ .kinetic .project-stat-label {
350
+ font-family: var(--font-mono);
351
+ font-size: 0.5rem;
352
+ text-transform: uppercase;
353
+ letter-spacing: 0.08em;
354
+ color: var(--text-3);
355
+ margin-top: 0.125rem;
356
+ }
357
+ .kinetic .narrative-card {
358
+ font-size: 0.875rem;
359
+ color: var(--text-2);
360
+ line-height: 1.75;
361
+ margin-bottom: 1.5rem;
362
+ padding: 1.25rem 1.5rem;
363
+ border-left: 3px solid var(--orange);
364
+ background: rgba(249,115,22,0.03);
365
+ border-radius: 0 6px 6px 0;
366
+ }
367
+ .kinetic .narrative-card p + p { margin-top: 1rem; }
368
+ .kinetic .project-section-label {
369
+ font-family: var(--font-mono);
370
+ font-size: 0.5625rem;
371
+ text-transform: uppercase;
372
+ letter-spacing: 0.1em;
373
+ color: var(--text-3);
374
+ margin-bottom: 0.75rem;
375
+ }
376
+
377
+ /* ── Phases ── */
378
+ .kinetic .phases {
379
+ display: flex; flex-direction: column; gap: 0;
380
+ margin-top: 2rem;
381
+ margin-bottom: 1.5rem;
382
+ padding-left: 0.5rem;
383
+ border-left: 1px solid rgba(255,255,255,0.06);
384
+ }
385
+ .kinetic .phases--large { margin-top: 2rem; }
386
+ .kinetic .phase-item {
387
+ display: flex; gap: 0.75rem;
388
+ padding: 0.5rem 0;
389
+ margin-left: -0.5rem;
390
+ align-items: flex-start;
391
+ }
392
+ .kinetic .phases--large .phase-item { padding: 0.75rem 0; }
393
+ .kinetic .phase-dot {
394
+ width: 8px; height: 8px; border-radius: 50%;
395
+ flex-shrink: 0; margin-top: 4px;
396
+ }
397
+ .kinetic .dot-orange { background: var(--orange); }
398
+ .kinetic .dot-blue { background: var(--blue); }
399
+ .kinetic .dot-green { background: #4ade80; }
400
+ .kinetic .dot-purple { background: #a78bfa; }
401
+ .kinetic .phase-title {
402
+ font-family: var(--font-display);
403
+ font-size: 0.875rem;
404
+ font-weight: 600;
405
+ margin-bottom: 0.125rem;
406
+ }
407
+ .kinetic .phases--large .phase-title { font-size: 0.9375rem; }
408
+ .kinetic .phase-dates {
409
+ font-family: var(--font-mono);
410
+ font-size: 0.625rem;
411
+ color: var(--text-3);
412
+ margin-bottom: 0.25rem;
413
+ }
414
+ .kinetic .phase-desc {
415
+ font-size: 0.8125rem;
416
+ color: var(--text-3);
417
+ line-height: 1.5;
418
+ }
419
+
420
+ /* ── Source mix (project cards) ── */
421
+ .kinetic .source-mix {
422
+ display: flex; gap: 0.75rem; align-items: center;
423
+ margin-bottom: 1.5rem;
424
+ }
425
+ .kinetic .source-bar {
426
+ flex: 1;
427
+ height: 4px;
428
+ background: var(--surface-2);
429
+ border-radius: 2px;
430
+ overflow: hidden;
431
+ }
432
+ .kinetic .source-fill {
433
+ height: 100%;
434
+ border-radius: 2px;
435
+ background: var(--orange);
436
+ }
437
+ .kinetic .source-labels {
438
+ display: flex; justify-content: space-between;
439
+ font-family: var(--font-mono);
440
+ font-size: 0.625rem;
441
+ color: var(--text-3);
442
+ }
443
+
444
+ /* ── Chips ── */
445
+ .kinetic .chips { display: flex; gap: 0.375rem; flex-wrap: wrap; }
446
+ .kinetic .chips span {
447
+ font-family: var(--font-mono);
448
+ font-size: 0.5625rem;
449
+ padding: 0.25rem 0.625rem;
450
+ background: rgba(249,115,22,0.06);
451
+ border: 1px solid rgba(249,115,22,0.12);
452
+ border-radius: 4px;
453
+ color: var(--orange);
454
+ }
455
+ .kinetic .chips--mt { margin-top: 1.5rem; }
456
+
457
+ /* ── Split panel ── */
458
+ .kinetic .split {
459
+ display: grid;
460
+ grid-template-columns: 1fr 1fr;
461
+ gap: 0;
462
+ border: 1px solid var(--border);
463
+ border-radius: 12px;
464
+ overflow: hidden;
465
+ margin-top: 3rem;
466
+ }
467
+ .kinetic .split-panel {
468
+ padding: 2.5rem;
469
+ background: var(--surface);
470
+ }
471
+ .kinetic .split-panel:first-child { border-right: 1px solid var(--border); }
472
+ .kinetic .split-panel h3 {
473
+ font-family: var(--font-display);
474
+ font-size: 1rem;
475
+ font-weight: 600;
476
+ margin-bottom: 1.5rem;
477
+ }
478
+ .kinetic .split-sub {
479
+ font-size: 0.8125rem;
480
+ color: var(--text-3);
481
+ margin-bottom: 1.5rem;
482
+ }
483
+ .kinetic .split-stat {
484
+ display: flex; align-items: baseline; gap: 0.5rem;
485
+ margin-bottom: 0.75rem;
486
+ }
487
+ .kinetic .split-stat-value {
488
+ font-family: var(--font-display);
489
+ font-size: 2rem;
490
+ font-weight: 700;
491
+ }
492
+ .kinetic .split-stat-label {
493
+ font-family: var(--font-mono);
494
+ font-size: 0.625rem;
495
+ color: var(--text-3);
496
+ text-transform: uppercase;
497
+ letter-spacing: 0.08em;
498
+ }
499
+ .kinetic .split-detail {
500
+ font-family: var(--font-mono);
501
+ font-size: 0.75rem;
502
+ line-height: 2;
503
+ color: var(--text-3);
504
+ }
505
+ .kinetic .hl-orange { color: var(--orange); }
506
+
507
+ /* ── Project hero (project page) ── */
508
+ .kinetic .hero--project {
509
+ min-height: 60vh;
510
+ max-width: 1100px;
511
+ margin: 0 auto;
512
+ }
513
+ .kinetic .hero--project h1 {
514
+ font-size: clamp(3rem, 6vw, 4.5rem);
515
+ }
516
+ .kinetic .hero-links {
517
+ display: flex; gap: 1.5rem;
518
+ font-family: var(--font-mono);
519
+ font-size: 0.75rem;
520
+ color: var(--text-3);
521
+ }
522
+ .kinetic .hero-links a:hover { color: var(--orange); }
523
+
524
+ /* ── Project stats row ── */
525
+ .kinetic .stats-row--project {
526
+ display: flex; gap: 2rem; flex-wrap: wrap;
527
+ padding: 2rem 2.5rem;
528
+ border-top: 1px solid var(--border);
529
+ border-bottom: 1px solid var(--border);
530
+ max-width: 1100px;
531
+ margin: 0 auto;
532
+ }
533
+
534
+ /* ── Timeline container ── */
535
+ .kinetic .timeline-container {
536
+ margin-top: 2rem;
537
+ padding: 1.5rem;
538
+ background: rgba(255,255,255,0.02);
539
+ border-radius: 8px;
540
+ border: 1px solid var(--border);
541
+ overflow-x: auto;
542
+ }
543
+ .kinetic .timeline-container svg { width: 100%; height: auto; min-width: 600px; }
544
+
545
+ /* ── Growth chart ── */
546
+ .kinetic .growth-container {
547
+ margin-top: 2rem;
548
+ padding: 1.5rem;
549
+ background: rgba(255,255,255,0.02);
550
+ border-radius: 8px;
551
+ border: 1px solid var(--border);
552
+ }
553
+
554
+ /* ── Decision items ── */
555
+ .kinetic .decision-item {
556
+ padding: 0.75rem 0;
557
+ border-bottom: 1px solid var(--border);
558
+ }
559
+ .kinetic .decision-item:last-child { border-bottom: none; }
560
+ .kinetic .decision-num {
561
+ font-family: var(--font-mono);
562
+ font-size: 0.625rem;
563
+ color: var(--orange);
564
+ margin-bottom: 0.25rem;
565
+ }
566
+ .kinetic .decision-text {
567
+ font-size: 0.8125rem;
568
+ color: var(--text-2);
569
+ line-height: 1.6;
570
+ }
571
+
572
+ /* ── Source breakdown (project page) ── */
573
+ .kinetic .source-item {
574
+ display: flex; justify-content: space-between; align-items: center;
575
+ padding: 0.75rem 0;
576
+ border-bottom: 1px solid var(--border);
577
+ }
578
+ .kinetic .source-item:last-child { border-bottom: none; }
579
+ .kinetic .source-name {
580
+ font-family: var(--font-mono);
581
+ font-size: 0.8125rem;
582
+ }
583
+ .kinetic .source-pct {
584
+ font-family: var(--font-display);
585
+ font-size: 1rem;
586
+ font-weight: 700;
587
+ }
588
+ .kinetic .source-bar-wrap { flex: 1; margin: 0 1rem; }
589
+
590
+ /* ── Session cards (project page) ── */
591
+ .kinetic .sessions-grid {
592
+ display: grid;
593
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
594
+ gap: 1.5rem;
595
+ margin-top: 2rem;
596
+ }
597
+ .kinetic .session-card {
598
+ background: var(--surface);
599
+ border: 1px solid var(--border);
600
+ border-radius: 10px;
601
+ overflow: hidden;
602
+ box-shadow: 0 10px 30px rgba(0,0,0,0.2);
603
+ transition: border-color 0.3s, transform 0.15s ease, box-shadow 0.15s ease;
604
+ text-decoration: none;
605
+ color: inherit;
606
+ display: block;
607
+ outline: none;
608
+ }
609
+ .kinetic .session-card:hover {
610
+ border-color: rgba(249,115,22,0.15);
611
+ transform: translateY(-2px);
612
+ }
613
+ .kinetic .session-card:focus-visible {
614
+ outline: 2px solid var(--orange);
615
+ outline-offset: 2px;
616
+ }
617
+ .kinetic .session-chrome {
618
+ display: flex; align-items: center; gap: 0.75rem;
619
+ padding: 0.5rem 0.75rem;
620
+ background: var(--surface-2);
621
+ border-bottom: 1px solid var(--border);
622
+ }
623
+ .kinetic .session-chrome-dots { display: flex; gap: 4px; }
624
+ .kinetic .session-chrome-dots span {
625
+ width: 6px; height: 6px; border-radius: 50%;
626
+ background: rgba(255,255,255,0.08);
627
+ }
628
+ .kinetic .session-chrome-url {
629
+ font-family: var(--font-mono);
630
+ font-size: 0.625rem;
631
+ color: var(--text-3);
632
+ }
633
+ .kinetic .session-body {
634
+ padding: 1.25rem;
635
+ background: var(--surface);
636
+ }
637
+ .kinetic .session-title {
638
+ font-family: var(--font-display);
639
+ font-size: 0.9375rem;
640
+ font-weight: 600;
641
+ letter-spacing: -0.01em;
642
+ margin-bottom: 0.75rem;
643
+ }
644
+ .kinetic .session-meta {
645
+ display: flex; gap: 1rem; flex-wrap: wrap;
646
+ margin-bottom: 0.75rem;
647
+ }
648
+ .kinetic .session-meta-item {
649
+ font-family: var(--font-mono);
650
+ font-size: 0.625rem;
651
+ color: var(--text-3);
652
+ }
653
+ .kinetic .session-meta-value { color: var(--text-2); font-weight: 500; }
654
+ .kinetic .session-title a:hover { color: var(--orange); }
655
+ .kinetic .session-tag {
656
+ font-family: var(--font-mono);
657
+ font-size: 0.5625rem;
658
+ padding: 0.125rem 0.5rem;
659
+ background: rgba(249,115,22,0.06);
660
+ border: 1px solid rgba(249,115,22,0.12);
661
+ border-radius: 4px;
662
+ color: var(--orange);
663
+ display: inline-block;
664
+ }
665
+
666
+ /* ── Session page section overrides ── */
667
+ .kinetic .content-layout .section-title {
668
+ font-size: clamp(1.5rem, 3vw, 2rem);
669
+ }
670
+
671
+ /* ── Session hero ── */
672
+ .kinetic .hero--session {
673
+ min-height: auto;
674
+ padding: 8rem 2.5rem 3rem;
675
+ position: relative;
676
+ overflow: hidden;
677
+ max-width: 1100px;
678
+ margin: 0 auto;
679
+ }
680
+ .kinetic .hero--session h1 {
681
+ font-size: clamp(1.75rem, 4vw, 2.5rem);
682
+ letter-spacing: -0.03em;
683
+ line-height: 1.15;
684
+ max-width: 700px;
685
+ }
686
+ .kinetic .hero-meta {
687
+ display: flex; gap: 1.5rem; flex-wrap: wrap;
688
+ font-family: var(--font-mono);
689
+ font-size: 0.75rem;
690
+ color: var(--text-3);
691
+ }
692
+ .kinetic .hero-meta-value { color: var(--text-2); }
693
+ .kinetic .hero-meta-sep { opacity: 0.3; }
694
+
695
+ /* ── Breadcrumb ── */
696
+ .kinetic .breadcrumb {
697
+ font-family: var(--font-mono);
698
+ font-size: 0.6875rem;
699
+ color: var(--text-3);
700
+ padding: 0.5rem 0;
701
+ }
702
+ .kinetic .breadcrumb a:hover { color: var(--orange); }
703
+ .kinetic .breadcrumb-sep { margin: 0 0.5rem; opacity: 0.4; }
704
+
705
+ /* ── Dev take section ── */
706
+ .kinetic .dev-take-section {
707
+ max-width: 1100px;
708
+ margin: 0 auto;
709
+ padding: 0 2.5rem 3rem;
710
+ }
711
+
712
+ /* ── Content layout (session page) ── */
713
+ .kinetic .content-layout {
714
+ display: grid;
715
+ grid-template-columns: 1fr 320px;
716
+ gap: 2.5rem;
717
+ max-width: 1100px;
718
+ margin: 0 auto;
719
+ padding: 0 2.5rem 6rem;
720
+ }
721
+
722
+ /* ── Execution path (beats) ── */
723
+ .kinetic .execution-path {
724
+ margin-bottom: 3rem;
725
+ }
726
+ .kinetic .beat {
727
+ display: flex; gap: 1.25rem;
728
+ padding: 1.25rem 0;
729
+ border-bottom: 1px solid var(--border);
730
+ }
731
+ .kinetic .beat:last-child { border-bottom: none; }
732
+ .kinetic .beat-number {
733
+ width: 32px; height: 32px;
734
+ border-radius: 50%;
735
+ background: var(--orange-dim);
736
+ border: 1px solid rgba(249,115,22,0.2);
737
+ display: flex; align-items: center; justify-content: center;
738
+ font-family: var(--font-mono);
739
+ font-size: 0.75rem;
740
+ font-weight: 600;
741
+ color: var(--orange);
742
+ flex-shrink: 0;
743
+ }
744
+ .kinetic .beat-content { flex: 1; }
745
+ .kinetic .beat-title {
746
+ font-family: var(--font-display);
747
+ font-size: 0.9375rem;
748
+ font-weight: 600;
749
+ margin-bottom: 0.375rem;
750
+ }
751
+ .kinetic .beat-desc {
752
+ font-size: 0.8125rem;
753
+ color: var(--text-2);
754
+ line-height: 1.6;
755
+ }
756
+
757
+ /* ── Q&A ── */
758
+ .kinetic .qa-section {
759
+ margin-bottom: 3rem;
760
+ }
761
+ .kinetic .qa-split {
762
+ display: grid;
763
+ grid-template-columns: 1fr 1fr;
764
+ gap: 0;
765
+ border: 1px solid var(--border);
766
+ border-radius: 12px;
767
+ overflow: hidden;
768
+ margin-bottom: 1.5rem;
769
+ }
770
+ .kinetic .qa-panel {
771
+ padding: 1.5rem;
772
+ background: var(--surface);
773
+ }
774
+ .kinetic .qa-panel:first-child { border-right: 1px solid var(--border); }
775
+ .kinetic .qa-label {
776
+ font-family: var(--font-mono);
777
+ font-size: 0.5625rem;
778
+ text-transform: uppercase;
779
+ letter-spacing: 0.1em;
780
+ color: var(--orange);
781
+ margin-bottom: 0.75rem;
782
+ }
783
+ .kinetic .qa-text {
784
+ font-size: 0.8125rem;
785
+ color: var(--text-2);
786
+ line-height: 1.7;
787
+ }
788
+
789
+ /* ── Agent summary ── */
790
+ .kinetic .agent-section { margin-bottom: 3rem; }
791
+ .kinetic .agent-bar-row {
792
+ display: flex; align-items: center; gap: 1rem;
793
+ margin-bottom: 0.75rem;
794
+ }
795
+ .kinetic .agent-bar-label {
796
+ font-family: var(--font-mono);
797
+ font-size: 0.75rem;
798
+ color: var(--text-2);
799
+ width: 120px;
800
+ flex-shrink: 0;
801
+ }
802
+ .kinetic .agent-bar-track {
803
+ flex: 1;
804
+ height: 8px;
805
+ background: var(--surface-2);
806
+ border-radius: 4px;
807
+ overflow: hidden;
808
+ }
809
+ .kinetic .agent-bar-fill {
810
+ height: 100%;
811
+ border-radius: 4px;
812
+ transition: width 0.6s ease-out;
813
+ }
814
+ .kinetic .agent-bar-meta {
815
+ font-family: var(--font-mono);
816
+ font-size: 0.625rem;
817
+ color: var(--text-3);
818
+ width: 80px;
819
+ text-align: right;
820
+ flex-shrink: 0;
821
+ }
822
+
823
+ /* ── Sidebar ── */
824
+ .kinetic .sidebar {
825
+ display: flex;
826
+ flex-direction: column;
827
+ gap: 2rem;
828
+ }
829
+ .kinetic .sidebar-card {
830
+ background: var(--surface);
831
+ border: 1px solid var(--border);
832
+ border-radius: 8px;
833
+ padding: 1.5rem;
834
+ }
835
+ .kinetic .sidebar-card-title {
836
+ font-family: var(--font-mono);
837
+ font-size: 0.5625rem;
838
+ text-transform: uppercase;
839
+ letter-spacing: 0.1em;
840
+ color: var(--text-3);
841
+ margin-bottom: 1rem;
842
+ display: flex; align-items: center; gap: 0.5rem;
843
+ }
844
+ .kinetic .sidebar-card-title::before {
845
+ content: '';
846
+ width: 12px; height: 1px;
847
+ background: var(--orange);
848
+ }
849
+
850
+ /* ── Tools table ── */
851
+ .kinetic .tools-table {
852
+ width: 100%;
853
+ }
854
+ .kinetic .tools-row {
855
+ display: flex; justify-content: space-between; align-items: center;
856
+ padding: 0.5rem 0;
857
+ border-bottom: 1px solid var(--border);
858
+ }
859
+ .kinetic .tools-row:last-child { border-bottom: none; }
860
+ .kinetic .tools-name {
861
+ font-family: var(--font-mono);
862
+ font-size: 0.8125rem;
863
+ color: var(--text-2);
864
+ }
865
+ .kinetic .tools-count {
866
+ font-family: var(--font-display);
867
+ font-size: 0.9375rem;
868
+ font-weight: 700;
869
+ color: var(--orange);
870
+ }
871
+
872
+ /* ── Files table ── */
873
+ .kinetic .files-row {
874
+ display: flex; justify-content: space-between; align-items: flex-start;
875
+ padding: 0.5rem 0;
876
+ border-bottom: 1px solid var(--border);
877
+ gap: 0.75rem;
878
+ }
879
+ .kinetic .files-row:last-child { border-bottom: none; }
880
+ .kinetic .files-name {
881
+ font-family: var(--font-mono);
882
+ font-size: 0.6875rem;
883
+ color: var(--text-2);
884
+ word-break: break-all;
885
+ flex: 1;
886
+ }
887
+ .kinetic .files-diff {
888
+ font-family: var(--font-mono);
889
+ font-size: 0.75rem;
890
+ font-weight: 600;
891
+ white-space: nowrap;
892
+ flex-shrink: 0;
893
+ }
894
+ .kinetic .files-adds { color: #4ade80; }
895
+ .kinetic .files-dels { color: #f87171; }
896
+
897
+ /* ── Footer ── */
898
+ .kinetic .footer {
899
+ padding: 3rem 2.5rem;
900
+ border-top: 1px solid var(--border);
901
+ display: flex; justify-content: space-between;
902
+ font-size: 0.75rem; color: var(--text-3);
903
+ max-width: 1100px; margin: 0 auto;
904
+ }
905
+ .kinetic .footer a { color: var(--text-3); }
906
+ .kinetic .footer a:hover { color: var(--orange); }
907
+ .kinetic .footer-links { display: flex; gap: 1.5rem; }
908
+
909
+ /* ── Counter animation ── */
910
+ .kinetic .counter { display: inline-block; }
911
+
912
+ /* ── Responsive ── */
913
+ @media (max-width: 768px) {
914
+ .kinetic .hero { padding: 6rem 1.25rem 3rem; min-height: auto; }
915
+ .kinetic .hero-profile-row { flex-direction: column; gap: 1.5rem; }
916
+ .kinetic .profile-photo { width: 80px; height: auto; }
917
+ .kinetic .stats-row { flex-wrap: wrap; gap: 1.5rem; padding: 1.5rem 1.25rem; }
918
+ .kinetic .stats-row--project { padding: 1.5rem 1.25rem; gap: 1rem; }
919
+ .kinetic .section { padding: 4rem 1.25rem; }
920
+ .kinetic .split { grid-template-columns: 1fr; }
921
+ .kinetic .split-panel:first-child { border-right: none; border-bottom: 1px solid var(--border); }
922
+ .kinetic .project-body { padding: 1.25rem; }
923
+ .kinetic .project-stats-row { gap: 1rem; }
924
+ .kinetic .sessions-grid { grid-template-columns: 1fr; }
925
+ .kinetic .hero--session { padding: 6rem 1.25rem 2rem; }
926
+ .kinetic .dev-take-section { padding: 0 1.25rem 2rem; }
927
+ .kinetic .content-layout {
928
+ grid-template-columns: 1fr;
929
+ padding: 0 1.25rem 4rem;
930
+ }
931
+ .kinetic .sidebar { order: -1; }
932
+ .kinetic .qa-split { grid-template-columns: 1fr; }
933
+ .kinetic .qa-panel:first-child { border-right: none; border-bottom: 1px solid var(--border); }
934
+ .kinetic .hero-meta { gap: 0.75rem; font-size: 0.625rem; }
935
+ .kinetic .footer { flex-direction: column; gap: 1rem; padding: 2rem 1.25rem; }
936
+ }
937
+
938
+ @media (prefers-reduced-motion: reduce) {
939
+ .kinetic *, .kinetic *::before, .kinetic *::after {
940
+ animation-duration: 0.01ms !important;
941
+ animation-iteration-count: 1 !important;
942
+ transition-duration: 0.01ms !important;
943
+ }
944
+ }
945
+
946
+ /* Live-patcher empty-state hide marker. Set by the EditRail preview
947
+ patcher when a contact field clears, removed when it gets a value. */
948
+ [data-portfolio-empty="true"] { display: none !important; }