@kyleparrott/where-was-i 0.1.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.
@@ -0,0 +1,797 @@
1
+ export const WEB_STYLE = `
2
+ :root {
3
+ color-scheme: dark;
4
+ --bg: #090910;
5
+ --bg-raised: #10101b;
6
+ --panel: rgba(20, 19, 34, 0.82);
7
+ --panel-strong: rgba(28, 26, 47, 0.92);
8
+ --panel-soft: rgba(255, 255, 255, 0.035);
9
+ --border: rgba(190, 184, 255, 0.16);
10
+ --border-strong: rgba(190, 184, 255, 0.28);
11
+ --text: #f7f5ff;
12
+ --muted: #b9b4cd;
13
+ --faint: #7f7898;
14
+ --accent: #8d7cff;
15
+ --accent-strong: #c6bfff;
16
+ --accent-soft: rgba(141, 124, 255, 0.16);
17
+ --cyan: #6fe6dd;
18
+ --warm: #f4be72;
19
+ --danger: #ff7f9c;
20
+ --shadow: rgba(0, 0, 0, 0.42);
21
+ }
22
+
23
+ * {
24
+ box-sizing: border-box;
25
+ }
26
+
27
+ html {
28
+ overflow-x: hidden;
29
+ }
30
+
31
+ body {
32
+ margin: 0;
33
+ min-height: 100vh;
34
+ overflow-x: hidden;
35
+ background:
36
+ linear-gradient(180deg, rgba(141, 124, 255, 0.16), rgba(141, 124, 255, 0) 24rem),
37
+ linear-gradient(135deg, rgba(111, 230, 221, 0.08), transparent 34%),
38
+ linear-gradient(180deg, #08080e 0%, #0d0c16 46%, #090910 100%);
39
+ color: var(--text);
40
+ font-family: Aptos, "Avenir Next", "SF Pro Display", "Segoe UI", sans-serif;
41
+ font-weight: 400;
42
+ letter-spacing: 0;
43
+ }
44
+
45
+ body::before {
46
+ content: "";
47
+ position: fixed;
48
+ inset: 0;
49
+ z-index: -1;
50
+ pointer-events: none;
51
+ background-image:
52
+ linear-gradient(rgba(255, 255, 255, 0.035) 1px, transparent 1px),
53
+ linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
54
+ background-size: 44px 44px;
55
+ mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.65), transparent 60%);
56
+ }
57
+
58
+ a {
59
+ color: inherit;
60
+ text-decoration: none;
61
+ }
62
+
63
+ main {
64
+ width: min(1120px, calc(100% - 32px));
65
+ margin: 0 auto;
66
+ padding: 34px 0 72px;
67
+ }
68
+
69
+ .app-header {
70
+ position: sticky;
71
+ top: 0;
72
+ z-index: 20;
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ gap: 24px;
77
+ min-height: 68px;
78
+ padding: 14px max(16px, calc((100vw - 1120px) / 2));
79
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
80
+ background: rgba(8, 8, 14, 0.78);
81
+ box-shadow: 0 12px 34px rgba(0, 0, 0, 0.22);
82
+ backdrop-filter: blur(18px);
83
+ }
84
+
85
+ .brand {
86
+ display: inline-flex;
87
+ align-items: center;
88
+ gap: 10px;
89
+ color: var(--text);
90
+ font-weight: 650;
91
+ font-size: 17px;
92
+ }
93
+
94
+ .brand::before {
95
+ content: "";
96
+ width: 22px;
97
+ height: 22px;
98
+ border-radius: 7px;
99
+ background:
100
+ linear-gradient(135deg, var(--accent-strong), var(--accent) 52%, #5a4bd7);
101
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.2), 0 10px 28px rgba(141, 124, 255, 0.34);
102
+ }
103
+
104
+ nav {
105
+ display: flex;
106
+ gap: 6px;
107
+ }
108
+
109
+ nav a,
110
+ .button,
111
+ .search-box button {
112
+ min-height: 36px;
113
+ display: inline-flex;
114
+ align-items: center;
115
+ justify-content: center;
116
+ border: 1px solid transparent;
117
+ border-radius: 8px;
118
+ color: var(--muted);
119
+ background: transparent;
120
+ padding: 0 13px;
121
+ font-weight: 600;
122
+ font-size: 14px;
123
+ transition: border-color 150ms ease, background 150ms ease, color 150ms ease, transform 150ms ease;
124
+ }
125
+
126
+ .button,
127
+ .search-box button {
128
+ cursor: pointer;
129
+ }
130
+
131
+ nav a:hover,
132
+ .button:hover,
133
+ .search-box button:hover {
134
+ color: var(--text);
135
+ border-color: var(--border-strong);
136
+ background: rgba(255, 255, 255, 0.055);
137
+ }
138
+
139
+ nav a[aria-current="page"] {
140
+ color: var(--accent-strong);
141
+ border-color: rgba(141, 124, 255, 0.4);
142
+ background: var(--accent-soft);
143
+ }
144
+
145
+ .button.primary,
146
+ .search-box button {
147
+ border-color: rgba(141, 124, 255, 0.58);
148
+ background:
149
+ linear-gradient(180deg, rgba(198, 191, 255, 0.24), rgba(141, 124, 255, 0.18));
150
+ color: var(--accent-strong);
151
+ box-shadow: 0 10px 30px rgba(93, 77, 212, 0.2);
152
+ }
153
+
154
+ .button.primary:hover,
155
+ .search-box button:hover {
156
+ transform: translateY(-1px);
157
+ border-color: rgba(198, 191, 255, 0.72);
158
+ background:
159
+ linear-gradient(180deg, rgba(198, 191, 255, 0.3), rgba(141, 124, 255, 0.24));
160
+ }
161
+
162
+ .button:disabled,
163
+ .search-box button:disabled {
164
+ cursor: wait;
165
+ opacity: 0.68;
166
+ transform: none;
167
+ }
168
+
169
+ .hero,
170
+ .page-heading,
171
+ .detail-top {
172
+ display: flex;
173
+ align-items: flex-end;
174
+ justify-content: space-between;
175
+ gap: 24px;
176
+ margin: 22px 0 24px;
177
+ }
178
+
179
+ .hero {
180
+ margin-top: 30px;
181
+ }
182
+
183
+ .eyebrow {
184
+ margin: 0 0 8px;
185
+ color: var(--accent-strong);
186
+ font-size: 11px;
187
+ font-weight: 650;
188
+ text-transform: uppercase;
189
+ letter-spacing: 0;
190
+ }
191
+
192
+ h1,
193
+ h2 {
194
+ margin: 0;
195
+ letter-spacing: 0;
196
+ }
197
+
198
+ h1 {
199
+ max-width: 850px;
200
+ font-size: 56px;
201
+ line-height: 0.98;
202
+ font-weight: 700;
203
+ overflow-wrap: anywhere;
204
+ }
205
+
206
+ h2 {
207
+ color: var(--text);
208
+ font-size: 18px;
209
+ font-weight: 650;
210
+ }
211
+
212
+ .status-pills,
213
+ .detail-actions,
214
+ .row-actions,
215
+ .result-actions,
216
+ .form-actions,
217
+ .context-actions {
218
+ display: flex;
219
+ align-items: center;
220
+ gap: 8px;
221
+ flex-wrap: wrap;
222
+ }
223
+
224
+ .status-pills span,
225
+ .mode-chip,
226
+ .success-pill,
227
+ .source-pill,
228
+ .score {
229
+ display: inline-flex;
230
+ align-items: center;
231
+ min-height: 28px;
232
+ padding: 0 10px;
233
+ border-radius: 999px;
234
+ border: 1px solid var(--border);
235
+ color: var(--muted);
236
+ background: rgba(255, 255, 255, 0.045);
237
+ font-size: 12px;
238
+ font-weight: 600;
239
+ }
240
+
241
+ .status-pills span:first-child,
242
+ .mode-chip {
243
+ color: var(--accent-strong);
244
+ border-color: rgba(141, 124, 255, 0.34);
245
+ background: rgba(141, 124, 255, 0.12);
246
+ }
247
+
248
+ .success-pill {
249
+ color: var(--cyan);
250
+ border-color: rgba(111, 230, 221, 0.38);
251
+ background: rgba(111, 230, 221, 0.08);
252
+ }
253
+
254
+ .search-box {
255
+ display: grid;
256
+ grid-template-columns: minmax(0, 1fr) 132px auto;
257
+ gap: 10px;
258
+ padding: 12px;
259
+ border: 1px solid rgba(190, 184, 255, 0.22);
260
+ border-radius: 12px;
261
+ background:
262
+ linear-gradient(180deg, rgba(31, 29, 51, 0.9), rgba(17, 16, 29, 0.92));
263
+ box-shadow: 0 24px 70px var(--shadow);
264
+ }
265
+
266
+ input,
267
+ select {
268
+ width: 100%;
269
+ min-height: 46px;
270
+ border: 1px solid rgba(190, 184, 255, 0.16);
271
+ border-radius: 9px;
272
+ background: rgba(7, 7, 13, 0.78);
273
+ color: var(--text);
274
+ padding: 0 13px;
275
+ font: inherit;
276
+ }
277
+
278
+ input::placeholder {
279
+ color: #8f88aa;
280
+ }
281
+
282
+ input:focus,
283
+ select:focus {
284
+ outline: 3px solid rgba(141, 124, 255, 0.24);
285
+ border-color: var(--accent);
286
+ }
287
+
288
+ .section {
289
+ margin-top: 30px;
290
+ }
291
+
292
+ .section-header {
293
+ display: flex;
294
+ align-items: center;
295
+ justify-content: space-between;
296
+ margin-bottom: 12px;
297
+ color: var(--muted);
298
+ }
299
+
300
+ .section-header > span {
301
+ font-size: 13px;
302
+ }
303
+
304
+ .index-actions {
305
+ display: grid;
306
+ grid-template-columns: repeat(2, minmax(0, 1fr));
307
+ gap: 10px;
308
+ margin-top: 16px;
309
+ }
310
+
311
+ .index-action {
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: space-between;
315
+ gap: 18px;
316
+ min-width: 0;
317
+ padding: 16px;
318
+ border: 1px solid var(--border);
319
+ border-radius: 10px;
320
+ background: rgba(20, 19, 34, 0.62);
321
+ }
322
+
323
+ .index-action h2 {
324
+ margin-bottom: 5px;
325
+ font-size: 16px;
326
+ }
327
+
328
+ .index-action p {
329
+ margin: 0;
330
+ color: var(--muted);
331
+ font-size: 13px;
332
+ line-height: 1.45;
333
+ }
334
+
335
+ .embedding-job {
336
+ margin-top: 12px;
337
+ padding: 11px;
338
+ border: 1px solid rgba(190, 184, 255, 0.14);
339
+ border-radius: 9px;
340
+ background: rgba(8, 8, 14, 0.46);
341
+ }
342
+
343
+ .embedding-job.complete {
344
+ border-color: rgba(111, 230, 221, 0.32);
345
+ background: rgba(111, 230, 221, 0.055);
346
+ }
347
+
348
+ .embedding-job.failed {
349
+ border-color: rgba(255, 127, 156, 0.34);
350
+ background: rgba(255, 127, 156, 0.055);
351
+ }
352
+
353
+ .progress-row {
354
+ display: flex;
355
+ align-items: center;
356
+ justify-content: space-between;
357
+ gap: 12px;
358
+ margin-bottom: 8px;
359
+ color: var(--muted);
360
+ font-size: 12px;
361
+ line-height: 1.35;
362
+ }
363
+
364
+ .progress-row span:last-child {
365
+ color: var(--accent-strong);
366
+ font-weight: 650;
367
+ }
368
+
369
+ .progress-track {
370
+ position: relative;
371
+ height: 7px;
372
+ overflow: hidden;
373
+ border-radius: 999px;
374
+ background: rgba(255, 255, 255, 0.08);
375
+ }
376
+
377
+ .progress-track span {
378
+ display: block;
379
+ height: 100%;
380
+ border-radius: inherit;
381
+ background: linear-gradient(90deg, var(--accent), var(--cyan));
382
+ transition: width 220ms ease;
383
+ }
384
+
385
+ .progress-track.indeterminate span {
386
+ width: 34%;
387
+ animation: progress-scan 1.25s ease-in-out infinite;
388
+ }
389
+
390
+ .progress-error {
391
+ margin: 9px 0 0;
392
+ color: #ffdba5;
393
+ font-size: 12px;
394
+ line-height: 1.4;
395
+ }
396
+
397
+ .index-action form {
398
+ flex: 0 0 auto;
399
+ }
400
+
401
+ .thread-list,
402
+ .result-list,
403
+ .message-stream {
404
+ display: grid;
405
+ gap: 10px;
406
+ }
407
+
408
+ .thread-row,
409
+ .result-row,
410
+ .message,
411
+ .empty,
412
+ .notice,
413
+ .alert,
414
+ .success,
415
+ fieldset {
416
+ border: 1px solid var(--border);
417
+ border-radius: 10px;
418
+ background: var(--panel);
419
+ box-shadow: 0 16px 50px rgba(0, 0, 0, 0.16);
420
+ }
421
+
422
+ .thread-row,
423
+ .result-row,
424
+ .message {
425
+ transition: border-color 150ms ease, background 150ms ease, transform 150ms ease;
426
+ }
427
+
428
+ .thread-row:hover,
429
+ .result-row:hover {
430
+ transform: translateY(-1px);
431
+ border-color: var(--border-strong);
432
+ background: var(--panel-strong);
433
+ }
434
+
435
+ .thread-row {
436
+ display: grid;
437
+ grid-template-columns: minmax(0, 1fr) auto;
438
+ gap: 14px;
439
+ align-items: center;
440
+ padding: 15px 16px;
441
+ }
442
+
443
+ .thread-main,
444
+ .result-title {
445
+ min-width: 0;
446
+ }
447
+
448
+ .thread-title,
449
+ .result-title {
450
+ display: block;
451
+ color: #ebe7f8;
452
+ line-height: 1.34;
453
+ }
454
+
455
+ .thread-title {
456
+ font-size: 15.5px;
457
+ font-weight: 400;
458
+ }
459
+
460
+ .result-title {
461
+ font-size: 16px;
462
+ font-weight: 580;
463
+ }
464
+
465
+ .thread-meta,
466
+ .meta-line {
467
+ margin-top: 6px;
468
+ color: var(--muted);
469
+ font-size: 13px;
470
+ overflow-wrap: anywhere;
471
+ }
472
+
473
+ .row-actions {
474
+ color: var(--muted);
475
+ font-size: 13px;
476
+ }
477
+
478
+ .row-actions a {
479
+ color: var(--accent-strong);
480
+ font-weight: 600;
481
+ }
482
+
483
+ .result-row {
484
+ padding: 18px;
485
+ }
486
+
487
+ .result-head {
488
+ display: flex;
489
+ justify-content: space-between;
490
+ gap: 14px;
491
+ }
492
+
493
+ .score {
494
+ color: var(--cyan);
495
+ border-color: rgba(111, 230, 221, 0.32);
496
+ background: rgba(111, 230, 221, 0.07);
497
+ }
498
+
499
+ .preview {
500
+ margin: 11px 0 0;
501
+ color: var(--muted);
502
+ line-height: 1.55;
503
+ }
504
+
505
+ .hit-list {
506
+ display: grid;
507
+ gap: 8px;
508
+ margin-top: 14px;
509
+ }
510
+
511
+ .hit-chip {
512
+ display: block;
513
+ padding: 10px 12px;
514
+ border: 1px solid rgba(190, 184, 255, 0.12);
515
+ border-left: 3px solid var(--accent);
516
+ border-radius: 8px;
517
+ background: rgba(255, 255, 255, 0.035);
518
+ color: var(--muted);
519
+ line-height: 1.45;
520
+ }
521
+
522
+ .hit-chip:hover {
523
+ color: var(--text);
524
+ border-color: rgba(141, 124, 255, 0.36);
525
+ background: rgba(141, 124, 255, 0.09);
526
+ }
527
+
528
+ .hit-chip span {
529
+ margin-right: 8px;
530
+ color: var(--warm);
531
+ font-weight: 650;
532
+ }
533
+
534
+ .result-actions {
535
+ margin-top: 15px;
536
+ }
537
+
538
+ .button.small {
539
+ min-height: 31px;
540
+ font-size: 13px;
541
+ }
542
+
543
+ .detail-top {
544
+ align-items: flex-start;
545
+ }
546
+
547
+ .subtle-link {
548
+ display: inline-block;
549
+ margin-bottom: 11px;
550
+ color: var(--accent-strong);
551
+ font-weight: 600;
552
+ }
553
+
554
+ .detail-top h1 {
555
+ max-width: 800px;
556
+ font-size: 34px;
557
+ line-height: 1.1;
558
+ }
559
+
560
+ .message {
561
+ padding: 15px 17px;
562
+ scroll-margin-top: 92px;
563
+ }
564
+
565
+ .message.user {
566
+ background: rgba(22, 20, 38, 0.9);
567
+ }
568
+
569
+ .message.assistant {
570
+ background: rgba(18, 18, 29, 0.86);
571
+ }
572
+
573
+ .message.selected {
574
+ border-color: rgba(244, 190, 114, 0.78);
575
+ box-shadow: inset 3px 0 0 var(--warm), 0 18px 54px rgba(244, 190, 114, 0.08);
576
+ }
577
+
578
+ .message header,
579
+ .message footer {
580
+ display: flex;
581
+ align-items: center;
582
+ gap: 10px;
583
+ flex-wrap: wrap;
584
+ color: var(--faint);
585
+ font-size: 12px;
586
+ }
587
+
588
+ .message .role {
589
+ min-height: 23px;
590
+ display: inline-flex;
591
+ align-items: center;
592
+ padding: 0 8px;
593
+ border-radius: 999px;
594
+ background: rgba(141, 124, 255, 0.14);
595
+ color: var(--accent-strong);
596
+ font-weight: 700;
597
+ text-transform: uppercase;
598
+ }
599
+
600
+ .message.assistant .role {
601
+ background: rgba(244, 190, 114, 0.12);
602
+ color: #ffd493;
603
+ }
604
+
605
+ .message.tool .role {
606
+ background: rgba(111, 230, 221, 0.1);
607
+ color: var(--cyan);
608
+ }
609
+
610
+ .message pre {
611
+ margin: 13px 0;
612
+ max-height: 540px;
613
+ overflow: auto;
614
+ white-space: pre-wrap;
615
+ overflow-wrap: anywhere;
616
+ color: #f0edf8;
617
+ font: 14px/1.62 "SF Mono", "Cascadia Code", "Liberation Mono", monospace;
618
+ }
619
+
620
+ .message.selected pre {
621
+ max-height: none;
622
+ }
623
+
624
+ .mono {
625
+ font-family: "SF Mono", "Cascadia Code", "Liberation Mono", monospace;
626
+ }
627
+
628
+ .empty,
629
+ .notice,
630
+ .alert,
631
+ .success {
632
+ margin-top: 18px;
633
+ padding: 18px;
634
+ color: var(--muted);
635
+ }
636
+
637
+ .notice {
638
+ border-color: rgba(244, 190, 114, 0.38);
639
+ color: #ffdba5;
640
+ background: rgba(244, 190, 114, 0.065);
641
+ }
642
+
643
+ .alert {
644
+ border-color: rgba(255, 127, 156, 0.44);
645
+ color: #ffc0ce;
646
+ background: rgba(255, 127, 156, 0.06);
647
+ }
648
+
649
+ .success {
650
+ border-color: rgba(111, 230, 221, 0.38);
651
+ color: var(--cyan);
652
+ background: rgba(111, 230, 221, 0.065);
653
+ }
654
+
655
+ .settings-form {
656
+ display: grid;
657
+ gap: 16px;
658
+ margin-top: 18px;
659
+ }
660
+
661
+ fieldset {
662
+ display: grid;
663
+ grid-template-columns: repeat(2, minmax(0, 1fr));
664
+ gap: 14px;
665
+ margin: 0;
666
+ padding: 20px;
667
+ }
668
+
669
+ legend {
670
+ padding: 0 7px;
671
+ color: var(--accent-strong);
672
+ font-weight: 680;
673
+ }
674
+
675
+ label {
676
+ display: grid;
677
+ gap: 7px;
678
+ color: var(--muted);
679
+ font-size: 13px;
680
+ font-weight: 580;
681
+ }
682
+
683
+ .check-row {
684
+ grid-template-columns: auto minmax(0, 1fr);
685
+ align-items: center;
686
+ align-self: end;
687
+ min-height: 46px;
688
+ }
689
+
690
+ .check-row input {
691
+ width: auto;
692
+ min-height: auto;
693
+ }
694
+
695
+ @media (max-width: 760px) {
696
+ main {
697
+ width: min(100% - 20px, 1120px);
698
+ padding-top: 18px;
699
+ }
700
+
701
+ .app-header,
702
+ .hero,
703
+ .page-heading,
704
+ .detail-top,
705
+ .thread-row,
706
+ .result-head {
707
+ align-items: stretch;
708
+ flex-direction: column;
709
+ }
710
+
711
+ .app-header {
712
+ position: static;
713
+ padding: 14px 10px;
714
+ }
715
+
716
+ nav {
717
+ width: 100%;
718
+ }
719
+
720
+ nav a {
721
+ flex: 1;
722
+ }
723
+
724
+ .search-box,
725
+ .index-actions,
726
+ .thread-row,
727
+ fieldset {
728
+ grid-template-columns: 1fr;
729
+ }
730
+
731
+ .index-action {
732
+ align-items: stretch;
733
+ flex-direction: column;
734
+ }
735
+
736
+ .result-head {
737
+ align-items: flex-start;
738
+ }
739
+
740
+ h1 {
741
+ font-size: 36px;
742
+ line-height: 1.03;
743
+ }
744
+
745
+ .detail-top h1 {
746
+ font-size: 28px;
747
+ }
748
+ }
749
+
750
+ @media (prefers-reduced-motion: no-preference) {
751
+ @keyframes progress-scan {
752
+ 0% {
753
+ transform: translateX(-100%);
754
+ }
755
+ 100% {
756
+ transform: translateX(300%);
757
+ }
758
+ }
759
+
760
+ @keyframes surface-in {
761
+ from {
762
+ opacity: 0;
763
+ transform: translateY(8px);
764
+ }
765
+ to {
766
+ opacity: 1;
767
+ transform: translateY(0);
768
+ }
769
+ }
770
+
771
+ .hero,
772
+ .page-heading,
773
+ .detail-top,
774
+ .search-box,
775
+ .index-action,
776
+ .thread-row,
777
+ .result-row,
778
+ .message,
779
+ fieldset {
780
+ animation: surface-in 420ms ease both;
781
+ }
782
+
783
+ .thread-row:nth-child(2),
784
+ .result-row:nth-child(2),
785
+ .message:nth-child(2),
786
+ fieldset:nth-child(2) {
787
+ animation-delay: 45ms;
788
+ }
789
+
790
+ .thread-row:nth-child(3),
791
+ .result-row:nth-child(3),
792
+ .message:nth-child(3),
793
+ fieldset:nth-child(3) {
794
+ animation-delay: 90ms;
795
+ }
796
+ }
797
+ `;