anentrypoint-design 0.0.144 → 0.0.145

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/dist/247420.css CHANGED
@@ -485,6 +485,10 @@
485
485
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
486
486
  }
487
487
  .ds-247420 .app-topbar nav a:hover { background: var(--bg-2); color: var(--fg); }
488
+ .ds-247420 .app-topbar nav a:focus-visible {
489
+ outline: 2px solid var(--accent);
490
+ outline-offset: 2px;
491
+ }
488
492
  .ds-247420 .app-topbar nav a.active {
489
493
  color: var(--accent-fg);
490
494
  background: var(--accent);
@@ -511,13 +515,9 @@
511
515
  font-family: inherit; font-size: inherit; color: var(--fg);
512
516
  width: 100%;
513
517
  }
514
- .ds-247420 .app-search input:focus-visible {
518
+ .ds-247420 .app-search:focus-within {
515
519
  outline: 2px solid var(--accent);
516
520
  outline-offset: 2px;
517
- background: var(--bg-2);
518
- border-radius: var(--r-pill);
519
- padding-left: 8px;
520
- padding-right: 8px;
521
521
  }
522
522
 
523
523
  .ds-247420 .app-crumb {
@@ -554,6 +554,10 @@
554
554
  margin-bottom: 2px;
555
555
  }
556
556
  .ds-247420 .app-side a:hover { background: var(--bg-2); color: var(--fg); }
557
+ .ds-247420 .app-side a:focus-visible {
558
+ outline: 2px solid var(--accent);
559
+ outline-offset: 2px;
560
+ }
557
561
  .ds-247420 .app-side a.active {
558
562
  color: var(--accent-fg);
559
563
  background: var(--accent);
@@ -611,6 +615,10 @@
611
615
  .ds-247420 .btn-ghost { background: transparent; color: var(--fg); box-shadow: inset 0 0 0 1.5px var(--rule-strong); }
612
616
  .ds-247420 .btn-ghost:hover { background: var(--bg-2); }
613
617
  .ds-247420 .btn:active, .ds-247420 .btn-primary:active, .ds-247420 .btn-ghost:active { transform: translateY(1px); }
618
+ .ds-247420 .btn:focus-visible, .ds-247420 .btn-primary:focus-visible, .ds-247420 .btn-ghost:focus-visible {
619
+ outline: 2px solid var(--accent);
620
+ outline-offset: 2px;
621
+ }
614
622
 
615
623
  .ds-247420 .chip {
616
624
  display: inline-flex; align-items: center; gap: 6px;
@@ -1506,6 +1514,61 @@
1506
1514
  .ds-247420 .ds-file-row[draggable="true"] { cursor: grab; }
1507
1515
  .ds-247420 .ds-file-row[draggable="true"]:active { cursor: grabbing; }
1508
1516
 
1517
+ /* Multi-select — per-row checkbox overlay + selected state + bulk bar. */
1518
+ .ds-247420 .ds-file-row { position: relative; }
1519
+ .ds-247420 .ds-file-check {
1520
+ position: absolute; left: 4px; top: 50%; transform: translateY(-50%);
1521
+ width: 18px; height: 18px; padding: 0; z-index: 1;
1522
+ display: inline-flex; align-items: center; justify-content: center;
1523
+ border: var(--bw-hair) solid var(--rule); border-radius: 5px;
1524
+ background: var(--bg); color: var(--accent-fg);
1525
+ font-size: 11px; line-height: 1; cursor: pointer;
1526
+ opacity: 0; transition: opacity var(--dur-base) var(--ease), background var(--dur-snap) var(--ease);
1527
+ }
1528
+ .ds-247420 .ds-file-row:hover .ds-file-check,
1529
+ .ds-247420 .ds-file-row:focus-within .ds-file-check,
1530
+ .ds-247420 .ds-file-check.on { opacity: 1; }
1531
+ /* Touch / coarse-pointer devices have no hover — keep checkboxes visible so
1532
+ multi-select is reachable without a pointer. */
1533
+ @media (hover: none), (pointer: coarse) {
1534
+ .ds-247420 .ds-file-check { opacity: 1; }
1535
+ }
1536
+ .ds-247420 .ds-file-check.on { background: var(--accent); border-color: var(--accent); }
1537
+ .ds-247420 .ds-file-row.selected {
1538
+ background: var(--accent-tint);
1539
+ border-color: var(--accent);
1540
+ }
1541
+ .ds-247420 .ds-file-row.selected:hover { background: color-mix(in oklab, var(--accent) 22%, var(--bg)); }
1542
+
1543
+ .ds-247420 .ds-bulk-bar {
1544
+ display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-2);
1545
+ padding: 10px 14px; border-radius: var(--r-2);
1546
+ background: var(--accent-tint);
1547
+ border: var(--bw-hair) solid var(--accent);
1548
+ position: sticky; top: var(--space-2); z-index: 2;
1549
+ }
1550
+ .ds-247420 .ds-bulk-count {
1551
+ font-weight: 600; font-size: var(--fs-sm); margin-right: auto;
1552
+ }
1553
+
1554
+ /* Keyboard-shortcuts hint — compact two-column legend. */
1555
+ .ds-247420 .ds-shortcuts-hint {
1556
+ display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1557
+ gap: 4px var(--space-3);
1558
+ padding: var(--space-3) var(--space-4);
1559
+ background: var(--bg-2); border: var(--bw-hair) solid var(--rule);
1560
+ border-radius: var(--r-2); font-size: var(--fs-xs);
1561
+ }
1562
+ .ds-247420 .ds-shortcut-row { display: flex; align-items: center; gap: var(--space-2); }
1563
+ .ds-247420 .ds-kbd {
1564
+ display: inline-block; min-width: 0;
1565
+ padding: 2px 7px; border-radius: 6px;
1566
+ background: var(--bg); border: var(--bw-hair) solid var(--rule);
1567
+ border-bottom-width: 2px;
1568
+ font-family: var(--ff-mono); font-size: var(--fs-micro); color: var(--fg-2);
1569
+ white-space: nowrap;
1570
+ }
1571
+
1509
1572
  /* ============================================================
1510
1573
  Theme toggle (segmented + compact) — bound to src/theme.js
1511
1574
  ============================================================ */
@@ -1581,7 +1644,7 @@
1581
1644
  .ds-247420 .chat-msg { display: flex; gap: 12px; align-items: flex-start; padding: 6px 0; position: relative; min-width: 0; }
1582
1645
  .ds-247420 .chat-msg.you { flex-direction: row-reverse; }
1583
1646
  .ds-247420 .chat-msg.you .chat-stack { align-items: flex-end; }
1584
- .ds-247420 .chat-msg:hover { background: color-mix(in oklab, var(--fg) 1%, transparent); padding: 6px 0; margin: 0; border-radius: 8px; transition: background var(--dur-base) var(--ease); }
1647
+ .ds-247420 .chat-msg:hover { background: color-mix(in oklab, var(--fg) 4%, transparent); padding: 6px 0; margin: 0; border-radius: 8px; transition: background var(--dur-base) var(--ease); }
1585
1648
 
1586
1649
  .ds-247420 .chat-avatar {
1587
1650
  width: 36px; height: 36px; flex-shrink: 0;
@@ -1909,6 +1972,11 @@
1909
1972
  .ds-247420 .chat-composer button:hover { transform: scale(1.04); }
1910
1973
  .ds-247420 .chat-composer .send:active,
1911
1974
  .ds-247420 .chat-composer button:active { transform: scale(0.96); }
1975
+ .ds-247420 .chat-composer .send:focus-visible,
1976
+ .ds-247420 .chat-composer button:focus-visible {
1977
+ outline: 2px solid var(--accent);
1978
+ outline-offset: 2px;
1979
+ }
1912
1980
  .ds-247420 .chat-composer .send:disabled,
1913
1981
  .ds-247420 .chat-composer button:disabled {
1914
1982
  background: var(--bg-3); color: var(--fg-3); cursor: not-allowed; transform: none;
@@ -2866,9 +2934,9 @@
2866
2934
  display: inline-flex;
2867
2935
  align-items: center;
2868
2936
  justify-content: center;
2869
- width: 44px;
2870
- height: 44px;
2871
- padding: 8px;
2937
+ width: 28px;
2938
+ height: 28px;
2939
+ padding: 4px;
2872
2940
  border: 0;
2873
2941
  background: transparent;
2874
2942
  color: var(--fg-3);
@@ -3045,9 +3113,9 @@
3045
3113
  .ds-247420 .cm-channel-item.active .cm-ch-actions { opacity: 0.6; }
3046
3114
 
3047
3115
  .ds-247420 .cm-ch-action-btn {
3048
- width: 44px;
3049
- height: 44px;
3050
- padding: 8px;
3116
+ width: 28px;
3117
+ height: 28px;
3118
+ padding: 4px;
3051
3119
  display: inline-flex;
3052
3120
  align-items: center;
3053
3121
  justify-content: center;
@@ -3615,6 +3683,12 @@
3615
3683
  border-radius: var(--r-1);
3616
3684
  }
3617
3685
 
3686
+ .ds-247420 .cm-server-header:focus-visible,
3687
+ .ds-247420 .cm-category-header:focus-visible {
3688
+ outline: 2px solid var(--accent);
3689
+ outline-offset: -2px;
3690
+ }
3691
+
3618
3692
  .ds-247420 .cm-member-item:focus-visible {
3619
3693
  outline: 2px solid var(--accent);
3620
3694
  outline-offset: -2px;
@@ -3628,6 +3702,121 @@
3628
3702
  border-radius: var(--r-1);
3629
3703
  }
3630
3704
 
3705
+ /* ---------- mobile header ---------- */
3706
+ .ds-247420 .cm-mobile-header {
3707
+ display: flex;
3708
+ align-items: center;
3709
+ gap: var(--space-2);
3710
+ height: 48px;
3711
+ padding: 0 var(--space-2);
3712
+ background: var(--bg-2);
3713
+ border-bottom: 1px solid var(--panel-3);
3714
+ }
3715
+ .ds-247420 .cm-mh-btn {
3716
+ flex: none;
3717
+ display: inline-flex;
3718
+ align-items: center;
3719
+ justify-content: center;
3720
+ width: 36px;
3721
+ height: 36px;
3722
+ border: none;
3723
+ background: transparent;
3724
+ color: var(--fg);
3725
+ font-size: 18px;
3726
+ line-height: 1;
3727
+ cursor: pointer;
3728
+ border-radius: var(--r-1);
3729
+ }
3730
+ .ds-247420 .cm-mh-btn:hover { background: var(--panel-3); }
3731
+ .ds-247420 .cm-mh-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
3732
+ .ds-247420 .cm-mh-title {
3733
+ flex: 1 1 auto;
3734
+ min-width: 0;
3735
+ font-family: var(--font-mono, monospace);
3736
+ font-weight: 600;
3737
+ color: var(--fg);
3738
+ white-space: nowrap;
3739
+ overflow: hidden;
3740
+ text-overflow: ellipsis;
3741
+ }
3742
+
3743
+ /* ---------- reply bar ---------- */
3744
+ .ds-247420 .cm-reply-bar {
3745
+ display: flex;
3746
+ align-items: center;
3747
+ gap: var(--space-2);
3748
+ padding: var(--space-1) var(--space-2);
3749
+ background: var(--bg-2);
3750
+ border-left: 3px solid var(--accent);
3751
+ font-size: 0.85rem;
3752
+ }
3753
+ .ds-247420 .cm-rb-label { flex: none; color: var(--fg-2); }
3754
+ .ds-247420 .cm-rb-author { color: var(--accent); font-weight: 600; }
3755
+ .ds-247420 .cm-rb-preview {
3756
+ flex: 1 1 auto;
3757
+ min-width: 0;
3758
+ color: var(--fg-2);
3759
+ white-space: nowrap;
3760
+ overflow: hidden;
3761
+ text-overflow: ellipsis;
3762
+ }
3763
+ .ds-247420 .cm-rb-cancel {
3764
+ flex: none;
3765
+ width: 22px;
3766
+ height: 22px;
3767
+ border: none;
3768
+ background: transparent;
3769
+ color: var(--fg-2);
3770
+ font-size: 13px;
3771
+ line-height: 1;
3772
+ cursor: pointer;
3773
+ border-radius: var(--r-1);
3774
+ }
3775
+ .ds-247420 .cm-rb-cancel:hover { background: var(--panel-3); color: var(--fg); }
3776
+ .ds-247420 .cm-rb-cancel:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
3777
+
3778
+ /* ---------- banner ---------- */
3779
+ .ds-247420 .cm-banner {
3780
+ display: flex;
3781
+ align-items: center;
3782
+ gap: var(--space-2);
3783
+ width: 100%;
3784
+ padding: var(--space-2) var(--space-3);
3785
+ font-size: 0.875rem;
3786
+ font-weight: 500;
3787
+ }
3788
+ .ds-247420 .cm-banner.clickable { cursor: pointer; }
3789
+ .ds-247420 .cm-banner-msg { flex: 1 1 auto; min-width: 0; }
3790
+ .ds-247420 .cm-banner-action {
3791
+ flex: none;
3792
+ border: 1px solid currentColor;
3793
+ background: transparent;
3794
+ color: inherit;
3795
+ font: inherit;
3796
+ font-weight: 600;
3797
+ padding: 2px var(--space-2);
3798
+ border-radius: var(--r-1);
3799
+ cursor: pointer;
3800
+ }
3801
+ .ds-247420 .cm-banner-action:hover { background: color-mix(in oklab, currentColor 16%, transparent); }
3802
+ .ds-247420 .cm-banner-action:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
3803
+ .ds-247420 .cm-banner.tone-warning {
3804
+ background: color-mix(in oklab, var(--flame) 18%, var(--bg));
3805
+ color: var(--flame);
3806
+ }
3807
+ .ds-247420 .cm-banner.tone-success {
3808
+ background: color-mix(in oklab, var(--success) 18%, var(--bg));
3809
+ color: var(--success);
3810
+ }
3811
+ .ds-247420 .cm-banner.tone-error {
3812
+ background: color-mix(in oklab, var(--danger) 18%, var(--bg));
3813
+ color: var(--danger);
3814
+ }
3815
+ .ds-247420 .cm-banner.tone-info {
3816
+ background: var(--accent-tint);
3817
+ color: var(--accent);
3818
+ }
3819
+
3631
3820
  /* ---------- prefers-reduced-motion: kill the transitions that were not previously guarded ---------- */
3632
3821
  @media (prefers-reduced-motion: reduce) {
3633
3822
  .ds-247420 .cm-server-icon,
@@ -3642,6 +3831,255 @@
3642
3831
  }
3643
3832
  }
3644
3833
 
3834
+ /* ============================================================
3835
+ Voice surfaces (vx-*) — PTT, VAD meter, webcam, settings, queue
3836
+ ============================================================ */
3837
+
3838
+ .ds-247420 .vx-ptt {
3839
+ position: relative;
3840
+ display: inline-flex;
3841
+ flex-direction: column;
3842
+ align-items: center;
3843
+ justify-content: center;
3844
+ gap: var(--space-1);
3845
+ min-width: 120px;
3846
+ min-height: 120px;
3847
+ padding: var(--space-3);
3848
+ border: var(--bw-rule) solid var(--rule-strong);
3849
+ border-radius: var(--r-pill);
3850
+ background: var(--bg-2);
3851
+ color: var(--fg);
3852
+ font-family: var(--ff-body);
3853
+ font-size: var(--fs-sm);
3854
+ font-weight: 600;
3855
+ cursor: pointer;
3856
+ user-select: none;
3857
+ -webkit-user-select: none;
3858
+ touch-action: none;
3859
+ transition: background var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease), transform var(--dur-snap) var(--ease);
3860
+ }
3861
+ .ds-247420 .vx-ptt:active { transform: scale(0.97); }
3862
+ .ds-247420 .vx-ptt-icon { font-size: var(--fs-xl); line-height: 1; }
3863
+ .ds-247420 .vx-ptt-label { font-size: var(--fs-tiny); letter-spacing: var(--tr-label); text-transform: uppercase; }
3864
+ .ds-247420 .vx-ptt-glow {
3865
+ position: absolute; inset: -4px;
3866
+ border-radius: inherit;
3867
+ pointer-events: none;
3868
+ opacity: 0;
3869
+ }
3870
+ .ds-247420 .vx-ptt-recording, .ds-247420 .vx-ptt-live {
3871
+ background: var(--accent);
3872
+ color: var(--accent-fg);
3873
+ border-color: var(--accent);
3874
+ }
3875
+ .ds-247420 .vx-ptt-recording .vx-ptt-glow, .ds-247420 .vx-ptt-live .vx-ptt-glow {
3876
+ opacity: 1;
3877
+ box-shadow: 0 0 0 0 color-mix(in oklab, var(--accent) 60%, transparent);
3878
+ animation: vx-pulse 1.4s var(--ease) infinite;
3879
+ }
3880
+ .ds-247420 .vx-ptt-vad {
3881
+ border-color: var(--green-2);
3882
+ background: color-mix(in oklab, var(--green) 16%, var(--bg-2));
3883
+ }
3884
+ @keyframes vx-pulse {
3885
+ 0% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--accent) 55%, transparent); }
3886
+ 70% { box-shadow: 0 0 0 14px color-mix(in oklab, var(--accent) 0%, transparent); }
3887
+ 100% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--accent) 0%, transparent); }
3888
+ }
3889
+
3890
+ .ds-247420 .vx-vad { display: flex; flex-direction: column; gap: var(--space-1); width: 100%; }
3891
+ .ds-247420 .vx-vad-track {
3892
+ position: relative;
3893
+ height: 12px;
3894
+ border-radius: var(--r-pill);
3895
+ background: var(--bg-3);
3896
+ overflow: visible;
3897
+ }
3898
+ .ds-247420 .vx-vad-fill {
3899
+ position: absolute; left: 0; top: 0; bottom: 0;
3900
+ border-radius: var(--r-pill);
3901
+ background: var(--fg-3);
3902
+ transition: width var(--dur-snap) linear;
3903
+ }
3904
+ .ds-247420 .vx-vad-fill-over { background: var(--green); }
3905
+ .ds-247420 .vx-vad-marker {
3906
+ position: absolute; top: -3px; bottom: -3px;
3907
+ width: var(--bw-rule);
3908
+ background: var(--accent);
3909
+ transform: translateX(-50%);
3910
+ pointer-events: none;
3911
+ }
3912
+ .ds-247420 .vx-vad-range {
3913
+ position: absolute; inset: 0;
3914
+ width: 100%; height: 100%;
3915
+ margin: 0; opacity: 0;
3916
+ cursor: pointer;
3917
+ }
3918
+ .ds-247420 .vx-vad-readout {
3919
+ display: flex; justify-content: space-between;
3920
+ font-family: var(--ff-mono);
3921
+ font-size: var(--fs-micro);
3922
+ color: var(--fg-3);
3923
+ }
3924
+
3925
+ .ds-247420 .vx-cam { display: flex; flex-direction: column; gap: var(--space-2); }
3926
+ .ds-247420 .vx-cam-stage {
3927
+ position: relative;
3928
+ aspect-ratio: 4 / 3;
3929
+ width: 100%;
3930
+ border-radius: var(--r-2);
3931
+ overflow: hidden;
3932
+ background: var(--bg-3);
3933
+ }
3934
+ .ds-247420 .vx-cam-video { width: 100%; height: 100%; object-fit: cover; display: block; }
3935
+ .ds-247420 .vx-cam-placeholder {
3936
+ position: absolute; inset: 0;
3937
+ display: flex; flex-direction: column;
3938
+ align-items: center; justify-content: center;
3939
+ gap: var(--space-2);
3940
+ color: var(--fg-3);
3941
+ font-size: var(--fs-sm);
3942
+ }
3943
+ .ds-247420 .vx-cam-placeholder span:first-child { font-size: var(--fs-h3); }
3944
+ .ds-247420 .vx-cam-controls { display: flex; gap: var(--space-2); align-items: center; }
3945
+ .ds-247420 .vx-cam-controls .vx-select { flex: 1; }
3946
+
3947
+ .ds-247420 .vx-select {
3948
+ appearance: none;
3949
+ padding: var(--space-1) var(--space-2);
3950
+ border: var(--bw-hair) solid var(--rule-strong);
3951
+ border-radius: var(--r-1);
3952
+ background: var(--bg-2);
3953
+ color: var(--fg);
3954
+ font-family: var(--ff-body);
3955
+ font-size: var(--fs-sm);
3956
+ cursor: pointer;
3957
+ }
3958
+ .ds-247420 .vx-btn {
3959
+ padding: var(--space-1) var(--space-3);
3960
+ border: var(--bw-hair) solid var(--rule-strong);
3961
+ border-radius: var(--r-1);
3962
+ background: var(--bg-2);
3963
+ color: var(--fg);
3964
+ font-family: var(--ff-body);
3965
+ font-size: var(--fs-sm);
3966
+ font-weight: 600;
3967
+ cursor: pointer;
3968
+ transition: background var(--dur-base) var(--ease);
3969
+ }
3970
+ .ds-247420 .vx-btn-on, .ds-247420 .vx-btn-primary { background: var(--accent); color: var(--accent-fg); border-color: var(--accent); }
3971
+
3972
+ .ds-247420 .vx-modal-backdrop {
3973
+ position: fixed; inset: 0;
3974
+ z-index: var(--z-modal);
3975
+ display: flex; align-items: center; justify-content: center;
3976
+ padding: var(--space-3);
3977
+ background: color-mix(in oklab, var(--ink) 55%, transparent);
3978
+ }
3979
+ .ds-247420 .vx-modal {
3980
+ width: 100%; max-width: 440px;
3981
+ max-height: 90vh;
3982
+ display: flex; flex-direction: column;
3983
+ border-radius: var(--r-3);
3984
+ background: var(--bg);
3985
+ color: var(--fg);
3986
+ box-shadow: var(--shadow-3);
3987
+ overflow: hidden;
3988
+ }
3989
+ .ds-247420 .vx-modal-head {
3990
+ display: flex; align-items: center; justify-content: space-between;
3991
+ padding: var(--space-3);
3992
+ border-bottom: var(--bw-hair) solid var(--rule);
3993
+ }
3994
+ .ds-247420 .vx-modal-title { margin: 0; font-size: var(--fs-lg); font-weight: 600; }
3995
+ .ds-247420 .vx-modal-x {
3996
+ border: 0; background: transparent; color: var(--fg-3);
3997
+ font-size: var(--fs-xl); line-height: 1; cursor: pointer; padding: 0 var(--space-1);
3998
+ }
3999
+ .ds-247420 .vx-modal-body { padding: var(--space-3); overflow-y: auto; display: flex; flex-direction: column; gap: var(--space-3); }
4000
+ .ds-247420 .vx-modal-foot {
4001
+ display: flex; justify-content: flex-end; gap: var(--space-2);
4002
+ padding: var(--space-3);
4003
+ border-top: var(--bw-hair) solid var(--rule);
4004
+ }
4005
+ .ds-247420 .vx-section { display: flex; flex-direction: column; gap: var(--space-2); }
4006
+ .ds-247420 .vx-section-label {
4007
+ font-family: var(--ff-mono);
4008
+ font-size: var(--fs-micro);
4009
+ letter-spacing: var(--tr-label);
4010
+ text-transform: uppercase;
4011
+ color: var(--fg-3);
4012
+ }
4013
+ .ds-247420 .vx-segmented { display: flex; gap: var(--space-1); }
4014
+ .ds-247420 .vx-seg {
4015
+ flex: 1;
4016
+ padding: var(--space-1) var(--space-2);
4017
+ border: var(--bw-hair) solid var(--rule-strong);
4018
+ border-radius: var(--r-1);
4019
+ background: var(--bg-2);
4020
+ color: var(--fg);
4021
+ font-family: var(--ff-body);
4022
+ font-size: var(--fs-tiny);
4023
+ font-weight: 600;
4024
+ letter-spacing: var(--tr-caps);
4025
+ cursor: pointer;
4026
+ }
4027
+ .ds-247420 .vx-seg-on { background: var(--accent); color: var(--accent-fg); border-color: var(--accent); }
4028
+ .ds-247420 .vx-range-row { display: flex; align-items: center; gap: var(--space-2); }
4029
+ .ds-247420 .vx-range { flex: 1; accent-color: var(--accent); cursor: pointer; }
4030
+ .ds-247420 .vx-range-val { font-family: var(--ff-mono); font-size: var(--fs-tiny); color: var(--fg-2); min-width: 56px; text-align: right; }
4031
+ .ds-247420 .vx-toggle-row {
4032
+ display: flex; align-items: center; justify-content: space-between;
4033
+ font-size: var(--fs-sm);
4034
+ }
4035
+ .ds-247420 .vx-toggle { accent-color: var(--accent); width: 18px; height: 18px; cursor: pointer; }
4036
+
4037
+ .ds-247420 .vx-queue {
4038
+ display: flex; align-items: center; gap: var(--space-2);
4039
+ padding: var(--space-2);
4040
+ border-radius: var(--r-2);
4041
+ background: var(--bg-2);
4042
+ }
4043
+ .ds-247420 .vx-queue-empty { justify-content: center; }
4044
+ .ds-247420 .vx-queue-empty-text { color: var(--fg-3); font-size: var(--fs-tiny); font-family: var(--ff-mono); }
4045
+ .ds-247420 .vx-queue-ctrls { display: flex; gap: var(--space-1); flex-shrink: 0; }
4046
+ .ds-247420 .vx-queue-btn {
4047
+ width: 32px; height: 32px;
4048
+ display: inline-flex; align-items: center; justify-content: center;
4049
+ border: var(--bw-hair) solid var(--rule-strong);
4050
+ border-radius: var(--r-1);
4051
+ background: var(--bg-3);
4052
+ color: var(--fg);
4053
+ cursor: pointer;
4054
+ font-size: var(--fs-sm);
4055
+ }
4056
+ .ds-247420 .vx-queue-strip {
4057
+ display: flex; gap: var(--space-2);
4058
+ overflow-x: auto;
4059
+ flex: 1;
4060
+ padding-bottom: 2px;
4061
+ }
4062
+ .ds-247420 .vx-chip {
4063
+ display: inline-flex; align-items: center; gap: var(--space-1);
4064
+ flex-shrink: 0;
4065
+ padding: var(--space-1) var(--space-2);
4066
+ border: var(--bw-hair) solid var(--rule);
4067
+ border-radius: var(--r-pill);
4068
+ background: var(--bg-3);
4069
+ color: var(--fg);
4070
+ font-size: var(--fs-tiny);
4071
+ cursor: pointer;
4072
+ }
4073
+ .ds-247420 .vx-chip-current { border-color: var(--accent); background: color-mix(in oklab, var(--accent) 16%, var(--bg-3)); }
4074
+ .ds-247420 .vx-chip-live { border-color: var(--green-2); }
4075
+ .ds-247420 .vx-chip-dot { width: 8px; height: 8px; border-radius: var(--r-pill); background: var(--fg-3); flex-shrink: 0; }
4076
+ .ds-247420 .vx-chip-name { font-weight: 600; }
4077
+ .ds-247420 .vx-chip-dur { font-family: var(--ff-mono); color: var(--fg-3); }
4078
+ .ds-247420 .vx-chip-tag {
4079
+ font-family: var(--ff-mono); font-size: var(--fs-micro);
4080
+ color: var(--green); font-weight: 700; letter-spacing: var(--tr-caps);
4081
+ }
4082
+
3645
4083
  /* chat.css */
