codex-snapshots 0.1.0 → 0.1.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 (51) hide show
  1. package/README.md +101 -6
  2. package/bin/codex-snapshot.mjs +1 -6326
  3. package/deploy/aliyun/README.md +311 -0
  4. package/deploy/aliyun/backup-share-data.sh +109 -0
  5. package/deploy/aliyun/check-ecs-status.sh +149 -0
  6. package/deploy/aliyun/codex-snapshot-share.env.example +29 -0
  7. package/deploy/aliyun/codex-snapshot-share.service +26 -0
  8. package/deploy/aliyun/configure-github-pages-api.sh +141 -0
  9. package/deploy/aliyun/configure-local-publisher.sh +197 -0
  10. package/deploy/aliyun/deploy-to-ecs.sh +669 -0
  11. package/deploy/aliyun/deploy.env.example +52 -0
  12. package/deploy/aliyun/doctor.mjs +398 -0
  13. package/deploy/aliyun/install-share-api.sh +252 -0
  14. package/deploy/aliyun/install-system-deps.sh +84 -0
  15. package/deploy/aliyun/nginx-codex-snapshots.bootstrap.conf +34 -0
  16. package/deploy/aliyun/nginx-codex-snapshots.conf +52 -0
  17. package/deploy/aliyun/preflight.mjs +321 -0
  18. package/deploy/aliyun/restore-share-data.sh +141 -0
  19. package/deploy/aliyun/verify-public-share.mjs +404 -0
  20. package/dist/cli/codex-snapshot.mjs +2654 -0
  21. package/dist/core/privacy.js +81 -0
  22. package/dist/core/snapshot.js +1 -0
  23. package/dist/renderers/markdown.mjs +81 -0
  24. package/dist/renderers/transcript.js +195 -0
  25. package/dist/server/http.js +10 -0
  26. package/dist/server/local-security.js +66 -0
  27. package/dist/server/local-viewer-app.mjs +1670 -0
  28. package/dist/server/local-viewer.mjs +210 -0
  29. package/dist/server/share-api.mjs +1149 -0
  30. package/dist/server/share-store.js +136 -0
  31. package/dist/shared/sanitize.js +126 -0
  32. package/dist/shared/transcript.js +1 -0
  33. package/dist/sources/index.mjs +2 -0
  34. package/dist/sources/local-history.mjs +2221 -0
  35. package/package.json +42 -14
  36. package/scripts/build-site.mjs +71 -0
  37. package/scripts/launch-agent.mjs +19 -227
  38. package/scripts/serve-site.mjs +2 -2
  39. package/scripts/test-aliyun-deploy-config.sh +230 -0
  40. package/scripts/test-share-api.mjs +967 -0
  41. package/scripts/test-site-config.mjs +100 -0
  42. package/scripts/test-static-site.mjs +403 -0
  43. package/scripts/write-site-config.mjs +161 -0
  44. package/server/share-api.mjs +1 -771
  45. package/site/assets/config.js +3 -0
  46. package/site/assets/share.js +43 -106
  47. package/site/assets/site.css +3 -605
  48. package/site/assets/site.js +15 -92
  49. package/site/favicon.svg +7 -0
  50. package/site/index.html +3 -83
  51. package/site/share/index.html +3 -8
