anentrypoint-design 0.0.144 → 0.0.146

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,336 @@
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
+
4083
+ /* VoiceControls — vx-vc-* */
4084
+ .ds-247420 .vx-vc {
4085
+ display: flex; align-items: center; gap: var(--space-1);
4086
+ padding: var(--space-1) var(--space-2);
4087
+ background: var(--bg-2);
4088
+ border-top: var(--bw-hair) solid var(--rule);
4089
+ }
4090
+ .ds-247420 .vx-vc-btn {
4091
+ width: 36px; height: 36px;
4092
+ display: inline-flex; align-items: center; justify-content: center;
4093
+ border: var(--bw-hair) solid var(--rule-strong);
4094
+ border-radius: var(--r-1);
4095
+ background: var(--bg-3); color: var(--fg);
4096
+ cursor: pointer; font-size: 16px; line-height: 1;
4097
+ }
4098
+ .ds-247420 .vx-vc-btn:hover { background: var(--bg-4, var(--bg-3)); }
4099
+ .ds-247420 .vx-vc-on { background: var(--accent); color: var(--accent-fg, #fff); border-color: var(--accent); }
4100
+ .ds-247420 .vx-vc-disabled, .ds-247420 .vx-vc-btn:disabled { opacity: .4; cursor: not-allowed; }
4101
+ .ds-247420 .vx-vc-leave { margin-left: auto; background: var(--danger, #d04545); color: #fff; border-color: var(--danger, #d04545); }
4102
+ .ds-247420 .vx-vc-glyph { pointer-events: none; }
4103
+
4104
+ /* ThreadPanel — cm-thread-panel / cm-tp-* */
4105
+ .ds-247420 .cm-thread-panel {
4106
+ display: flex; flex-direction: column;
4107
+ height: 100%; min-height: 0;
4108
+ background: var(--bg-2); color: var(--fg);
4109
+ border-left: var(--bw-hair) solid var(--rule);
4110
+ }
4111
+ .ds-247420 .cm-tp-head {
4112
+ display: flex; align-items: center; justify-content: space-between;
4113
+ padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule);
4114
+ }
4115
+ .ds-247420 .cm-tp-title { font-weight: 700; font-size: var(--fs-1, 14px); }
4116
+ .ds-247420 .cm-tp-head-actions { display: flex; gap: var(--space-1); }
4117
+ .ds-247420 .cm-tp-new, .ds-247420 .cm-tp-close {
4118
+ border: none; background: transparent; color: var(--fg-2, var(--fg));
4119
+ cursor: pointer; font-size: 16px; width: 24px; height: 24px; border-radius: var(--r-1);
4120
+ }
4121
+ .ds-247420 .cm-tp-new:hover, .ds-247420 .cm-tp-close:hover { background: var(--bg-3); color: var(--fg); }
4122
+ .ds-247420 .cm-tp-list { flex: 1; min-height: 0; overflow-y: auto; }
4123
+ .ds-247420 .cm-tp-item {
4124
+ display: flex; flex-direction: column; gap: 2px;
4125
+ width: 100%; text-align: left; cursor: pointer;
4126
+ padding: var(--space-2); border: none; background: transparent;
4127
+ border-bottom: var(--bw-hair) solid var(--rule);
4128
+ color: var(--fg);
4129
+ }
4130
+ .ds-247420 .cm-tp-item:hover { background: var(--bg-3); }
4131
+ .ds-247420 .cm-tp-item.is-active { background: var(--bg-3); box-shadow: inset 3px 0 0 var(--accent); }
4132
+ .ds-247420 .cm-tp-item.is-unread .cm-tp-item-title { font-weight: 700; }
4133
+ .ds-247420 .cm-tp-dot { position: absolute; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
4134
+ .ds-247420 .cm-tp-item-title { font-size: var(--fs-1, 14px); }
4135
+ .ds-247420 .cm-tp-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4136
+ .ds-247420 .cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
4137
+ .ds-247420 .cm-tp-empty, .ds-247420 .cm-forum-empty { padding: var(--space-3); text-align: center; color: var(--fg-2, var(--fg)); opacity: .7; }
4138
+
4139
+ /* ForumView — cm-forum / cm-forum-* */
4140
+ .ds-247420 .cm-forum { display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
4141
+ .ds-247420 .cm-forum-toolbar { display: flex; gap: var(--space-2); align-items: center; padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule); }
4142
+ .ds-247420 .cm-forum-search { flex: 1; padding: var(--space-1) var(--space-2); border: var(--bw-hair) solid var(--rule-strong); border-radius: var(--r-1); background: var(--bg-3); color: var(--fg); }
4143
+ .ds-247420 .cm-forum-sort { padding: var(--space-1); border: var(--bw-hair) solid var(--rule-strong); border-radius: var(--r-1); background: var(--bg-3); color: var(--fg); }
4144
+ .ds-247420 .cm-forum-new { padding: var(--space-1) var(--space-2); border: none; border-radius: var(--r-1); background: var(--accent); color: var(--accent-fg, #fff); cursor: pointer; }
4145
+ .ds-247420 .cm-forum-list { flex: 1; min-height: 0; overflow-y: auto; }
4146
+ .ds-247420 .cm-forum-item { display: flex; flex-direction: column; gap: var(--space-1); width: 100%; text-align: left; cursor: pointer; padding: var(--space-2) var(--space-3); border: none; background: transparent; border-bottom: var(--bw-hair) solid var(--rule); color: var(--fg); }
4147
+ .ds-247420 .cm-forum-item:hover { background: var(--bg-3); }
4148
+ .ds-247420 .cm-forum-item-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); }
4149
+ .ds-247420 .cm-forum-item-title { font-weight: 700; font-size: var(--fs-1, 14px); }
4150
+ .ds-247420 .cm-forum-item-replies { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; white-space: nowrap; }
4151
+ .ds-247420 .cm-forum-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .85; }
4152
+ .ds-247420 .cm-forum-item-meta { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
4153
+ .ds-247420 .cm-forum-item-tags { display: inline-flex; gap: 4px; }
4154
+ .ds-247420 .cm-forum-tag { padding: 1px 6px; border-radius: var(--r-1); background: var(--bg-3); border: var(--bw-hair) solid var(--rule); }
4155
+
4156
+ /* PageView — cm-page / cm-page-* */
4157
+ .ds-247420 .cm-page { display: flex; flex-direction: column; height: 100%; min-height: 0; overflow-y: auto; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
4158
+ .ds-247420 .cm-page-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); padding: var(--space-3); border-bottom: var(--bw-hair) solid var(--rule); }
4159
+ .ds-247420 .cm-page-title { margin: 0; font-size: var(--fs-3, 20px); font-weight: 700; }
4160
+ .ds-247420 .cm-page-edit { padding: var(--space-1) var(--space-2); border: var(--bw-hair) solid var(--rule-strong); border-radius: var(--r-1); background: var(--bg-3); color: var(--fg); cursor: pointer; }
4161
+ .ds-247420 .cm-page-body { padding: var(--space-3); line-height: 1.6; }
4162
+ .ds-247420 .cm-page-empty { color: var(--fg-2, var(--fg)); opacity: .7; }
4163
+
3645
4164
  /* chat.css */
3646
4165
  /* chat.css — chat-specific styles. Currently empty; all chat styles live in
3647
4166
  app-shell.css under the .chat-* prefix. Reserved for future split. */
@@ -3659,7 +4178,7 @@
3659
4178
  background: var(--panel-1);
3660
4179
  color: var(--panel-text);
3661
4180
  border-bottom: 1px solid var(--rule);
3662
- font: var(--text-sm, 12px/1.4 var(--ff-mono, monospace));
4181
+ font: var(--fs-tiny, 12px)/var(--lh-base, 1.4) var(--ff-mono, monospace);
3663
4182
  }
3664
4183
  .ds-247420 .ds-ep-toolbar.dense { padding: 4px 6px; gap: 4px; }
3665
4184
  .ds-247420 .ds-ep-toolbar-leading,
@@ -3694,7 +4213,7 @@
3694
4213
  .ds-247420 .ds-ep-tree {
3695
4214
  display: flex; flex-direction: column;
3696
4215
  color: var(--panel-text);
3697
- font: var(--text-sm, 12px/1.4 var(--ff-mono, monospace));
4216
+ font: var(--fs-tiny, 12px)/var(--lh-base, 1.4) var(--ff-mono, monospace);
3698
4217
  overflow: auto;
3699
4218
  }
3700
4219
  .ds-247420 .ds-ep-tree-item { display: flex; flex-direction: column; }
@@ -3733,7 +4252,7 @@
3733
4252
  display: flex; flex-direction: column; gap: 6px;
3734
4253
  padding: 8px;
3735
4254
  color: var(--panel-text);
3736
- font: var(--text-sm, 12px/1.4 var(--ff-mono, monospace));
4255
+ font: var(--fs-tiny, 12px)/var(--lh-base, 1.4) var(--ff-mono, monospace);
3737
4256
  }
3738
4257
  .ds-247420 .ds-ep-propfield {
3739
4258
  display: grid;
@@ -4272,7 +4791,7 @@
4272
4791
  .ds-247420 .ds-reorderable-horizontal { flex-direction: row; }
4273
4792
  .ds-247420 .ds-reorder-item {
4274
4793
  display: flex; align-items: center; gap: var(--space-2, 8px);
4275
- padding: var(--space-1, 4px); border-radius: var(--radius-sm, 4px);
4794
+ padding: var(--space-1, 4px); border-radius: var(--r-1, 10px);
4276
4795
  background: var(--panel-1); color: var(--panel-text);
4277
4796
  transition: transform var(--dur-snap, 120ms) var(--ease, ease), opacity var(--dur-snap, 120ms) var(--ease, ease);
4278
4797
  }
@@ -4280,7 +4799,7 @@
4280
4799
  min-width: 44px; min-height: 44px;
4281
4800
  display: inline-flex; align-items: center; justify-content: center;
4282
4801
  appearance: none; background: transparent; color: var(--panel-text-2, var(--panel-text));
4283
- border: 0; border-radius: var(--radius-sm, 4px);
4802
+ border: 0; border-radius: var(--r-1, 10px);
4284
4803
  cursor: grab; font: 14px/1 var(--ff-mono, monospace); letter-spacing: -2px;
4285
4804
  touch-action: none; user-select: none;
4286
4805
  }
@@ -4304,9 +4823,235 @@
4304
4823
  display: inline-block; font: 0.85em/1 var(--ff-mono, monospace);
4305
4824
  padding: var(--space-1, 4px) calc(var(--space-1, 4px) * 1.5);
4306
4825
  border: 1px solid var(--rule, var(--panel-text-3));
4307
- border-radius: var(--radius-sm, 4px);
4826
+ border-radius: var(--r-1, 10px);
4308
4827
  background: var(--panel-2, var(--panel-1)); color: var(--panel-text);
4309
4828
  }
