@marshalliqiu/loupe 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,742 @@
1
+ :root {
2
+ --ink-900: #0f1115;
3
+ --ink-800: #11141a;
4
+ --ink-700: #171a21;
5
+ --ink-600: #1c212b;
6
+ --steel-700: #2a2f3a;
7
+ --steel-600: #303745;
8
+ --steel-500: #3c4557;
9
+ --steel-400: #8c96aa;
10
+ --steel-300: #aeb6c6;
11
+ --steel-200: #b9c0cf;
12
+ --steel-100: #d8deea;
13
+ --cream-50: #fffbf3;
14
+ --cream-100: #f7f3ea;
15
+ --cream-200: #e8e1cf;
16
+ --brass-500: #f4c95d;
17
+ --brass-400: #ffd877;
18
+ --brass-ink: #17130a;
19
+ --sage-900: #172419;
20
+ --sage-700: #315f3a;
21
+ --sage-300: #8fe39e;
22
+ --amber-900: #25230f;
23
+ --amber-700: #5d4d1b;
24
+ --rust-500: #f06464;
25
+ --bg: var(--ink-900);
26
+ --bg-panel: var(--ink-800);
27
+ --bg-bar: var(--ink-700);
28
+ --bg-elevated: var(--ink-600);
29
+ --fg: var(--cream-100);
30
+ --fg-muted: var(--steel-100);
31
+ --fg-dim: var(--steel-200);
32
+ --fg-faint: var(--steel-300);
33
+ --fg-label: var(--steel-400);
34
+ --border: var(--steel-600);
35
+ --border-subtle: var(--steel-700);
36
+ --border-strong: var(--steel-500);
37
+ --accent: var(--brass-500);
38
+ --accent-hover: var(--brass-400);
39
+ --accent-ink: var(--brass-ink);
40
+ --danger: var(--rust-500);
41
+ --font-serif: "EB Garamond", "Iowan Old Style", Georgia, serif;
42
+ --font-sans: Geist, ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
43
+ --font-mono: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
44
+ --text-xs: 12px;
45
+ --lh-xs: 1.35;
46
+ --text-sm: 13px;
47
+ --lh-sm: 1.4;
48
+ --text-base: 14px;
49
+ --lh-base: 1.45;
50
+ --text-md: 16px;
51
+ --lh-md: 1.5;
52
+ --text-lg: 18px;
53
+ --lh-lg: 1.45;
54
+ --text-xl: 22px;
55
+ --lh-xl: 1.3;
56
+ --text-2xl: 28px;
57
+ --lh-2xl: 1.25;
58
+ --text-3xl: 36px;
59
+ --lh-3xl: 1.18;
60
+ --text-4xl: 48px;
61
+ --lh-4xl: 1.1;
62
+ --text-5xl: 64px;
63
+ --lh-5xl: 1.05;
64
+ --text-display: 92px;
65
+ --lh-display: 1;
66
+ --w-regular: 400;
67
+ --w-medium: 500;
68
+ --w-semi: 600;
69
+ --w-bold: 700;
70
+ --w-brand: 750;
71
+ --track-tight: -0.01em;
72
+ --track-normal: 0;
73
+ --track-brand: 0.02em;
74
+ --track-label: 0.08em;
75
+ --track-caps: 0.12em;
76
+ --space-1: 2px;
77
+ --space-2: 4px;
78
+ --space-3: 6px;
79
+ --space-4: 8px;
80
+ --space-5: 10px;
81
+ --space-6: 12px;
82
+ --space-8: 16px;
83
+ --space-10: 20px;
84
+ --space-12: 24px;
85
+ --space-16: 32px;
86
+ --space-20: 40px;
87
+ --space-24: 48px;
88
+ --space-32: 64px;
89
+ --radius-sm: 8px;
90
+ --radius-md: 10px;
91
+ --radius-lg: 12px;
92
+ --radius-xl: 14px;
93
+ --radius-pill: 999px;
94
+ --hairline: 1px solid var(--border);
95
+ --hairline-subtle: 1px solid var(--border-subtle);
96
+ --shadow-tooltip: 0 16px 44px rgba(0, 0, 0, 0.35);
97
+ --shadow-floating: 0 20px 70px rgba(0, 0, 0, 0.35);
98
+ --bar-h: 56px;
99
+ --panel-w: 360px;
100
+ --ease: cubic-bezier(0.2, 0.6, 0.2, 1);
101
+ --dur-fast: 120ms;
102
+ --dur: 180ms;
103
+ --dur-slow: 320ms;
104
+ --annotate-outline: 2px solid var(--accent);
105
+ --annotate-offset: 2px;
106
+ }
107
+ * {
108
+ box-sizing: border-box;
109
+ }
110
+ html,
111
+ body {
112
+ margin: 0;
113
+ width: 100%;
114
+ height: 100%;
115
+ }
116
+ body {
117
+ background: var(--bg);
118
+ color: var(--fg);
119
+ font-family: var(--font-sans);
120
+ font-size: var(--text-base);
121
+ line-height: var(--lh-base);
122
+ overflow: hidden;
123
+ -webkit-font-smoothing: antialiased;
124
+ text-rendering: optimizeLegibility;
125
+ }
126
+ body.lavish {
127
+ color-scheme: dark;
128
+ }
129
+ :focus-visible {
130
+ outline: var(--annotate-outline);
131
+ outline-offset: var(--annotate-offset);
132
+ }
133
+ .bar {
134
+ height: var(--bar-h);
135
+ display: flex;
136
+ align-items: center;
137
+ gap: 14px;
138
+ padding: 0 var(--space-8);
139
+ background: var(--bg-bar);
140
+ border-bottom: var(--hairline-subtle);
141
+ box-sizing: border-box;
142
+ }
143
+ .brand {
144
+ display: flex;
145
+ align-items: flex-end;
146
+ height: 22px;
147
+ gap: 8px;
148
+ white-space: nowrap;
149
+ flex-shrink: 0;
150
+ }
151
+ .brand-mark {
152
+ font-family: var(--font-serif);
153
+ font-style: italic;
154
+ font-size: 22px;
155
+ line-height: 1;
156
+ color: var(--fg);
157
+ }
158
+ .brand-support {
159
+ font-family: var(--font-sans);
160
+ font-size: 10px;
161
+ font-weight: 600;
162
+ letter-spacing: 0.18em;
163
+ text-transform: uppercase;
164
+ color: var(--fg-muted);
165
+ position: relative;
166
+ top: 1px;
167
+ }
168
+ .spacer {
169
+ flex: 1;
170
+ }
171
+ .annotate-switch {
172
+ display: inline-flex;
173
+ align-items: center;
174
+ gap: 8px;
175
+ color: var(--fg-muted);
176
+ font-family: inherit;
177
+ font-size: var(--text-sm);
178
+ white-space: nowrap;
179
+ cursor: pointer;
180
+ user-select: none;
181
+ background: none;
182
+ border: 0;
183
+ padding: 0;
184
+ flex-shrink: 0;
185
+ }
186
+ .annotate-switch:disabled {
187
+ cursor: not-allowed;
188
+ opacity: 0.55;
189
+ }
190
+ .switch-track {
191
+ width: 34px;
192
+ height: 20px;
193
+ border-radius: var(--radius-pill);
194
+ background: var(--border);
195
+ position: relative;
196
+ flex-shrink: 0;
197
+ transition: background 150ms var(--ease);
198
+ }
199
+ .switch-knob {
200
+ position: absolute;
201
+ top: 2px;
202
+ left: 2px;
203
+ width: 16px;
204
+ height: 16px;
205
+ border-radius: var(--radius-pill);
206
+ background: var(--fg-faint);
207
+ transition:
208
+ left 150ms var(--ease),
209
+ background 150ms var(--ease);
210
+ }
211
+ .annotate-switch[aria-pressed="true"] .switch-track {
212
+ background: var(--accent);
213
+ }
214
+ .annotate-switch[aria-pressed="true"] .switch-knob {
215
+ left: 16px;
216
+ background: var(--accent-ink);
217
+ }
218
+ .more-wrap {
219
+ position: relative;
220
+ flex-shrink: 0;
221
+ }
222
+ .more-button {
223
+ width: 34px;
224
+ height: 34px;
225
+ display: grid;
226
+ place-items: center;
227
+ border: 1px solid var(--border-subtle);
228
+ background: transparent;
229
+ color: var(--fg-dim);
230
+ border-radius: 9px;
231
+ cursor: pointer;
232
+ padding: 0;
233
+ }
234
+ .more-button:hover:not(:disabled),
235
+ .more-button[aria-expanded="true"] {
236
+ border-color: var(--border-strong);
237
+ background: var(--steel-700);
238
+ color: var(--fg);
239
+ }
240
+ .more-button:disabled {
241
+ cursor: not-allowed;
242
+ opacity: 0.55;
243
+ }
244
+ .menu {
245
+ position: absolute;
246
+ background: var(--bg-bar);
247
+ border: 1px solid var(--border);
248
+ border-radius: var(--radius-lg);
249
+ box-shadow: var(--shadow-tooltip);
250
+ padding: 6px;
251
+ z-index: 70;
252
+ }
253
+ .menu[hidden] {
254
+ display: none;
255
+ }
256
+ .more-menu {
257
+ right: 0;
258
+ top: 42px;
259
+ width: min(300px, calc(100vw - 24px));
260
+ }
261
+ .menu-head {
262
+ padding: 7px 10px 9px;
263
+ }
264
+ .menu-label {
265
+ font-size: 9px;
266
+ font-weight: var(--w-bold);
267
+ letter-spacing: var(--track-label);
268
+ text-transform: uppercase;
269
+ color: var(--fg-faint);
270
+ margin-bottom: 5px;
271
+ }
272
+ .menu-file {
273
+ display: flex;
274
+ align-items: center;
275
+ gap: 7px;
276
+ width: calc(100% + 8px);
277
+ text-align: left;
278
+ border: 0;
279
+ background: transparent;
280
+ padding: 3px 4px;
281
+ margin: 0 -4px;
282
+ border-radius: 7px;
283
+ cursor: pointer;
284
+ font-family: var(--font-mono);
285
+ font-size: 12px;
286
+ color: var(--fg-muted);
287
+ }
288
+ .menu-file:hover {
289
+ background: var(--steel-700);
290
+ }
291
+ .menu-file > svg {
292
+ opacity: 0.7;
293
+ flex-shrink: 0;
294
+ }
295
+ .menu-file-text {
296
+ display: flex;
297
+ flex: 1;
298
+ min-width: 0;
299
+ }
300
+ .path-head {
301
+ overflow: hidden;
302
+ text-overflow: ellipsis;
303
+ white-space: nowrap;
304
+ flex: 0 1 auto;
305
+ min-width: 0;
306
+ }
307
+ .path-tail {
308
+ flex: 0 0 auto;
309
+ max-width: 100%;
310
+ overflow: hidden;
311
+ text-overflow: ellipsis;
312
+ white-space: nowrap;
313
+ }
314
+ .copy-hint {
315
+ font-family: var(--font-sans);
316
+ font-size: 10px;
317
+ font-weight: var(--w-semi);
318
+ color: var(--fg-faint);
319
+ flex-shrink: 0;
320
+ display: flex;
321
+ align-items: center;
322
+ gap: 4px;
323
+ }
324
+ .copy-hint .icon-copy,
325
+ .copy-hint .icon-check {
326
+ display: flex;
327
+ }
328
+ .copy-hint .icon-check {
329
+ display: none;
330
+ }
331
+ .copy-hint.copied {
332
+ color: var(--accent-hover);
333
+ }
334
+ .copy-hint.copied .icon-copy {
335
+ display: none;
336
+ }
337
+ .copy-hint.copied .icon-check {
338
+ display: flex;
339
+ }
340
+ .menu-rule {
341
+ height: 1px;
342
+ background: var(--border);
343
+ margin: 4px 0;
344
+ }
345
+ .menu-item {
346
+ display: flex;
347
+ align-items: center;
348
+ gap: 10px;
349
+ width: 100%;
350
+ text-align: left;
351
+ padding: 9px 10px;
352
+ border-radius: var(--radius-sm);
353
+ font-family: inherit;
354
+ font-size: var(--text-sm);
355
+ border: 0;
356
+ cursor: pointer;
357
+ background: transparent;
358
+ color: var(--fg);
359
+ }
360
+ .menu-item:hover:not(:disabled) {
361
+ background: var(--steel-700);
362
+ }
363
+ .menu-item:disabled {
364
+ cursor: not-allowed;
365
+ opacity: 0.5;
366
+ }
367
+ .menu-item > svg {
368
+ opacity: 0.8;
369
+ flex-shrink: 0;
370
+ }
371
+ .menu-item.danger {
372
+ color: var(--danger);
373
+ }
374
+ .menu-item.danger > svg {
375
+ opacity: 1;
376
+ }
377
+ .menu-item.danger:hover:not(:disabled) {
378
+ background: rgba(240, 100, 100, 0.1);
379
+ }
380
+ .button {
381
+ border: 0;
382
+ border-radius: var(--radius-md);
383
+ padding: 9px 14px;
384
+ background: var(--accent);
385
+ color: var(--accent-ink);
386
+ font-family: inherit;
387
+ font-size: var(--text-sm);
388
+ font-weight: var(--w-bold);
389
+ white-space: nowrap;
390
+ cursor: pointer;
391
+ transition:
392
+ background 120ms ease-out,
393
+ color 120ms ease-out,
394
+ opacity 120ms ease-out,
395
+ border-color 120ms ease-out;
396
+ }
397
+ .button:hover:not(:disabled) {
398
+ background: var(--accent-hover);
399
+ }
400
+ .button:active:not(:disabled) {
401
+ opacity: 0.85;
402
+ }
403
+ .button:disabled {
404
+ opacity: 0.55;
405
+ cursor: not-allowed;
406
+ }
407
+ .split {
408
+ display: inline-flex;
409
+ align-items: stretch;
410
+ }
411
+ .send-main {
412
+ border-radius: var(--radius-md) 0 0 var(--radius-md);
413
+ }
414
+ .send-caret {
415
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
416
+ padding: 9px;
417
+ border-left: 1px solid rgba(23, 19, 10, 0.22);
418
+ display: grid;
419
+ place-items: center;
420
+ }
421
+ .send-menu {
422
+ right: 0;
423
+ bottom: 44px;
424
+ width: 208px;
425
+ border-radius: 11px;
426
+ }
427
+ .layout {
428
+ height: calc(100vh - var(--bar-h));
429
+ min-height: 0;
430
+ display: grid;
431
+ grid-template-columns: minmax(0, 1fr) var(--panel-w);
432
+ }
433
+ .frame {
434
+ min-width: 0;
435
+ min-height: 0;
436
+ background: #fff;
437
+ position: relative;
438
+ overflow: hidden;
439
+ }
440
+ .panel {
441
+ width: var(--panel-w);
442
+ border-left: var(--hairline-subtle);
443
+ background: var(--bg-panel);
444
+ display: flex;
445
+ flex-direction: column;
446
+ min-width: 0;
447
+ min-height: 0;
448
+ }
449
+ .panel h2 {
450
+ font-size: 15px;
451
+ line-height: 1.3;
452
+ margin: 16px 16px 8px;
453
+ font-weight: var(--w-semi);
454
+ letter-spacing: 0;
455
+ }
456
+ .chat {
457
+ flex: 1;
458
+ min-height: 0;
459
+ overflow: auto;
460
+ padding: 0 16px 12px;
461
+ display: flex;
462
+ flex-direction: column;
463
+ gap: 10px;
464
+ }
465
+ .bubble {
466
+ max-width: 85%;
467
+ border-radius: var(--radius-xl);
468
+ padding: 10px 12px;
469
+ background: var(--bg-elevated);
470
+ border: var(--hairline);
471
+ color: var(--fg);
472
+ }
473
+ .bubble.user {
474
+ align-self: flex-end;
475
+ background: var(--bg-elevated);
476
+ border-color: var(--border-strong);
477
+ }
478
+ .bubble.agent {
479
+ align-self: flex-start;
480
+ background: transparent;
481
+ border-color: var(--border-subtle);
482
+ }
483
+ .bubble.agent-working {
484
+ display: flex;
485
+ align-items: center;
486
+ gap: 8px;
487
+ color: var(--fg-muted);
488
+ }
489
+ .spinner {
490
+ width: 14px;
491
+ height: 14px;
492
+ border-radius: var(--radius-pill);
493
+ border: 2px solid var(--border);
494
+ border-top-color: var(--accent);
495
+ animation: spin 0.8s linear infinite;
496
+ flex: 0 0 auto;
497
+ }
498
+ .bubble small {
499
+ display: block;
500
+ color: var(--fg-faint);
501
+ margin-bottom: 4px;
502
+ font-size: 10px;
503
+ font-weight: var(--w-bold);
504
+ letter-spacing: var(--track-label);
505
+ text-transform: uppercase;
506
+ }
507
+ .bubble.user small {
508
+ text-align: right;
509
+ }
510
+ @keyframes spin {
511
+ to {
512
+ transform: rotate(360deg);
513
+ }
514
+ }
515
+ .composer {
516
+ display: grid;
517
+ gap: 8px;
518
+ padding: 12px 16px;
519
+ border-top: var(--hairline-subtle);
520
+ min-width: 0;
521
+ flex-shrink: 0;
522
+ box-sizing: border-box;
523
+ }
524
+ .presence-banner {
525
+ border: 1px solid var(--border);
526
+ border-radius: var(--radius-sm);
527
+ background: var(--bg-elevated);
528
+ color: var(--fg-muted);
529
+ font-size: 11px;
530
+ font-weight: var(--w-medium);
531
+ line-height: 1.4;
532
+ padding: 8px 10px;
533
+ }
534
+ .presence-banner[hidden] {
535
+ display: none;
536
+ }
537
+ .annotation-pills {
538
+ display: flex;
539
+ flex-wrap: wrap;
540
+ gap: 6px;
541
+ min-width: 0;
542
+ }
543
+ .pill-wrap {
544
+ position: relative;
545
+ max-width: 100%;
546
+ }
547
+ .pill {
548
+ display: flex;
549
+ align-items: center;
550
+ gap: 6px;
551
+ max-width: 100%;
552
+ border: 1px solid var(--border-strong);
553
+ border-radius: var(--radius-pill);
554
+ background: var(--bg-elevated);
555
+ color: var(--fg-muted);
556
+ padding: 5px 7px 5px 11px;
557
+ font-size: 12px;
558
+ font-weight: var(--w-bold);
559
+ }
560
+ .pill-preview {
561
+ display: block;
562
+ max-width: 220px;
563
+ overflow: hidden;
564
+ white-space: nowrap;
565
+ text-overflow: ellipsis;
566
+ }
567
+ .pill-close {
568
+ width: 18px;
569
+ height: 18px;
570
+ border: 0;
571
+ border-radius: var(--radius-pill);
572
+ padding: 0;
573
+ background: var(--border);
574
+ color: var(--fg-muted);
575
+ line-height: 18px;
576
+ font-size: 14px;
577
+ cursor: pointer;
578
+ }
579
+ .pill-tooltip {
580
+ display: none;
581
+ position: absolute;
582
+ z-index: 5;
583
+ left: 0;
584
+ bottom: calc(100% + 8px);
585
+ width: min(320px, 80vw);
586
+ border: 1px solid var(--border-strong);
587
+ border-radius: var(--radius-lg);
588
+ background: var(--bg-bar);
589
+ color: var(--fg-muted);
590
+ padding: 10px;
591
+ font-size: 12px;
592
+ font-weight: 500;
593
+ box-shadow: var(--shadow-tooltip);
594
+ }
595
+ .tooltip-label {
596
+ color: var(--fg-label);
597
+ font-size: 10px;
598
+ font-weight: 900;
599
+ letter-spacing: var(--track-label);
600
+ text-transform: uppercase;
601
+ margin: 0 0 4px;
602
+ }
603
+ .pill-tooltip-target {
604
+ font-family: var(--font-mono);
605
+ background: var(--bg);
606
+ border: 1px solid var(--border);
607
+ border-radius: var(--radius-sm);
608
+ padding: 6px;
609
+ margin-bottom: 8px;
610
+ overflow-wrap: anywhere;
611
+ }
612
+ .pill-tooltip-prompt {
613
+ white-space: pre-wrap;
614
+ overflow-wrap: anywhere;
615
+ }
616
+ .pill-wrap:hover .pill-tooltip,
617
+ .pill-wrap:focus-within .pill-tooltip {
618
+ display: block;
619
+ }
620
+ .composer textarea {
621
+ width: 100%;
622
+ max-width: 100%;
623
+ min-width: 0;
624
+ min-height: 82px;
625
+ resize: vertical;
626
+ border-radius: var(--radius-lg);
627
+ border: 1px solid var(--border);
628
+ background: var(--bg);
629
+ color: var(--fg);
630
+ padding: 10px;
631
+ font: inherit;
632
+ font-family: var(--font-sans);
633
+ box-sizing: border-box;
634
+ }
635
+ .composer textarea::placeholder {
636
+ color: var(--fg-label);
637
+ }
638
+ .actions {
639
+ display: flex;
640
+ align-items: center;
641
+ gap: 8px;
642
+ justify-content: flex-end;
643
+ position: relative;
644
+ }
645
+ .send-hint {
646
+ margin-right: auto;
647
+ color: var(--fg-faint);
648
+ font-size: 11px;
649
+ line-height: 1.35;
650
+ }
651
+ .send-hint[hidden] {
652
+ display: none;
653
+ }
654
+ .ended-overlay {
655
+ position: fixed;
656
+ inset: var(--bar-h) 0 0 0;
657
+ background: rgba(15, 17, 21, 0.86);
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: center;
661
+ z-index: 60;
662
+ }
663
+ .ended-overlay[hidden] {
664
+ display: none;
665
+ }
666
+ .ended-card {
667
+ width: min(360px, calc(100vw - 48px));
668
+ border: 1px solid var(--border);
669
+ border-radius: var(--radius-xl);
670
+ background: var(--bg-panel);
671
+ padding: 20px 24px;
672
+ text-align: center;
673
+ }
674
+ .ended-title {
675
+ font-family: var(--font-serif);
676
+ font-style: italic;
677
+ font-size: 22px;
678
+ line-height: 1.3;
679
+ color: var(--fg);
680
+ margin-bottom: 8px;
681
+ }
682
+ .ended-copy {
683
+ margin: 0;
684
+ color: var(--fg-faint);
685
+ font-family: var(--font-mono);
686
+ font-size: 12px;
687
+ line-height: 1.45;
688
+ overflow-wrap: anywhere;
689
+ }
690
+ .ended-action {
691
+ margin-top: var(--space-8);
692
+ }
693
+ .layout-issue-banner {
694
+ position: absolute;
695
+ top: var(--space-8);
696
+ left: var(--space-8);
697
+ right: var(--space-8);
698
+ z-index: 20;
699
+ border: 1px solid rgba(244, 201, 93, 0.35);
700
+ border-radius: var(--radius-lg);
701
+ background: rgba(37, 35, 15, 0.92);
702
+ color: var(--brass-400);
703
+ padding: var(--space-6) var(--space-8);
704
+ font-size: var(--text-sm);
705
+ line-height: var(--lh-sm);
706
+ box-shadow: var(--shadow-tooltip);
707
+ }
708
+ .layout-issue-banner[hidden] {
709
+ display: none;
710
+ }
711
+ iframe {
712
+ width: 100%;
713
+ height: 100%;
714
+ border: 0;
715
+ background: white;
716
+ opacity: 1;
717
+ transition: opacity var(--dur-fast) var(--ease);
718
+ }
719
+ body.layout-gate-active iframe#artifact {
720
+ opacity: 0;
721
+ }
722
+ @media (max-width: 860px) {
723
+ body {
724
+ overflow: auto;
725
+ }
726
+ .layout {
727
+ height: calc(100vh - var(--bar-h));
728
+ grid-template-columns: 1fr;
729
+ grid-template-rows: minmax(0, 1fr) min(42vh, 360px);
730
+ }
731
+ .panel {
732
+ width: 100%;
733
+ border-left: 0;
734
+ border-top: var(--hairline-subtle);
735
+ }
736
+ .chat {
737
+ padding-bottom: 10px;
738
+ }
739
+ .pill-preview {
740
+ max-width: min(220px, 70vw);
741
+ }
742
+ }