3646
4084
  /* chat.css — chat-specific styles. Currently empty; all chat styles live in
3647
4085
  app-shell.css under the .chat-* prefix. Reserved for future split. */
@@ -3659,7 +4097,7 @@
3659
4097
  background: var(--panel-1);
3660
4098
  color: var(--panel-text);
3661
4099
  border-bottom: 1px solid var(--rule);
3662
- font: var(--text-sm, 12px/1.4 var(--ff-mono, monospace));
4100
+ font: var(--fs-tiny, 12px)/var(--lh-base, 1.4) var(--ff-mono, monospace);
3663
4101
  }
3664
4102
  .ds-247420 .ds-ep-toolbar.dense { padding: 4px 6px; gap: 4px; }
3665
4103
  .ds-247420 .ds-ep-toolbar-leading,
@@ -3694,7 +4132,7 @@
3694
4132
  .ds-247420 .ds-ep-tree {
3695
4133
  display: flex; flex-direction: column;
3696
4134
  color: var(--panel-text);
3697
- font: var(--text-sm, 12px/1.4 var(--ff-mono, monospace));
4135
+ font: var(--fs-tiny, 12px)/var(--lh-base, 1.4) var(--ff-mono, monospace);
3698
4136
  overflow: auto;
3699
4137
  }
