@comty.io/core 0.1.2 → 0.1.4

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.
package/src/style.js CHANGED
@@ -10,10 +10,9 @@ export function getComtyStyle() {
10
10
  --comty-foreground: #fafafa;
11
11
  --comty-muted: var(--comty-toolbar-muted);
12
12
  --comty-accent: #55aaf5;
13
- --comty-agent-warning: #e9b86d;
14
- --comty-agent-success: #80c9a4;
15
- --comty-agent-error: #ef7676;
16
- --comty-outline: oklch(0.62 0.18 255);
13
+ --comty-error: #ef7676;
14
+ --comty-outline: var(--comty-toolbar-muted);
15
+ --comty-comment-focus: var(--comty-toolbar-muted);
17
16
  --comty-paper: #fff;
18
17
  --comty-ink: #171717;
19
18
  --comty-border: #434649;
@@ -37,6 +36,10 @@ export function getComtyStyle() {
37
36
  --comty-magnifier-gray: #999;
38
37
  --comty-magnifier-shadow: 0 .0625rem .375rem rgb(0 0 0 / .5);
39
38
  --comty-property-width: 16rem;
39
+ --comty-inspector-width: 18rem;
40
+ --comty-inspector-label-width: 5rem;
41
+ --comty-inspector-row-height: 1.5rem;
42
+ --comty-copy-size: 1.5rem;
40
43
  --comty-property-swatch: 2rem;
41
44
  --comty-property-font-size: .6875rem;
42
45
  --comty-property-row-height: 1.375rem;
@@ -50,14 +53,11 @@ export function getComtyStyle() {
50
53
  --comty-dialog-ink: var(--comty-foreground);
51
54
  --comty-dialog-soft: var(--comty-muted);
52
55
  --comty-dialog-field: var(--comty-field-surface);
53
- --comty-dialog-line: var(--comty-border);
54
56
  --comty-dialog-backdrop: rgb(0 0 0 / .4);
55
57
  --comty-dialog-radius: 2rem;
56
58
  --comty-dialog-width: 32rem;
57
59
  --comty-dialog-shadow: 0 1.5rem 4rem rgb(0 0 0 / .16);
58
60
  --comty-motion-duration: 220ms;
59
- --comty-working-dot-size: .25em;
60
- --comty-working-dot-gap: .125em;
61
61
  --comty-ease-out: cubic-bezier(0.23, 1, 0.32, 1);
62
62
  --comty-ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
63
63
  position: fixed;
@@ -69,68 +69,7 @@ export function getComtyStyle() {
69
69
  font-family: var(--comty-font);
70
70
  color-scheme: dark;
71
71
  }
72
- html.comty-agent-enabled body { transition: margin-left 220ms cubic-bezier(0.23, 1, 0.32, 1), margin-right 220ms cubic-bezier(0.23, 1, 0.32, 1); }
73
- html.comty-agent-docked[data-comty-agent-side="left"] body { margin-left: 22rem; }
74
- html.comty-agent-docked[data-comty-agent-side="right"] body { margin-right: 22rem; }
75
- @media (max-width: 50rem) { html.comty-agent-docked body { margin-left: 0; margin-right: 0; } }
76
- #comty-root > .comty-agent-panel { position: fixed; left: 0; top: 0; bottom: 0; z-index: 2147483647; width: min(22rem, calc(100vw - 3rem)); box-sizing: border-box; display: flex; flex-direction: column; overflow: hidden; pointer-events: auto; border-right: .0625rem solid var(--comty-hover-surface); background: var(--comty-surface); color: var(--comty-foreground); font: .875rem/1.4 ui-sans-serif, system-ui, sans-serif; transform: translateX(0); transition: transform var(--comty-motion-duration) var(--comty-ease-out); color-scheme: dark; }
77
- #comty-root > .comty-agent-panel[data-side="right"] { left: auto; right: 0; border-right: 0; border-left: .0625rem solid var(--comty-hover-surface); }
78
- #comty-root > .comty-agent-panel[data-closed] { transform: translateX(-100%); pointer-events: none; }
79
- #comty-root > .comty-agent-panel[data-side="right"][data-closed] { transform: translateX(100%); }
80
- #comty-root > .comty-agent-panel[hidden] { display: none; }
81
- .comty-agent-panel *, .comty-agent-panel *::before { box-sizing: border-box; }
82
- .comty-agent-panel-header { display: flex; flex: 0 0 auto; align-items: center; gap: .75rem; padding: .5rem .75rem; border-bottom: .0625rem solid var(--comty-hover-surface); }
83
- .comty-agent-brand { display: grid; place-items: center; width: 2.375rem; height: 2.375rem; flex-shrink: 0; border-radius: .6875rem; color: var(--comty-accent); background: var(--comty-hover-surface); }
84
- .comty-agent-panel svg { display: block; width: 1rem; height: 1rem; flex-shrink: 0; }
85
- .comty-agent-brand svg { width: 1.25rem; height: 1.25rem; }
86
- .comty-agent-heading { flex: 1; min-width: 0; }
87
- .comty-agent-heading strong { display: block; font-weight: 600; font-size: .875rem; }
88
- .comty-agent-panel-content { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: var(--comty-hover-surface) transparent; padding: .375rem .5rem 2rem; }
89
- .comty-agent-item { padding: .375rem .25rem; overflow-wrap: anywhere; }
90
- .comty-agent-item + .comty-agent-item { border-top: .0625rem solid var(--comty-hover-surface); }
91
- .comty-agent-item h3 { margin: 0 0 .25rem; color: var(--comty-foreground); font: 500 .875rem/1.4 ui-sans-serif, system-ui, sans-serif; }
92
- .comty-agent-list { display: grid; gap: .125rem; }
93
- .comty-agent-row { position: relative; display: flex; align-items: center; gap: .625rem; min-height: 2rem; padding: .25rem .5rem; border-radius: .5rem; color: var(--comty-foreground); }
94
- .comty-agent-row:hover { background: var(--comty-hover-surface); }
95
- .comty-agent-dot { width: .4375rem; height: .4375rem; flex: 0 0 auto; border-radius: 50%; background: var(--comty-muted); }
96
- .comty-working-indicator { display: inline-grid; grid-template-columns: repeat(3, var(--comty-working-dot-size)); gap: var(--comty-working-dot-gap); flex: 0 0 auto; color: var(--comty-foreground); }
97
- .comty-working-indicator > i { display: block; width: var(--comty-working-dot-size); height: var(--comty-working-dot-size); border-radius: 50%; background: currentColor; opacity: .25; transition: opacity 150ms linear; }
98
- .comty-working-indicator > i[data-active] { opacity: 1; }
99
- .comty-agent-dot[data-status="success"] { background: var(--comty-agent-success); }
100
- .comty-agent-dot[data-status="error"] { background: var(--comty-agent-error); }
101
- .comty-agent-row-name { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 500; }
102
- .comty-agent-row-state { flex: 0 0 auto; color: var(--comty-muted); font-size: .875rem; }
103
- .comty-agent-row-actions { position: absolute; top: 50%; right: .25rem; display: flex; gap: .25rem; border-radius: .25rem; background: var(--comty-hover-surface); opacity: 0; pointer-events: none; transform: translateY(-50%); }
104
- .comty-agent-row:hover .comty-agent-row-actions, .comty-agent-row-actions:has(.comty-agent-action:focus-visible) { opacity: 1; pointer-events: auto; }
105
- @media (hover: none) { .comty-agent-row-actions { position: static; opacity: 1; pointer-events: auto; transform: none; background: transparent; } }
106
- .comty-agent-panel .comty-agent-row-actions .comty-agent-action { min-height: 1.5rem; padding: .125rem .375rem; border-radius: .25rem; background: transparent; color: var(--comty-muted); font-size: .875rem; }
107
- .comty-agent-panel .comty-agent-row-actions .comty-agent-action:hover { color: var(--comty-foreground); background: var(--comty-surface); }
108
- .comty-agent-error-popover { position: fixed; z-index: 2147483647; width: min(20rem, calc(100vw - 1rem)); max-height: calc(100vh - 1rem); overflow: auto; padding: .75rem .875rem; border: 0; border-radius: .625rem; background: var(--comty-surface); box-shadow: var(--comty-floating-shadow); color: var(--comty-foreground); font: .875rem/1.4 ui-sans-serif, system-ui, sans-serif; pointer-events: none; color-scheme: dark; }
109
- .comty-agent-error-popover strong { display: block; font-weight: 600; }
110
- .comty-agent-error-popover p { margin: .375rem 0 0; color: var(--comty-muted); white-space: pre-wrap; overflow-wrap: anywhere; }
111
- .comty-agent-panel p { margin: .5rem 0 0; font: inherit; color: var(--comty-muted); }
112
- .comty-agent-error { margin-top: .75rem; }
113
- .comty-agent-error strong { display: block; font-weight: 500; color: var(--comty-foreground); }
114
- .comty-agent-error p { margin-top: .25rem; }
115
- .comty-agent-banner { margin-bottom: 1rem; }
116
- .comty-agent-banner .comty-agent-error { margin-top: 0; }
117
- .comty-agent-actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .875rem; }
118
- .comty-agent-panel .comty-agent-action { display: inline-flex; align-items: center; justify-content: center; gap: .375rem; min-height: 2rem; margin: 0; padding: .375rem .625rem; border: 0; border-radius: .5rem; font: 500 .875rem/1.4 ui-sans-serif, system-ui, sans-serif; cursor: pointer; color: var(--comty-foreground); background: var(--comty-hover-surface); transition: background-color 150ms ease; }
119
- .comty-agent-panel .comty-agent-action:hover { background: color-mix(in srgb, var(--comty-foreground) 12%, var(--comty-hover-surface)); }
120
- .comty-agent-panel .comty-agent-action[data-primary] { color: var(--comty-paper); background: var(--comty-accent); }
121
- .comty-agent-panel .comty-agent-action:disabled { opacity: .5; cursor: wait; }
122
- .comty-agent-panel .comty-agent-close { width: 1.5rem; min-height: 1.5rem; padding: 0; background: transparent; color: var(--comty-muted); }
123
- .comty-agent-panel :is(button, summary):focus-visible { outline: .125rem solid var(--comty-accent); outline-offset: .1875rem; }
124
- .comty-agent-details { margin-top: .625rem; }
125
- .comty-agent-panel summary { cursor: pointer; color: var(--comty-muted); font-size: .875rem; }
126
- .comty-agent-panel pre { margin: .5rem 0 0; padding: .625rem; white-space: pre-wrap; overflow-wrap: anywhere; max-height: 10rem; overflow: auto; border-radius: .5rem; background: var(--comty-surface); color: var(--comty-muted); font: .875rem/1.4 ui-monospace, monospace; }
127
- .comty-agent-empty { padding: 1rem .5rem; text-align: center; }
128
- .comty-agent-empty .comty-agent-brand { margin: 0 auto .875rem; }
129
- .comty-agent-empty strong { font-size: .875rem; font-weight: 500; }
130
- .comty-agent-empty p { max-width: 15rem; margin: .5rem auto 0; font-size: .875rem; }
131
- .comty-agent-working { position: fixed; z-index: 1; box-sizing: border-box; border: 2px solid var(--comty-accent); border-radius: .25rem; pointer-events: none; }
132
- .comty-agent-working-badge { position: absolute; left: -.125rem; bottom: 100%; display: inline-flex; align-items: center; gap: .4rem; padding: .25rem .5rem; border-radius: .375rem .375rem 0 0; background: var(--comty-surface); color: var(--comty-foreground); font: 600 .6875rem/1.4 ui-sans-serif, system-ui, sans-serif; white-space: nowrap; }
133
- .comty-agent-working[data-badge-below] .comty-agent-working-badge { bottom: auto; top: 100%; border-radius: 0 0 .375rem .375rem; }
72
+
134
73
  #comty-root { cursor: default; }
135
74
  #comty-root::backdrop { background: transparent; pointer-events: none; }
136
75
  html.comty-comment-placement,
@@ -203,8 +142,7 @@ export function getComtyStyle() {
203
142
  #comty-root [hidden] { display: none !important; }
204
143
  [data-comty-anchor-hidden] { visibility: hidden !important; pointer-events: none !important; }
205
144
  @media (prefers-reduced-motion: reduce) {
206
- html.comty-agent-enabled body { transition: none; }
207
- .comty-toolbar, .comty-control-button, .comty-sidepanel, .comty-pin, .comty-bubble, .comty-agent-panel, .comty-agent-action, .comty-agent-dot, .comty-working-indicator > i { transition: none !important; animation: none !important; }
145
+ .comty-toolbar, .comty-control-button, .comty-sidepanel, .comty-pin, .comty-bubble { transition: none !important; animation: none !important; }
208
146
  }
209
147
 
210
148
  .comty-sidepanel {
@@ -389,11 +327,11 @@ export function getComtyStyle() {
389
327
  .comty-pin {
390
328
  position: fixed;
391
329
  z-index: 2147483645;
392
- width: 34px;
393
- height: 34px;
330
+ width: 28px;
331
+ height: 28px;
394
332
  padding: 0;
395
333
  border: none;
396
- border-radius: 999px 999px 999px 12px;
334
+ border-radius: 999px 999px 999px 10px;
397
335
  background: #0078FF;
398
336
  color: white;
399
337
  display: grid;
@@ -403,17 +341,17 @@ export function getComtyStyle() {
403
341
  transform: translate(-50%, -50%);
404
342
  appearance: none;
405
343
  font-family: sans-serif;
406
- filter: drop-shadow(0 8px 18px rgba(0, 120, 255, .28));
344
+ filter: drop-shadow(0 8px 16px rgba(0, 120, 255, .28));
407
345
  display: none;
408
346
  overflow: visible;
409
347
  }
410
348
 
411
- #comty-root > .comty-temp-pin { pointer-events: none; }
349
+ #comty-root > .comty-temp-pin { pointer-events: none; z-index: 2147483647; }
412
350
 
413
351
  .comty-pin-icon {
414
352
  display: block;
415
- width: 18px;
416
- height: 18px;
353
+ width: 16px;
354
+ height: 16px;
417
355
  pointer-events: none;
418
356
  }
419
357
 
@@ -422,11 +360,11 @@ export function getComtyStyle() {
422
360
  top: -4px;
423
361
  right: -4px;
424
362
  display: inline-flex;
425
- width: 12px;
426
- height: 12px;
363
+ width: 10px;
364
+ height: 10px;
427
365
  border: 1px solid rgba(255,255,255,.82);
428
366
  border-radius: 999px;
429
- box-shadow: 0 8px 18px rgba(15,23,42,.18);
367
+ box-shadow: 0 8px 16px rgba(15,23,42,.18);
430
368
  pointer-events: none;
431
369
  }
432
370
 
@@ -434,7 +372,7 @@ export function getComtyStyle() {
434
372
  background: var(--comty-surface);
435
373
  color: var(--comty-foreground);
436
374
  border: 2px solid var(--comty-border);
437
- box-shadow: 0 2px 6px rgba(0,0,0,.18);
375
+ box-shadow: 0 2px 4px rgba(0,0,0,.18);
438
376
  filter: none;
439
377
  transition:
440
378
  border-color 160ms ease,
@@ -484,14 +422,14 @@ export function getComtyStyle() {
484
422
  background: var(--comty-surface);
485
423
  color: var(--comty-foreground);
486
424
  border: 0;
487
- box-shadow: 0 10px 28px rgba(0,0,0,.2);
425
+ box-shadow: 0 8px 24px rgba(0,0,0,.2);
488
426
  padding: 0;
489
- border-radius: 14px;
490
- width: min(360px, calc(100vw - 32px));
427
+ border-radius: 12px;
428
+ width: min(288px, calc(100vw - 24px));
491
429
  overflow: hidden;
492
430
  box-sizing: border-box;
493
431
  font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
494
- font-size: 14px;
432
+ font-size: 12px;
495
433
  display: none;
496
434
  animation: comty-bubble-in 200ms cubic-bezier(.23,1,.32,1) forwards;
497
435
  transform-origin: top left;
@@ -519,37 +457,53 @@ export function getComtyStyle() {
519
457
  display: flex;
520
458
  align-items: center;
521
459
  justify-content: space-between;
522
- gap: 12px;
523
- min-height: 40px;
524
- padding: 0 16px;
525
- border-bottom: 1px solid var(--comty-border);
526
- }
527
-
528
- .comty-bubble-title {
529
- margin: 0;
530
- color: var(--comty-foreground);
531
- font-size: 12px;
532
- font-weight: 600;
533
- line-height: 1;
534
- }
535
-
536
- .comty-bubble-header-actions {
537
- display: flex;
538
- align-items: center;
539
- gap: 6px;
540
- margin-left: auto;
460
+ gap: 10px;
461
+ min-height: 1.5rem;
462
+ padding: .625rem .625rem 0;
541
463
  }
542
464
 
543
465
  .comty-bubble-content {
544
466
  flex: 1;
545
467
  color: var(--comty-foreground);
546
- font-size: 14px;
468
+ font-size: .75rem;
547
469
  line-height: 1.45;
548
470
  overflow-wrap: anywhere;
549
471
  cursor: text;
550
472
  white-space: pre-wrap;
551
473
  }
552
474
 
475
+ .comty-bubble-content a {
476
+ color: var(--comty-comment-focus);
477
+ text-decoration: underline;
478
+ text-underline-offset: .15em;
479
+ }
480
+
481
+ .comty-bubble-content a:focus-visible {
482
+ outline: .125rem solid var(--comty-comment-focus);
483
+ outline-offset: .125rem;
484
+ }
485
+
486
+ .comty-comment-link {
487
+ display: inline-block;
488
+ box-sizing: border-box;
489
+ max-width: 100%;
490
+ min-width: 0;
491
+ overflow: hidden;
492
+ padding: .375rem .625rem;
493
+ border-radius: .375rem;
494
+ background: var(--comty-field-surface);
495
+ color: var(--comty-foreground);
496
+ font: .75rem/1.25 var(--comty-font);
497
+ text-decoration: none;
498
+ text-overflow: ellipsis;
499
+ white-space: nowrap;
500
+ }
501
+
502
+ .comty-thread-item .comty-comment-link,
503
+ .comty-capture-annotation .comty-comment-link { margin-top: .5rem; }
504
+ .comty-comment-link:hover { text-decoration: underline; }
505
+ .comty-comment-link:focus-visible { outline: .125rem solid var(--comty-comment-focus); outline-offset: .125rem; }
506
+
553
507
  .comty-bubble-content-editor {
554
508
  display: block;
555
509
  flex: 1;
@@ -561,7 +515,7 @@ export function getComtyStyle() {
561
515
  background: transparent;
562
516
  color: var(--comty-foreground);
563
517
  cursor: text;
564
- font: 14px/1.45 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
518
+ font: .75rem/1.45 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
565
519
  outline: none;
566
520
  resize: none;
567
521
  overflow: hidden;
@@ -571,15 +525,15 @@ export function getComtyStyle() {
571
525
  }
572
526
 
573
527
  .comty-thread {
574
- padding: 18px 16px 16px;
528
+ padding: .625rem;
575
529
  }
576
530
 
577
531
  .comty-thread-list {
578
532
  display: grid;
579
533
  width: 100%;
580
534
  min-width: 0;
581
- gap: 20px;
582
- max-height: min(360px, calc(100vh - 152px));
535
+ gap: 16px;
536
+ max-height: min(288px, calc(100vh - 120px));
583
537
  overflow-x: hidden;
584
538
  overflow-y: auto;
585
539
  overscroll-behavior: contain;
@@ -592,9 +546,9 @@ export function getComtyStyle() {
592
546
  display: grid;
593
547
  width: 100%;
594
548
  min-width: 0;
595
- grid-template-columns: 24px minmax(0, 1fr);
549
+ grid-template-columns: 1.5rem minmax(0, 1fr);
596
550
  align-items: start;
597
- gap: 12px;
551
+ gap: 10px;
598
552
  }
599
553
 
600
554
  .comty-thread-item-body {
@@ -609,15 +563,15 @@ export function getComtyStyle() {
609
563
  display: flex;
610
564
  align-items: center;
611
565
  min-width: 0;
612
- min-height: 20px;
613
- gap: 7px;
566
+ min-height: 16px;
567
+ gap: 6px;
614
568
  }
615
569
 
616
570
  .comty-comment-author-name {
617
571
  min-width: 0;
618
572
  overflow: hidden;
619
573
  color: var(--comty-foreground);
620
- font-size: 14px;
574
+ font-size: .75rem;
621
575
  font-weight: 600;
622
576
  line-height: 1.25;
623
577
  text-overflow: ellipsis;
@@ -627,7 +581,7 @@ export function getComtyStyle() {
627
581
  .comty-comment-time {
628
582
  flex: 0 0 auto;
629
583
  color: var(--comty-muted);
630
- font-size: 13px;
584
+ font-size: .6875rem;
631
585
  font-weight: 400;
632
586
  line-height: 1.25;
633
587
  }
@@ -635,13 +589,13 @@ export function getComtyStyle() {
635
589
  .comty-comment-avatar {
636
590
  display: grid;
637
591
  place-items: center;
638
- width: 24px;
639
- height: 24px;
592
+ width: 1.5rem;
593
+ height: 1.5rem;
640
594
  overflow: hidden;
641
595
  border-radius: 50%;
642
596
  background: var(--comty-field-surface);
643
597
  color: var(--comty-foreground);
644
- font-size: 10px;
598
+ font-size: 8px;
645
599
  font-weight: 600;
646
600
  line-height: 1;
647
601
  }
@@ -653,8 +607,8 @@ export function getComtyStyle() {
653
607
  }
654
608
 
655
609
  .comty-pin-avatar {
656
- width: 28px;
657
- height: 28px;
610
+ width: 24px;
611
+ height: 24px;
658
612
  }
659
613
 
660
614
  .comty-thread-item .comty-bubble-content,
@@ -669,12 +623,12 @@ export function getComtyStyle() {
669
623
  .comty-icon-button {
670
624
  display: inline-grid;
671
625
  place-items: center;
672
- width: 28px;
673
- height: 28px;
626
+ width: 24px;
627
+ height: 24px;
674
628
  flex: 0 0 auto;
675
629
  padding: 0;
676
630
  border: 0;
677
- border-radius: 6px;
631
+ border-radius: 4px;
678
632
  background: transparent;
679
633
  color: var(--comty-foreground);
680
634
  cursor: pointer;
@@ -704,24 +658,24 @@ export function getComtyStyle() {
704
658
  }
705
659
 
706
660
  .comty-icon-button svg {
707
- width: 18px;
708
- height: 18px;
661
+ width: 16px;
662
+ height: 16px;
709
663
  pointer-events: none;
710
664
  }
711
665
 
712
666
  .comty-status-trigger {
713
667
  display: inline-flex;
714
668
  align-items: center;
715
- gap: 6px;
716
- min-height: 28px;
669
+ gap: 4px;
670
+ min-height: 24px;
717
671
  padding: 0 8px;
718
672
  border: 0;
719
- border-radius: 6px;
673
+ border-radius: 4px;
720
674
  background: transparent;
721
675
  color: var(--comty-foreground);
722
676
  cursor: pointer;
723
677
  appearance: none;
724
- font: 600 12px/1 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
678
+ font: 600 .6875rem/1 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
725
679
  transition:
726
680
  background-color 160ms ease,
727
681
  transform 140ms ease-out;
@@ -750,14 +704,14 @@ export function getComtyStyle() {
750
704
  }
751
705
 
752
706
  .comty-thread-more {
753
- width: 24px;
754
- height: 24px;
755
- margin: -2px -4px -2px auto;
707
+ width: 20px;
708
+ height: 20px;
709
+ margin: 0 0 0 auto;
756
710
  }
757
711
 
758
712
  .comty-thread-more svg {
759
- width: 16px;
760
- height: 16px;
713
+ width: 12px;
714
+ height: 12px;
761
715
  }
762
716
 
763
717
  .comty-entry-actions-popover {
@@ -765,49 +719,68 @@ export function getComtyStyle() {
765
719
  }
766
720
 
767
721
  .comty-popover-item.comty-popover-item-destructive {
768
- color: var(--comty-agent-error);
722
+ color: var(--comty-error);
769
723
  }
770
724
 
771
725
  .comty-popover-item.comty-popover-item-destructive:hover,
772
726
  .comty-popover-item.comty-popover-item-destructive:focus-visible {
773
- background: color-mix(in srgb, var(--comty-agent-error) 12%, var(--comty-surface));
727
+ background: color-mix(in srgb, var(--comty-error) 12%, var(--comty-surface));
774
728
  outline: none;
775
729
  }
776
730
 
777
731
  .comty-reply-form {
778
732
  display: grid;
779
- grid-template-columns: 24px minmax(0, 1fr);
733
+ grid-template-columns: 1.5rem minmax(0, 1fr);
780
734
  align-items: center;
781
- gap: 12px;
782
- margin-top: 20px;
735
+ gap: 10px;
736
+ margin-top: 16px;
783
737
  }
784
738
 
785
739
  .comty-reply-field {
786
740
  display: flex;
787
741
  align-items: center;
788
- min-height: 36px;
789
- padding: 4px 8px 4px 16px;
790
- border-radius: 14px;
742
+ min-height: 1.875rem;
743
+ padding: .25rem .25rem .25rem .625rem;
744
+ border-radius: 1.25rem;
791
745
  background: var(--comty-field-surface);
792
746
  box-sizing: border-box;
793
- transition: box-shadow 160ms ease;
747
+ transition: border-radius var(--comty-motion-duration) var(--comty-ease-in-out), box-shadow 160ms ease;
748
+ }
749
+
750
+ .comty-reply-field.comty-reply-expanded { border-radius: .75rem; }
751
+
752
+ .comty-reply-form:has(.comty-reply-expanded) > .comty-comment-avatar {
753
+ align-self: start;
754
+ }
755
+
756
+ .comty-reply-expanded .comty-reply-button {
757
+ align-self: flex-end;
794
758
  }
795
759
 
796
760
  .comty-reply-field:focus-within {
797
- box-shadow: inset 0 0 0 1px #a3a3a3;
761
+ box-shadow: inset 0 0 0 .0625rem var(--comty-comment-focus);
798
762
  }
799
763
 
800
764
  .comty-reply-input {
801
765
  min-width: 0;
766
+ min-height: 0;
802
767
  flex: 1;
803
768
  padding: 0;
804
769
  border: 0;
770
+ height: 1.125rem;
771
+ max-height: 5rem;
805
772
  background: transparent;
806
773
  color: var(--comty-foreground);
807
- font: 14px/1.3 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
774
+ font: .6875rem/1.125rem Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
808
775
  outline: none;
776
+ resize: none;
777
+ overflow-y: hidden;
778
+ box-sizing: border-box;
779
+ transition: height var(--comty-motion-duration) var(--comty-ease-in-out);
809
780
  }
810
781
 
782
+ .comty-reply-expanded .comty-reply-input { overflow-y: auto; }
783
+
811
784
  .comty-reply-input::placeholder {
812
785
  color: var(--comty-muted);
813
786
  }
@@ -815,14 +788,14 @@ export function getComtyStyle() {
815
788
  .comty-reply-button {
816
789
  display: inline-grid;
817
790
  place-items: center;
818
- width: 28px;
819
- height: 28px;
791
+ width: 1.375rem;
792
+ height: 1.375rem;
820
793
  flex: 0 0 auto;
821
794
  padding: 0;
822
795
  border: 0;
823
796
  border-radius: 50%;
824
- background: #0d99ff;
825
- color: #fff;
797
+ background: var(--comty-foreground);
798
+ color: var(--comty-surface);
826
799
  cursor: pointer;
827
800
  transition:
828
801
  background-color 160ms ease,
@@ -831,7 +804,7 @@ export function getComtyStyle() {
831
804
  }
832
805
 
833
806
  .comty-reply-button:hover:not(:disabled) {
834
- background: #0b87e3;
807
+ background: var(--comty-muted);
835
808
  }
836
809
 
837
810
  .comty-reply-button:active:not(:disabled) {
@@ -839,13 +812,14 @@ export function getComtyStyle() {
839
812
  }
840
813
 
841
814
  .comty-reply-button:disabled {
815
+ color: var(--comty-muted);
842
816
  background: var(--comty-hover-surface);
843
817
  cursor: default;
844
818
  }
845
819
 
846
820
  .comty-reply-button svg {
847
- width: 16px;
848
- height: 16px;
821
+ width: 12px;
822
+ height: 12px;
849
823
  }
850
824
 
851
825
  .comty-reply-form-guest { display: block; }
@@ -853,20 +827,20 @@ export function getComtyStyle() {
853
827
  .comty-sign-in-reply {
854
828
  display: block;
855
829
  width: 100%;
856
- min-height: 36px;
857
- padding: 4px 16px;
830
+ min-height: 32px;
831
+ padding: 4px 12px;
858
832
  border: 0;
859
- border-radius: 14px;
833
+ border-radius: 12px;
860
834
  background: var(--comty-field-surface);
861
- color: #0d99ff;
835
+ color: var(--comty-foreground);
862
836
  text-align: left;
863
- font: 600 14px/1.3 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
837
+ font: 600 12px/1.3 Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
864
838
  cursor: pointer;
865
839
  transition: background-color 160ms ease;
866
840
  }
867
841
 
868
842
  .comty-sign-in-reply:hover { background: var(--comty-hover-surface); }
869
- .comty-sign-in-reply:focus-visible { outline: 2px solid #0d99ff; outline-offset: 2px; }
843
+ .comty-sign-in-reply:focus-visible { outline: .0625rem solid var(--comty-comment-focus); outline-offset: .0625rem; }
870
844
 
871
845
  .comty-hover-bubble {
872
846
  width: min(240px, calc(100vw - 32px));
@@ -892,10 +866,6 @@ export function getComtyStyle() {
892
866
  height: 24px;
893
867
  }
894
868
 
895
- .comty-hover-bubble .comty-comment-author-name {
896
- font-size: 12px;
897
- }
898
-
899
869
  .comty-hover-bubble .comty-comment-author {
900
870
  min-height: 0;
901
871
  }
@@ -904,11 +874,6 @@ export function getComtyStyle() {
904
874
  font-size: 12px;
905
875
  }
906
876
 
907
- .comty-hover-bubble .comty-thread-item .comty-bubble-content {
908
- margin-top: 0;
909
- font-size: 12px;
910
- }
911
-
912
877
  .comty-auth-backdrop { position: fixed; inset: 0; z-index: 2147483647; display: grid; place-items: center; padding: 1rem; background: var(--comty-dialog-backdrop); font-family: var(--comty-font); }
913
878
  .comty-auth-dialog { box-sizing: border-box; width: min(var(--comty-dialog-width), 100%); max-height: calc(100dvh - 2rem); overflow: auto; padding: 1.75rem; border: 0; border-radius: var(--comty-dialog-radius); background: var(--comty-dialog-surface); color: var(--comty-dialog-ink); box-shadow: var(--comty-dialog-shadow); text-align: left; outline: none; }
914
879
  .comty-auth-dialog *, .comty-auth-dialog *::before, .comty-auth-dialog *::after { box-sizing: border-box; }
@@ -919,13 +884,23 @@ export function getComtyStyle() {
919
884
  .comty-auth-header svg { width: 1.25rem; height: 1.25rem; }
920
885
  .comty-auth-dialog h2 { margin: 0; color: inherit; font: 600 1.5rem/1.25 var(--comty-font); letter-spacing: -.025em; }
921
886
  .comty-auth-dialog p { margin: 1rem 0 0; color: var(--comty-dialog-soft); font: 400 .875rem/1.65 var(--comty-font); }
922
- .comty-auth-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: .5rem; margin-top: 1.75rem; padding-top: 1.5rem; border-top: .0625rem solid var(--comty-dialog-line); }
887
+ .comty-auth-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: .5rem; margin-top: 1.75rem; }
923
888
  .comty-auth-actions button { display: inline-flex; align-items: center; justify-content: center; min-height: 2.5rem; margin: 0; padding: .625rem 1rem; border: 0; border-radius: 999rem; background: transparent; color: var(--comty-dialog-soft); font: 500 .875rem/1.25 var(--comty-font); cursor: pointer; }
924
889
  .comty-auth-actions button:hover, .comty-auth-close:hover { background: var(--comty-dialog-field); color: var(--comty-dialog-ink); }
925
890
  .comty-auth-actions .comty-auth-primary { border-color: transparent; background: var(--comty-dialog-ink); color: var(--comty-dialog-surface); }
926
891
  .comty-auth-actions .comty-auth-primary:hover { background: var(--comty-dialog-soft); color: var(--comty-dialog-surface); }
927
892
  .comty-auth-dialog button:focus-visible { outline: .125rem solid var(--comty-dialog-ink); outline-offset: .1875rem; }
928
893
  .comty-auth-dialog button:disabled { opacity: .5; cursor: wait; }
894
+ .comty-guest-form { display: grid; gap: .5rem; margin-top: 1.5rem; }
895
+ .comty-guest-form label { color: var(--comty-dialog-soft); font: 500 .875rem/1.5 var(--comty-font); }
896
+ .comty-guest-form input { width: 100%; height: 2.75rem; padding: 0 1rem; border: .0625rem solid var(--comty-border); border-radius: .75rem; background: var(--comty-dialog-field); color: var(--comty-dialog-ink); font: 400 .875rem/1.5 var(--comty-font); outline: none; }
897
+ .comty-guest-form input::placeholder { color: var(--comty-dialog-soft); }
898
+ .comty-guest-form input:focus-visible { border-color: var(--comty-dialog-ink); box-shadow: 0 0 0 .0625rem var(--comty-dialog-ink); }
899
+ .comty-guest-form [role="alert"] { margin: 0; color: var(--comty-error); }
900
+ .comty-guest-actions { display: grid; justify-content: stretch; gap: .75rem; margin-top: 1rem; }
901
+ .comty-guest-actions button { width: 100%; }
902
+ .comty-guest-actions [data-comty-login] { background: var(--comty-dialog-field); color: var(--comty-dialog-ink); }
903
+ .comty-auth-or { color: var(--comty-dialog-soft); font: .75rem/1.5 var(--comty-font); text-align: center; }
929
904
  .comty-distance-layer { position: fixed; inset: 0; z-index: 1; width: 100%; height: 100%; overflow: visible; pointer-events: none; color: var(--comty-measure); }
930
905
  .comty-distance-line, .comty-distance-extension { stroke: currentColor; stroke-width: 1; fill: none; shape-rendering: crispEdges; }
931
906
  .comty-distance-extension { stroke-dasharray: 3 3; opacity: .65; }
@@ -991,8 +966,6 @@ export function getComtyStyle() {
991
966
  justify-content: space-between;
992
967
  gap: 8px;
993
968
  margin-top: 12px;
994
- padding-top: 10px;
995
- border-top: 1px solid var(--comty-border);
996
969
  }
997
970
 
998
971
  .comty-status-label {
@@ -1074,6 +1047,12 @@ export function getComtyStyle() {
1074
1047
  transform-origin: top right;
1075
1048
  }
1076
1049
 
1050
+ .comty-popover.comty-comment-popover {
1051
+ background: var(--comty-field-surface);
1052
+ border: .0625rem solid var(--comty-border);
1053
+ box-shadow: var(--comty-floating-shadow);
1054
+ }
1055
+
1077
1056
  .comty-popover-item {
1078
1057
  display: flex;
1079
1058
  align-items: center;
@@ -1189,11 +1168,11 @@ export function getComtyStyle() {
1189
1168
  .comty-property-row button > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-variant-numeric: tabular-nums; }
1190
1169
  .comty-property-row button[aria-label^="Copy Colour"] > span::before { content: ""; display: inline-block; width: .75rem; height: .75rem; margin-right: .375rem; border: .0625rem solid var(--comty-border); border-radius: .1875rem; background: var(--comty-picked-color); vertical-align: -.0625rem; }
1191
1170
  .comty-property-copy-icon { position: relative; flex: 0 0 .75rem; width: .75rem; height: .75rem; color: var(--comty-muted); opacity: .65; }
1192
- .comty-property-row button:hover .comty-property-copy-icon, .comty-property-row button[data-copied] .comty-property-copy-icon { opacity: 1; }
1171
+ .comty-property-row button:hover .comty-property-copy-icon, .comty-property-row button[data-copied] .comty-property-copy-icon, .comty-inspector-copy:hover .comty-property-copy-icon, .comty-inspector-copy[data-copied] .comty-property-copy-icon { opacity: 1; }
1193
1172
  .comty-property-copy-icon svg { position: absolute; inset: 0; width: 100%; height: 100%; transition: opacity 150ms var(--comty-ease-out), transform 150ms var(--comty-ease-out); }
1194
- .comty-property-copy-icon svg:last-child { opacity: 0; transform: scale(.5); }
1195
- .comty-property-row button[data-copied] svg:first-child { opacity: 0; transform: scale(.5); }
1196
- .comty-property-row button[data-copied] svg:last-child { opacity: 1; transform: scale(1); }
1173
+ .comty-property-copy-icon svg:last-child { opacity: 0; transform: scale(.9); }
1174
+ .comty-property-row button[data-copied] svg:first-child, .comty-inspector-copy[data-copied] svg:first-child { opacity: 0; transform: scale(.9); }
1175
+ .comty-property-row button[data-copied] svg:last-child, .comty-inspector-copy[data-copied] svg:last-child { opacity: 1; transform: scale(1); }
1197
1176
  @media (prefers-reduced-motion: reduce) { .comty-property-copy-icon svg { transition: none; } }
1198
1177
  .comty-property-row button[disabled] { cursor: default; opacity: .5; }
1199
1178
  .comty-property-strip { display: flex; align-items: center; justify-content: center; gap: .375rem; }
@@ -1244,29 +1223,29 @@ export function getComtyStyle() {
1244
1223
  .comty-inspect-gap { --comty-spacing-color: var(--comty-gap-fill); }
1245
1224
  .comty-inspect-spacing span { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); padding-inline: .2rem; border-radius: .2rem; background: var(--comty-spacing-color); color: var(--comty-foreground); font: 600 .625rem/1.3 ui-monospace, monospace; white-space: nowrap; }
1246
1225
  .comty-inspector {
1247
- position: fixed; width: 15rem; max-width: calc(100vw - 1rem);
1248
- padding-block: .5rem; border-radius: .5rem;
1249
- color: var(--comty-foreground); background: var(--comty-surface);
1250
- box-shadow: var(--comty-floating-shadow); font: .625rem/1.5 ui-sans-serif, system-ui, sans-serif;
1226
+ position: fixed; width: var(--comty-inspector-width); max-width: calc(100vw - 1rem); max-height: calc(100vh - 1rem);
1227
+ padding: .25rem; border-radius: .75rem; overflow-y: auto;
1228
+ color: var(--comty-foreground); background: var(--comty-toolbar-group);
1229
+ box-shadow: var(--comty-floating-shadow); font: var(--comty-property-font-size)/1.4 var(--comty-font);
1251
1230
  pointer-events: none; box-sizing: border-box;
1252
1231
  }
1253
1232
  .comty-inspector[data-selected] { pointer-events: auto; user-select: text; }
1254
- .comty-inspector-head, .comty-inspector-row { display: flex; align-items: baseline; justify-content: space-between; gap: .5rem; padding-inline: .5rem; }
1255
- .comty-inspector-head { margin-bottom: .5rem; }
1256
- .comty-inspector-head button:last-child { flex-shrink: 0; }
1257
- .comty-inspector-head button:first-child { flex: 1; font-family: ui-monospace, monospace; font-weight: 500; text-align: left; }
1258
- .comty-inspector-row span { color: var(--comty-muted); flex-shrink: 0; }
1259
- .comty-inspector button { min-width: 0; padding: 0; border: 0; color: inherit; background: transparent; font: inherit; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer; }
1260
- .comty-inspector button:hover { text-decoration: underline; }
1233
+ .comty-inspector-head { display: flex; align-items: center; gap: .25rem; padding: 0 .125rem 0 .375rem; min-height: 1.75rem; }
1234
+ .comty-inspector-selector { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: left; color: var(--comty-muted); font-family: ui-monospace, monospace; }
1235
+ .comty-inspector-details { padding: .25rem .25rem .25rem .5rem; border-radius: .5rem; background: var(--comty-toolbar-surface); }
1236
+ .comty-inspector-row { display: grid; grid-template-columns: var(--comty-inspector-label-width) minmax(0, 1fr) var(--comty-copy-size); align-items: center; gap: .25rem; min-height: var(--comty-inspector-row-height); }
1237
+ .comty-inspector-label, .comty-inspector-secondary { color: var(--comty-muted); }
1238
+ .comty-inspector-label { overflow-wrap: anywhere; }
1239
+ .comty-inspector button { min-width: 0; padding: 0; border: 0; color: inherit; background: transparent; font: inherit; cursor: pointer; }
1261
1240
  .comty-inspector button:focus-visible { outline: .125rem solid var(--comty-accent); outline-offset: .125rem; }
1262
- .comty-inspector-value { display: flex; flex-direction: column; align-items: flex-end; min-width: 0; }
1263
- .comty-inspector-value > button, .comty-inspector-tokens button { max-width: 100%; }
1264
- .comty-inspector-picker { display: inline-flex; align-items: center; gap: .25rem; }
1265
- .comty-inspector-swatch { display: inline-block; flex: 0 0 .625rem; width: .625rem; height: .625rem; border: .0625rem solid var(--comty-border); border-radius: .1875rem; }
1266
- .comty-inspector-tokens { display: flex; flex-direction: column; align-items: flex-end; max-width: 100%; }
1267
- .comty-inspector-tokens button { font-family: ui-monospace, monospace; color: var(--comty-muted); }
1268
- .comty-inspector-details { max-height: 50vh; overflow-y: auto; }
1269
- .comty-inspector .comty-inspector-expand { display: block; margin: .5rem auto 0; color: var(--comty-muted); }
1241
+ .comty-inspector-value { display: flex; align-items: center; gap: .3125rem; min-width: 0; padding-block: .125rem; text-align: left; font-variant-numeric: tabular-nums; }
1242
+ .comty-inspector button.comty-inspector-value { padding-block: .125rem; }
1243
+ .comty-inspector-text { min-width: 0; overflow-wrap: anywhere; }
1244
+ .comty-inspector-text:has(.comty-inspector-tokens) { display: flex; flex-wrap: wrap; gap: 0 .3125rem; }
1245
+ .comty-inspector-swatch { display: inline-block; flex: 0 0 .6875rem; width: .6875rem; height: .6875rem; border-radius: .1875rem; }
1246
+ .comty-inspector .comty-inspector-copy { display: grid; place-items: center; flex: 0 0 var(--comty-copy-size); width: var(--comty-copy-size); height: var(--comty-copy-size); border-radius: .375rem; }
1247
+ @media (hover: hover) and (pointer: fine) { .comty-inspector-copy:hover { background: var(--comty-hover-surface); } }
1248
+ @media (pointer: coarse) { .comty-inspector { --comty-copy-size: 2.75rem; } }
1270
1249
  .comty-measure-line { position: fixed; background: var(--comty-outline); pointer-events: none; }
1271
1250
  .comty-measure-tag { position: fixed; padding: .125rem .375rem; border-radius: .25rem; background: var(--comty-ink); color: var(--comty-paper); font: .625rem/1.4 ui-monospace, monospace; white-space: nowrap; pointer-events: none; }
1272
1251
 
@@ -1275,85 +1254,235 @@ export function getComtyStyle() {
1275
1254
  z-index: 2147483647;
1276
1255
  background: var(--comty-surface);
1277
1256
  border: 0;
1278
- box-shadow: 0 4px 20px rgba(0,0,0,.1);
1279
- border-radius: 999px;
1280
- width: 320px;
1281
- font-family: sans-serif;
1282
- display: flex;
1283
- align-items: center;
1284
- padding: 4px 4px 4px 16px;
1285
- gap: 8px;
1257
+ box-shadow: var(--comty-floating-shadow);
1258
+ border-radius: 1.125rem;
1259
+ width: min(16rem, calc(100vw - 1rem));
1260
+ height: 2.25rem;
1261
+ overflow: hidden;
1262
+ font: .75rem/1.25rem var(--comty-font);
1286
1263
  box-sizing: border-box;
1287
- animation: comty-bubble-in 220ms cubic-bezier(.2,.8,.2,1) forwards;
1264
+ animation: comty-bubble-in 200ms var(--comty-ease-out) forwards;
1288
1265
  transform-origin: top left;
1266
+ transition: height var(--comty-motion-duration) var(--comty-ease-in-out), border-radius var(--comty-motion-duration) var(--comty-ease-in-out), box-shadow 160ms var(--comty-ease-out);
1289
1267
  }
1290
1268
 
1291
- .comty-create-bubble.comty-bubble-left {
1292
- animation-name: comty-bubble-in-left;
1293
- transform-origin: top right;
1269
+ .comty-create-bubble.comty-create-expanded {
1270
+ height: 5.75rem;
1271
+ border-radius: .75rem;
1294
1272
  }
1295
1273
 
1274
+ .comty-create-bubble.comty-create-has-attachment { height: 7.5rem; }
1275
+ .comty-create-bubble.comty-bubble-left { transform-origin: top right; }
1276
+
1296
1277
  .comty-create-textarea {
1297
- flex: 1;
1298
- height: 24px;
1299
- min-height: 24px;
1300
- max-height: 150px;
1278
+ position: absolute;
1279
+ top: .5rem;
1280
+ left: .75rem;
1281
+ width: calc(100% - 3.25rem);
1282
+ height: 1.25rem;
1301
1283
  border: none;
1302
1284
  padding: 0;
1303
- font-family: inherit;
1304
- font-size: 14px;
1305
- line-height: 24px;
1285
+ font: inherit;
1306
1286
  resize: none;
1307
1287
  box-sizing: border-box;
1308
1288
  outline: none;
1309
1289
  background: transparent;
1310
- overflow-y: auto;
1290
+ overflow-y: hidden;
1311
1291
  color: var(--comty-foreground);
1312
1292
  scrollbar-width: thin;
1313
- scrollbar-color: gray transparent;
1293
+ scrollbar-color: var(--comty-muted) transparent;
1294
+ transition: width var(--comty-motion-duration) var(--comty-ease-in-out), height var(--comty-motion-duration) var(--comty-ease-in-out);
1295
+ }
1296
+
1297
+ .comty-create-expanded .comty-create-textarea {
1298
+ width: calc(100% - 1.5rem);
1299
+ height: 2.5rem;
1300
+ overflow-y: auto;
1314
1301
  }
1315
1302
 
1316
- .comty-create-textarea::placeholder {
1303
+ .comty-create-attachment {
1304
+ position: absolute;
1305
+ top: 3.25rem;
1306
+ left: .75rem;
1307
+ right: .75rem;
1308
+ display: none;
1309
+ min-width: 0;
1310
+ }
1311
+
1312
+ .comty-create-has-attachment .comty-create-attachment { display: flex; }
1313
+ .comty-create-attachment-chip {
1314
+ display: inline-flex;
1315
+ align-items: center;
1316
+ min-width: 0;
1317
+ max-width: 100%;
1318
+ padding: .125rem .125rem .125rem 0;
1319
+ border-radius: .375rem;
1320
+ background: var(--comty-field-surface);
1321
+ }
1322
+ .comty-create-attachment .comty-comment-link { flex: 0 1 auto; padding: 0 .5rem; line-height: 1.25rem; background: transparent; }
1323
+ .comty-create-attachment button {
1324
+ flex: 0 0 auto;
1325
+ width: 1.25rem;
1326
+ height: 1.25rem;
1327
+ padding: 0;
1328
+ border: 0;
1329
+ border-radius: .25rem;
1330
+ background: transparent;
1317
1331
  color: var(--comty-muted);
1332
+ cursor: pointer;
1318
1333
  }
1319
1334
 
1335
+ .comty-create-textarea::placeholder { color: var(--comty-muted); }
1336
+
1320
1337
  .comty-create-actions {
1338
+ position: absolute;
1339
+ right: 0;
1340
+ bottom: 0;
1341
+ left: 0;
1342
+ display: flex;
1343
+ align-items: center;
1344
+ justify-content: space-between;
1345
+ height: 2.25rem;
1346
+ padding: .375rem .375rem .375rem .5rem;
1347
+ box-sizing: border-box;
1348
+ pointer-events: none;
1349
+ }
1350
+ .comty-create-actions::before {
1351
+ content: "";
1352
+ position: absolute;
1353
+ inset: 0 0 auto;
1354
+ height: .0625rem;
1355
+ background: var(--comty-border);
1356
+ opacity: 0;
1357
+ transition: opacity 110ms var(--comty-ease-out);
1358
+ }
1359
+ .comty-create-expanded .comty-create-actions::before { opacity: 1; transition-delay: 110ms; }
1360
+ .comty-create-actions > button { pointer-events: auto; }
1361
+
1362
+ .comty-create-link-button {
1363
+ display: grid;
1364
+ place-items: center;
1365
+ width: 1.5rem;
1366
+ height: 1.5rem;
1367
+ padding: 0;
1368
+ border: 0;
1369
+ border-radius: .375rem;
1370
+ background: transparent;
1371
+ color: var(--comty-muted);
1372
+ cursor: pointer;
1373
+ opacity: 0;
1374
+ visibility: hidden;
1375
+ transform: translateY(.25rem);
1376
+ transition: opacity 110ms var(--comty-ease-out), transform 110ms var(--comty-ease-out), visibility 0s linear 110ms;
1377
+ }
1378
+ .comty-create-expanded .comty-create-link-button {
1379
+ opacity: 1;
1380
+ visibility: visible;
1381
+ transform: none;
1382
+ transition-delay: 110ms, 110ms, 0s;
1383
+ }
1384
+ .comty-create-link-button svg { width: .75rem; height: .75rem; }
1385
+
1386
+ @media (hover: hover) and (pointer: fine) {
1387
+ .comty-create-link-button:hover,
1388
+ .comty-create-link-editor button:hover,
1389
+ .comty-create-attachment button:hover {
1390
+ background: var(--comty-hover-surface);
1391
+ color: var(--comty-foreground);
1392
+ }
1393
+ }
1394
+ .comty-create-link-button:focus-visible,
1395
+ .comty-create-link-editor button:focus-visible,
1396
+ .comty-create-attachment button:focus-visible,
1397
+ .comty-btn-submit:focus-visible {
1398
+ outline: .0625rem solid var(--comty-comment-focus);
1399
+ outline-offset: .0625rem;
1400
+ }
1401
+
1402
+ .comty-create-link-editor {
1403
+ position: absolute;
1404
+ inset: .375rem;
1321
1405
  display: flex;
1322
1406
  align-items: center;
1407
+ gap: .375rem;
1408
+ background: var(--comty-surface);
1409
+ opacity: 0;
1410
+ visibility: hidden;
1411
+ transform: translateY(.25rem);
1412
+ pointer-events: none;
1413
+ transition: opacity 160ms var(--comty-ease-out), transform 160ms var(--comty-ease-out), visibility 0s linear 160ms;
1414
+ }
1415
+ .comty-create-link-open .comty-create-link-editor {
1416
+ opacity: 1;
1417
+ visibility: visible;
1418
+ transform: none;
1419
+ pointer-events: auto;
1420
+ transition-delay: 0s;
1421
+ }
1422
+ .comty-create-link-field { position: relative; flex: 1; min-width: 0; }
1423
+ .comty-create-link-editor input {
1424
+ display: block;
1425
+ box-sizing: border-box;
1426
+ width: 100%;
1427
+ min-width: 0;
1428
+ height: 1.5rem;
1429
+ padding: 0 1.75rem 0 .5rem;
1430
+ border: 0;
1431
+ border-radius: .375rem;
1432
+ background: var(--comty-field-surface);
1433
+ color: var(--comty-foreground);
1434
+ font: inherit;
1435
+ outline: none;
1436
+ }
1437
+ .comty-create-link-editor input:focus-visible { background: var(--comty-hover-surface); }
1438
+ .comty-create-link-editor input[aria-invalid="true"] { box-shadow: inset 0 0 0 .0625rem var(--comty-error); }
1439
+ .comty-create-link-editor button {
1323
1440
  flex: 0 0 auto;
1441
+ height: 1.5rem;
1442
+ padding: 0 .5rem;
1443
+ border: 0;
1444
+ border-radius: .375rem;
1445
+ background: var(--comty-field-surface);
1446
+ color: var(--comty-foreground);
1447
+ font: inherit;
1448
+ cursor: pointer;
1324
1449
  }
1450
+ .comty-create-link-field button {
1451
+ position: absolute;
1452
+ top: .125rem;
1453
+ right: .125rem;
1454
+ width: 1.25rem;
1455
+ height: 1.25rem;
1456
+ padding: 0;
1457
+ background: transparent;
1458
+ }
1459
+ .comty-create-link-open .comty-create-link-button,
1460
+ .comty-create-link-open .comty-btn-submit { opacity: 0; visibility: hidden; pointer-events: none; }
1325
1461
 
1326
1462
  .comty-btn-submit {
1327
1463
  display: flex;
1328
1464
  align-items: center;
1329
1465
  justify-content: center;
1330
- width: 32px;
1331
- height: 32px;
1466
+ width: 1.5rem;
1467
+ height: 1.5rem;
1332
1468
  padding: 0;
1333
1469
  border-radius: 50%;
1334
1470
  background: var(--comty-border);
1335
- color: white;
1471
+ color: var(--comty-muted);
1336
1472
  border: none;
1337
1473
  cursor: pointer;
1338
- transition: background 150ms ease, opacity 150ms ease;
1474
+ transition: background-color 160ms var(--comty-ease-out), color 160ms var(--comty-ease-out), opacity 160ms var(--comty-ease-out);
1339
1475
  }
1476
+ .comty-btn-submit svg { width: .875rem; height: .875rem; }
1477
+ .comty-btn-submit.comty-btn-active { background: var(--comty-foreground); color: var(--comty-surface); }
1478
+ .comty-btn-submit:disabled { opacity: .6; cursor: not-allowed; }
1340
1479
 
1341
- .comty-btn-submit svg {
1342
- width: 16px;
1343
- height: 16px;
1344
- }
1345
-
1346
- .comty-btn-submit.comty-btn-active {
1347
- background: #0078FF;
1348
- }
1349
-
1350
- .comty-btn-submit.comty-btn-active:hover {
1351
- background: #0062d1;
1352
- }
1353
-
1354
- .comty-btn-submit:disabled {
1355
- opacity: 0.6;
1356
- cursor: not-allowed;
1480
+ @media (prefers-reduced-motion: reduce) {
1481
+ .comty-create-bubble, .comty-create-actions::before, .comty-create-textarea, .comty-create-link-button, .comty-create-link-editor, .comty-reply-field, .comty-reply-input {
1482
+ transition-duration: 0ms;
1483
+ transition-delay: 0ms;
1484
+ }
1485
+ .comty-create-bubble { animation: none; }
1357
1486
  }
1358
1487
  `;
1359
1488
  }