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