3700
4138
  .ds-247420 .ds-ep-tree-item { display: flex; flex-direction: column; }
@@ -3733,7 +4171,7 @@
3733
4171
  display: flex; flex-direction: column; gap: 6px;
3734
4172
  padding: 8px;
3735
4173
  color: var(--panel-text);
3736
- font: var(--text-sm, 12px/1.4 var(--ff-mono, monospace));
4174
+ font: var(--fs-tiny, 12px)/var(--lh-base, 1.4) var(--ff-mono, monospace);
3737
4175
  }
3738
4176
  .ds-247420 .ds-ep-propfield {
3739
4177
  display: grid;
@@ -4272,7 +4710,7 @@
4272
4710
  .ds-247420 .ds-reorderable-horizontal { flex-direction: row; }
4273
4711
  .ds-247420 .ds-reorder-item {
4274
4712
  display: flex; align-items: center; gap: var(--space-2, 8px);
4275
- padding: var(--space-1, 4px); border-radius: var(--radius-sm, 4px);
4713
+ padding: var(--space-1, 4px); border-radius: var(--r-1, 10px);
4276
4714
  background: var(--panel-1); color: var(--panel-text);
4277
4715
  transition: transform var(--dur-snap, 120ms) var(--ease, ease), opacity var(--dur-snap, 120ms) var(--ease, ease);
4278
4716
  }
@@ -4280,7 +4718,7 @@
4280
4718
  min-width: 44px; min-height: 44px;
4281
4719
  display: inline-flex; align-items: center; justify-content: center;
4282
4720
  appearance: none; background: transparent; color: var(--panel-text-2, var(--panel-text));
4283
- border: 0; border-radius: var(--radius-sm, 4px);
4721
+ border: 0; border-radius: var(--r-1, 10px);
4284
4722
  cursor: grab; font: 14px/1 var(--ff-mono, monospace); letter-spacing: -2px;
4285
4723
  touch-action: none; user-select: none;
4286
4724
  }
