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