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