@@ -4304,9 +4742,195 @@
4304
4742
  display: inline-block; font: 0.85em/1 var(--ff-mono, monospace);
4305
4743
  padding: var(--space-1, 4px) calc(var(--space-1, 4px) * 1.5);
4306
4744
  border: 1px solid var(--rule, var(--panel-text-3));
4307
- border-radius: var(--radius-sm, 4px);
4745
+ border-radius: var(--r-1, 10px);
4308
4746
  background: var(--panel-2, var(--panel-1)); color: var(--panel-text);
4309
4747
  }
4310
4748
  .ds-247420 .ds-kbd-group { margin: var(--space-3, 12px) 0; }
4311
4749
  .ds-247420 .ds-kbd-group h3 { font-size: 0.9em; opacity: 0.7; margin: 0 0 var(--space-1, 4px); }
4312
4750
  .ds-247420 .ds-kbd-group ul { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: var(--space-1, 4px); }
4751
+
4752
+ /* ---------------------------------------------------------------
4753
+ CommandPalette (ov-cmd)
4754
+ --------------------------------------------------------------- */
4755
+ .ds-247420 .ov-cmd-backdrop {
4756
+ position: fixed; inset: 0;
4757
+ z-index: var(--z-overlay, 1000);
4758
+ background: color-mix(in oklab, var(--fg) 32%, transparent);
4759
+ display: flex; align-items: flex-start; justify-content: center;
4760
+ padding: 12vh var(--space-3, 16px) var(--space-3, 16px);
4761
+ }
4762
+ .ds-247420 .ov-cmd-panel {
4763
+ width: min(560px, 100%);
4764
+ max-height: 64vh;
4765
+ display: flex; flex-direction: column;
4766
+ background: var(--bg-2); color: var(--fg);
4767
+ border: 1px solid var(--rule);
4768
+ border-radius: var(--r-2, 14px);
4769
+ box-shadow: var(--shadow-3, 0 12px 32px rgba(0,0,0,0.3));
4770
+ overflow: hidden;
4771
+ }
4772
+ .ds-247420 .ov-cmd-input {
4773
+ appearance: none; border: 0;
4774
+ border-bottom: 1px solid var(--rule);
4775
+ background: transparent; color: var(--fg);
4776
+ padding: var(--space-3, 16px);
4777
+ font: var(--fs-body, 16px)/1.4 var(--ff-body, sans-serif);
4778
+ outline: none;
4779
+ }
4780
+ .ds-247420 .ov-cmd-input::placeholder { color: var(--fg-3); }
4781
+ .ds-247420 .ov-cmd-list { overflow: auto; padding: var(--space-1, 4px); min-height: 0; }
4782
+ .ds-247420 .ov-cmd-group {
4783
+ padding: var(--space-2, 8px) var(--space-2, 8px) var(--space-1, 4px);
4784
+ font: var(--fs-micro, 11px)/1 var(--ff-mono, monospace);
4785
+ text-transform: uppercase; letter-spacing: var(--tr-label, 0.1em);
4786
+ color: var(--fg-3);
4787
+ }
4788
+ .ds-247420 .ov-cmd-item {
4789
+ display: flex; align-items: center; gap: var(--space-2, 8px);
4790
+ width: 100%; min-height: 40px;
4791
+ padding: var(--space-2, 8px) var(--space-3, 16px);
4792
+ background: transparent; border: 0;
4793
+ color: var(--fg); font: inherit; text-align: left;
4794
+ border-radius: var(--r-1, 10px); cursor: pointer;
4795
+ }
4796
+ .ds-247420 .ov-cmd-item.is-active { background: var(--accent); color: var(--accent-fg); }
4797
+ .ds-247420 .ov-cmd-glyph { width: 18px; display: inline-flex; justify-content: center; flex-shrink: 0; }
4798
+ .ds-247420 .ov-cmd-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4799
+ .ds-247420 .ov-cmd-hint {
4800
+ flex-shrink: 0; color: var(--fg-3);
4801
+ font: var(--fs-tiny, 12px)/1 var(--ff-mono, monospace);
4802
+ }
4803
+ .ds-247420 .ov-cmd-item.is-active .ov-cmd-hint { color: var(--accent-fg); }
4804
+ .ds-247420 .ov-cmd-empty { padding: var(--space-4, 24px); text-align: center; color: var(--fg-3); }
4805
+
4806
+ /* ---------------------------------------------------------------
4807
+ EmojiPicker (ov-emoji)
4808
+ --------------------------------------------------------------- */
4809
+ .ds-247420 .ov-emoji-root {
4810
+ position: fixed; left: 0; top: 0;
4811
+ z-index: var(--z-overlay, 1000);
4812
+ width: 280px;
4813
+ display: flex; flex-direction: column;
4814
+ background: var(--bg-2); color: var(--fg);
4815
+ border: 1px solid var(--rule);
4816
+ border-radius: var(--r-2, 14px);
4817
+ box-shadow: var(--shadow-3, 0 12px 32px rgba(0,0,0,0.3));
4818
+ outline: none; overflow: hidden;
4819
+ }
4820
+ .ds-247420 .ov-emoji-tabs {
4821
+ display: flex; flex-shrink: 0;
4822
+ border-bottom: 1px solid var(--rule);
4823
+ background: var(--bg-3);
4824
+ }
4825
+ .ds-247420 .ov-emoji-tab {
4826
+ flex: 1; appearance: none; border: 0; background: transparent;
4827
+ padding: var(--space-2, 8px); cursor: pointer; font-size: var(--fs-lg, 18px);
4828
+ border-bottom: 2px solid transparent;
4829
+ }
4830
+ .ds-247420 .ov-emoji-tab[aria-selected="true"] { border-bottom-color: var(--accent); background: var(--bg-2); }
4831
+ .ds-247420 .ov-emoji-grid { overflow: auto; max-height: 220px; padding: var(--space-2, 8px); }
4832
+ .ds-247420 .ov-emoji-grid-inner { display: grid; grid-template-columns: repeat(8, 1fr); gap: var(--space-1, 4px); }
4833
+ .ds-247420 .ov-emoji-cell {
4834
+ appearance: none; border: 0; background: transparent;
4835
+ aspect-ratio: 1; font-size: var(--fs-lg, 18px);
4836
+ border-radius: var(--r-1, 10px); cursor: pointer;
4837
+ display: inline-flex; align-items: center; justify-content: center;
4838
+ }
4839
+ .ds-247420 .ov-emoji-cell:hover, .ds-247420 .ov-emoji-cell:focus-visible {
4840
+ background: color-mix(in oklab, var(--accent) 18%, transparent); outline: none;
4841
+ }
4842
+
4843
+ /* ---------------------------------------------------------------
4844
+ BootOverlay (ov-boot)
4845
+ --------------------------------------------------------------- */
4846
+ .ds-247420 .ov-boot {
4847
+ position: fixed; inset: 0;
4848
+ z-index: calc(var(--z-overlay, 1000) + 100);
4849
+ background: var(--bg);
4850
+ display: flex; align-items: center; justify-content: center;
4851
+ color: var(--fg);
4852
+ }
4853
+ .ds-247420 .ov-boot-inner {
4854
+ display: flex; flex-direction: column; align-items: center;
4855
+ gap: var(--space-3, 16px); width: min(320px, 80vw);
4856
+ }
4857
+ .ds-247420 .ov-boot-spinner {
4858
+ width: 40px; height: 40px; border-radius: 50%;
4859
+ border: 3px solid var(--rule);
4860
+ border-top-color: var(--accent);
4861
+ animation: ov-boot-spin 0.8s linear infinite;
4862
+ }
4863
+ @keyframes ov-boot-spin { to { transform: rotate(360deg); } }
4864
+ .ds-247420 .ov-boot-mark { font-size: 40px; line-height: 1; }
4865
+ .ds-247420 .ov-boot-mark-error { color: var(--danger); }
4866
+ .ds-247420 .ov-boot-bar {
4867
+ width: 100%; height: 6px;
4868
+ background: var(--bg-3); border-radius: var(--r-pill, 999px);
4869
+ overflow: hidden;
4870
+ }
4871
+ .ds-247420 .ov-boot-bar-fill {
4872
+ height: 100%; background: var(--accent);
4873
+ border-radius: var(--r-pill, 999px);
4874
+ transition: width var(--dur-base, 160ms) var(--ease, ease);
4875
+ }
4876
+ .ds-247420 .ov-boot-phase {
4877
+ font: var(--fs-sm, 14px)/1.4 var(--ff-mono, monospace);
4878
+ color: var(--fg-2); text-align: center;
4879
+ }
4880
+ .ds-247420 .ov-boot.is-error .ov-boot-phase { color: var(--danger); }
4881
+ @media (prefers-reduced-motion: reduce) {
4882
+ .ds-247420 .ov-boot-spinner { animation: none; }
4883
+ .ds-247420 .ov-boot-bar-fill { transition: none; }
4884
+ }
4885
+
4886
+ /* ---------------------------------------------------------------
4887
+ SettingsPopover (ov-set)
4888
+ --------------------------------------------------------------- */
4889
+ .ds-247420 .ov-set-root {
4890
+ position: fixed; left: 0; top: 0;
4891
+ z-index: var(--z-overlay, 1000);
4892
+ width: 300px; max-height: 70vh;
4893
+ display: flex; flex-direction: column;
4894
+ background: var(--bg-2); color: var(--fg);
4895
+ border: 1px solid var(--rule);
4896
+ border-radius: var(--r-2, 14px);
4897
+ box-shadow: var(--shadow-3, 0 12px 32px rgba(0,0,0,0.3));
4898
+ outline: none; overflow: hidden;
4899
+ }
4900
+ .ds-247420 .ov-set-head {
4901
+ flex-shrink: 0;
4902
+ padding: var(--space-3, 16px);
4903
+ border-bottom: 1px solid var(--rule);
4904
+ font: var(--fs-sm, 14px)/1 var(--ff-mono, monospace);
4905
+ text-transform: uppercase; letter-spacing: var(--tr-label, 0.1em);
4906
+ color: var(--fg);
4907
+ }
4908
+ .ds-247420 .ov-set-body { overflow: auto; padding: var(--space-2, 8px); }
4909
+ .ds-247420 .ov-set-section + .ov-set-section { margin-top: var(--space-2, 8px); }
4910
+ .ds-247420 .ov-set-section-head {
4911
+ padding: var(--space-2, 8px) var(--space-2, 8px) var(--space-1, 4px);
4912
+ font: var(--fs-micro, 11px)/1 var(--ff-mono, monospace);
4913
+ text-transform: uppercase; letter-spacing: var(--tr-label, 0.1em);
4914
+ color: var(--fg-3);
4915
+ }
4916
+ .ds-247420 .ov-set-row {
4917
+ display: flex; align-items: center; gap: var(--space-2, 8px);
4918
+ min-height: 40px; padding: var(--space-1, 4px) var(--space-2, 8px);
4919
+ }
4920
+ .ds-247420 .ov-set-row-label { flex: 1; min-width: 0; font-size: var(--fs-sm, 14px); color: var(--fg-2); }
4921
+ .ds-247420 .ov-set-row-value { color: var(--fg); font: var(--fs-sm, 14px)/1 var(--ff-mono, monospace); }
4922
+ .ds-247420 .ov-set-control {
4923
+ appearance: none; flex-shrink: 0; max-width: 55%;
4924
+ background: var(--bg-3); color: var(--fg);
4925
+ border: 1px solid var(--rule); border-radius: var(--r-1, 10px);
4926
+ padding: var(--space-1, 4px) var(--space-2, 8px); font: inherit;
4927
+ }
4928
+ .ds-247420 .ov-set-control:focus-visible { outline: none; border-color: var(--accent); }
4929
+ .ds-247420 input.ov-set-control[type="range"] { padding: 0; accent-color: var(--accent); }
4930
+ .ds-247420 .ov-set-toggle { width: 18px; height: 18px; accent-color: var(--accent); flex-shrink: 0; cursor: pointer; }
4931
+ .ds-247420 .ov-set-btn {
4932
+ width: 100%; appearance: none; cursor: pointer;
4933
+ background: var(--accent); color: var(--accent-fg);
4934
+ border: 0; border-radius: var(--r-1, 10px);
4935
+ padding: var(--space-2, 8px); font: inherit;
4936
+ }