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,1022 @@
1
+ /* ── Mono template styles ──
2
+ * Dark terminal-inspired theme with green accent, JetBrains Mono font.
3
+ * Extracted from mockup HTML files.
4
+ */
5
+
6
+ body { background: var(--mono-bg, #0a0a0a); color: var(--mono-text, #e0e0e0); }
7
+
8
+ /* ── Design Tokens (inherited from theme system, fallbacks here) ── */
9
+
10
+ /* ── Dark Wrapper ── */
11
+ .mono {
12
+ background: var(--mono-bg, #0a0a0a);
13
+ color: var(--mono-text, #e0e0e0);
14
+ font-family: var(--font, 'JetBrains Mono', monospace);
15
+ font-size: 14px;
16
+ line-height: 1.6;
17
+ -webkit-font-smoothing: antialiased;
18
+ }
19
+ .mono a { color: var(--mono-accent, #4ade80); text-decoration: none; }
20
+ .mono a:hover { text-decoration: underline; }
21
+ .mono a:visited { color: var(--mono-accent, #4ade80); }
22
+ .mono a:focus-visible {
23
+ outline: 2px solid var(--mono-accent, #4ade80);
24
+ outline-offset: 2px;
25
+ }
26
+
27
+ /* ── Page Container ── */
28
+ .mono .mono-page {
29
+ max-width: 960px;
30
+ margin: 0 auto;
31
+ padding: 2.5rem 1.5rem;
32
+ }
33
+
34
+ /* ── Section (fade-in entrance) ── */
35
+ .mono .mono-section {
36
+ margin-bottom: 2.5rem;
37
+ opacity: 0;
38
+ transform: translateY(8px);
39
+ transition: opacity 0.4s ease, transform 0.4s ease;
40
+ }
41
+ .mono .mono-section.visible {
42
+ opacity: 1;
43
+ transform: translateY(0);
44
+ }
45
+ .mono.heyiam-project .mono-section {
46
+ margin-bottom: 3rem;
47
+ }
48
+
49
+ /* ── Section Heading ── */
50
+ .mono .mono-heading {
51
+ color: var(--mono-accent, #4ade80);
52
+ font-size: 0.8125rem;
53
+ font-weight: 600;
54
+ letter-spacing: 0.05em;
55
+ text-transform: uppercase;
56
+ margin-bottom: 1rem;
57
+ padding-bottom: 0.5rem;
58
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
59
+ }
60
+
61
+ /* ── Terminal Block ── */
62
+ .mono .terminal-block {
63
+ background: var(--mono-surface, #111111);
64
+ border: 1px solid var(--mono-border, #2a2a2a);
65
+ border-radius: 0px;
66
+ overflow: hidden;
67
+ }
68
+ .mono .terminal-header {
69
+ background: var(--mono-surface-raised, #1a1a1a);
70
+ padding: 0.5rem 1rem;
71
+ display: flex;
72
+ align-items: center;
73
+ gap: 0.5rem;
74
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
75
+ font-size: 0.75rem;
76
+ color: var(--mono-text-dim, #666666);
77
+ }
78
+ .mono .terminal-dots {
79
+ display: flex;
80
+ gap: 6px;
81
+ }
82
+ .mono .terminal-dots span {
83
+ width: 10px;
84
+ height: 10px;
85
+ border-radius: 50%;
86
+ display: block;
87
+ }
88
+ .mono .terminal-dots .dot-red { background: #ef4444; }
89
+ .mono .terminal-dots .dot-yellow { background: #f59e0b; }
90
+ .mono .terminal-dots .dot-green { background: #4ade80; }
91
+ .mono .terminal-body {
92
+ padding: 1.25rem;
93
+ }
94
+
95
+ /* ── Cursor blink on active heading ── */
96
+ .mono .cursor-blink::after {
97
+ content: '_';
98
+ color: var(--mono-accent, #4ade80);
99
+ animation: mono-blink 0.7s step-end infinite;
100
+ }
101
+ @keyframes mono-blink {
102
+ 50% { opacity: 0; }
103
+ }
104
+
105
+ /* ── Tags ── */
106
+ .mono .tag {
107
+ display: inline-block;
108
+ padding: 0.125rem 0.5rem;
109
+ border: 1px solid var(--mono-border, #2a2a2a);
110
+ border-radius: 0px;
111
+ font-size: 0.75rem;
112
+ color: var(--mono-accent, #4ade80);
113
+ background: var(--mono-accent-dim, rgba(74, 222, 128, 0.15));
114
+ }
115
+ .mono .tag-list {
116
+ display: flex;
117
+ flex-wrap: wrap;
118
+ gap: 0.5rem;
119
+ }
120
+ .mono .sidebar-tags {
121
+ display: flex;
122
+ flex-wrap: wrap;
123
+ gap: 0.375rem;
124
+ }
125
+ .mono .sidebar-tags .tag {
126
+ padding: 0.0625rem 0.375rem;
127
+ font-size: 0.6875rem;
128
+ }
129
+
130
+ /* ── Footer ── */
131
+ .mono .mono-footer {
132
+ border-top: 1px solid var(--mono-border, #2a2a2a);
133
+ padding: 2rem 0;
134
+ margin-top: 2rem;
135
+ text-align: center;
136
+ font-size: 0.75rem;
137
+ color: var(--mono-text-dim, #666666);
138
+ }
139
+
140
+ /* ════════════════════════════════════════════════════════════════
141
+ PORTFOLIO
142
+ ════════════════════════════════════════════════════════════════ */
143
+
144
+ /* ── Hero Profile ── */
145
+ .mono .hero-profile {
146
+ display: flex;
147
+ gap: 1.5rem;
148
+ align-items: flex-start;
149
+ }
150
+ .mono .hero-photo {
151
+ width: 120px;
152
+ height: 150px;
153
+ border-radius: 0px;
154
+ object-fit: cover;
155
+ object-position: 55% 10%;
156
+ border: 1px solid var(--mono-accent, #4ade80);
157
+ flex-shrink: 0;
158
+ filter: grayscale(1) contrast(1.2) brightness(0.9);
159
+ }
160
+ .mono .hero-info {
161
+ flex: 1;
162
+ min-width: 0;
163
+ }
164
+ .mono .hero-title {
165
+ font-size: 2rem;
166
+ font-weight: 700;
167
+ color: var(--mono-accent, #4ade80);
168
+ margin-bottom: 0.25rem;
169
+ overflow: hidden;
170
+ white-space: nowrap;
171
+ border-right: 3px solid var(--mono-accent, #4ade80);
172
+ width: 0;
173
+ animation: mono-typing 1.2s steps(20, end) forwards, mono-cursor-blink 0.7s step-end infinite;
174
+ }
175
+ .mono .hero-handle {
176
+ font-size: 1rem;
177
+ color: var(--mono-text-dim, #666666);
178
+ margin-bottom: 1rem;
179
+ }
180
+ .mono .hero-bio {
181
+ color: var(--mono-text, #e0e0e0);
182
+ font-size: 0.875rem;
183
+ line-height: 1.7;
184
+ max-width: 640px;
185
+ }
186
+ .mono .hero-bio .comment {
187
+ color: var(--mono-text-dim, #666666);
188
+ }
189
+ .mono .hero-location {
190
+ color: var(--mono-text-dim, #666666);
191
+ font-size: 0.8125rem;
192
+ margin-top: 0.75rem;
193
+ }
194
+ .mono .hero-contact {
195
+ display: flex;
196
+ flex-wrap: wrap;
197
+ gap: 0.75rem;
198
+ margin-top: 1rem;
199
+ list-style: none;
200
+ }
201
+ .mono .hero-contact a {
202
+ display: inline-flex;
203
+ align-items: center;
204
+ gap: 0.375rem;
205
+ font-size: 0.8125rem;
206
+ color: var(--mono-text-dim, #666666);
207
+ transition: color 0.15s;
208
+ }
209
+ .mono .hero-contact a:visited { color: var(--mono-text-dim, #666666); }
210
+ .mono .hero-contact a:hover {
211
+ color: var(--mono-accent, #4ade80);
212
+ text-decoration: none;
213
+ }
214
+ .mono .hero-contact svg {
215
+ flex-shrink: 0;
216
+ }
217
+ .mono .hero-resume-btn {
218
+ display: inline-flex;
219
+ align-items: center;
220
+ gap: 0.375rem;
221
+ margin-top: 1rem;
222
+ padding: 0.375rem 0.75rem;
223
+ font-size: 0.8125rem;
224
+ color: var(--mono-bg, #0a0a0a);
225
+ background: var(--mono-accent, #4ade80);
226
+ border: none;
227
+ border-radius: 0px;
228
+ cursor: pointer;
229
+ text-decoration: none;
230
+ transition: opacity 0.15s;
231
+ }
232
+ .mono .hero-resume-btn:hover {
233
+ opacity: 0.85;
234
+ text-decoration: none;
235
+ color: var(--mono-bg, #0a0a0a);
236
+ }
237
+
238
+ @keyframes mono-typing {
239
+ from { width: 0; }
240
+ to { width: 10.5ch; }
241
+ }
242
+ @keyframes mono-cursor-blink {
243
+ 50% { border-color: transparent; }
244
+ }
245
+
246
+ /* ── Stats Grid (portfolio + project) ── */
247
+ .mono .stats-grid {
248
+ display: grid;
249
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
250
+ gap: 1px;
251
+ background: var(--mono-border, #2a2a2a);
252
+ border: 1px solid var(--mono-border, #2a2a2a);
253
+ border-radius: 0px;
254
+ overflow: hidden;
255
+ }
256
+ .mono .stat-cell {
257
+ background: var(--mono-surface, #111111);
258
+ padding: 0.75rem 1rem;
259
+ }
260
+ .mono .stat-key {
261
+ font-size: 0.6875rem;
262
+ color: var(--mono-text-dim, #666666);
263
+ margin-bottom: 0.125rem;
264
+ }
265
+ .mono .stat-value {
266
+ font-size: 1.25rem;
267
+ font-weight: 700;
268
+ color: var(--mono-accent, #4ade80);
269
+ }
270
+
271
+ /* ── Leverage terminal ── */
272
+ .mono .stat-cell--leverage {
273
+ grid-column: 1 / -1;
274
+ padding: 0.75rem 1rem;
275
+ }
276
+ .mono .leverage-terminal {
277
+ font-size: 0.8125rem;
278
+ line-height: 1.6;
279
+ }
280
+ .mono .leverage-terminal .lev-line {
281
+ display: flex;
282
+ gap: 0.5rem;
283
+ align-items: baseline;
284
+ }
285
+ .mono .leverage-terminal .lev-key {
286
+ color: var(--mono-text-dim, #666666);
287
+ min-width: 5.5em;
288
+ text-align: right;
289
+ }
290
+ .mono .leverage-terminal .lev-val {
291
+ color: var(--mono-text, #e0e0e0);
292
+ font-weight: 700;
293
+ min-width: 3.5em;
294
+ }
295
+ .mono .leverage-terminal .lev-val--agent {
296
+ color: var(--mono-accent, #4ade80);
297
+ }
298
+ .mono .leverage-terminal .lev-val--multi {
299
+ color: var(--mono-accent, #4ade80);
300
+ }
301
+ .mono .leverage-terminal .lev-bar {
302
+ color: rgba(255,255,255,0.25);
303
+ letter-spacing: 0;
304
+ }
305
+ .mono .leverage-terminal .lev-bar--agent {
306
+ color: var(--mono-accent, #4ade80);
307
+ }
308
+ .mono .leverage-terminal .lev-pct {
309
+ color: var(--mono-text-dim, #666666);
310
+ font-size: 0.75rem;
311
+ }
312
+
313
+ /* ── Project Cards (portfolio) ── */
314
+ .mono .project-list {
315
+ display: flex;
316
+ flex-direction: column;
317
+ gap: 1rem;
318
+ }
319
+ .mono .project-card {
320
+ border: 1px solid var(--mono-border, #2a2a2a);
321
+ border-radius: 0px;
322
+ background: var(--mono-surface, #111111);
323
+ transition: border-color 0.15s;
324
+ text-decoration: none;
325
+ color: inherit;
326
+ display: block;
327
+ }
328
+ .mono .project-card:hover {
329
+ border-color: var(--mono-accent, #4ade80);
330
+ }
331
+ .mono a.project-card:hover {
332
+ transform: translateY(-2px);
333
+ }
334
+ .mono .project-card-header {
335
+ padding: 1rem 1.25rem;
336
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
337
+ display: flex;
338
+ align-items: center;
339
+ justify-content: space-between;
340
+ gap: 1rem;
341
+ }
342
+ .mono .project-name {
343
+ font-size: 1rem;
344
+ font-weight: 600;
345
+ color: var(--mono-accent, #4ade80);
346
+ }
347
+ .mono .project-name a { color: inherit; }
348
+ .mono .project-name a:visited { color: inherit; }
349
+ .mono .project-source {
350
+ font-size: 0.75rem;
351
+ color: var(--mono-text-dim, #666666);
352
+ }
353
+ .mono .project-card-body {
354
+ padding: 1.25rem;
355
+ }
356
+ .mono .project-narrative {
357
+ font-size: 0.8125rem;
358
+ color: var(--mono-text, #e0e0e0);
359
+ line-height: 1.7;
360
+ margin-bottom: 1rem;
361
+ }
362
+ .mono .project-narrative::before {
363
+ content: '> ';
364
+ color: var(--mono-text-dim, #666666);
365
+ }
366
+ .mono .project-stats-row {
367
+ display: flex;
368
+ flex-wrap: wrap;
369
+ gap: 1.5rem;
370
+ margin-bottom: 1rem;
371
+ font-size: 0.8125rem;
372
+ }
373
+ .mono .project-stat {
374
+ color: var(--mono-text-dim, #666666);
375
+ }
376
+ .mono .project-stat strong {
377
+ color: var(--mono-text, #e0e0e0);
378
+ font-weight: 500;
379
+ }
380
+ .mono .project-tags {
381
+ display: flex;
382
+ flex-wrap: wrap;
383
+ gap: 0.5rem;
384
+ }
385
+
386
+ /* ── Source Bar ── */
387
+ .mono .source-bar {
388
+ display: flex;
389
+ height: 6px;
390
+ border-radius: 0px;
391
+ overflow: hidden;
392
+ margin-top: 0.75rem;
393
+ background: var(--mono-surface-raised, #1a1a1a);
394
+ }
395
+ .mono .source-bar-segment {
396
+ transition: width 0.6s ease;
397
+ }
398
+ .mono .source-bar-segment.claude { background: var(--mono-accent, #4ade80); }
399
+ .mono .source-bar-segment.cursor { background: var(--mono-text-dim, #666666); }
400
+ .mono .source-legend {
401
+ display: flex;
402
+ gap: 1rem;
403
+ margin-top: 0.5rem;
404
+ font-size: 0.6875rem;
405
+ color: var(--mono-text-dim, #666666);
406
+ }
407
+ .mono .source-legend-dot {
408
+ display: inline-block;
409
+ width: 8px;
410
+ height: 8px;
411
+ margin-inline-end: 4px;
412
+ vertical-align: middle;
413
+ }
414
+ .mono .source-legend-dot.claude { background: var(--mono-accent, #4ade80); }
415
+ .mono .source-legend-dot.cursor { background: var(--mono-text-dim, #666666); }
416
+
417
+ /* ── Work Timeline (ASCII Bar Chart) ── */
418
+ .mono .ascii-chart {
419
+ font-size: 0.8125rem;
420
+ line-height: 1.8;
421
+ }
422
+ .mono .ascii-row {
423
+ display: flex;
424
+ align-items: center;
425
+ gap: 0.75rem;
426
+ }
427
+ .mono .ascii-label {
428
+ width: 80px;
429
+ flex-shrink: 0;
430
+ color: var(--mono-text-dim, #666666);
431
+ text-align: end;
432
+ overflow: hidden;
433
+ text-overflow: ellipsis;
434
+ white-space: nowrap;
435
+ font-size: 0.6875rem;
436
+ }
437
+ .mono .ascii-bar {
438
+ flex: 1;
439
+ display: flex;
440
+ align-items: center;
441
+ gap: 0.5rem;
442
+ }
443
+ .mono .ascii-bar-fill {
444
+ color: var(--mono-accent, #4ade80);
445
+ letter-spacing: -1px;
446
+ line-height: 1;
447
+ }
448
+ .mono .ascii-bar-value {
449
+ color: var(--mono-text-dim, #666666);
450
+ font-size: 0.6875rem;
451
+ white-space: nowrap;
452
+ }
453
+
454
+ /* ════════════════════════════════════════════════════════════════
455
+ PROJECT
456
+ ════════════════════════════════════════════════════════════════ */
457
+
458
+ /* ── Breadcrumb ── */
459
+ .mono .breadcrumb {
460
+ font-size: 0.8125rem;
461
+ color: var(--mono-text-dim, #666666);
462
+ margin-bottom: 1.5rem;
463
+ }
464
+ .mono .breadcrumb a { color: var(--mono-text-dim, #666666); }
465
+ .mono .breadcrumb a:visited { color: var(--mono-text-dim, #666666); }
466
+ .mono .breadcrumb a:hover { color: var(--mono-accent, #4ade80); }
467
+ .mono .breadcrumb .sep {
468
+ margin: 0 0.25rem;
469
+ color: var(--mono-text-muted, #444444);
470
+ }
471
+
472
+ /* ── Project Hero ── */
473
+ .mono .hero-title--project {
474
+ font-size: 2rem;
475
+ font-weight: 700;
476
+ color: var(--mono-accent, #4ade80);
477
+ margin-bottom: 0.5rem;
478
+ overflow: hidden;
479
+ white-space: nowrap;
480
+ border-right: 3px solid var(--mono-accent, #4ade80);
481
+ width: 0;
482
+ animation: mono-typing-project 1s steps(10, end) forwards, mono-cursor-blink 0.7s step-end infinite;
483
+ }
484
+ .mono .hero-links {
485
+ font-size: 0.8125rem;
486
+ color: var(--mono-text-dim, #666666);
487
+ margin-bottom: 1rem;
488
+ display: flex;
489
+ flex-wrap: wrap;
490
+ gap: 1rem;
491
+ }
492
+
493
+ @keyframes mono-typing-project {
494
+ from { width: 0; }
495
+ to { width: 10ch; }
496
+ }
497
+
498
+ /* ── Screenshot Frame ── */
499
+ .mono .screenshot-frame {
500
+ background: var(--mono-surface, #111111);
501
+ border: 1px solid var(--mono-border, #2a2a2a);
502
+ border-radius: 0px;
503
+ overflow: hidden;
504
+ margin-bottom: 2rem;
505
+ }
506
+ .mono .screenshot-chrome {
507
+ background: var(--mono-surface-raised, #1a1a1a);
508
+ padding: 0.5rem 1rem;
509
+ display: flex;
510
+ align-items: center;
511
+ gap: 0.75rem;
512
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
513
+ }
514
+ .mono .screenshot-chrome .dots {
515
+ display: flex;
516
+ gap: 6px;
517
+ }
518
+ .mono .screenshot-chrome .dots span {
519
+ width: 10px;
520
+ height: 10px;
521
+ border-radius: 50%;
522
+ display: block;
523
+ }
524
+ .mono .screenshot-chrome .dot-r { background: #ef4444; }
525
+ .mono .screenshot-chrome .dot-y { background: #f59e0b; }
526
+ .mono .screenshot-chrome .dot-g { background: #4ade80; }
527
+ .mono .screenshot-chrome .url-bar {
528
+ flex: 1;
529
+ background: var(--mono-bg, #0a0a0a);
530
+ border: 1px solid var(--mono-border, #2a2a2a);
531
+ padding: 0.25rem 0.75rem;
532
+ font-size: 0.6875rem;
533
+ color: var(--mono-text-dim, #666666);
534
+ border-radius: 0px;
535
+ }
536
+ .mono .screenshot-body {
537
+ width: 100%;
538
+ display: block;
539
+ }
540
+
541
+ /* ── Narrative ── */
542
+ .mono .narrative-block {
543
+ padding: 1.25rem;
544
+ font-size: 0.875rem;
545
+ line-height: 1.8;
546
+ }
547
+ .mono .narrative-line {
548
+ margin-bottom: 1rem;
549
+ color: var(--mono-text, #e0e0e0);
550
+ }
551
+ .mono .narrative-line::before {
552
+ content: '> ';
553
+ color: var(--mono-text-dim, #666666);
554
+ }
555
+ .mono .narrative-line:last-child {
556
+ margin-bottom: 0;
557
+ }
558
+
559
+ /* ── Git Log Phases ── */
560
+ .mono .git-log {
561
+ font-size: 0.8125rem;
562
+ line-height: 2;
563
+ }
564
+ .mono .git-log-entry {
565
+ display: flex;
566
+ gap: 0.75rem;
567
+ align-items: flex-start;
568
+ }
569
+ .mono .git-log-graph {
570
+ display: flex;
571
+ flex-direction: column;
572
+ align-items: center;
573
+ flex-shrink: 0;
574
+ width: 20px;
575
+ }
576
+ .mono .git-log-node {
577
+ width: 10px;
578
+ height: 10px;
579
+ border-radius: 50%;
580
+ background: var(--mono-accent, #4ade80);
581
+ flex-shrink: 0;
582
+ }
583
+ .mono .git-log-line {
584
+ width: 2px;
585
+ flex: 1;
586
+ background: var(--mono-border, #2a2a2a);
587
+ min-height: 24px;
588
+ }
589
+ .mono .git-log-content {
590
+ flex: 1;
591
+ padding-bottom: 1rem;
592
+ }
593
+ .mono .git-log-hash {
594
+ color: var(--mono-accent, #4ade80);
595
+ font-weight: 600;
596
+ }
597
+ .mono .git-log-date {
598
+ color: var(--mono-text-dim, #666666);
599
+ font-size: 0.75rem;
600
+ }
601
+ .mono .git-log-msg {
602
+ color: var(--mono-text, #e0e0e0);
603
+ }
604
+ .mono .git-log-detail {
605
+ color: var(--mono-text-dim, #666666);
606
+ font-size: 0.75rem;
607
+ }
608
+
609
+ /* ── Key Decisions ── */
610
+ .mono .decisions-list {
611
+ list-style: none;
612
+ font-size: 0.875rem;
613
+ }
614
+ .mono .decisions-list li {
615
+ padding: 0.75rem 0;
616
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
617
+ display: flex;
618
+ gap: 0.75rem;
619
+ }
620
+ .mono .decisions-list li:last-child {
621
+ border-bottom: none;
622
+ }
623
+ .mono .decision-num {
624
+ color: var(--mono-accent, #4ade80);
625
+ font-weight: 600;
626
+ flex-shrink: 0;
627
+ }
628
+
629
+ /* ── Source Breakdown (project) ── */
630
+ .mono .source-breakdown {
631
+ display: flex;
632
+ gap: 2rem;
633
+ align-items: center;
634
+ flex-wrap: wrap;
635
+ margin-bottom: 0.75rem;
636
+ font-size: 0.875rem;
637
+ }
638
+ .mono.heyiam-project .source-bar {
639
+ height: 8px;
640
+ }
641
+
642
+ /* ── Session Cards (project page) ── */
643
+ .mono .session-grid {
644
+ display: grid;
645
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
646
+ gap: 1rem;
647
+ }
648
+ .mono .session-card {
649
+ border: 1px solid var(--mono-border, #2a2a2a);
650
+ border-radius: 0px;
651
+ background: var(--mono-surface, #111111);
652
+ transition: border-color 0.15s, transform 0.15s ease;
653
+ text-decoration: none;
654
+ color: inherit;
655
+ display: block;
656
+ }
657
+ .mono .session-card:hover {
658
+ border-color: var(--mono-accent, #4ade80);
659
+ transform: translateY(-2px);
660
+ }
661
+ .mono .session-card-header {
662
+ padding: 0.5rem 0.75rem;
663
+ background: var(--mono-surface-raised, #1a1a1a);
664
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
665
+ font-size: 0.6875rem;
666
+ color: var(--mono-text-dim, #666666);
667
+ display: flex;
668
+ align-items: center;
669
+ gap: 0.5rem;
670
+ }
671
+ .mono .session-card-body {
672
+ padding: 1rem;
673
+ font-size: 0.8125rem;
674
+ }
675
+ .mono .session-card-title {
676
+ color: var(--mono-accent, #4ade80);
677
+ font-weight: 600;
678
+ font-size: 0.875rem;
679
+ margin-bottom: 0.5rem;
680
+ }
681
+ .mono .session-card-title a { color: inherit; }
682
+ .mono .session-card-title a:visited { color: inherit; }
683
+ .mono .session-kv {
684
+ display: flex;
685
+ justify-content: space-between;
686
+ padding: 0.125rem 0;
687
+ font-size: 0.75rem;
688
+ }
689
+ .mono .session-kv-key { color: var(--mono-text-dim, #666666); }
690
+ .mono .session-kv-value { color: var(--mono-text, #e0e0e0); }
691
+ .mono .session-card-tag {
692
+ display: inline-block;
693
+ margin-top: 0.5rem;
694
+ padding: 0.0625rem 0.375rem;
695
+ border: 1px solid var(--mono-border, #2a2a2a);
696
+ border-radius: 0px;
697
+ font-size: 0.6875rem;
698
+ color: var(--mono-accent, #4ade80);
699
+ background: var(--mono-accent-dim, rgba(74, 222, 128, 0.15));
700
+ }
701
+
702
+ /* ════════════════════════════════════════════════════════════════
703
+ SESSION
704
+ ════════════════════════════════════════════════════════════════ */
705
+
706
+ /* ── Layout: Main + Sidebar ── */
707
+ .mono .session-layout {
708
+ display: grid;
709
+ grid-template-columns: 1fr 280px;
710
+ gap: 2rem;
711
+ align-items: start;
712
+ }
713
+
714
+ /* ── Session Hero ── */
715
+ .mono .hero-title--session {
716
+ font-size: 1.5rem;
717
+ font-weight: 700;
718
+ color: var(--mono-accent, #4ade80);
719
+ margin-bottom: 0.5rem;
720
+ line-height: 1.3;
721
+ }
722
+ .mono .hero-meta {
723
+ font-size: 0.8125rem;
724
+ color: var(--mono-text-dim, #666666);
725
+ display: flex;
726
+ flex-wrap: wrap;
727
+ gap: 1.25rem;
728
+ margin-bottom: 1rem;
729
+ }
730
+ .mono .hero-meta-item {
731
+ display: flex;
732
+ gap: 0.375rem;
733
+ }
734
+ .mono .hero-meta-key { color: var(--mono-text-muted, #444444); }
735
+ .mono .hero-meta-value { color: var(--mono-text, #e0e0e0); }
736
+
737
+ /* ── Stats Row (session) ── */
738
+ .mono .stats-row {
739
+ display: grid;
740
+ grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
741
+ gap: 1px;
742
+ background: var(--mono-border, #2a2a2a);
743
+ border: 1px solid var(--mono-border, #2a2a2a);
744
+ border-radius: 0px;
745
+ overflow: hidden;
746
+ }
747
+
748
+ /* ── Dev Take ── */
749
+ .mono .dev-take {
750
+ background: var(--mono-accent-dim, rgba(74, 222, 128, 0.15));
751
+ border-left: 3px solid var(--mono-accent, #4ade80);
752
+ padding: 1rem 1.25rem;
753
+ font-size: 0.875rem;
754
+ color: var(--mono-text, #e0e0e0);
755
+ line-height: 1.7;
756
+ margin-bottom: 2rem;
757
+ }
758
+ .mono .dev-take::before {
759
+ content: '// dev_take: ';
760
+ color: var(--mono-accent, #4ade80);
761
+ font-weight: 600;
762
+ }
763
+
764
+ /* ── Sidebar ── */
765
+ .mono .sidebar {
766
+ position: sticky;
767
+ top: 4rem;
768
+ }
769
+ .mono .sidebar-block {
770
+ background: var(--mono-surface, #111111);
771
+ border: 1px solid var(--mono-border, #2a2a2a);
772
+ border-radius: 0px;
773
+ margin-bottom: 1rem;
774
+ overflow: hidden;
775
+ }
776
+ .mono .sidebar-block-header {
777
+ background: var(--mono-surface-raised, #1a1a1a);
778
+ padding: 0.5rem 0.75rem;
779
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
780
+ font-size: 0.6875rem;
781
+ font-weight: 600;
782
+ color: var(--mono-accent, #4ade80);
783
+ text-transform: uppercase;
784
+ letter-spacing: 0.05em;
785
+ }
786
+ .mono .sidebar-block-body {
787
+ padding: 0.75rem;
788
+ }
789
+
790
+ /* ── Sidebar: Tool List ── */
791
+ .mono .tool-row {
792
+ display: flex;
793
+ justify-content: space-between;
794
+ padding: 0.25rem 0;
795
+ font-size: 0.75rem;
796
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
797
+ }
798
+ .mono .tool-row:last-child { border-bottom: none; }
799
+ .mono .tool-name { color: var(--mono-text, #e0e0e0); }
800
+ .mono .tool-count {
801
+ color: var(--mono-accent, #4ade80);
802
+ font-weight: 600;
803
+ }
804
+
805
+ /* ── Sidebar: Files ── */
806
+ .mono .file-row {
807
+ display: flex;
808
+ justify-content: space-between;
809
+ align-items: center;
810
+ padding: 0.25rem 0;
811
+ font-size: 0.6875rem;
812
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
813
+ gap: 0.5rem;
814
+ }
815
+ .mono .file-row:last-child { border-bottom: none; }
816
+ .mono .file-name {
817
+ color: var(--mono-text, #e0e0e0);
818
+ overflow: hidden;
819
+ text-overflow: ellipsis;
820
+ white-space: nowrap;
821
+ flex: 1;
822
+ min-width: 0;
823
+ }
824
+ .mono .file-diff {
825
+ color: var(--mono-accent, #4ade80);
826
+ font-weight: 600;
827
+ white-space: nowrap;
828
+ }
829
+
830
+ /* ── Execution Path (Beats) ── */
831
+ .mono .beat-list {
832
+ list-style: none;
833
+ }
834
+ .mono .beat-item {
835
+ padding: 1rem 0;
836
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
837
+ position: relative;
838
+ padding-inline-start: 2rem;
839
+ }
840
+ .mono .beat-item:last-child { border-bottom: none; }
841
+ .mono .beat-num {
842
+ position: absolute;
843
+ left: 0;
844
+ top: 1rem;
845
+ color: var(--mono-accent, #4ade80);
846
+ font-weight: 700;
847
+ font-size: 0.875rem;
848
+ }
849
+ .mono .beat-title {
850
+ font-weight: 600;
851
+ color: var(--mono-text, #e0e0e0);
852
+ font-size: 0.875rem;
853
+ margin-bottom: 0.25rem;
854
+ }
855
+ .mono .beat-desc {
856
+ font-size: 0.8125rem;
857
+ color: var(--mono-text-dim, #666666);
858
+ line-height: 1.7;
859
+ }
860
+ .mono .beat-item::before {
861
+ content: '';
862
+ position: absolute;
863
+ left: 4px;
864
+ top: 2rem;
865
+ bottom: 0;
866
+ width: 2px;
867
+ background: var(--mono-border, #2a2a2a);
868
+ }
869
+ .mono .beat-item:last-child::before {
870
+ display: none;
871
+ }
872
+
873
+ /* ── Q&A ── */
874
+ .mono .qa-block {
875
+ padding: 1.25rem;
876
+ font-size: 0.875rem;
877
+ line-height: 1.8;
878
+ }
879
+ .mono .qa-item {
880
+ margin-bottom: 1.5rem;
881
+ }
882
+ .mono .qa-item:last-child { margin-bottom: 0; }
883
+ .mono .qa-question {
884
+ color: var(--mono-accent, #4ade80);
885
+ margin-bottom: 0.5rem;
886
+ font-weight: 600;
887
+ }
888
+ .mono .qa-question::before {
889
+ content: 'Q: ';
890
+ color: var(--mono-text-muted, #444444);
891
+ }
892
+ .mono .qa-answer {
893
+ color: var(--mono-text, #e0e0e0);
894
+ padding-inline-start: 1rem;
895
+ border-inline-start: 2px solid var(--mono-border, #2a2a2a);
896
+ }
897
+ .mono .qa-answer::before {
898
+ content: 'A: ';
899
+ color: var(--mono-text-muted, #444444);
900
+ font-weight: 600;
901
+ }
902
+
903
+ /* ── Agent Summary ── */
904
+ .mono .agent-table {
905
+ width: 100%;
906
+ border-collapse: collapse;
907
+ font-size: 0.8125rem;
908
+ }
909
+ .mono .agent-table th,
910
+ .mono .agent-table td {
911
+ padding: 0.5rem 0.75rem;
912
+ text-align: start;
913
+ border-bottom: 1px solid var(--mono-border, #2a2a2a);
914
+ }
915
+ .mono .agent-table th {
916
+ color: var(--mono-text-dim, #666666);
917
+ font-weight: 500;
918
+ font-size: 0.75rem;
919
+ text-transform: uppercase;
920
+ letter-spacing: 0.05em;
921
+ }
922
+ .mono .agent-table td {
923
+ color: var(--mono-text, #e0e0e0);
924
+ }
925
+ .mono .agent-role {
926
+ display: flex;
927
+ align-items: center;
928
+ gap: 0.5rem;
929
+ }
930
+ .mono .agent-dot {
931
+ width: 8px;
932
+ height: 8px;
933
+ border-radius: 50%;
934
+ flex-shrink: 0;
935
+ }
936
+ .mono .agent-table .value-accent {
937
+ color: var(--mono-accent, #4ade80);
938
+ font-weight: 600;
939
+ }
940
+
941
+ /* ════════════════════════════════════════════════════════════════
942
+ RESPONSIVE
943
+ ════════════════════════════════════════════════════════════════ */
944
+
945
+ @media (max-width: 768px) {
946
+ .mono .mono-page { padding: 1.5rem 1rem; }
947
+ .mono .session-layout {
948
+ grid-template-columns: 1fr;
949
+ }
950
+ .mono .sidebar {
951
+ position: static;
952
+ order: -1;
953
+ display: grid;
954
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
955
+ gap: 1rem;
956
+ }
957
+ .mono .sidebar-block { margin-bottom: 0; }
958
+ .mono .hero-title { font-size: 1.5rem; }
959
+ .mono .hero-title--session { font-size: 1.25rem; }
960
+ .mono .hero-title--project {
961
+ font-size: 1.5rem;
962
+ }
963
+ .mono .hero-meta { gap: 0.75rem; }
964
+ .mono .stats-row,
965
+ .mono .stats-grid {
966
+ grid-template-columns: repeat(2, 1fr);
967
+ }
968
+ .mono .session-grid {
969
+ grid-template-columns: 1fr;
970
+ }
971
+ .mono .hero-profile {
972
+ flex-direction: column;
973
+ align-items: center;
974
+ text-align: center;
975
+ }
976
+ .mono .hero-photo {
977
+ width: 80px;
978
+ height: 100px;
979
+ }
980
+ .mono .hero-contact {
981
+ justify-content: center;
982
+ font-size: 0.75rem;
983
+ }
984
+ .mono .project-card-header {
985
+ flex-direction: column;
986
+ align-items: flex-start;
987
+ gap: 0.5rem;
988
+ }
989
+ .mono .ascii-label {
990
+ width: 60px;
991
+ font-size: 0.625rem;
992
+ }
993
+ .mono .agent-table { font-size: 0.75rem; }
994
+ .mono .agent-table th,
995
+ .mono .agent-table td { padding: 0.375rem 0.5rem; }
996
+ .mono .git-log-entry { font-size: 0.75rem; }
997
+ }
998
+
999
+ @media (prefers-reduced-motion: reduce) {
1000
+ .mono .hero-title,
1001
+ .mono .hero-title--project {
1002
+ animation: none;
1003
+ width: auto;
1004
+ border-right: none;
1005
+ }
1006
+ .mono .cursor-blink::after {
1007
+ animation: none;
1008
+ opacity: 1;
1009
+ }
1010
+ .mono .mono-section {
1011
+ opacity: 1;
1012
+ transform: none;
1013
+ transition: none;
1014
+ }
1015
+ .mono .source-bar-segment {
1016
+ transition: none;
1017
+ }
1018
+ }
1019
+
1020
+
1021
+ /* Live-edit empty field hiding */
1022
+ [data-portfolio-empty="true"] { display: none; }