@@ -1,605 +1,3 @@
1
- :root {
2
- --ink: #16191f;
3
- --muted: #687386;
4
- --line: #d9dee4;
5
- --paper: #f4f0e7;
6
- --panel: #fffdf8;
7
- --panel-soft: #faf7ef;
8
- --blue: #255f82;
9
- --green: #0c6958;
10
- --red: #ad3728;
11
- --amber: #a56d13;
12
- --shadow-soft: 0 24px 70px -58px rgba(22, 25, 31, 0.5);
13
- --grid-strong: rgba(22, 25, 31, 0.065);
14
- --grid-soft: rgba(22, 25, 31, 0.038);
15
- }
16
-
17
- * {
18
- box-sizing: border-box;
19
- }
20
-
21
- body {
22
- margin: 0;
23
- min-height: 100vh;
24
- color: var(--ink);
25
- background:
26
- linear-gradient(90deg, var(--grid-strong) 1px, transparent 1px),
27
- linear-gradient(var(--grid-soft) 1px, transparent 1px),
28
- var(--paper);
29
- background-size: 24px 24px;
30
- font-family: "Iowan Old Style", "Palatino Linotype", Georgia, "Songti SC", "Noto Serif CJK SC", "Source Han Serif SC", serif;
31
- text-rendering: optimizeLegibility;
32
- -webkit-font-smoothing: antialiased;
33
- }
34
-
35
- a {
36
- color: inherit;
37
- text-decoration: none;
38
- }
39
-
40
- button,
41
- input {
42
- font: inherit;
43
- }
44
-
45
- code,
46
- pre,
47
- .eyebrow,
48
- .status-pill,
49
- .button,
50
- label span,
51
- .share-meta,
52
- .shot-kicker,
53
- .shot-meta {
54
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "PingFang SC", "Microsoft YaHei", monospace;
55
- }
56
-
57
- .shell,
58
- .share-shell {
59
- width: min(1360px, calc(100vw - 32px));
60
- margin: 0 auto;
61
- padding: 34px 0 72px;
62
- }
63
-
64
- .hero {
65
- display: grid;
66
- min-height: min(760px, calc(100vh - 48px));
67
- align-items: center;
68
- gap: clamp(28px, 5vw, 72px);
69
- grid-template-columns: minmax(0, 0.82fr) minmax(520px, 1.18fr);
70
- }
71
-
72
- .hero-copy {
73
- max-width: 620px;
74
- }
75
-
76
- .eyebrow {
77
- margin: 0 0 12px;
78
- color: var(--blue);
79
- font-size: 12px;
80
- font-weight: 900;
81
- letter-spacing: 0.08em;
82
- text-transform: none;
83
- }
84
-
85
- h1,
86
- h2,
87
- p {
88
- margin-top: 0;
89
- }
90
-
91
- h1 {
92
- margin-bottom: 24px;
93
- font-size: 92px;
94
- line-height: 1.16;
95
- letter-spacing: 0;
96
- }
97
-
98
- h2 {
99
- margin-bottom: 14px;
100
- font-size: 34px;
101
- line-height: 1.25;
102
- letter-spacing: 0;
103
- }
104
-
105
- .lede,
106
- .status-panel p,
107
- .commands p {
108
- color: var(--muted);
109
- font-size: 20px;
110
- line-height: 1.7;
111
- }
112
-
113
- .actions {
114
- display: flex;
115
- flex-wrap: wrap;
116
- gap: 12px;
117
- margin-top: 34px;
118
- }
119
-
120
- .button {
121
- display: inline-flex;
122
- min-height: 46px;
123
- align-items: center;
124
- justify-content: center;
125
- border: 1px solid rgba(22, 25, 31, 0.14);
126
- border-radius: 8px;
127
- background: var(--panel);
128
- padding: 0 18px;
129
- color: var(--ink);
130
- font-size: 13px;
131
- font-weight: 900;
132
- text-transform: none;
133
- transition: transform 160ms ease, border-color 160ms ease, background-color 160ms ease;
134
- }
135
-
136
- .button:hover {
137
- border-color: rgba(22, 25, 31, 0.34);
138
- transform: translateY(-1px);
139
- }
140
-
141
- .button.primary {
142
- border-color: #07111f;
143
- background: #07111f;
144
- color: white;
145
- }
146
-
147
- .product-shot {
148
- display: grid;
149
- min-height: 560px;
150
- overflow: hidden;
151
- border: 3px solid var(--ink);
152
- background: rgba(255, 253, 248, 0.76);
153
- box-shadow: 0 34px 110px -74px rgba(22, 25, 31, 0.8);
154
- grid-template-columns: minmax(240px, 0.33fr) minmax(0, 0.67fr);
155
- }
156
-
157
- .shot-sidebar,
158
- .shot-main {
159
- min-width: 0;
160
- padding: 26px;
161
- }
162
-
163
- .shot-sidebar {
164
- border-right: 3px solid var(--ink);
165
- background: rgba(250, 247, 239, 0.68);
166
- }
167
-
168
- .shot-title {
169
- margin-bottom: 18px;
170
- font-size: 34px;
171
- font-weight: 900;
172
- line-height: 1;
173
- }
174
-
175
- .shot-search {
176
- height: 42px;
177
- margin-bottom: 18px;
178
- border: 1px solid var(--line);
179
- background: var(--panel);
180
- }
181
-
182
- .shot-row {
183
- display: flex;
184
- min-height: 48px;
185
- align-items: center;
186
- gap: 12px;
187
- border-bottom: 1px solid rgba(22, 25, 31, 0.1);
188
- color: var(--muted);
189
- }
190
-
191
- .shot-row span {
192
- width: 14px;
193
- height: 14px;
194
- border: 2px solid currentColor;
195
- border-radius: 4px;
196
- }
197
-
198
- .shot-row.active {
199
- color: var(--ink);
200
- }
201
-
202
- .shot-main {
203
- display: flex;
204
- flex-direction: column;
205
- gap: 24px;
206
- }
207
-
208
- .shot-top {
209
- display: flex;
210
- align-items: flex-start;
211
- justify-content: space-between;
212
- gap: 18px;
213
- border-bottom: 3px solid var(--ink);
214
- padding-bottom: 18px;
215
- }
216
-
217
- .shot-top > div:first-child {
218
- min-width: 0;
219
- flex: 1;
220
- }
221
-
222
- .shot-heading {
223
- font-size: 40px;
224
- font-weight: 900;
225
- line-height: 1.24;
226
- }
227
-
228
- .shot-switches {
229
- display: flex;
230
- flex: 0 0 auto;
231
- gap: 6px;
232
- }
233
-
234
- .shot-switches span {
235
- width: 34px;
236
- height: 28px;
237
- border: 1px solid var(--line);
238
- background: var(--panel);
239
- }
240
-
241
- .shot-switches .on {
242
- border-color: rgba(12, 105, 88, 0.38);
243
- background: #e6f6f1;
244
- }
245
-
246
- .shot-meta {
247
- border: 1px solid var(--line);
248
- background: var(--panel);
249
- padding: 14px;
250
- color: var(--muted);
251
- font-size: 13px;
252
- font-weight: 900;
253
- }
254
-
255
- .shot-bubble {
256
- max-width: 78%;
257
- padding: 18px 22px;
258
- font-size: 22px;
259
- line-height: 1.45;
260
- }
261
-
262
- .shot-bubble.user {
263
- align-self: flex-end;
264
- border: 1px solid #cfe6e2;
265
- border-radius: 18px;
266
- background: #eef9f6;
267
- }
268
-
269
- .shot-bubble.assistant {
270
- align-self: flex-start;
271
- }
272
-
273
- .status-grid {
274
- display: grid;
275
- gap: 18px;
276
- grid-template-columns: repeat(2, minmax(0, 1fr));
277
- }
278
-
279
- .status-panel,
280
- .commands,
281
- .share-header,
282
- .empty {
283
- border: 1px solid rgba(22, 25, 31, 0.12);
284
- background: rgba(255, 253, 248, 0.9);
285
- box-shadow: var(--shadow-soft);
286
- }
287
-
288
- .status-panel,
289
- .commands {
290
- padding: 26px;
291
- }
292
-
293
- .panel-heading {
294
- display: flex;
295
- align-items: center;
296
- justify-content: space-between;
297
- gap: 12px;
298
- margin-bottom: 18px;
299
- }
300
-
301
- .status-pill {
302
- display: inline-flex;
303
- min-height: 32px;
304
- align-items: center;
305
- border: 1px solid rgba(22, 25, 31, 0.12);
306
- border-radius: 999px;
307
- padding: 0 12px;
308
- background: var(--panel-soft);
309
- color: var(--muted);
310
- font-size: 12px;
311
- font-weight: 900;
312
- text-transform: none;
313
- }
314
-
315
- .status-pill.ready {
316
- border-color: rgba(12, 105, 88, 0.24);
317
- background: #e9f7f3;
318
- color: var(--green);
319
- }
320
-
321
- .status-pill.error {
322
- border-color: rgba(173, 55, 40, 0.24);
323
- background: #fff0ec;
324
- color: var(--red);
325
- }
326
-
327
- pre {
328
- max-width: 100%;
329
- overflow: auto;
330
- margin: 22px 0 0;
331
- border: 1px solid #253043;
332
- border-radius: 8px;
333
- background: #111722;
334
- color: #edf4ff;
335
- padding: 16px;
336
- font-size: 13px;
337
- line-height: 1.6;
338
- }
339
-
340
- .share-form {
341
- display: grid;
342
- gap: 12px;
343
- margin-top: 22px;
344
- }
345
-
346
- label {
347
- display: grid;
348
- gap: 7px;
349
- }
350
-
351
- label span {
352
- color: var(--muted);
353
- font-size: 12px;
354
- font-weight: 900;
355
- text-transform: none;
356
- }
357
-
358
- input {
359
- min-height: 46px;
360
- width: 100%;
361
- border: 1px solid var(--line);
362
- border-radius: 8px;
363
- background: white;
364
- padding: 0 13px;
365
- color: var(--ink);
366
- }
367
-
368
- input:focus {
369
- border-color: var(--blue);
370
- outline: 3px solid rgba(37, 95, 130, 0.14);
371
- }
372
-
373
- .commands {
374
- display: grid;
375
- align-items: start;
376
- gap: 22px;
377
- margin-top: 18px;
378
- grid-template-columns: minmax(220px, 0.35fr) minmax(0, 0.65fr);
379
- }
380
-
381
- .share-shell {
382
- max-width: 1220px;
383
- }
384
-
385
- .share-header {
386
- border-bottom: 3px solid var(--ink);
387
- padding: 28px;
388
- }
389
-
390
- .share-header h1 {
391
- margin-bottom: 18px;
392
- font-size: 72px;
393
- }
394
-
395
- .share-meta {
396
- margin: 0;
397
- color: var(--muted);
398
- font-size: 13px;
399
- font-weight: 900;
400
- }
401
-
402
- .turns {
403
- display: grid;
404
- gap: 34px;
405
- margin-top: 34px;
406
- }
407
-
408
- .turn {
409
- display: flex;
410
- min-width: 0;
411
- }
412
-
413
- .turn.user {
414
- justify-content: flex-end;
415
- }
416
-
417
- .turn.assistant,
418
- .turn.tool {
419
- justify-content: flex-start;
420
- }
421
-
422
- .message-card {
423
- min-width: 0;
424
- max-width: min(960px, 76%);
425
- }
426
-
427
- .turn.user .message-card {
428
- border: 1px solid #d6e9e5;
429
- border-radius: 18px;
430
- background: #eef9f6;
431
- padding: 20px 28px;
432
- box-shadow: var(--shadow-soft);
433
- }
434
-
435
- .turn.tool .message-card {
436
- width: min(960px, 86%);
437
- border: 1px solid #efd99f;
438
- border-radius: 8px;
439
- background: #fff8df;
440
- padding: 16px 18px;
441
- }
442
-
443
- .body {
444
- min-width: 0;
445
- color: var(--ink);
446
- font-size: 19px;
447
- line-height: 1.75;
448
- overflow-wrap: anywhere;
449
- }
450
-
451
- .body > *:first-child {
452
- margin-top: 0;
453
- }
454
-
455
- .body > *:last-child {
456
- margin-bottom: 0;
457
- }
458
-
459
- .body code {
460
- border: 1px solid rgba(22, 25, 31, 0.12);
461
- border-radius: 6px;
462
- background: rgba(22, 25, 31, 0.06);
463
- padding: 0.08rem 0.34rem;
464
- font-size: 0.9em;
465
- }
466
-
467
- .body pre,
468
- .tool-details pre {
469
- max-width: 100%;
470
- overflow: auto;
471
- border: 1px solid #253043;
472
- border-radius: 8px;
473
- background: #111722;
474
- color: #edf4ff;
475
- padding: 16px;
476
- font: 13px/1.58 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
477
- }
478
-
479
- .attachment-grid {
480
- display: grid;
481
- gap: 18px;
482
- margin-top: 24px;
483
- }
484
-
485
- .image-attachment {
486
- margin: 0;
487
- min-width: 0;
488
- }
489
-
490
- .image-attachment img {
491
- display: block;
492
- max-width: 100%;
493
- max-height: 540px;
494
- border: 1px solid rgba(22, 25, 31, 0.18);
495
- border-radius: 8px;
496
- background: #fff;
497
- object-fit: contain;
498
- }
499
-
500
- .image-attachment figcaption {
501
- margin-top: 10px;
502
- color: var(--muted);
503
- font: 800 14px/1.35 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
504
- }
505
-
506
- .image-unavailable {
507
- border: 1px dashed var(--line);
508
- border-radius: 8px;
509
- padding: 16px;
510
- color: var(--muted);
511
- }
512
-
513
- .empty {
514
- padding: 22px;
515
- color: var(--muted);
516
- }
517
-
518
- @media (max-width: 980px) {
519
- .hero,
520
- .status-grid,
521
- .commands {
522
- grid-template-columns: 1fr;
523
- }
524
-
525
- .hero {
526
- min-height: 0;
527
- padding-top: 28px;
528
- }
529
-
530
- .product-shot {
531
- min-height: 460px;
532
- grid-template-columns: 1fr;
533
- }
534
-
535
- .shot-sidebar {
536
- display: none;
537
- }
538
-
539
- h1 {
540
- font-size: 78px;
541
- }
542
-
543
- .shot-heading {
544
- font-size: 40px;
545
- }
546
-
547
- .share-header h1 {
548
- font-size: 64px;
549
- }
550
- }
551
-
552
- @media (max-width: 680px) {
553
- .shell,
554
- .share-shell {
555
- width: min(100vw - 20px, 1360px);
556
- padding-top: 18px;
557
- }
558
-
559
- .actions {
560
- display: grid;
561
- }
562
-
563
- .product-shot {
564
- min-height: 420px;
565
- }
566
-
567
- .shot-main,
568
- .status-panel,
569
- .commands,
570
- .share-header {
571
- padding: 18px;
572
- }
573
-
574
- .shot-top {
575
- display: grid;
576
- }
577
-
578
- h1 {
579
- font-size: 54px;
580
- }
581
-
582
- h2 {
583
- font-size: 28px;
584
- }
585
-
586
- .shot-heading {
587
- font-size: 36px;
588
- }
589
-
590
- .share-header h1 {
591
- font-size: 44px;
592
- }
593
-
594
- .shot-bubble,
595
- .message-card,
596
- .turn.user .message-card,
597
- .turn.tool .message-card {
598
- width: 100%;
599
- max-width: 100%;
600
- }
601
-
602
- .body {
603
- font-size: 17px;
604
- }
605
- }
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}:root,:host{--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}.collapse{visibility:collapse}.visible{visibility:visible}.relative{position:relative}.static{position:static}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.table{display:table}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.border{border-style:var(--tw-border-style);border-width:1px}.lowercase{text-transform:lowercase}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}:root{--ink:#17202a;--muted:#617181;--soft:#8492a3;--line:#d9e2e8;--paper:#f6f8f5;--paper-2:#eef4f1;--panel:#fff;--panel-soft:#f8fbf9;--teal:#0f766e;--blue:#2f6fbb;--green:#15803d;--red:#b43b45;--amber:#b7791f;--violet:#7157a8;--shadow-soft:0 24px 70px -54px #17202a6b;--shadow-panel:0 26px 80px -62px #17202a8c;--grid-strong:#17202a0f;--grid-soft:#17202a09}*{box-sizing:border-box}html{scroll-behavior:smooth}body{min-height:100vh;color:var(--ink);background:linear-gradient(90deg, var(--grid-strong) 1px, transparent 1px), linear-gradient(var(--grid-soft) 1px, transparent 1px), linear-gradient(180deg, var(--paper), #fbfcfb 72%);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background-size:24px 24px,24px 24px,auto;margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}a{color:inherit;text-decoration:none}button{font:inherit}code,pre,.eyebrow,.status-pill,.button,.share-meta,.public-session-engine,.public-session-meta,.shot-kicker,.shot-meta,.shot-tabs,.shot-project em,.shot-risk,.hero-stats,.copy-button{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,PingFang SC,Microsoft YaHei,monospace}.shell,.share-shell{width:min(1320px,100vw - 32px);margin:0 auto;padding:28px 0 72px}.hero{grid-template-columns:minmax(0,.82fr) minmax(540px,1.18fr);align-items:center;gap:48px;min-height:min(720px,100vh - 32px);display:grid}.hero-copy{max-width:620px}.eyebrow{color:var(--blue);letter-spacing:.08em;text-transform:uppercase;margin:0 0 12px;font-size:12px;font-weight:900}h1,h2,p{margin-top:0}h1{letter-spacing:0;margin-bottom:22px;font-size:80px;line-height:.98}h2{letter-spacing:0;margin-bottom:12px;font-size:30px;line-height:1.2}.lede,.status-panel p,.commands p{color:var(--muted);font-size:20px;line-height:1.68}.hero-stats{flex-wrap:wrap;gap:10px;margin-top:28px;display:flex}.hero-stats span{min-height:34px;color:var(--muted);background:#ffffffb8;border:1px solid #17202a1c;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:12px;font-weight:800;display:inline-flex;box-shadow:0 18px 44px -42px #17202a80}.hero-stats b{color:var(--ink);font-weight:900}.actions{flex-wrap:wrap;gap:12px;margin-top:30px;display:flex}.button{min-height:46px;color:var(--ink);cursor:pointer;background:#ffffffdb;border:1px solid #17202a24;border-radius:8px;justify-content:center;align-items:center;gap:9px;padding:0 16px;font-size:13px;font-weight:900;transition:transform .16s,border-color .16s,background-color .16s,box-shadow .16s;display:inline-flex}.button span[aria-hidden=true]{min-width:24px;height:24px;color:var(--muted);background:#17202a12;border-radius:6px;justify-content:center;align-items:center;font-size:11px;font-weight:900;display:inline-flex}.button:hover{border-color:#17202a4d;transform:translateY(-1px);box-shadow:0 18px 44px -36px #17202a99}.button.primary{color:#fff;background:#111827;border-color:#111827}.button.primary span[aria-hidden=true]{color:#fff;background:#ffffff1f}.product-shot{min-height:560px;box-shadow:var(--shadow-panel);background:#ffffffd1;border:1px solid #17202a29;border-radius:8px;grid-template-columns:minmax(250px,.36fr) minmax(0,.64fr);display:grid;overflow:hidden}.shot-sidebar,.shot-main{min-width:0;padding:22px}.shot-sidebar{background:linear-gradient(180deg, #ffffffd1, #f8fbf9eb), var(--panel-soft);border-right:1px solid #17202a1f}.shot-title{margin-bottom:16px;font-size:26px;font-weight:900;line-height:1}.shot-search{border:1px solid var(--line);background:var(--panel);min-height:38px;color:var(--soft);border-radius:8px;margin-bottom:12px;padding:11px 12px 0;font-size:12px}.shot-tabs{background:#ffffffb8;border:1px solid #17202a1a;border-radius:8px;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;margin-bottom:16px;padding:4px;display:grid}.shot-tabs span{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;border-radius:6px;padding:9px 7px;font-size:10px;font-weight:900;overflow:hidden}.shot-tabs .active{background:var(--ink);color:#fff}.shot-tabs b{font-weight:900}.shot-project{min-height:64px;color:var(--muted);border-radius:8px;grid-template-columns:12px minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 9px;display:grid}.shot-project+.shot-project{margin-top:4px}.shot-project.active{color:var(--ink);background:#0f766e1a}.shot-project b,.shot-project small{text-overflow:ellipsis;white-space:nowrap;min-width:0;display:block;overflow:hidden}.shot-project b{font-size:14px}.shot-project small,.shot-project em{color:var(--soft);font-size:11px;font-style:normal}.shot-dot{background:var(--blue);border-radius:999px;width:10px;height:10px}.shot-dot.green{background:var(--teal)}.shot-dot.amber{background:var(--amber)}.shot-main{background-color:#ffffffad;background-image:linear-gradient(90deg,#17202a09 1px,#0000 1px),linear-gradient(#17202a07 1px,#0000 1px),none;background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:22px 22px;background-attachment:scroll,scroll,scroll;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box;flex-direction:column;gap:14px;display:flex}.shot-topbar{border-bottom:1px solid #17202a1f;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:14px;padding-bottom:14px;display:grid}.shot-heading{max-width:420px;font-size:32px;font-weight:900;line-height:1.18}.shot-switches{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.shot-switches span{border:1px solid var(--line);background:var(--panel);min-height:30px;color:var(--muted);border-radius:8px;align-items:center;padding:0 9px;font-size:11px;font-weight:900;display:inline-flex}.shot-switches .on{color:var(--teal);background:#0f766e1c;border-color:#0f766e42}.shot-meta{flex-wrap:wrap;gap:8px;display:flex}.shot-meta span{color:var(--muted);background:#ffffffc7;border:1px solid #17202a1a;border-radius:8px;padding:8px 10px;font-size:12px;font-weight:800}.shot-risk{border-left:4px solid var(--green);color:var(--muted);background:#15803d14;border-radius:8px;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:10px;padding:10px 12px;font-size:12px;font-weight:800;display:grid}.shot-risk b{color:var(--green)}.shot-bubble{border-radius:8px;max-width:82%;padding:16px 18px;font-size:17px;line-height:1.58;box-shadow:0 22px 56px -48px #17202a80}.shot-bubble.user{background:#eef9f6;border:1px solid #0f766e2e;align-self:flex-end}.shot-bubble.assistant{background:#f5f8fd;border:1px solid #2f6fbb29;align-self:flex-start}.status-grid{grid-template-columns:1fr;gap:18px;margin-top:18px;display:grid}.public-sessions{margin-top:42px}.section-heading{justify-content:space-between;align-items:end;gap:18px;margin-bottom:18px;display:flex}.section-heading h2{margin-bottom:0}.public-session-actions{justify-content:flex-end;align-items:end;gap:10px;display:flex}.github-auth{justify-content:flex-end;align-items:center;gap:10px;min-height:42px;display:flex}.github-auth-user,.github-auth-note{min-width:0;color:var(--muted);align-items:center;gap:8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,PingFang SC,Microsoft YaHei,monospace;font-size:12px;font-weight:900;display:inline-flex}.github-auth-user img{background:#fff;border:1px solid #17202a2e;border-radius:50%;flex:none;width:26px;height:26px}.github-auth-user span,.github-auth-note{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.public-session-status{color:var(--muted);margin:-6px 0 14px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,PingFang SC,Microsoft YaHei,monospace;font-size:12px;font-weight:900}.public-session-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;display:grid}.public-session-card,.public-session-empty{min-width:0;box-shadow:var(--shadow-soft);background:#ffffffe6;border:1px solid #17202a1c;border-radius:8px}.public-session-card{min-height:178px;transition:transform .16s,border-color .16s,box-shadow .16s;display:grid;position:relative;overflow:hidden}.public-session-card:hover{border-color:#2f6fbb3d;transform:translateY(-2px);box-shadow:0 22px 62px -48px #17202a9e}.public-session-link{align-content:space-between;gap:18px;min-height:178px;padding:18px 18px 62px;display:grid}.public-session-link:focus-visible,.public-session-delete:focus-visible{outline-offset:-3px;outline:3px solid #2f6fbb38}.public-session-delete{min-height:34px;color:var(--red);cursor:pointer;background:#b43b4514;border:1px solid #b43b4542;border-radius:8px;padding:0 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,PingFang SC,Microsoft YaHei,monospace;font-size:12px;font-weight:900;transition:transform .16s,border-color .16s,background-color .16s;position:absolute;bottom:18px;right:18px}.public-session-delete:hover:not(:disabled){background:#b43b4521;border-color:#b43b4575;transform:translateY(-1px)}.public-session-delete:disabled{cursor:wait;opacity:.62}.public-session-top{justify-content:space-between;align-items:center;gap:10px;display:flex}.public-session-engine{min-width:0;max-width:60%;min-height:28px;color:var(--teal);text-overflow:ellipsis;white-space:nowrap;background:#0f766e1a;border:1px solid #0f766e33;border-radius:999px;align-items:center;padding:0 10px;font-size:11px;font-weight:900;display:inline-flex;overflow:hidden}.public-session-top time{color:var(--soft);flex:none;font-size:12px;font-weight:800}.public-session-card h3{-webkit-line-clamp:2;min-height:58px;color:var(--ink);letter-spacing:0;-webkit-box-orient:vertical;margin:0;font-size:23px;line-height:1.26;display:-webkit-box;overflow:hidden}.public-session-meta{color:var(--muted);margin:0;font-size:12px;font-weight:900}.public-session-owner{color:var(--soft);margin:-10px 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,PingFang SC,Microsoft YaHei,monospace;font-size:11px;font-weight:900}.public-session-empty{color:var(--muted);grid-column:1/-1;padding:20px;font-size:16px}.status-panel,.command-block,.share-header,.empty{box-shadow:var(--shadow-soft);background:#ffffffe6;border:1px solid #17202a1c;border-radius:8px}.status-panel,.command-block{padding:24px}.panel-heading{justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px;display:flex}.status-pill{background:var(--panel-soft);min-height:30px;color:var(--muted);border:1px solid #17202a1f;border-radius:999px;align-items:center;padding:0 11px;font-size:12px;font-weight:900;display:inline-flex}.status-pill.ready{color:var(--teal);background:#0f766e1a;border-color:#0f766e3d}.status-pill.error{color:var(--red);background:#b43b4514;border-color:#b43b453d}pre{color:#edf4ff;background:#111722;border:1px solid #253043;border-radius:8px;max-width:100%;margin:0;padding:16px;font-size:13px;line-height:1.62;overflow:auto}.command-line{gap:10px;margin-top:20px;display:grid}.command-line.large{margin-top:0}.copy-button{cursor:pointer;justify-self:start;min-height:38px;padding:0 13px}.commands{gap:18px;margin-top:18px;display:grid}.command-block{grid-template-columns:minmax(280px,.36fr) minmax(0,.64fr);align-items:center;gap:28px;min-width:0;display:grid}.command-block-copy{min-width:0}.command-block h2{margin-bottom:16px}.command-block p{color:var(--muted);margin-bottom:0;font-size:18px;line-height:1.62}.share-shell{max-width:1180px}.share-header{padding:26px}.share-header h1{margin-bottom:16px;font-size:56px;line-height:1.05}.share-meta{color:var(--muted);overflow-wrap:anywhere;margin:0;font-size:13px;font-weight:900}.share-goal{border-top:1px solid var(--line);grid-template-columns:52px minmax(0,1fr);gap:12px;margin-top:18px;padding-top:14px;display:grid}.share-goal span{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,PingFang SC,Microsoft YaHei,monospace;font-size:11px;font-weight:900}.share-goal p{color:var(--ink);overflow-wrap:anywhere;white-space:pre-wrap;margin:0;font-size:15px;font-weight:700;line-height:1.58}.turns{gap:28px;margin-top:28px;display:grid}.turn{min-width:0;display:flex}.turn.user{justify-content:flex-end}.turn.assistant,.turn.tool,.turn.process{justify-content:flex-start}.message-card{min-width:0;max-width:min(930px,76%)}.turn.user .message-card{box-shadow:var(--shadow-soft);background:#eef9f6;border:1px solid #0f766e2e;border-radius:8px;padding:18px 22px}.turn.assistant .message-card{max-width:min(900px,74%)}.turn.tool .message-card{background:#fff9ea;border:1px solid #b7791f42;border-radius:8px;width:min(930px,86%);padding:15px 16px}.process-details{color:#17202a9e;border-top:1px solid #17202a1f;width:min(930px,76%)}.process-summary{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:9px;min-height:42px;font:800 17px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;list-style:none;display:inline-flex}.process-summary::-webkit-details-marker{display:none}.process-summary:after{content:"";border-bottom:2px solid;border-right:2px solid;width:8px;height:8px;transition:transform .16s;transform:translateY(-2px)rotate(45deg)}.process-details[open] .process-summary:after{transform:translateY(2px)rotate(225deg)}.process-body{gap:22px;padding:6px 0 8px;display:grid}.process-entry{min-width:0}.process-tool{border-left:3px solid #b7791f52;max-width:min(860px,100%);padding-left:12px}.body{min-width:0;color:var(--ink);overflow-wrap:anywhere;font-size:18px;line-height:1.75}.body>:first-child{margin-top:0}.body>:last-child{margin-bottom:0}.body code{background:#17202a0f;border:1px solid #17202a1f;border-radius:6px;padding:.08rem .34rem;font-size:.9em}.body pre,.tool-details pre{color:#edf4ff;background:#111722;border:1px solid #253043;border-radius:8px;max-width:100%;padding:16px;font:13px/1.58 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}.attachment-grid{gap:18px;margin-top:24px;display:grid}.image-attachment{min-width:0;margin:0}.image-attachment img{object-fit:contain;background:#fff;border:1px solid #17202a2e;border-radius:8px;max-width:100%;max-height:540px;display:block}.image-unavailable{border:1px dashed var(--line);color:var(--muted);border-radius:8px;padding:16px}.empty{color:var(--muted);padding:20px}@media (max-width:1080px){.hero{grid-template-columns:1fr;min-height:0;padding-top:28px}.product-shot{min-height:520px}}@media (max-width:860px){.status-grid,.commands,.command-block,.public-session-grid,.product-shot{grid-template-columns:1fr}.shot-sidebar{display:none}h1{font-size:62px}.shot-heading{font-size:28px}.share-header h1{font-size:44px}}@media (max-width:680px){.shell,.share-shell{width:min(100vw - 20px,1320px);padding-top:16px}.actions{display:grid}.section-heading{align-items:start;display:grid}.public-session-actions{justify-content:stretch;display:grid}.github-auth{justify-content:space-between}.product-shot{min-height:420px}.shot-main,.status-panel,.command-block,.share-header{padding:18px}.shot-topbar{grid-template-columns:1fr}.shot-switches{justify-content:flex-start}h1{font-size:44px}h2{font-size:25px}.lede,.status-panel p,.commands p{font-size:17px}.shot-heading{font-size:25px}.share-header h1{font-size:34px}.shot-bubble,.message-card,.process-details,.turn.user .message-card,.turn.tool .message-card{width:100%;max-width:100%}.body{font-size:16px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
3
+ /*$vite$:1*/