4310
4829
  .ds-247420 .ds-kbd-group { margin: var(--space-3, 12px) 0; }
4311
4830
  .ds-247420 .ds-kbd-group h3 { font-size: 0.9em; opacity: 0.7; margin: 0 0 var(--space-1, 4px); }
4312
4831
  .ds-247420 .ds-kbd-group ul { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: var(--space-1, 4px); }
4832
+
4833
+ /* ---------------------------------------------------------------
4834
+ CommandPalette (ov-cmd)
4835
+ --------------------------------------------------------------- */
4836
+ .ds-247420 .ov-cmd-backdrop {
4837
+ position: fixed; inset: 0;
4838
+ z-index: var(--z-overlay, 1000);
4839
+ background: color-mix(in oklab, var(--fg) 32%, transparent);
4840
+ display: flex; align-items: flex-start; justify-content: center;
4841
+ padding: 12vh var(--space-3, 16px) var(--space-3, 16px);
4842
+ }
4843
+ .ds-247420 .ov-cmd-panel {
4844
+ width: min(560px, 100%);
4845
+ max-height: 64vh;
4846
+ display: flex; flex-direction: column;
4847
+ background: var(--bg-2); color: var(--fg);
4848
+ border: 1px solid var(--rule);
4849
+ border-radius: var(--r-2, 14px);
4850
+ box-shadow: var(--shadow-3, 0 12px 32px rgba(0,0,0,0.3));
4851
+ overflow: hidden;
4852
+ }
4853
+ .ds-247420 .ov-cmd-input {
4854
+ appearance: none; border: 0;
4855
+ border-bottom: 1px solid var(--rule);
4856
+ background: transparent; color: var(--fg);
4857
+ padding: var(--space-3, 16px);
4858
+ font: var(--fs-body, 16px)/1.4 var(--ff-body, sans-serif);
4859
+ outline: none;
4860
+ }
4861
+ .ds-247420 .ov-cmd-input::placeholder { color: var(--fg-3); }
4862
+ .ds-247420 .ov-cmd-list { overflow: auto; padding: var(--space-1, 4px); min-height: 0; }
4863
+ .ds-247420 .ov-cmd-group {
4864
+ padding: var(--space-2, 8px) var(--space-2, 8px) var(--space-1, 4px);
4865
+ font: var(--fs-micro, 11px)/1 var(--ff-mono, monospace);
4866
+ text-transform: uppercase; letter-spacing: var(--tr-label, 0.1em);
4867
+ color: var(--fg-3);
4868
+ }
4869
+ .ds-247420 .ov-cmd-item {
4870
+ display: flex; align-items: center; gap: var(--space-2, 8px);
4871
+ width: 100%; min-height: 40px;
4872
+ padding: var(--space-2, 8px) var(--space-3, 16px);
4873
+ background: transparent; border: 0;
4874
+ color: var(--fg); font: inherit; text-align: left;
4875
+ border-radius: var(--r-1, 10px); cursor: pointer;
4876
+ }
4877
+ .ds-247420 .ov-cmd-item.is-active { background: var(--accent); color: var(--accent-fg); }
4878
+ .ds-247420 .ov-cmd-glyph { width: 18px; display: inline-flex; justify-content: center; flex-shrink: 0; }
4879
+ .ds-247420 .ov-cmd-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4880
+ .ds-247420 .ov-cmd-hint {
4881
+ flex-shrink: 0; color: var(--fg-3);
4882
+ font: var(--fs-tiny, 12px)/1 var(--ff-mono, monospace);
4883
+ }
4884
+ .ds-247420 .ov-cmd-item.is-active .ov-cmd-hint { color: var(--accent-fg); }
4885
+ .ds-247420 .ov-cmd-empty { padding: var(--space-4, 24px); text-align: center; color: var(--fg-3); }
4886
+
4887
+ /* ---------------------------------------------------------------
4888
+ EmojiPicker (ov-emoji)
4889
+ --------------------------------------------------------------- */
4890
+ .ds-247420 .ov-emoji-root {
4891
+ position: fixed; left: 0; top: 0;
4892
+ z-index: var(--z-overlay, 1000);
4893
+ width: 280px;
4894
+ display: flex; flex-direction: column;
4895
+ background: var(--bg-2); color: var(--fg);
4896
+ border: 1px solid var(--rule);
4897
+ border-radius: var(--r-2, 14px);
4898
+ box-shadow: var(--shadow-3, 0 12px 32px rgba(0,0,0,0.3));
4899
+ outline: none; overflow: hidden;
4900
+ }
4901
+ .ds-247420 .ov-emoji-tabs {
4902
+ display: flex; flex-shrink: 0;
4903
+ border-bottom: 1px solid var(--rule);
4904
+ background: var(--bg-3);
4905
+ }
4906
+ .ds-247420 .ov-emoji-tab {
4907
+ flex: 1; appearance: none; border: 0; background: transparent;
4908
+ padding: var(--space-2, 8px); cursor: pointer; font-size: var(--fs-lg, 18px);
4909
+ border-bottom: 2px solid transparent;
4910
+ }
4911
+ .ds-247420 .ov-emoji-tab[aria-selected="true"] { border-bottom-color: var(--accent); background: var(--bg-2); }
4912
+ .ds-247420 .ov-emoji-grid { overflow: auto; max-height: 220px; padding: var(--space-2, 8px); }
4913
+ .ds-247420 .ov-emoji-grid-inner { display: grid; grid-template-columns: repeat(8, 1fr); gap: var(--space-1, 4px); }
4914
+ .ds-247420 .ov-emoji-cell {
4915
+ appearance: none; border: 0; background: transparent;
4916
+ aspect-ratio: 1; font-size: var(--fs-lg, 18px);
4917
+ border-radius: var(--r-1, 10px); cursor: pointer;
4918
+ display: inline-flex; align-items: center; justify-content: center;
4919
+ }
4920
+ .ds-247420 .ov-emoji-cell:hover, .ds-247420 .ov-emoji-cell:focus-visible {
4921
+ background: color-mix(in oklab, var(--accent) 18%, transparent); outline: none;
4922
+ }
4923
+
4924
+ /* ---------------------------------------------------------------
4925
+ BootOverlay (ov-boot)
4926
+ --------------------------------------------------------------- */
4927
+ .ds-247420 .ov-boot {
4928
+ position: fixed; inset: 0;
4929
+ z-index: calc(var(--z-overlay, 1000) + 100);
4930
+ background: var(--bg);
4931
+ display: flex; align-items: center; justify-content: center;
4932
+ color: var(--fg);
4933
+ }
4934
+ .ds-247420 .ov-boot-inner {
4935
+ display: flex; flex-direction: column; align-items: center;
4936
+ gap: var(--space-3, 16px); width: min(320px, 80vw);
4937
+ }
4938
+ .ds-247420 .ov-boot-spinner {
4939
+ width: 40px; height: 40px; border-radius: 50%;
4940
+ border: 3px solid var(--rule);
4941
+ border-top-color: var(--accent);
4942
+ animation: ov-boot-spin 0.8s linear infinite;
4943
+ }
4944
+ @keyframes ov-boot-spin { to { transform: rotate(360deg); } }
4945
+ .ds-247420 .ov-boot-mark { font-size: 40px; line-height: 1; }
4946
+ .ds-247420 .ov-boot-mark-error { color: var(--danger); }
4947
+ .ds-247420 .ov-boot-bar {
4948
+ width: 100%; height: 6px;
4949
+ background: var(--bg-3); border-radius: var(--r-pill, 999px);
4950
+ overflow: hidden;
4951
+ }
4952
+ .ds-247420 .ov-boot-bar-fill {
4953
+ height: 100%; background: var(--accent);
4954
+ border-radius: var(--r-pill, 999px);
4955
+ transition: width var(--dur-base, 160ms) var(--ease, ease);
4956
+ }
4957
+ .ds-247420 .ov-boot-phase {
4958
+ font: var(--fs-sm, 14px)/1.4 var(--ff-mono, monospace);
4959
+ color: var(--fg-2); text-align: center;
4960
+ }
4961
+ .ds-247420 .ov-boot.is-error .ov-boot-phase { color: var(--danger); }
4962
+ @media (prefers-reduced-motion: reduce) {
4963
+ .ds-247420 .ov-boot-spinner { animation: none; }
4964
+ .ds-247420 .ov-boot-bar-fill { transition: none; }
4965
+ }
4966
+
4967
+ /* ---------------------------------------------------------------
4968
+ SettingsPopover (ov-set)
4969
+ --------------------------------------------------------------- */
4970
+ .ds-247420 .ov-set-root {
4971
+ position: fixed; left: 0; top: 0;
4972
+ z-index: var(--z-overlay, 1000);
4973
+ width: 300px; max-height: 70vh;
4974
+ display: flex; flex-direction: column;
4975
+ background: var(--bg-2); color: var(--fg);
4976
+ border: 1px solid var(--rule);
4977
+ border-radius: var(--r-2, 14px);
4978
+ box-shadow: var(--shadow-3, 0 12px 32px rgba(0,0,0,0.3));
4979
+ outline: none; overflow: hidden;
4980
+ }
4981
+ .ds-247420 .ov-set-head {
4982
+ flex-shrink: 0;
4983
+ padding: var(--space-3, 16px);
4984
+ border-bottom: 1px solid var(--rule);
4985
+ font: var(--fs-sm, 14px)/1 var(--ff-mono, monospace);
4986
+ text-transform: uppercase; letter-spacing: var(--tr-label, 0.1em);
4987
+ color: var(--fg);
4988
+ }
4989
+ .ds-247420 .ov-set-body { overflow: auto; padding: var(--space-2, 8px); }
4990
+ .ds-247420 .ov-set-section + .ov-set-section { margin-top: var(--space-2, 8px); }
4991
+ .ds-247420 .ov-set-section-head {
4992
+ padding: var(--space-2, 8px) var(--space-2, 8px) var(--space-1, 4px);
4993
+ font: var(--fs-micro, 11px)/1 var(--ff-mono, monospace);
4994
+ text-transform: uppercase; letter-spacing: var(--tr-label, 0.1em);
4995
+ color: var(--fg-3);
4996
+ }
4997
+ .ds-247420 .ov-set-row {
4998
+ display: flex; align-items: center; gap: var(--space-2, 8px);
4999
+ min-height: 40px; padding: var(--space-1, 4px) var(--space-2, 8px);
5000
+ }
5001
+ .ds-247420 .ov-set-row-label { flex: 1; min-width: 0; font-size: var(--fs-sm, 14px); color: var(--fg-2); }
5002
+ .ds-247420 .ov-set-row-value { color: var(--fg); font: var(--fs-sm, 14px)/1 var(--ff-mono, monospace); }
5003
+ .ds-247420 .ov-set-control {
5004
+ appearance: none; flex-shrink: 0; max-width: 55%;
5005
+ background: var(--bg-3); color: var(--fg);
5006
+ border: 1px solid var(--rule); border-radius: var(--r-1, 10px);
5007
+ padding: var(--space-1, 4px) var(--space-2, 8px); font: inherit;
5008
+ }
5009
+ .ds-247420 .ov-set-control:focus-visible { outline: none; border-color: var(--accent); }
5010
+ .ds-247420 input.ov-set-control[type="range"] { padding: 0; accent-color: var(--accent); }
5011
+ .ds-247420 .ov-set-toggle { width: 18px; height: 18px; accent-color: var(--accent); flex-shrink: 0; cursor: pointer; }
5012
+ .ds-247420 .ov-set-btn {
5013
+ width: 100%; appearance: none; cursor: pointer;
5014
+ background: var(--accent); color: var(--accent-fg);
5015
+ border: 0; border-radius: var(--r-1, 10px);
5016
+ padding: var(--space-2, 8px); font: inherit;
5017
+ }
5018
+
5019
+ /* AuthModal — ov-auth-* */
5020
+ .ds-247420 .ov-auth-backdrop {
5021
+ position: fixed; inset: 0; z-index: var(--z-overlay, 1000);
5022
+ display: flex; align-items: center; justify-content: center;
5023
+ background: rgba(0,0,0,.55);
5024
+ }
5025
+ .ds-247420 .ov-auth-panel {
5026
+ width: min(420px, 92vw);
5027
+ display: flex; flex-direction: column;
5028
+ background: var(--bg-2); color: var(--fg);
5029
+ border: 1px solid var(--rule); border-radius: var(--r-2, 8px);
5030
+ box-shadow: var(--shadow-2, 0 12px 40px rgba(0,0,0,.4));
5031
+ overflow: hidden;
5032
+ }
5033
+ .ds-247420 .ov-auth-head { display: flex; align-items: center; justify-content: space-between; padding: var(--space-3); border-bottom: 1px solid var(--rule); }
5034
+ .ds-247420 .ov-auth-title { margin: 0; font-size: var(--fs-2, 16px); font-weight: 700; }
5035
+ .ds-247420 .ov-auth-x { border: none; background: transparent; color: var(--fg-2, var(--fg)); font-size: 22px; line-height: 1; cursor: pointer; }
5036
+ .ds-247420 .ov-auth-x:hover { color: var(--fg); }
5037
+ .ds-247420 .ov-auth-tabs { display: flex; gap: var(--space-1); padding: var(--space-2) var(--space-3) 0; }
5038
+ .ds-247420 .ov-auth-tab { flex: 1; padding: var(--space-1) var(--space-2); border: 1px solid var(--rule); border-bottom: none; border-radius: var(--r-1) var(--r-1) 0 0; background: var(--bg-3); color: var(--fg-2, var(--fg)); cursor: pointer; }
5039
+ .ds-247420 .ov-auth-tab.is-active { background: var(--bg-2); color: var(--fg); font-weight: 700; }
5040
+ .ds-247420 .ov-auth-body { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3); }
5041
+ .ds-247420 .ov-auth-hint { margin: 0; font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); }
5042
+ .ds-247420 .ov-auth-input { padding: var(--space-2); border: 1px solid var(--rule-strong); border-radius: var(--r-1); background: var(--bg-3); color: var(--fg); }
5043
+ .ds-247420 .ov-auth-primary { padding: var(--space-2); border: none; border-radius: var(--r-1); background: var(--accent); color: var(--accent-fg, #fff); font-weight: 700; cursor: pointer; }
5044
+ .ds-247420 .ov-auth-primary:disabled { opacity: .6; cursor: progress; }
5045
+ .ds-247420 .ov-auth-error { margin: 0 var(--space-3) var(--space-3); padding: var(--space-2); border-radius: var(--r-1); background: var(--danger-bg, rgba(208,69,69,.15)); color: var(--danger, #d04545); font-size: var(--fs-0, 12px); }
5046
+
5047
+ /* VideoLightbox — ov-lightbox-* */
5048
+ .ds-247420 .ov-lightbox-backdrop {
5049
+ position: fixed; inset: 0; z-index: var(--z-overlay-top, 1100);
5050
+ display: flex; align-items: center; justify-content: center;
5051
+ background: rgba(0,0,0,.85);
5052
+ }
5053
+ .ds-247420 .ov-lightbox-x { position: absolute; top: 16px; right: 16px; width: 40px; height: 40px; border: none; border-radius: 50%; background: rgba(255,255,255,.12); color: #fff; font-size: 24px; line-height: 1; cursor: pointer; }
5054
+ .ds-247420 .ov-lightbox-x:hover { background: rgba(255,255,255,.24); }
5055
+ .ds-247420 .ov-lightbox-stage { display: flex; flex-direction: column; align-items: center; gap: var(--space-2); max-width: 92vw; max-height: 90vh; }
5056
+ .ds-247420 .ov-lightbox-video { max-width: 92vw; max-height: 82vh; border-radius: var(--r-1); background: #000; }
5057
+ .ds-247420 .ov-lightbox-label { color: #fff; font-size: var(--fs-0, 12px); opacity: .85; }