@threadlabs/looma 0.28.3 → 0.28.5

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.
@@ -3485,28 +3485,46 @@ from {
3485
3485
  display: none;
3486
3486
  }
3487
3487
 
3488
- [data-component~="ui-editor-insert-table-grid"][data-v-a8e7e3a2] {
3489
- padding: var(--ui-space-3);
3490
- background: var(--ui-surface);
3491
- border: var(--ui-border-width) solid var(--ui-border-strong);
3492
- border-radius: var(--ui-radius-md);
3493
- box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
3488
+ [data-component~="ui-editor-toolbar"][data-v-fa1e480e] {
3489
+ position: sticky;
3490
+ top: 0;
3491
+ z-index: var(--ui-editor-toolbar-z-index, 10);
3492
+ display: flex;
3493
+ align-items: center;
3494
+ padding: var(--ui-editor-toolbar-padding-block, 6px)
3495
+ var(--ui-editor-toolbar-padding-inline, 12px);
3496
+ min-height: var(--ui-editor-toolbar-min-height, 48px);
3497
+ background: var(--ui-editor-toolbar-surface, var(--ui-surface));
3498
+ border-bottom: var(--ui-border-width) solid
3499
+ var(--ui-editor-toolbar-border, var(--ui-border-divider));
3494
3500
  }
3495
- .hint[data-v-a8e7e3a2] {
3496
- margin: 0 0 var(--ui-space-2);
3497
- font-size: var(--ui-font-size-sm);
3498
- color: var(--ui-text-muted);
3501
+
3502
+ /* One row, always. When the controls outgrow the space, the row scrolls sideways rather than
3503
+ wrapping into several lines, and a fade at each edge that has more to show says so. */
3504
+ .strip[data-v-fa1e480e] {
3505
+ display: flex;
3506
+ flex: 1 1 auto;
3507
+ align-items: center;
3508
+ justify-content: flex-start;
3509
+ gap: var(--ui-editor-toolbar-gap, 2px);
3510
+ min-width: 0;
3511
+ overflow-x: auto;
3512
+ overflow-y: hidden;
3513
+ overscroll-behavior-inline: contain;
3514
+ scrollbar-width: none;
3499
3515
  }
3500
- .grid[data-v-a8e7e3a2] {
3501
- display: grid;
3502
- grid-template-columns: repeat(var(--_cols, 8), 1.25rem);
3503
- grid-template-rows: repeat(var(--_rows, 8), 1.25rem);
3504
- gap: 2px;
3505
- margin-bottom: var(--ui-space-2);
3506
- max-inline-size: 100%;
3507
- overflow: auto;
3516
+ .strip[data-v-fa1e480e]::-webkit-scrollbar {
3517
+ display: none;
3518
+ }
3519
+ .strip > [data-v-fa1e480e-s] {
3520
+ flex: 0 0 auto;
3521
+ }
3522
+
3523
+ /* The edge fades are the scroll fade every Looma scroller uses (see ui-scroll-area), a mask on the
3524
+ strip, so a floating toolbar's border and shadow stay whole. */
3525
+ .strip[data-v-fa1e480e] {
3508
3526
  --_ui-scroll-fade-direction: to right;
3509
- --_ui-scroll-fade-size: var(--ui-scroll-fade-size, 24px);
3527
+ --_ui-scroll-fade-size: var(--ui-editor-toolbar-fade-size, var(--ui-scroll-fade-size, 24px));
3510
3528
  mask-image: linear-gradient(
3511
3529
  var(--_ui-scroll-fade-direction),
3512
3530
  transparent,
@@ -3526,1130 +3544,1480 @@ from {
3526
3544
  -1px calc(100% - var(--_ui-scroll-fade-size)),
3527
3545
  calc(100% - var(--_ui-scroll-fade-size)) 100%;
3528
3546
  }
3529
- [data-component~="ui-editor-insert-table-grid"]:dir(rtl) .grid[data-v-a8e7e3a2] {
3547
+ [data-component~="ui-editor-toolbar"]:dir(rtl) .strip[data-v-fa1e480e] {
3530
3548
  --_ui-scroll-fade-direction: to left;
3531
3549
  }
3532
- .cell[data-v-a8e7e3a2] {
3533
- width: 1.25rem;
3534
- height: 1.25rem;
3550
+ .divider[data-v-fa1e480e-s] {
3551
+ width: 1px;
3552
+ height: 20px;
3553
+ background: var(--ui-editor-toolbar-divider, var(--ui-border-divider));
3554
+ flex-shrink: 0;
3555
+ margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
3556
+ }
3557
+ [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-fa1e480e] {
3558
+ position: relative;
3559
+ top: auto;
3560
+ width: max-content;
3561
+ max-width: min(calc(100vw - 24px), 100%);
3562
+ min-height: auto;
3563
+ padding: var(--ui-editor-toolbar-floating-padding, 4px);
3564
+ background: color-mix(
3565
+ in srgb,
3566
+ var(--ui-editor-toolbar-surface, var(--ui-surface)) 96%,
3567
+ transparent
3568
+ );
3569
+ border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
3570
+ border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
3571
+ box-shadow: var(
3572
+ --ui-editor-toolbar-floating-shadow,
3573
+ var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12))
3574
+ );
3575
+ backdrop-filter: blur(10px);
3576
+ }
3577
+ @media (max-width: 767px) {
3578
+ [data-component~="ui-editor-toolbar"][data-v-fa1e480e] {
3579
+ position: fixed;
3580
+ top: auto;
3581
+ bottom: env(safe-area-inset-bottom);
3582
+ left: 0;
3583
+ right: 0;
3584
+ min-height: var(--ui-editor-toolbar-mobile-min-height, 56px);
3585
+ border-top: var(--ui-border-width) solid
3586
+ var(--ui-editor-toolbar-border, var(--ui-border-divider));
3587
+ border-bottom: none;
3588
+ box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
3589
+ }
3590
+ [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-fa1e480e] {
3591
+ position: relative;
3592
+ inset: auto;
3593
+ min-height: auto;
3594
+ border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
3595
+ border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
3596
+ box-shadow: var(
3597
+ --ui-editor-toolbar-floating-shadow,
3598
+ var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12))
3599
+ );
3600
+ }
3601
+ }
3602
+
3603
+ /* Inside LoomaEditor's sticky shell, the shell is the sticky surface. */
3604
+ .looma-editor__sticky-toolbar-shell [data-component~="ui-editor-toolbar"][data-v-fa1e480e] {
3605
+ position: relative;
3606
+ min-height: var(--ui-editor-toolbar-min-height, 48px);
3607
+ background: transparent;
3608
+ border: 0;
3609
+ box-shadow: none;
3610
+ }
3611
+
3612
+ /* Inside LoomaEditor's mobile shell, the toolbar is a scroll-snapping strip. */
3613
+ .looma-editor__mobile-toolbar-shell
3614
+ [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-fa1e480e] {
3615
+ width: 100%;
3616
+ max-width: none;
3617
+ min-height: 100%;
3535
3618
  padding: 0;
3536
- border: var(--ui-border-width) solid var(--ui-control-border);
3537
- border-radius: var(--ui-radius-sm);
3538
- background: var(--ui-surface);
3539
- cursor: pointer;
3619
+ background: transparent;
3620
+ border: 0;
3621
+ border-radius: 0;
3622
+ box-shadow: none;
3623
+ backdrop-filter: none;
3540
3624
  }
3541
- .cell.selected[data-v-a8e7e3a2] {
3542
- background: var(--ui-accent-solid, var(--ui-accent));
3543
- border-color: var(--ui-accent-solid, var(--ui-accent));
3625
+ .looma-editor__mobile-toolbar-shell
3626
+ [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"]
3627
+ .strip[data-v-fa1e480e] {
3628
+ scroll-snap-type: x mandatory;
3544
3629
  }
3545
- .cell[data-v-a8e7e3a2]:focus-visible {
3546
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
3547
- outline-offset: calc(-1 * var(--ui-focus-width));
3630
+
3631
+ /* A component that sets its display still honours the hidden attribute on its root. */
3632
+ [data-component~="ui-editor-toolbar"][hidden][data-v-fa1e480e] {
3633
+ display: none;
3548
3634
  }
3549
- .header[data-v-a8e7e3a2] {
3550
- display: block;
3551
- margin-bottom: var(--ui-space-2);
3552
- font-size: var(--ui-font-size-sm);
3553
- cursor: pointer;
3635
+
3636
+ /* This component's hooks style the element they are set on, and never a nested one. */
3637
+ @property --ui-form-field-danger {
3638
+ syntax: "*";
3639
+ inherits: false;
3554
3640
  }
3555
- @media (pointer: coarse) {
3556
- .grid[data-v-a8e7e3a2] {
3557
- grid-template-columns: repeat(var(--_cols, 8), 44px);
3558
- grid-template-rows: repeat(var(--_rows, 8), 44px);
3641
+ @property --ui-form-field-help-font-size {
3642
+ syntax: "*";
3643
+ inherits: false;
3559
3644
  }
3560
- .cell[data-v-a8e7e3a2] {
3561
- width: 44px;
3562
- height: 44px;
3645
+ @property --ui-form-field-help-min-block-size {
3646
+ syntax: "*";
3647
+ inherits: false;
3563
3648
  }
3649
+ @property --ui-form-field-help-text {
3650
+ syntax: "*";
3651
+ inherits: false;
3564
3652
  }
3565
- @media (forced-colors: active) {
3566
- .cell[data-v-a8e7e3a2]:focus-visible {
3567
- outline-color: Highlight;
3653
+ @property --ui-form-field-label-font-size {
3654
+ syntax: "*";
3655
+ inherits: false;
3568
3656
  }
3657
+ @property --ui-form-field-label-text {
3658
+ syntax: "*";
3659
+ inherits: false;
3569
3660
  }
3570
- [data-component~="ui-editor-insert-table-grid"][hidden][data-v-a8e7e3a2] {
3571
- display: none;
3661
+ @property --ui-form-field-min-inline-size {
3662
+ syntax: "*";
3663
+ inherits: false;
3572
3664
  }
3665
+ [data-component~="ui-form-field"][data-v-3feaf986] {
3666
+ /* Hooks do not inherit, so the parts below read them from the root. */
3667
+ --_ui-form-field-danger: var(--ui-form-field-danger);
3668
+ --_ui-form-field-help-min-block-size: var(--ui-form-field-help-min-block-size);
3669
+ --_ui-form-field-label-text: var(--ui-form-field-label-text);
3670
+ --_ui-form-field-label-font-size: var(--ui-form-field-label-font-size);
3671
+ --_ui-form-field-help-text: var(--ui-form-field-help-text);
3672
+ --_ui-form-field-help-font-size: var(--ui-form-field-help-font-size);
3573
3673
 
3574
- [data-component~="ui-editor-mention-menu"][popover][data-v-f27cd779] {
3575
- position: fixed;
3576
- inset: auto;
3577
- margin: 0;
3674
+ display: grid;
3675
+ gap: var(--ui-space-2);
3676
+ min-inline-size: var(--ui-form-field-min-inline-size, 0);
3677
+ align-content: start;
3678
+ color: var(--ui-text-primary);
3578
3679
  }
3579
- [data-component~="ui-editor-mention-menu"][data-v-f27cd779] {
3580
- user-select: none;
3680
+
3681
+ /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
3682
+ in Vue), and generates no box of its own, so an empty region adds no gap. */
3683
+ .label[data-v-3feaf986],
3684
+ .help[data-v-3feaf986],
3685
+ .error[data-v-3feaf986] {
3686
+ display: contents;
3581
3687
  }
3582
- [data-component~="ui-editor-mention-menu"][data-v-f27cd779] {
3688
+ .label[data-v-3feaf986] {
3689
+ color: var(--_ui-form-field-label-text, var(--ui-text-secondary));
3690
+ font-size: var(--_ui-form-field-label-font-size, var(--ui-font-size-sm));
3691
+ }
3692
+
3693
+ /* A label action, such as a small help button, sits after the label text in a box one line
3694
+ tall, centred on the first line and overflowing it. A button taller than a line of label
3695
+ text then never makes this field's label row taller than its neighbours' in a grid row. */
3696
+ .label[data-v-3feaf986]:has(> .label-action > *) {
3583
3697
  display: flex;
3584
- overflow: hidden;
3585
- flex-direction: column;
3586
- background: var(--ui-surface);
3587
- border: var(--ui-border-width) solid var(--ui-border-strong);
3588
- border-radius: var(--ui-radius-dialog);
3589
- box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
3698
+ align-items: start;
3699
+ gap: var(--ui-space-1);
3590
3700
  }
3591
- .header[data-v-f27cd779] {
3701
+ .label-action[data-v-3feaf986] {
3592
3702
  display: flex;
3593
- align-items: center;
3594
- justify-content: space-between;
3595
- gap: var(--ui-space-3);
3596
- padding: var(--ui-space-2) var(--ui-space-3);
3597
- color: var(--ui-text-secondary);
3598
- border-bottom: var(--ui-border-width) solid var(--ui-border-divider);
3599
- font-size: var(--ui-font-size-xs);
3600
- font-weight: var(--ui-font-semibold);
3703
+ align-items: unsafe center;
3704
+ block-size: 1lh;
3601
3705
  }
3602
- [data-component~="ui-editor-mention-menu"] > .header[data-v-f27cd779]:empty,
3603
- [data-component~="ui-editor-mention-menu"] > .empty[data-v-f27cd779]:empty {
3706
+ .label-action[data-v-3feaf986]:not(:has(> *)) {
3604
3707
  display: none;
3605
3708
  }
3606
- .empty[data-v-f27cd779] {
3607
- padding: var(--ui-space-3);
3608
- color: var(--ui-text-muted);
3609
- font-size: var(--ui-font-size-sm);
3610
- }
3611
- .hint[data-v-f27cd779] {
3612
- overflow: hidden;
3613
- color: var(--ui-text-muted);
3614
- font-weight: var(--ui-font-normal);
3615
- text-overflow: ellipsis;
3616
- white-space: nowrap;
3709
+ .help[data-v-3feaf986] {
3710
+ color: var(--_ui-form-field-help-text, var(--ui-text-muted));
3711
+ font-size: var(--_ui-form-field-help-font-size, var(--ui-font-size-sm));
3712
+ line-height: var(--ui-line-height-md);
3617
3713
  }
3618
- .list[data-v-f27cd779] {
3619
- max-height: 280px;
3620
- padding: var(--ui-space-1) 0;
3621
- margin: 0;
3622
- overflow-y: auto;
3623
- overscroll-behavior: contain;
3624
- list-style: none;
3625
- /* Each edge that hides content fades: the scroll fade every Looma scroller uses (see ui-scroll-area). */
3626
- --_ui-scroll-fade-direction: to bottom;
3627
- --_ui-scroll-fade-size: var(--ui-scroll-fade-size, 24px);
3628
- mask-image: linear-gradient(
3629
- var(--_ui-scroll-fade-direction),
3630
- transparent,
3631
- #000 var(--_ui-scroll-fade-start),
3632
- #000 calc(100% - var(--_ui-scroll-fade-end)),
3633
- transparent
3634
- );
3635
- animation:
3636
- ui-scroll-fade-start linear,
3637
- ui-scroll-fade-start-hold linear,
3638
- ui-scroll-fade-end-hold linear,
3639
- ui-scroll-fade-end linear;
3640
- animation-timeline: scroll(self block);
3641
- animation-range:
3642
- 0 var(--_ui-scroll-fade-size),
3643
- var(--_ui-scroll-fade-size) calc(100% + 1px),
3644
- -1px calc(100% - var(--_ui-scroll-fade-size)),
3645
- calc(100% - var(--_ui-scroll-fade-size)) 100%;
3714
+ .help > [data-v-3feaf986-s] {
3715
+ min-block-size: var(--_ui-form-field-help-min-block-size, 0);
3646
3716
  }
3647
- .item[data-v-f27cd779] {
3648
- display: flex;
3649
- align-items: center;
3650
- min-height: 44px;
3651
- padding: var(--ui-space-2) var(--ui-space-3);
3652
- gap: var(--ui-space-3);
3653
- cursor: pointer;
3717
+ .error[data-v-3feaf986] {
3718
+ display: none;
3654
3719
  }
3655
- .item.active[data-v-f27cd779] {
3656
- background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
3720
+ [data-component~="ui-form-field"][data-ui-form-field-state~="invalid"] .error[data-v-3feaf986] {
3721
+ display: contents;
3657
3722
  }
3658
3723
 
3659
- /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
3660
- the surface and a fine accent ring, so the initials stay visible. */
3661
- .item.active .avatar[data-v-f27cd779] {
3662
- background: var(--ui-surface);
3663
- box-shadow: inset 0 0 0 1px var(--ui-accent-soft, var(--ui-accent-subtle));
3724
+ /* An error reads in the danger colour, the one the invalid control's border takes. */
3725
+ .error[data-v-3feaf986],[role="alert"][data-v-3feaf986-s] {
3726
+ color: var(--_ui-form-field-danger, var(--ui-field-danger, var(--ui-danger)));
3727
+ font-size: var(--ui-font-size-sm);
3664
3728
  }
3665
- .avatar[data-v-f27cd779] {
3666
- display: inline-flex;
3667
- align-items: center;
3668
- justify-content: center;
3669
- width: 32px;
3670
- height: 32px;
3671
- flex: 0 0 auto;
3672
- color: var(--ui-accent-active, var(--ui-accent-solid));
3673
- background: var(--ui-accent-soft, var(--ui-accent-subtle));
3674
- border-radius: var(--ui-radius-round);
3675
- font-size: var(--ui-font-size-xs);
3676
- font-weight: var(--ui-font-semibold);
3729
+
3730
+ /* A component that sets its display still honours the hidden attribute on its root. */
3731
+ [data-component~="ui-form-field"][hidden][data-v-3feaf986] {
3732
+ display: none;
3677
3733
  }
3678
- .body[data-v-f27cd779] {
3679
- display: flex;
3680
- min-width: 0;
3681
- flex-direction: column;
3734
+
3735
+ /* This component's hooks style the element they are set on, and never a nested one. */
3736
+ @property --ui-icon-button-active-scale {
3737
+ syntax: "*";
3738
+ inherits: false;
3682
3739
  }
3683
- .label[data-v-f27cd779],
3684
- .detail[data-v-f27cd779] {
3685
- overflow: hidden;
3686
- text-overflow: ellipsis;
3687
- white-space: nowrap;
3740
+ @property --ui-icon-button-active-surface {
3741
+ syntax: "*";
3742
+ inherits: false;
3688
3743
  }
3689
- .label[data-v-f27cd779] {
3690
- color: var(--ui-text-primary);
3691
- font-size: var(--ui-font-size-sm);
3692
- font-weight: var(--ui-font-medium);
3744
+ @property --ui-icon-button-border {
3745
+ syntax: "*";
3746
+ inherits: false;
3693
3747
  }
3694
- .detail[data-v-f27cd779],
3695
- .loading[data-v-f27cd779] {
3696
- color: var(--ui-text-muted);
3697
- font-size: var(--ui-font-size-xs);
3748
+ @property --ui-icon-button-disabled-filter {
3749
+ syntax: "*";
3750
+ inherits: false;
3698
3751
  }
3699
- .loading[data-v-f27cd779] {
3700
- min-height: 44px;
3701
- padding: var(--ui-space-3);
3752
+ @property --ui-icon-button-disabled-opacity {
3753
+ syntax: "*";
3754
+ inherits: false;
3702
3755
  }
3703
- @media (max-width: 767px) {
3704
- [data-component~="ui-editor-mention-menu"][data-v-f27cd779] {
3705
- border-bottom: 0;
3706
- border-radius: var(--ui-radius-dialog) var(--ui-radius-dialog) 0 0;
3756
+ @property --ui-icon-button-hover-border {
3757
+ syntax: "*";
3758
+ inherits: false;
3707
3759
  }
3708
- .list[data-v-f27cd779] {
3709
- max-height: calc(60dvh - 48px);
3760
+ @property --ui-icon-button-hover-surface {
3761
+ syntax: "*";
3762
+ inherits: false;
3710
3763
  }
3764
+ @property --ui-icon-button-hover-text {
3765
+ syntax: "*";
3766
+ inherits: false;
3711
3767
  }
3712
- [data-component~="ui-editor-mention-menu"][hidden][data-v-f27cd779] {
3713
- display: none;
3768
+ @property --ui-icon-button-icon-size {
3769
+ syntax: "*";
3770
+ inherits: false;
3714
3771
  }
3715
-
3716
- [data-component~="ui-editor-mention-menu-item"][data-v-aa8aa3c4] {
3717
- display: flex;
3718
- align-items: center;
3719
- min-block-size: 44px;
3720
- padding: var(--ui-space-2) var(--ui-space-3);
3721
- gap: var(--ui-space-3);
3722
- cursor: pointer;
3723
- list-style: none;
3772
+ @property --ui-icon-button-icon-stroke-width {
3773
+ syntax: "*";
3774
+ inherits: false;
3724
3775
  }
3725
- [data-component~="ui-editor-mention-menu-item"][aria-selected="true"][data-v-aa8aa3c4] {
3726
- background: var(--ui-accent-subtle);
3776
+ @property --ui-icon-button-outline-surface {
3777
+ syntax: "*";
3778
+ inherits: false;
3727
3779
  }
3728
-
3729
- /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
3730
- the surface and a fine accent ring, so the initials stay visible. */
3731
- [data-component~="ui-editor-mention-menu-item"][aria-selected="true"] .avatar[data-v-aa8aa3c4] {
3732
- background: var(--ui-surface);
3733
- box-shadow: inset 0 0 0 1px var(--ui-accent-soft);
3780
+ @property --ui-icon-button-outline-text {
3781
+ syntax: "*";
3782
+ inherits: false;
3734
3783
  }
3735
-
3736
- /* A slotted Avatar (a person's photo) is its own circle. */
3737
- [data-component~="ui-editor-mention-menu-item"] .avatar[data-v-aa8aa3c4]:has(> [data-component~="ui-avatar"]) {
3738
- background: none;
3739
- box-shadow: none;
3784
+ @property --ui-icon-button-radius {
3785
+ syntax: "*";
3786
+ inherits: false;
3740
3787
  }
3741
- .avatar[data-v-aa8aa3c4] {
3742
- display: inline-flex;
3743
- align-items: center;
3744
- justify-content: center;
3745
- inline-size: 32px;
3746
- block-size: 32px;
3747
- flex: 0 0 auto;
3748
- color: var(--ui-accent-active);
3749
- background: var(--ui-accent-soft);
3750
- border-radius: var(--ui-radius-round);
3751
- font-size: var(--ui-font-size-xs);
3752
- font-weight: var(--ui-font-semibold);
3788
+ @property --ui-icon-button-size {
3789
+ syntax: "*";
3790
+ inherits: false;
3753
3791
  }
3754
- .body[data-v-aa8aa3c4] {
3755
- display: flex;
3756
- min-inline-size: 0;
3757
- flex-direction: column;
3792
+ @property --ui-icon-button-solid-hover-surface {
3793
+ syntax: "*";
3794
+ inherits: false;
3758
3795
  }
3759
- .label[data-v-aa8aa3c4], .detail[data-v-aa8aa3c4] {
3760
- overflow: hidden;
3761
- text-overflow: ellipsis;
3762
- white-space: nowrap;
3796
+ @property --ui-icon-button-solid-shadow {
3797
+ syntax: "*";
3798
+ inherits: false;
3763
3799
  }
3764
- .label[data-v-aa8aa3c4] {
3765
- color: var(--ui-text-primary);
3766
- font-size: var(--ui-font-size-sm);
3767
- font-weight: var(--ui-font-medium);
3800
+ @property --ui-icon-button-solid-surface {
3801
+ syntax: "*";
3802
+ inherits: false;
3768
3803
  }
3769
- .detail[data-v-aa8aa3c4] {
3770
- color: var(--ui-text-muted);
3771
- font-size: var(--ui-font-size-xs);
3804
+ @property --ui-icon-button-solid-text {
3805
+ syntax: "*";
3806
+ inherits: false;
3772
3807
  }
3773
- [data-component~="ui-editor-mention-menu-item"][hidden][data-v-aa8aa3c4] {
3774
- display: none;
3808
+ @property --ui-icon-button-surface {
3809
+ syntax: "*";
3810
+ inherits: false;
3775
3811
  }
3812
+ [data-component~="ui-icon-button"][data-v-ea2a5496] {
3813
+ /* Optional inherited action-group values keep text and icon actions under the same light.
3814
+ One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
3815
+ A single ambient lift avoids stacking a face gradient or another inset bevel. */
3816
+ --_ui-action-start: 1px;
3817
+ --_ui-action-edge: var(
3818
+ --ui-action-edge,
3819
+ inset var(--_ui-action-start) 1px 0 light-dark(
3820
+ rgb(255 255 255 / 0.08),
3821
+ rgb(255 255 255 / 0.06)
3822
+ ),
3823
+ inset calc(-1 * var(--_ui-action-start)) -1px 0 light-dark(rgb(0 0 0 / 0.08), rgb(0 0 0 / 0.08))
3824
+ );
3825
+ --_ui-action-shadow:
3826
+ var(--_ui-action-edge),
3827
+ 0 1px 2px light-dark(rgb(0 0 0 / 0.10), rgb(0 0 0 / 0.20));
3828
+ /* Hooks do not inherit, so the parts below read them from the root. */
3829
+ --_ui-icon-button-icon-size: var(--ui-icon-button-icon-size);
3830
+ --_ui-icon-button-icon-stroke-width: var(--ui-icon-button-icon-stroke-width);
3776
3831
 
3777
- [data-component~="ui-editor-slash-menu"][popover][data-v-a85c3b18] {
3778
- position: fixed;
3779
- inset: auto;
3780
- margin: 0;
3781
- }
3782
- [data-component~="ui-editor-slash-menu"][data-v-a85c3b18] {
3783
- user-select: none;
3832
+ display: inline-flex;
3833
+ color: var(--ui-text-secondary);
3784
3834
  }
3785
- [data-component~="ui-editor-slash-menu"][data-v-a85c3b18] {
3786
- background: var(--ui-surface);
3787
- border: var(--ui-border-width) solid var(--ui-border-strong);
3788
- border-radius: var(--ui-radius-dialog);
3789
- box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
3790
- overflow: hidden;
3791
- display: flex;
3792
- flex-direction: column;
3793
- }
3794
- @media (max-width: 767px) {
3795
- [data-component~="ui-editor-slash-menu"][data-v-a85c3b18] {
3796
- border-radius: var(--ui-radius-dialog) var(--ui-radius-dialog) 0 0;
3797
- border-bottom: none;
3835
+ [data-component~="ui-icon-button"][data-v-ea2a5496]:dir(rtl) {
3836
+ --_ui-action-start: -1px;
3798
3837
  }
3838
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="tone=accent"][data-v-ea2a5496] {
3839
+ --_icon-button-border: var(--ui-accent-solid);
3840
+ --_icon-button-hover-border: var(--ui-accent-hover);
3841
+ --_icon-button-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
3842
+ --_icon-button-outline-surface: color-mix(
3843
+ in srgb,
3844
+ var(--ui-accent-solid) 5%,
3845
+ var(--ui-surface-default)
3846
+ );
3847
+ color: var(--_icon-button-text);
3799
3848
  }
3800
- .header[data-v-a85c3b18] {
3801
- display: none;
3802
- align-items: center;
3803
- gap: var(--ui-space-2);
3804
- padding: var(--ui-space-3) var(--ui-space-4);
3805
- border-bottom: var(--ui-border-width) solid var(--ui-border-divider);
3806
- font-size: var(--ui-font-size-xs);
3807
- color: var(--ui-text-muted);
3808
- font-weight: var(--ui-font-semibold);
3809
- text-transform: uppercase;
3810
- letter-spacing: 0.05em;
3849
+
3850
+ /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
3851
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="tone=neutral"][data-v-ea2a5496] {
3852
+ --_icon-button-solid-surface: var(--ui-text-primary);
3853
+ --_icon-button-solid-hover-surface: var(--ui-text-primary);
3854
+ --_icon-button-solid-text: var(--ui-surface-default);
3811
3855
  }
3812
- [data-component~="ui-editor-slash-menu"] > .header[data-v-a85c3b18]:empty,
3813
- [data-component~="ui-editor-slash-menu"] > .footer[data-v-a85c3b18]:empty,
3814
- [data-component~="ui-editor-slash-menu"] > .empty[data-v-a85c3b18]:empty {
3815
- display: none;
3856
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496] {
3857
+ position: relative;
3816
3858
  }
3817
- .empty[data-v-a85c3b18] {
3818
- padding: var(--ui-space-3);
3819
- color: var(--ui-text-muted);
3820
- font-size: var(--ui-font-size-sm);
3859
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]::before {
3860
+ content: "";
3861
+ position: absolute;
3862
+ inset: 50% auto auto 50%;
3863
+ z-index: 1;
3864
+ inline-size: var(--ui-affordance-guide-size);
3865
+ block-size: var(--ui-affordance-guide-size);
3866
+ border-radius: var(--ui-radius-round);
3867
+ background: var(--ui-affordance-guide-color, var(--ui-border-strong));
3868
+ opacity: calc(var(--ui-affordance-guide-opacity) * var(--ui-affordance-scope-guide, 1));
3869
+ transform: translate(-50%, -50%);
3870
+ transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
3871
+ pointer-events: none;
3821
3872
  }
3822
- @media (max-width: 767px) {
3823
- .header[data-v-a85c3b18] {
3824
- display: flex;
3873
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-ui-icon-button-state~="guide=bar"][data-v-ea2a5496]::before {
3874
+ inline-size: 2px;
3875
+ block-size: 20px;
3876
+ background: var(--ui-border-strong);
3877
+ opacity: 1;
3825
3878
  }
3879
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]:disabled::before {
3880
+ opacity: 0;
3826
3881
  }
3827
- .list[data-v-a85c3b18] {
3828
- list-style: none;
3829
- margin: 0;
3830
- padding: var(--ui-space-1) 0;
3831
- overflow-y: auto;
3832
- max-height: 280px;
3833
- overscroll-behavior: contain;
3834
- /* Each edge that hides content fades: the scroll fade every Looma scroller uses (see ui-scroll-area). */
3835
- --_ui-scroll-fade-direction: to bottom;
3836
- --_ui-scroll-fade-size: var(--ui-scroll-fade-size, 24px);
3837
- mask-image: linear-gradient(
3838
- var(--_ui-scroll-fade-direction),
3839
- transparent,
3840
- #000 var(--_ui-scroll-fade-start),
3841
- #000 calc(100% - var(--_ui-scroll-fade-end)),
3842
- transparent
3843
- );
3844
- animation:
3845
- ui-scroll-fade-start linear,
3846
- ui-scroll-fade-start-hold linear,
3847
- ui-scroll-fade-end-hold linear,
3848
- ui-scroll-fade-end linear;
3849
- animation-timeline: scroll(self block);
3850
- animation-range:
3851
- 0 var(--_ui-scroll-fade-size),
3852
- var(--_ui-scroll-fade-size) calc(100% + 1px),
3853
- -1px calc(100% - var(--_ui-scroll-fade-size)),
3854
- calc(100% - var(--_ui-scroll-fade-size)) 100%;
3882
+
3883
+ /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
3884
+ proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
3885
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-ea2a5496] {
3886
+ opacity: 1;
3887
+ transform: scale(1);
3888
+ transition:
3889
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
3890
+ transform calc(var(--ui-motion-fast) * 2) cubic-bezier(0.2, 1.4, 0.35, 1);
3855
3891
  }
3856
- @media (max-width: 767px) {
3857
- .list[data-v-a85c3b18] {
3858
- max-height: calc(60dvh - 80px);
3859
- padding: var(--ui-space-1) 0 var(--ui-space-2);
3892
+ @media (hover: hover) and (pointer: fine) {
3893
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible) {
3894
+ border-color: transparent;
3895
+ background-color: transparent;
3896
+ box-shadow: none;
3860
3897
  }
3898
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)
3899
+ .content[data-v-ea2a5496] {
3900
+ opacity: 0;
3901
+ transform: scale(0.65);
3902
+ transition-duration: var(--ui-motion-fast);
3861
3903
  }
3862
- .item[data-v-a85c3b18] {
3863
- display: flex;
3864
- align-items: center;
3865
- gap: var(--ui-space-3);
3866
- padding: var(--ui-space-2) var(--ui-space-3);
3867
- min-height: 44px;
3868
- cursor: pointer;
3869
- transition: background-color 120ms ease;
3870
3904
  }
3871
- .item.active[data-v-a85c3b18] {
3872
- background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
3905
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
3906
+ opacity: 0;
3873
3907
  }
3874
- .icon[data-v-a85c3b18] {
3875
- display: flex;
3908
+ [data-component~="ui-icon-button"][data-v-ea2a5496] {
3909
+ /* The size prop resolves here; --ui-icon-button-size overrides it on an element. */
3910
+ --_size: 2rem;
3911
+ appearance: none;
3912
+ inline-size: var(--ui-icon-button-size, var(--_size));
3913
+ block-size: var(--ui-icon-button-size, var(--_size));
3914
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
3915
+ min-block-size: var(--ui-icon-button-size, var(--_size));
3916
+ padding: 0;
3917
+ margin: 0;
3918
+ border: var(--ui-border-width) solid transparent;
3919
+ border-radius: var(--ui-icon-button-radius, var(--ui-action-radius, var(--ui-radius-md)));
3920
+ background-color: var(--ui-icon-button-surface, transparent);
3921
+ color: inherit;
3922
+ display: inline-flex;
3876
3923
  align-items: center;
3877
3924
  justify-content: center;
3878
- width: 32px;
3879
- height: 32px;
3880
- background: var(--ui-surface-hover);
3881
- border: var(--ui-border-width) solid var(--ui-border);
3882
- border-radius: var(--ui-radius-md);
3883
- font-size: var(--ui-font-size-sm);
3884
- font-weight: var(--ui-font-bold);
3885
- color: var(--ui-text-secondary);
3886
- font-family: var(--ui-font-family-mono, ui-monospace, monospace);
3887
- flex-shrink: 0;
3888
- line-height: 1;
3925
+ cursor: pointer;
3926
+ transition:
3927
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
3928
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
3929
+ color var(--ui-motion-fast) var(--ui-motion-ease),
3930
+ box-shadow var(--ui-motion-base) var(--ui-motion-ease),
3931
+ scale var(--ui-motion-fast) var(--ui-motion-ease);
3889
3932
  }
3890
- .item.active .icon[data-v-a85c3b18] {
3891
- background: var(--ui-accent);
3892
- border-color: var(--ui-accent);
3893
- color: var(--ui-accent-contrast);
3933
+ @media (hover: none), (pointer: coarse) {
3934
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]::before {
3935
+ opacity: 0;
3894
3936
  }
3895
- .icon[data-v-a85c3b18] {
3896
- --_ui-default-icon-size: 1rem;
3897
- --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
3898
3937
  }
3899
- .body[data-v-a85c3b18] {
3900
- display: flex;
3901
- min-width: 0;
3902
- flex-direction: column;
3903
- gap: 1px;
3938
+
3939
+ /* A touch target without a bigger button: an invisible hit area, at least the control
3940
+ minimum, centred on the button (::before is the anticipatory guide). */
3941
+ @media (pointer: coarse) {
3942
+ [data-component~="ui-icon-button"][data-v-ea2a5496] {
3943
+ position: relative;
3904
3944
  }
3905
- .title[data-v-a85c3b18] {
3906
- font-size: var(--ui-font-size-sm);
3907
- font-weight: var(--ui-font-medium);
3908
- color: var(--ui-text);
3909
- white-space: nowrap;
3910
- overflow: hidden;
3911
- text-overflow: ellipsis;
3945
+ [data-component~="ui-icon-button"][data-v-ea2a5496]::after {
3946
+ content: "";
3947
+ position: absolute;
3948
+ inset: 50% auto auto 50%;
3949
+ inline-size: max(100%, var(--ui-control-min-block-size));
3950
+ block-size: max(100%, var(--ui-control-min-block-size));
3951
+ transform: translate(-50%, -50%);
3912
3952
  }
3913
- .description[data-v-a85c3b18] {
3914
- font-size: var(--ui-font-size-xs);
3915
- color: var(--ui-text-muted);
3916
- white-space: nowrap;
3917
- overflow: hidden;
3918
- text-overflow: ellipsis;
3919
3953
  }
3920
- .footer[data-v-a85c3b18] {
3921
- padding: var(--ui-space-2) var(--ui-space-3);
3922
- border-top: var(--ui-border-width) solid var(--ui-border-divider);
3923
- font-size: var(--ui-font-size-xs);
3924
- color: var(--ui-text-muted);
3954
+ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-ea2a5496] {
3955
+ position: relative;
3925
3956
  }
3926
- [data-component~="ui-editor-slash-menu"] kbd[data-v-a85c3b18] {
3927
- display: inline-flex;
3928
- align-items: center;
3929
- justify-content: center;
3930
- font-family: var(--ui-font-family-mono, ui-monospace, monospace);
3931
- font-size: var(--ui-font-size-2xs);
3932
- background: var(--ui-surface-hover);
3933
- border: var(--ui-border-width) solid var(--ui-border);
3934
- border-radius: var(--ui-radius-sm);
3935
- padding: 0 3px;
3936
- color: var(--ui-text-secondary);
3957
+ html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-ea2a5496]::after {
3958
+ content: "";
3959
+ position: absolute;
3960
+ inset: 50% auto auto 50%;
3961
+ inline-size: max(100%, var(--ui-control-min-block-size));
3962
+ block-size: max(100%, var(--ui-control-min-block-size));
3963
+ transform: translate(-50%, -50%);
3937
3964
  }
3938
- [data-component~="ui-editor-slash-menu"][hidden][data-v-a85c3b18] {
3939
- display: none;
3965
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-ea2a5496] {
3966
+ --_size: 1.75rem;
3967
+ inline-size: var(--ui-icon-button-size, var(--_size));
3968
+ block-size: var(--ui-icon-button-size, var(--_size));
3969
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
3970
+ min-block-size: var(--ui-icon-button-size, var(--_size));
3971
+ }
3972
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-ea2a5496] {
3973
+ --_size: 2.5rem;
3974
+ inline-size: var(--ui-icon-button-size, var(--_size));
3975
+ block-size: var(--ui-icon-button-size, var(--_size));
3976
+ min-inline-size: var(--ui-icon-button-size, var(--_size));
3977
+ min-block-size: var(--ui-icon-button-size, var(--_size));
3940
3978
  }
3941
3979
 
3942
- [data-component~="ui-editor-slash-menu-group"][data-v-516afff1] {
3943
- display: block;
3944
- list-style: none;
3980
+ /* A text button's companion uses control geometry; compact icon buttons keep their own density. */
3981
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-v-ea2a5496] {
3982
+ --_size: var(--ui-control-size-md);
3983
+ block-size: auto;
3984
+ align-self: stretch;
3985
+ }
3986
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=sm"][data-v-ea2a5496] {
3987
+ --_size: var(--ui-control-size-sm);
3988
+ }
3989
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=lg"][data-v-ea2a5496] {
3990
+ --_size: var(--ui-control-size-lg);
3991
+ }
3992
+ @media (pointer: coarse) {
3993
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-v-ea2a5496] {
3994
+ inline-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
3995
+ min-inline-size: max(
3996
+ var(--ui-icon-button-size, var(--_size)),
3997
+ var(--ui-control-min-block-size)
3998
+ );
3999
+ min-block-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
4000
+ }
4001
+ }
4002
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="round"][data-v-ea2a5496] {
4003
+ border-radius: var(--ui-radius-round);
4004
+ }
4005
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-ea2a5496] {
4006
+ border-color: var(
4007
+ --ui-icon-button-border,
4008
+ var(--_icon-button-border, var(--ui-control-border, var(--ui-border-strong)))
4009
+ );
4010
+ background-color: var(
4011
+ --ui-icon-button-outline-surface,
4012
+ var(--_icon-button-outline-surface, var(--ui-surface-default))
4013
+ );
4014
+ background-image: none;
4015
+ color: var(--ui-icon-button-outline-text, var(--_icon-button-text, var(--ui-text-primary)));
4016
+ box-shadow: var(--ui-action-shadow, var(--_ui-action-shadow));
4017
+ }
4018
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-ea2a5496] {
4019
+ background-color: var(
4020
+ --ui-icon-button-solid-surface,
4021
+ var(--_icon-button-solid-surface, var(--ui-accent-solid))
4022
+ );
4023
+ background-image: none;
4024
+ color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
4025
+ box-shadow: var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
4026
+ }
4027
+ [data-component~="ui-icon-button"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]) {
4028
+ /* Derived from the text colour so the ghost hover shows on any background. */
4029
+ background-color: var(
4030
+ --ui-icon-button-hover-surface,
4031
+ color-mix(in srgb, currentColor 8%, transparent)
4032
+ );
4033
+ color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
4034
+ }
4035
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]) {
4036
+ border-color: var(
4037
+ --ui-icon-button-hover-border,
4038
+ var(--_icon-button-hover-border, var(--ui-control-border-hover, var(--ui-control-border)))
4039
+ );
4040
+ }
4041
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]) {
4042
+ background-color: var(
4043
+ --ui-icon-button-solid-hover-surface,
4044
+ var(--_icon-button-solid-hover-surface, var(--ui-accent-hover))
4045
+ );
4046
+ }
4047
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=accent"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]),
4048
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=neutral"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]) {
4049
+ color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
4050
+ }
4051
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][aria-expanded="true"][data-v-ea2a5496]:enabled:not([aria-disabled="true"]) {
4052
+ background-color: var(
4053
+ --ui-icon-button-active-surface,
4054
+ color-mix(in srgb, currentColor 16%, transparent)
4055
+ );
4056
+ color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
4057
+ box-shadow: var(--ui-pressed);
4058
+ }
4059
+
4060
+ /* Native toggle state persists after pointer release, including during loading. */
4061
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-ea2a5496]:enabled {
4062
+ background-color: var(
4063
+ --ui-icon-button-active-surface,
4064
+ color-mix(in srgb, currentColor 12%, var(--ui-surface-default))
4065
+ );
4066
+ background-image: none;
4067
+ box-shadow: var(--ui-pressed);
4068
+ }
4069
+ [data-component~="ui-icon-button"][data-v-ea2a5496]:active:enabled:not([aria-disabled="true"]) {
4070
+ scale: var(--ui-icon-button-active-scale, 0.96);
4071
+ }
4072
+ :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"][data-v-ea2a5496], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"][data-v-ea2a5496]) {
4073
+ cursor: progress;
4074
+ }
4075
+ .content[data-v-ea2a5496] {
4076
+ display: inline-flex;
4077
+ align-items: center;
4078
+ justify-content: center;
4079
+ }
4080
+ :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"])
4081
+ .content[data-v-ea2a5496] {
4082
+ display: none;
4083
+ }
4084
+ @media (prefers-reduced-motion: reduce) {
4085
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-ea2a5496] {
4086
+ transition: none;
4087
+ }
4088
+ }
4089
+ [data-component~="ui-icon-button"][data-v-ea2a5496]:focus-visible {
4090
+ outline: none;
4091
+ box-shadow: var(--ui-focus-halo);
4092
+ }
4093
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-ea2a5496]:focus-visible {
4094
+ box-shadow:
4095
+ var(--ui-action-shadow, var(--_ui-action-shadow)),
4096
+ var(--ui-focus-halo);
4097
+ }
4098
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-ea2a5496]:focus-visible {
4099
+ box-shadow:
4100
+ var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
4101
+ var(--ui-focus-halo);
4102
+ }
4103
+ [data-component~="ui-icon-button"][data-v-ea2a5496]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"]):active:enabled:not([aria-disabled="true"]) {
4104
+ background-image: none;
4105
+ box-shadow: var(--ui-pressed);
4106
+ }
4107
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-ea2a5496]:enabled:focus-visible {
4108
+ box-shadow:
4109
+ var(--ui-pressed),
4110
+ var(--ui-focus-halo);
4111
+ }
4112
+ @media (forced-colors: active) {
4113
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-ea2a5496]:enabled {
4114
+ outline: var(--ui-focus-width) solid Highlight;
4115
+ outline-offset: calc(-2 * var(--ui-focus-width));
4116
+ }
4117
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-ea2a5496]:enabled:focus-visible {
4118
+ outline-offset: var(--ui-focus-width);
4119
+ }
4120
+ }
4121
+
4122
+ /* Disabled is a flat neutral control, independent of the active variant's tone. */
4123
+ [data-component~="ui-icon-button"][data-v-ea2a5496]:disabled {
4124
+ border-color: var(--ui-disabled-border);
4125
+ background-color: var(--ui-disabled-surface);
4126
+ color: var(--ui-disabled-text);
4127
+ filter: var(--ui-icon-button-disabled-filter, var(--ui-disabled-filter));
4128
+ opacity: var(--ui-icon-button-disabled-opacity, 1);
4129
+ cursor: not-allowed;
4130
+ box-shadow: none;
4131
+ background-image: none;
4132
+ }
4133
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][data-v-ea2a5496]:disabled {
4134
+ border-color: transparent;
4135
+ }
4136
+ [data-component~="ui-icon-button"][data-v-ea2a5496] {
4137
+ --_icon-button-icon-default: var(--ui-icon-size-md);
4138
+ /* A slotted ui-icon is its own component, out of reach of the svg rule below; these are its
4139
+ defaults, which its own --ui-icon-* hooks still override. */
4140
+ --_ui-default-icon-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4141
+ --_ui-default-icon-stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
4142
+ }
4143
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-ea2a5496] {
4144
+ --_icon-button-icon-default: var(--ui-icon-size-sm);
4145
+ }
4146
+ [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-ea2a5496] {
4147
+ --_icon-button-icon-default: var(--ui-icon-size-lg);
4148
+ }
4149
+ svg[data-v-ea2a5496-s] {
4150
+ inline-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4151
+ block-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
4152
+ flex-shrink: 0;
4153
+ stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
4154
+ }
4155
+
4156
+ /* A component that sets its display still honours the hidden attribute on its root. */
4157
+ [data-component~="ui-icon-button"][hidden][data-v-ea2a5496] {
4158
+ display: none;
4159
+ }
4160
+
4161
+ /* This component's hooks style the element they are set on, and never a nested one. An Input
4162
+ Group sets --_ui-default-input-* for the input inside it, below the input's own hooks. */
4163
+ @property --ui-input-border {
4164
+ syntax: "*";
4165
+ inherits: false;
4166
+ }
4167
+ @property --ui-input-border-hover {
4168
+ syntax: "*";
4169
+ inherits: false;
4170
+ }
4171
+ @property --ui-input-border-width {
4172
+ syntax: "*";
4173
+ inherits: false;
4174
+ }
4175
+ @property --ui-input-focus-border {
4176
+ syntax: "*";
4177
+ inherits: false;
4178
+ }
4179
+ @property --ui-input-focus-outline {
4180
+ syntax: "*";
4181
+ inherits: false;
4182
+ }
4183
+ @property --ui-input-focus-shadow {
4184
+ syntax: "*";
4185
+ inherits: false;
4186
+ }
4187
+ @property --ui-input-inline-size {
4188
+ syntax: "*";
4189
+ inherits: false;
4190
+ }
4191
+ @property --ui-input-invalid-border {
4192
+ syntax: "*";
4193
+ inherits: false;
4194
+ }
4195
+ @property --ui-input-invalid-focus-shadow {
4196
+ syntax: "*";
4197
+ inherits: false;
4198
+ }
4199
+ @property --ui-input-min-block-size {
4200
+ syntax: "*";
4201
+ inherits: false;
4202
+ }
4203
+ @property --ui-input-radius {
4204
+ syntax: "*";
4205
+ inherits: false;
4206
+ }
4207
+ @property --ui-input-shadow {
4208
+ syntax: "*";
4209
+ inherits: false;
4210
+ }
4211
+ @property --ui-input-surface {
4212
+ syntax: "*";
4213
+ inherits: false;
4214
+ }
4215
+ [data-component~="ui-input"][data-v-3c4d919b] {
4216
+ box-sizing: border-box;
4217
+ display: inline-block;
4218
+ inline-size: var(--ui-input-inline-size, 100%);
4219
+ min-inline-size: 0;
4220
+ min-block-size: var(
4221
+ --ui-input-min-block-size,
4222
+ var(--_ui-default-input-min-block-size, var(--ui-control-size-md))
4223
+ );
4224
+ margin: 0;
4225
+ padding: var(--ui-space-2) var(--ui-space-3);
4226
+ appearance: none;
4227
+ padding-inline-start: var(--_ui-default-input-padding-inline-start, var(--ui-space-3));
4228
+ border: var(
4229
+ --ui-input-border-width,
4230
+ var(--_ui-default-input-border-width, var(--ui-border-width))
4231
+ ) solid
4232
+ var(
4233
+ --ui-input-border,
4234
+ var(--_ui-default-input-border, var(--ui-control-border, var(--ui-border-strong)))
4235
+ );
4236
+ border-radius: var(
4237
+ --ui-input-radius,
4238
+ var(--_ui-default-input-radius, var(--ui-field-radius, var(--ui-radius-md)))
4239
+ );
4240
+ background: var(
4241
+ --ui-input-surface,
4242
+ var(--_ui-default-input-surface, var(--ui-control-surface, var(--ui-surface-elevated)))
4243
+ );
4244
+ color: var(--ui-text-primary);
4245
+ font: inherit;
4246
+ line-height: var(--ui-line-height-tight);
4247
+ box-shadow: var(--ui-input-shadow, var(--_ui-default-input-shadow, var(--ui-control-inset)));
4248
+ transition:
4249
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
4250
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
4251
+ background-color var(--ui-motion-fast) var(--ui-motion-ease);
4252
+ }
4253
+
4254
+ /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
4255
+ [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-3c4d919b] {
4256
+ min-block-size: var(
4257
+ --ui-input-min-block-size,
4258
+ var(--_ui-default-input-min-block-size, var(--ui-control-size-sm))
4259
+ );
4260
+ padding: var(--ui-space-1) var(--ui-space-2);
4261
+ font-size: var(--ui-font-size-sm);
4262
+ }
4263
+ [data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-3c4d919b] {
4264
+ min-block-size: var(
4265
+ --ui-input-min-block-size,
4266
+ var(--_ui-default-input-min-block-size, var(--ui-control-size-lg))
4267
+ );
4268
+ padding: var(--ui-space-3) var(--ui-space-4);
4269
+ font-size: var(--ui-font-size-md);
4270
+ }
4271
+
4272
+ /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
4273
+ body-size text: below 16px, iOS zooms the page into the focused field. */
4274
+ @media (pointer: coarse) {
4275
+ [data-component~="ui-input"][data-v-3c4d919b] {
4276
+ min-block-size: var(
4277
+ --ui-input-min-block-size,
4278
+ var(
4279
+ --_ui-default-input-min-block-size,
4280
+ max(var(--ui-control-size-md), var(--ui-control-min-block-size))
4281
+ )
4282
+ );
4283
+ }
4284
+ [data-component~="ui-input"][data-v-3c4d919b],
4285
+ [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-3c4d919b],
4286
+ [data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-3c4d919b] {
4287
+ font-size: var(--ui-font-size-md);
4288
+ }
4289
+ [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-3c4d919b] {
4290
+ min-block-size: var(
4291
+ --ui-input-min-block-size,
4292
+ var(--_ui-default-input-min-block-size, var(--ui-control-min-block-size))
4293
+ );
4294
+ }
4295
+ }
4296
+
4297
+ /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
4298
+ [data-component~="ui-input"][data-v-3c4d919b]::selection {
4299
+ background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
4300
+ color: inherit;
4301
+ }
4302
+ [data-component~="ui-input"][data-v-3c4d919b]::placeholder {
4303
+ color: var(--ui-control-placeholder, var(--ui-text-secondary));
4304
+ opacity: 1;
4305
+ }
4306
+ [data-component~="ui-input"][data-v-3c4d919b]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
4307
+ border-color: var(
4308
+ --ui-input-border-hover,
4309
+ var(--_ui-default-input-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary)))
4310
+ );
4311
+ }
4312
+ [data-component~="ui-input"][data-v-3c4d919b]:focus-visible {
4313
+ border-color: var(
4314
+ --ui-input-focus-border,
4315
+ var(--_ui-default-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid)))
4316
+ );
4317
+ outline: none;
4318
+ box-shadow: var(
4319
+ --ui-input-focus-shadow,
4320
+ var(
4321
+ --_ui-default-input-focus-shadow,
4322
+ var(--ui-control-inset),
4323
+ var(--ui-control-focus-halo-shadow)
4324
+ )
4325
+ );
4326
+ }
4327
+
4328
+ /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
4329
+ [data-component~="ui-input"][aria-invalid="true"][data-v-3c4d919b],
4330
+ [data-component~="ui-input"][data-v-3c4d919b]:is(:user-invalid, [data-user-invalid]) {
4331
+ border-color: var(
4332
+ --ui-input-invalid-border,
4333
+ var(--_ui-default-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)))
4334
+ );
4335
+ }
4336
+ [data-component~="ui-input"][data-v-3c4d919b]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
4337
+ box-shadow: var(
4338
+ --ui-input-invalid-focus-shadow,
4339
+ var(
4340
+ --_ui-default-input-invalid-focus-shadow,
4341
+ var(--ui-control-inset),
4342
+ 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
4343
+ in srgb,
4344
+ var(--ui-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
4345
+ transparent
4346
+ )
4347
+ )
4348
+ );
4349
+ }
4350
+ [data-component~="ui-input"][data-v-3c4d919b]:disabled {
4351
+ background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
4352
+ color: var(--ui-disabled-text);
4353
+ box-shadow: none;
4354
+ cursor: not-allowed;
4355
+ }
4356
+
4357
+ /* Forced colors drop box shadows, so the focus ring becomes an outline. */
4358
+ @media (forced-colors: active) {
4359
+ [data-component~="ui-input"][data-v-3c4d919b]:focus-visible {
4360
+ outline: var(
4361
+ --ui-input-focus-outline,
4362
+ var(--_ui-default-input-focus-outline, var(--ui-focus-width) solid Highlight)
4363
+ );
4364
+ outline-offset: var(--ui-border-width);
4365
+ }
4366
+ }
4367
+
4368
+ /* No text-box-trim here: trimming a native input's line box below its line height lets the text
4369
+ * scroll vertically inside the field. Native inputs already center their single line. */
4370
+
4371
+ /* A component that sets its display still honours the hidden attribute on its root. */
4372
+ [data-component~="ui-input"][hidden][data-v-3c4d919b] {
4373
+ display: none;
4374
+ }
4375
+
4376
+ /* This component's hooks style the element they are set on, and never a nested one. */
4377
+ @property --ui-popover-surface {
4378
+ syntax: "*";
4379
+ inherits: false;
4380
+ }
4381
+ @property --ui-popover-border {
4382
+ syntax: "*";
4383
+ inherits: false;
4384
+ }
4385
+ @property --ui-popover-radius {
4386
+ syntax: "*";
4387
+ inherits: false;
4388
+ }
4389
+ @property --ui-popover-shadow {
4390
+ syntax: "*";
4391
+ inherits: false;
4392
+ }
4393
+ @property --ui-popover-viewport-gap {
4394
+ syntax: "*";
4395
+ inherits: false;
4396
+ }
4397
+ @property --ui-popover-offset {
4398
+ syntax: "*";
4399
+ inherits: false;
4400
+ }
4401
+ @property --ui-popover-padding {
4402
+ syntax: "*";
4403
+ inherits: false;
4404
+ }
4405
+ [data-component~="ui-popover"][data-v-c3034191] {
4406
+ --_ui-popover-surface: var(--ui-popover-surface);
4407
+ --_ui-popover-border: var(--ui-popover-border);
4408
+ --_ui-popover-radius: var(--ui-popover-radius);
4409
+ --_ui-popover-shadow: var(--ui-popover-shadow);
4410
+ --_ui-popover-padding: var(--ui-popover-padding);
4411
+ box-sizing: border-box;
4412
+ max-inline-size: min(
4413
+ 20rem,
4414
+ calc(100vw - var(--ui-popover-viewport-gap, var(--ui-space-2)) * 2)
4415
+ );
4416
+ max-block-size: calc(100dvh - var(--ui-popover-viewport-gap, var(--ui-space-2)) * 2);
4417
+ overflow: visible;
4418
+ padding: 0;
4419
+ border: 0;
4420
+ outline: 0;
4421
+ border-radius: 0;
4422
+ background: transparent;
4423
+ box-shadow: none;
4424
+ }
4425
+ .surface[data-v-c3034191] {
4426
+ box-sizing: border-box;
4427
+ max-inline-size: inherit;
4428
+ max-block-size: inherit;
4429
+ overflow: auto;
4430
+ padding: var(--_ui-popover-padding, var(--ui-space-3));
4431
+ background: var(--_ui-popover-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
4432
+ border: var(--ui-border-width) solid
4433
+ var(--_ui-popover-border, var(--ui-overlay-border, var(--ui-border-strong)));
4434
+ border-radius: var(--_ui-popover-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
4435
+ box-shadow: var(
4436
+ --_ui-popover-shadow,
4437
+ var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
4438
+ );
3945
4439
  }
3946
- .heading[data-v-516afff1] {
3947
- padding: var(--ui-space-2) var(--ui-space-3) var(--ui-space-1);
3948
- color: var(--ui-text-muted);
3949
- font-size: var(--ui-font-size-xs);
3950
- font-weight: var(--ui-font-semibold);
4440
+ [data-component~="ui-popover"][data-v-c3034191]:not([data-component~="ui-popover"][data-ui-popover-state~="internalOpen"]) {
4441
+ display: none;
3951
4442
  }
3952
- ul[data-v-516afff1] {
4443
+ [data-component~="ui-popover"][popover][data-v-c3034191] {
4444
+ position: fixed;
4445
+ inset: auto;
3953
4446
  margin: 0;
3954
- padding: 0;
3955
- list-style: none;
3956
- }
3957
- [data-component~="ui-editor-slash-menu-group"][hidden][data-v-516afff1] {
3958
- display: none;
4447
+ opacity: 0;
4448
+ transform: translateY(-4px) scale(0.99);
4449
+ transition:
4450
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
4451
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
4452
+ display var(--ui-motion-fast) allow-discrete,
4453
+ overlay var(--ui-motion-fast) allow-discrete;
3959
4454
  }
3960
-
3961
- [data-component~="ui-editor-slash-menu-item"][data-v-dd4dbe75] {
3962
- display: flex;
3963
- align-items: center;
3964
- gap: var(--ui-space-3);
3965
- min-block-size: 44px;
3966
- padding: var(--ui-space-2) var(--ui-space-3);
3967
- cursor: pointer;
3968
- list-style: none;
4455
+ [data-component~="ui-popover"][popover][data-v-c3034191]:popover-open {
4456
+ opacity: 1;
4457
+ transform: translateY(0) scale(1);
3969
4458
  }
3970
- [data-component~="ui-editor-slash-menu-item"][aria-selected="true"][data-v-dd4dbe75] {
3971
- background: var(--ui-accent-subtle);
4459
+ @starting-style {
4460
+ [data-component~="ui-popover"][popover][data-v-c3034191]:popover-open {
4461
+ opacity: 0;
4462
+ transform: translateY(-4px) scale(0.99);
3972
4463
  }
3973
- [data-component~="ui-editor-slash-menu-item"][aria-disabled="true"][data-v-dd4dbe75] {
3974
- background: var(--ui-disabled-surface);
3975
- cursor: not-allowed;
3976
4464
  }
3977
- [data-component~="ui-editor-slash-menu-item"][aria-disabled="true"] .title[data-v-dd4dbe75],
3978
- [data-component~="ui-editor-slash-menu-item"][aria-disabled="true"] .description[data-v-dd4dbe75],
3979
- [data-component~="ui-editor-slash-menu-item"][aria-disabled="true"] .icon[data-v-dd4dbe75] {
3980
- color: var(--ui-disabled-text);
4465
+ [data-component~="ui-popover"][data-ui-popover-state~="size=sm"][data-v-c3034191] {
4466
+ inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
4467
+ max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
3981
4468
  }
3982
- .icon[data-v-dd4dbe75] {
3983
- display: flex;
3984
- align-items: center;
3985
- justify-content: center;
3986
- inline-size: 32px;
3987
- block-size: 32px;
3988
- flex: 0 0 auto;
3989
- color: var(--ui-text-secondary);
3990
- background: var(--ui-surface-hover);
3991
- border: var(--ui-border-width) solid var(--ui-border);
3992
- border-radius: var(--ui-radius-md);
4469
+ [data-component~="ui-popover"][data-ui-popover-state~="size=md"][data-v-c3034191] {
4470
+ inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
4471
+ max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
3993
4472
  }
3994
- .icon[data-v-dd4dbe75] {
3995
- --_ui-default-icon-size: 1rem;
4473
+ [data-component~="ui-popover"][data-ui-popover-state~="size=lg"][data-v-c3034191] {
4474
+ inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
4475
+ max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
3996
4476
  }
3997
- .body[data-v-dd4dbe75] {
3998
- display: flex;
3999
- min-inline-size: 0;
4000
- flex-direction: column;
4001
- gap: 1px;
4477
+ [data-component~="ui-popover"][hidden][data-v-c3034191] {
4478
+ display: none;
4002
4479
  }
4003
- .title[data-v-dd4dbe75], .description[data-v-dd4dbe75] {
4004
- overflow: hidden;
4005
- text-overflow: ellipsis;
4006
- white-space: nowrap;
4480
+ @media (prefers-reduced-motion: reduce) {
4481
+ [data-component~="ui-popover"][popover][data-v-c3034191] {
4482
+ transition: none;
4007
4483
  }
4008
- .title[data-v-dd4dbe75] {
4009
- color: var(--ui-text-primary);
4010
- font-size: var(--ui-font-size-sm);
4011
- font-weight: var(--ui-font-medium);
4012
4484
  }
4013
- .description[data-v-dd4dbe75] {
4014
- color: var(--ui-text-muted);
4015
- font-size: var(--ui-font-size-xs);
4485
+
4486
+ /* This component's hooks style the element they are set on, and never a nested one. */
4487
+ @property --ui-stack-height {
4488
+ syntax: "*";
4489
+ inherits: false;
4016
4490
  }
4017
- [data-component~="ui-editor-slash-menu-item"][hidden][data-v-dd4dbe75] {
4018
- display: none;
4491
+ @property --ui-stack-gap {
4492
+ syntax: "*";
4493
+ inherits: false;
4019
4494
  }
4020
-
4021
- [data-component~="ui-editor-surface"][data-v-dee440af] {
4495
+ [data-component~="ui-stack"][data-v-10ce261e] {
4496
+ --_layout-gap: var(--ui-space-4);
4022
4497
  display: flex;
4023
4498
  flex-direction: column;
4499
+ align-items: stretch;
4500
+ gap: var(--ui-stack-gap, var(--_layout-gap));
4024
4501
  min-inline-size: 0;
4025
4502
  max-inline-size: 100%;
4503
+ margin: 0;
4026
4504
  }
4027
- /* The document renderer consumes these inherited surface settings. They do not style controls. */
4028
- [data-component~="ui-editor-surface"][data-ui-editor-surface-state~="density=compact"][data-v-dee440af] {
4029
- --_ui-editor-content-min-height: 0px;
4030
- --_ui-editor-content-padding-block: 0px;
4031
- --_ui-editor-content-padding-inline: 0px;
4032
- --_ui-editor-mobile-bottom-space: 0px;
4505
+ [data-component~="ui-stack"][data-ui-stack-state~="fill"][data-v-10ce261e] {
4506
+ flex: 1;
4507
+ min-block-size: 0;
4033
4508
  }
4034
-
4035
- [data-component~="ui-editor-table-context-menu"][popover][data-v-f2ebbbc8] {
4036
- position: fixed;
4037
- inset: auto;
4038
- margin: 0;
4509
+ [data-component~="ui-stack"][data-ui-stack-state~="height"][data-v-10ce261e] {
4510
+ block-size: calc(var(--ui-stack-height, 0) * 1px);
4511
+ min-block-size: 0;
4039
4512
  }
4040
- [data-component~="ui-editor-table-context-menu"][data-v-f2ebbbc8] {
4041
- /* The max-width is a promise about the menu's footprint, so it counts padding and border. */
4042
- box-sizing: border-box;
4043
- min-width: min(14rem, calc(100vw - 24px));
4044
- max-width: min(17rem, calc(100vw - 24px));
4045
- max-height: min(28rem, calc(100vh - 24px));
4046
- padding: var(--ui-space-2);
4047
- background: var(--ui-surface);
4048
- border: var(--ui-border-width) solid var(--ui-border-strong);
4049
- border-radius: var(--ui-radius-lg);
4050
- box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
4051
- display: flex;
4052
- flex-direction: column;
4053
- gap: 2px;
4054
- overflow-y: auto;
4055
- overscroll-behavior: contain;
4056
- scrollbar-width: thin;
4513
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=none"][data-v-10ce261e] {
4514
+ --_layout-gap: 0px;
4057
4515
  }
4058
- .section[data-v-f2ebbbc8] {
4059
- display: flex;
4060
- flex-direction: column;
4061
- gap: 3px;
4516
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"][data-v-10ce261e] {
4517
+ --_layout-gap: var(--ui-space-2);
4062
4518
  }
4063
- [data-component~="ui-editor-table-context-menu"] button[data-v-f2ebbbc8] {
4064
- display: flex;
4519
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=s"][data-v-10ce261e] {
4520
+ --_layout-gap: var(--ui-space-3);
4521
+ }
4522
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=m"][data-v-10ce261e] {
4523
+ --_layout-gap: var(--ui-space-4);
4524
+ }
4525
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=l"][data-v-10ce261e] {
4526
+ --_layout-gap: var(--ui-space-5);
4527
+ }
4528
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"][data-v-10ce261e] {
4529
+ --_layout-gap: var(--ui-space-6);
4530
+ }
4531
+ [data-component~="ui-stack"][data-ui-stack-state~="align=start"][data-v-10ce261e] {
4532
+ align-items: flex-start;
4533
+ }
4534
+ [data-component~="ui-stack"][data-ui-stack-state~="align=center"][data-v-10ce261e] {
4065
4535
  align-items: center;
4066
- gap: var(--ui-space-2);
4067
- width: 100%;
4068
- text-align: left;
4069
- min-height: 32px;
4070
- padding: var(--ui-space-2) var(--ui-space-2);
4071
- border: none;
4072
- border-radius: var(--ui-radius-sm);
4073
- background: none;
4074
- font-size: var(--ui-font-size-sm);
4075
- cursor: pointer;
4076
- color: var(--ui-text);
4077
4536
  }
4078
- [data-component~="ui-editor-table-context-menu"] button[data-v-f2ebbbc8] {
4079
- --_ui-default-icon-size: 1rem;
4080
- --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
4537
+ [data-component~="ui-stack"][data-ui-stack-state~="align=end"][data-v-10ce261e] {
4538
+ align-items: flex-end;
4081
4539
  }
4082
- [data-component~="ui-editor-table-context-menu"] button[data-v-f2ebbbc8]:hover:not(:disabled) {
4083
- background: var(--ui-surface-hover);
4540
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=center"][data-v-10ce261e] {
4541
+ justify-content: center;
4084
4542
  }
4085
- [data-component~="ui-editor-table-context-menu"] button.selected[data-v-f2ebbbc8] {
4086
- background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
4543
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=end"][data-v-10ce261e] {
4544
+ justify-content: flex-end;
4087
4545
  }
4088
- [data-component~="ui-editor-table-context-menu"] button.danger[data-v-f2ebbbc8] {
4089
- color: var(--ui-danger);
4546
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=between"][data-v-10ce261e] {
4547
+ justify-content: space-between;
4090
4548
  }
4091
4549
 
4092
- /* Swatches wrap like words: the row asks for the menu's full width, and a narrower menu fits fewer. */
4093
- .swatches[data-v-f2ebbbc8] {
4094
- display: flex;
4095
- flex-wrap: wrap;
4096
- gap: 3px;
4550
+ /* A component that sets its display still honours the hidden attribute on its root. */
4551
+ [data-component~="ui-stack"][hidden][data-v-10ce261e] {
4552
+ display: none;
4097
4553
  }
4098
4554
 
4099
- /* Three to a row at the menu's full width; 5rem keeps the longest label, "Default", whole. */
4100
- [data-component~="ui-editor-table-context-menu"] .swatch-button[data-v-f2ebbbc8] {
4101
- display: inline-flex;
4102
- align-items: center;
4103
- gap: var(--ui-space-2);
4104
- flex: 1 0 5rem;
4105
- min-width: 5rem;
4106
- max-width: calc((100% - 6px) / 3);
4107
- padding-inline-end: var(--ui-space-1);
4108
- }
4109
- .swatch[data-v-f2ebbbc8] {
4110
- display: inline-flex;
4111
- width: 1rem;
4112
- height: 1rem;
4113
- border-radius: var(--ui-radius-round);
4114
- border: var(--ui-border-width) solid var(--ui-border);
4115
- background: var(--_swatch, #fff);
4116
- box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.35);
4117
- flex-shrink: 0;
4555
+ /* Running text, set on the type scale and in a tone that says what it is, so a view never styles
4556
+ text of its own. The root is a paragraph unless as= names a span, div, small, strong, label, or
4557
+ heading. */
4558
+ [data-component~="ui-text"][data-ui-text-state~="grow"][data-v-a12d976f] {
4559
+ flex: 1;
4118
4560
  }
4119
- .swatch.default[data-v-f2ebbbc8] {
4120
- position: relative;
4121
- background:
4122
- linear-gradient(
4123
- 135deg,
4124
- transparent calc(50% - 1px),
4125
- var(--ui-text-muted) calc(50% - 1px),
4126
- var(--ui-text-muted) calc(50% + 1px),
4127
- transparent calc(50% + 1px)
4128
- ),
4129
- var(--ui-surface);
4561
+ [data-component~="ui-text"][data-v-a12d976f] {
4562
+ margin: 0;
4563
+ min-inline-size: 0;
4564
+ color: var(--ui-text-primary);
4565
+ text-align: start;
4130
4566
  }
4131
- .swatch-label[data-v-f2ebbbc8] {
4132
- min-width: 0;
4133
- white-space: nowrap;
4567
+
4568
+ /* A heading drops the browser's heading size and weight, so size and weight set it as they set
4569
+ any text, and inherit keeps the text around it. */
4570
+ [data-component~="ui-text"][data-v-a12d976f]:is(h2, h3, h4, h5, h6) {
4571
+ font-size: inherit;
4572
+ font-weight: inherit;
4134
4573
  }
4135
- .heading[data-v-f2ebbbc8] {
4136
- padding: var(--ui-space-1) var(--ui-space-2);
4137
- font-size: var(--ui-font-size-2xs);
4138
- font-weight: 700;
4139
- letter-spacing: 0.05em;
4140
- text-transform: uppercase;
4141
- color: var(--ui-text-muted);
4574
+ [data-component~="ui-text"][data-ui-text-state~="size=xs"][data-v-a12d976f] {
4575
+ font-size: var(--ui-font-size-xs);
4576
+ line-height: var(--ui-line-height);
4142
4577
  }
4143
- .sep[data-v-f2ebbbc8] {
4144
- height: 1px;
4145
- background: var(--ui-border-divider);
4146
- margin: var(--ui-space-1) 0;
4578
+ [data-component~="ui-text"][data-ui-text-state~="size=sm"][data-v-a12d976f] {
4579
+ font-size: var(--ui-font-size-sm);
4580
+ line-height: var(--ui-line-height);
4147
4581
  }
4148
-
4149
- /* Separators divide sections, so none sits above the first. */
4150
- .sep[data-v-f2ebbbc8]:first-child {
4151
- display: none;
4582
+ [data-component~="ui-text"][data-ui-text-state~="size=md"][data-v-a12d976f] {
4583
+ font-size: var(--ui-font-size-md);
4584
+ line-height: var(--ui-line-height);
4152
4585
  }
4153
- [data-component~="ui-editor-table-context-menu"][hidden][data-v-f2ebbbc8] {
4154
- display: none;
4586
+ [data-component~="ui-text"][data-ui-text-state~="size=lg"][data-v-a12d976f] {
4587
+ font-size: var(--ui-font-size-lg);
4588
+ line-height: var(--ui-line-height-relaxed);
4155
4589
  }
4156
4590
 
4157
- [data-component~="ui-editor-table-overlay"][data-v-0e632fe0] {
4158
- display: block;
4159
- width: 100%;
4160
- height: 100%;
4161
- overflow: visible;
4162
- pointer-events: none;
4591
+ /* Opt in at the text owner; trimming does not inherit from a surrounding layout. */
4592
+ [data-component~="ui-text"][data-ui-text-state~="trim"][data-v-a12d976f] {
4593
+ text-box-trim: trim-both;
4594
+ text-box-edge: cap alphabetic;
4163
4595
  }
4164
- [data-component~="ui-editor-table-overlay"][data-v-0e632fe0] {
4165
- position: relative;
4166
- width: 100%;
4167
- height: 100%;
4168
- overflow: visible;
4169
- pointer-events: none;
4596
+ [data-component~="ui-text"][data-ui-text-state~="tone=secondary"][data-v-a12d976f] {
4597
+ color: var(--ui-text-secondary);
4170
4598
  }
4171
- .rows[data-v-0e632fe0],
4172
- .cols[data-v-0e632fe0] {
4173
- pointer-events: none;
4174
- position: absolute;
4599
+ [data-component~="ui-text"][data-ui-text-state~="tone=muted"][data-v-a12d976f] {
4600
+ color: var(--ui-text-muted);
4175
4601
  }
4176
- .rows[data-v-0e632fe0] {
4177
- inset: 0;
4178
- width: 100%;
4602
+ [data-component~="ui-text"][data-ui-text-state~="tone=accent"][data-v-a12d976f] {
4603
+ color: var(--ui-accent-active);
4179
4604
  }
4180
- .cols[data-v-0e632fe0] {
4181
- inset: 0;
4182
- height: 100%;
4605
+ /* Every status tone uses the text-safe token a subtle badge sets its words in, so text and badges
4606
+ in one tone match, and each holds 4.5:1 on sunken surfaces where some base colours fall short. */
4607
+ [data-component~="ui-text"][data-ui-text-state~="tone=danger"][data-v-a12d976f] {
4608
+ color: var(--ui-danger-subtle-text);
4183
4609
  }
4184
- .control[data-v-0e632fe0] {
4185
- position: absolute;
4186
- z-index: 1;
4187
- pointer-events: none;
4610
+ [data-component~="ui-text"][data-ui-text-state~="tone=success"][data-v-a12d976f] {
4611
+ color: var(--ui-success-subtle-text);
4188
4612
  }
4189
- .handle[data-v-0e632fe0] {
4190
- position: absolute;
4191
- display: inline-flex;
4192
- align-items: center;
4193
- justify-content: center;
4194
- width: 24px;
4195
- height: 24px;
4196
- padding: 0;
4197
- border: var(--ui-border-width) solid var(--ui-affordance-near-color, var(--ui-border-strong));
4198
- border-radius: var(--ui-radius-round);
4199
- background: color-mix(in srgb, var(--ui-surface-elevated) 96%, transparent);
4200
- color: var(--ui-affordance-near-color, var(--ui-text-secondary));
4201
- font: inherit;
4202
- font-size: 16px;
4203
- line-height: 1;
4204
- box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
4205
- opacity: 0;
4206
- scale: 0.72;
4207
- transition:
4208
- opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
4209
- scale var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
4210
- color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
4211
- background-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
4212
- border-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4213
- pointer-events: auto;
4214
- cursor: pointer;
4613
+ [data-component~="ui-text"][data-ui-text-state~="tone=info"][data-v-a12d976f] {
4614
+ color: var(--ui-info-subtle-text);
4215
4615
  }
4216
- .handle[data-v-0e632fe0] {
4217
- --_ui-default-icon-size: 14px;
4218
- --_ui-default-icon-stroke-width: 2;
4616
+ [data-component~="ui-text"][data-ui-text-state~="tone=warning"][data-v-a12d976f] {
4617
+ color: var(--ui-warning-subtle-text);
4219
4618
  }
4220
- .handle[data-ui-proximity="near"][data-v-0e632fe0],
4221
- .control.active .handle[data-v-0e632fe0],
4222
- .handle[data-v-0e632fe0]:focus-visible {
4223
- opacity: 1;
4224
- scale: 1;
4619
+ [data-component~="ui-text"][data-ui-text-state~="weight=normal"][data-v-a12d976f] {
4620
+ font-weight: var(--ui-font-normal);
4225
4621
  }
4226
- .control.active .handle[data-v-0e632fe0],
4227
- .handle[data-v-0e632fe0]:focus-visible {
4228
- border-color: var(--ui-affordance-direct-color, var(--ui-accent-solid));
4229
- background: var(--ui-affordance-direct-color, var(--ui-accent-solid));
4230
- color: var(--ui-text-on-accent);
4231
- box-shadow: var(--ui-shadow-sm, 0 1px 3px rgb(0 0 0 / 0.1));
4622
+ [data-component~="ui-text"][data-ui-text-state~="weight=medium"][data-v-a12d976f] {
4623
+ font-weight: var(--ui-font-medium);
4232
4624
  }
4233
- .handle[data-v-0e632fe0]:focus-visible,
4234
- .selector[data-v-0e632fe0]:focus-visible,
4235
- .cell-menu[data-v-0e632fe0]:focus-visible {
4236
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
4237
- outline-offset: var(--ui-focus-width);
4625
+ [data-component~="ui-text"][data-ui-text-state~="weight=semibold"][data-v-a12d976f] {
4626
+ font-weight: var(--ui-font-semibold);
4238
4627
  }
4239
- .control.row[data-v-0e632fe0] {
4240
- left: 0;
4241
- width: 100%;
4242
- height: 0;
4628
+ [data-component~="ui-text"][data-ui-text-state~="variant=eyebrow"][data-v-a12d976f] {
4629
+ font-size: var(--ui-font-size-xs);
4630
+ font-weight: var(--ui-font-semibold);
4631
+ letter-spacing: 0.06em;
4632
+ text-transform: uppercase;
4243
4633
  }
4244
- .control.row .handle[data-v-0e632fe0] {
4245
- top: -12px;
4246
- left: -30px;
4634
+ [data-component~="ui-text"][data-ui-text-state~="variant=code"][data-v-a12d976f] {
4635
+ font-family: var(--ui-font-family-mono);
4247
4636
  }
4248
- .control.col[data-v-0e632fe0] {
4249
- top: 0;
4250
- width: 0;
4251
- height: 100%;
4637
+
4638
+ /* A link in running text is underlined, so it stands apart from the words around it by more than
4639
+ colour. */
4640
+ [data-component~="ui-text"] a[data-v-a12d976f-s] {
4641
+ color: var(--ui-accent-active);
4642
+ text-decoration: underline;
4643
+ text-decoration-thickness: 0.06em;
4644
+ text-underline-offset: 0.18em;
4252
4645
  }
4253
- .control.col .handle[data-v-0e632fe0] {
4254
- top: -30px;
4255
- left: -12px;
4646
+ [data-component~="ui-text"][data-ui-text-state~="truncate"][data-v-a12d976f] {
4647
+ overflow: hidden;
4648
+ text-overflow: ellipsis;
4649
+ white-space: nowrap;
4256
4650
  }
4257
- .line[data-v-0e632fe0] {
4258
- position: absolute;
4259
- background: var(--ui-affordance-direct-color, var(--ui-accent-solid));
4260
- opacity: 0;
4261
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4651
+
4652
+ /* Trim ends the layout box at the baseline; preserve descending ink while clipping long labels. */
4653
+ [data-component~="ui-text"][data-ui-text-state~="trim"][data-ui-text-state~="truncate"][data-v-a12d976f] {
4654
+ overflow-x: clip;
4655
+ overflow-y: visible;
4262
4656
  }
4263
- .control.row .line[data-v-0e632fe0] {
4264
- inset: calc(-0.5 * var(--ui-accent-line-width)) 0 auto;
4265
- height: var(--ui-accent-line-width);
4657
+ [data-component~="ui-text"][data-ui-text-state~="align=center"][data-v-a12d976f] {
4658
+ text-align: center;
4266
4659
  }
4267
- .control.col .line[data-v-0e632fe0] {
4268
- inset: 0 auto 0 calc(-0.5 * var(--ui-accent-line-width));
4269
- width: var(--ui-accent-line-width);
4660
+ [data-component~="ui-text"][data-ui-text-state~="font=sans"][data-v-a12d976f] {
4661
+ font-family: var(--ui-font-family-sans, sans-serif);
4270
4662
  }
4271
- .control.active .line[data-v-0e632fe0] {
4272
- opacity: 0.8;
4663
+ [data-component~="ui-text"][data-ui-text-state~="wrap=anywhere"][data-v-a12d976f] {
4664
+ overflow-wrap: anywhere;
4273
4665
  }
4274
- .guide[data-v-0e632fe0] {
4275
- position: absolute;
4276
- width: var(--ui-affordance-guide-size);
4277
- height: var(--ui-affordance-guide-size);
4278
- border-radius: var(--ui-radius-round);
4279
- background: var(--ui-affordance-guide-color, var(--ui-border-strong));
4280
- opacity: calc(var(--ui-affordance-guide-opacity) * var(--ui-affordance-scope-guide, 1));
4281
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4666
+
4667
+ /* A component that sets its display still honours the hidden attribute on its root. */
4668
+ [data-component~="ui-text"][hidden][data-v-a12d976f] {
4669
+ display: none;
4282
4670
  }
4283
- .control.row .guide[data-v-0e632fe0] {
4284
- left: -10px;
4285
- top: -2px;
4671
+
4672
+ [data-component~="ui-editor-insert-table-grid"][data-v-a8e7e3a2] {
4673
+ padding: var(--ui-space-3);
4674
+ background: var(--ui-surface);
4675
+ border: var(--ui-border-width) solid var(--ui-border-strong);
4676
+ border-radius: var(--ui-radius-md);
4677
+ box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
4286
4678
  }
4287
- .control.col .guide[data-v-0e632fe0] {
4288
- left: -2px;
4289
- top: -10px;
4679
+ .hint[data-v-a8e7e3a2] {
4680
+ margin: 0 0 var(--ui-space-2);
4681
+ font-size: var(--ui-font-size-sm);
4682
+ color: var(--ui-text-muted);
4290
4683
  }
4291
- .control:has(.handle[data-ui-proximity="near"]) .guide[data-v-0e632fe0],
4292
- .control.active .guide[data-v-0e632fe0] {
4293
- opacity: 0;
4684
+ .grid[data-v-a8e7e3a2] {
4685
+ display: grid;
4686
+ grid-template-columns: repeat(var(--_cols, 8), 1.25rem);
4687
+ grid-template-rows: repeat(var(--_rows, 8), 1.25rem);
4688
+ gap: 2px;
4689
+ margin-bottom: var(--ui-space-2);
4690
+ max-inline-size: 100%;
4691
+ overflow: auto;
4692
+ --_ui-scroll-fade-direction: to right;
4693
+ --_ui-scroll-fade-size: var(--ui-scroll-fade-size, 24px);
4694
+ mask-image: linear-gradient(
4695
+ var(--_ui-scroll-fade-direction),
4696
+ transparent,
4697
+ #000 var(--_ui-scroll-fade-start),
4698
+ #000 calc(100% - var(--_ui-scroll-fade-end)),
4699
+ transparent
4700
+ );
4701
+ animation:
4702
+ ui-scroll-fade-start linear,
4703
+ ui-scroll-fade-start-hold linear,
4704
+ ui-scroll-fade-end-hold linear,
4705
+ ui-scroll-fade-end linear;
4706
+ animation-timeline: scroll(self inline);
4707
+ animation-range:
4708
+ 0 var(--_ui-scroll-fade-size),
4709
+ var(--_ui-scroll-fade-size) calc(100% + 1px),
4710
+ -1px calc(100% - var(--_ui-scroll-fade-size)),
4711
+ calc(100% - var(--_ui-scroll-fade-size)) 100%;
4294
4712
  }
4295
- .tooltip[data-v-0e632fe0] {
4296
- position: absolute;
4297
- z-index: 2;
4298
- top: calc(100% + 6px);
4299
- left: 50%;
4300
- width: max-content;
4301
- max-width: 14rem;
4302
- padding: var(--ui-space-1) var(--ui-space-2);
4713
+ [data-component~="ui-editor-insert-table-grid"]:dir(rtl) .grid[data-v-a8e7e3a2] {
4714
+ --_ui-scroll-fade-direction: to left;
4715
+ }
4716
+ .cell[data-v-a8e7e3a2] {
4717
+ width: 1.25rem;
4718
+ height: 1.25rem;
4719
+ padding: 0;
4720
+ border: var(--ui-border-width) solid var(--ui-control-border);
4303
4721
  border-radius: var(--ui-radius-sm);
4304
- background: var(--ui-text-primary);
4305
- color: var(--ui-surface-elevated);
4306
- font-size: var(--ui-font-size-xs);
4307
- font-weight: var(--ui-font-medium);
4308
- line-height: var(--ui-line-height-md);
4309
- opacity: 0;
4310
- transform: translateX(-50%);
4311
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4312
- pointer-events: none;
4722
+ background: var(--ui-surface);
4723
+ cursor: pointer;
4313
4724
  }
4314
- .control.row .tooltip[data-v-0e632fe0] {
4315
- top: 50%;
4316
- left: auto;
4317
- right: calc(100% + 8px);
4318
- transform: translateY(-50%);
4725
+ .cell.selected[data-v-a8e7e3a2] {
4726
+ background: var(--ui-accent-solid, var(--ui-accent));
4727
+ border-color: var(--ui-accent-solid, var(--ui-accent));
4319
4728
  }
4320
- .control.active .tooltip[data-v-0e632fe0],
4321
- .handle:focus-visible .tooltip[data-v-0e632fe0] {
4322
- opacity: 1;
4729
+ .cell[data-v-a8e7e3a2]:focus-visible {
4730
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
4731
+ outline-offset: calc(-1 * var(--ui-focus-width));
4323
4732
  }
4324
- .selector[data-v-0e632fe0],
4325
- .cell-menu[data-v-0e632fe0] {
4326
- position: absolute;
4327
- z-index: 2;
4328
- display: inline-flex;
4329
- align-items: center;
4330
- justify-content: center;
4331
- padding: 0;
4332
- border: var(--ui-border-width) solid transparent;
4333
- background: transparent;
4334
- color: var(--ui-text-secondary);
4335
- box-shadow: none;
4336
- pointer-events: auto;
4733
+ .header[data-v-a8e7e3a2] {
4734
+ display: block;
4735
+ margin-bottom: var(--ui-space-2);
4736
+ font-size: var(--ui-font-size-sm);
4337
4737
  cursor: pointer;
4338
- transition:
4339
- color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
4340
- background-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
4341
- border-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
4342
- box-shadow var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4343
4738
  }
4344
- .selector[data-v-0e632fe0]:hover,
4345
- .cell-menu[data-v-0e632fe0]:hover {
4346
- background: var(--ui-surface-muted);
4347
- color: var(--ui-text-primary);
4348
- box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
4739
+ @media (pointer: coarse) {
4740
+ .grid[data-v-a8e7e3a2] {
4741
+ grid-template-columns: repeat(var(--_cols, 8), 44px);
4742
+ grid-template-rows: repeat(var(--_rows, 8), 44px);
4349
4743
  }
4350
- .selector[data-v-0e632fe0] {
4351
- border-radius: var(--ui-radius-round);
4352
- touch-action: none;
4353
- cursor: grab;
4744
+ .cell[data-v-a8e7e3a2] {
4745
+ width: 44px;
4746
+ height: 44px;
4354
4747
  }
4355
- .selector[data-v-0e632fe0]:active {
4356
- cursor: grabbing;
4357
4748
  }
4358
- .selector[data-v-0e632fe0]::before {
4359
- content: "";
4360
- position: absolute;
4361
- inset: 50% auto auto 50%;
4362
- border-radius: var(--ui-radius-round);
4363
- background: var(--ui-affordance-guide-color, var(--ui-border-strong));
4364
- opacity: calc(var(--ui-affordance-guide-opacity) * var(--ui-affordance-scope-guide, 1));
4365
- transform: translate(-50%, -50%);
4366
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4367
- pointer-events: none;
4749
+ @media (forced-colors: active) {
4750
+ .cell[data-v-a8e7e3a2]:focus-visible {
4751
+ outline-color: Highlight;
4368
4752
  }
4369
- .selector .glyph[data-v-0e632fe0] {
4370
- display: block;
4371
- width: 14px;
4372
- height: 14px;
4373
- --_ui-default-icon-size: 14px;
4374
- --_ui-default-icon-stroke-width: 2;
4375
- opacity: 0;
4376
- transform: scale(0.72);
4377
- transition:
4378
- opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
4379
- transform var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
4380
4753
  }
4381
- .selector[data-v-0e632fe0]:hover::before,
4382
- .selector[data-v-0e632fe0]:focus-visible::before {
4383
- opacity: 0;
4754
+ [data-component~="ui-editor-insert-table-grid"][hidden][data-v-a8e7e3a2] {
4755
+ display: none;
4384
4756
  }
4385
- .selector:hover .glyph[data-v-0e632fe0],
4386
- .selector:focus-visible .glyph[data-v-0e632fe0] {
4387
- opacity: 1;
4388
- transform: scale(1);
4757
+
4758
+ [data-component~="ui-editor-mention-menu"][popover][data-v-f27cd779] {
4759
+ position: fixed;
4760
+ inset: auto;
4761
+ margin: 0;
4389
4762
  }
4390
- .selector.row[data-v-0e632fe0] {
4391
- left: -9px;
4392
- width: 18px;
4393
- height: 32px;
4394
- transform: translateY(-50%);
4763
+ [data-component~="ui-editor-mention-menu"][data-v-f27cd779] {
4764
+ user-select: none;
4395
4765
  }
4396
- .selector.row[data-v-0e632fe0]::before {
4397
- width: 2px;
4398
- height: 16px;
4766
+ [data-component~="ui-editor-mention-menu"][data-v-f27cd779] {
4767
+ display: flex;
4768
+ overflow: hidden;
4769
+ flex-direction: column;
4770
+ background: var(--ui-surface);
4771
+ border: var(--ui-border-width) solid var(--ui-border-strong);
4772
+ border-radius: var(--ui-radius-dialog);
4773
+ box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
4399
4774
  }
4400
- .selector.column[data-v-0e632fe0] {
4401
- top: -9px;
4402
- width: 32px;
4403
- height: 18px;
4404
- transform: translateX(-50%);
4775
+ .header[data-v-f27cd779] {
4776
+ display: flex;
4777
+ align-items: center;
4778
+ justify-content: space-between;
4779
+ gap: var(--ui-space-3);
4780
+ padding: var(--ui-space-2) var(--ui-space-3);
4781
+ color: var(--ui-text-secondary);
4782
+ border-bottom: var(--ui-border-width) solid var(--ui-border-divider);
4783
+ font-size: var(--ui-font-size-xs);
4784
+ font-weight: var(--ui-font-semibold);
4405
4785
  }
4406
- .selector.column[data-v-0e632fe0]::before {
4407
- width: 16px;
4408
- height: 2px;
4786
+ [data-component~="ui-editor-mention-menu"] > .header[data-v-f27cd779]:empty,
4787
+ [data-component~="ui-editor-mention-menu"] > .empty[data-v-f27cd779]:empty {
4788
+ display: none;
4409
4789
  }
4410
- @media (hover: none), (pointer: coarse) {
4411
- .selector[data-v-0e632fe0]::before {
4412
- opacity: 0;
4790
+ .empty[data-v-f27cd779] {
4791
+ padding: var(--ui-space-3);
4792
+ color: var(--ui-text-muted);
4793
+ font-size: var(--ui-font-size-sm);
4413
4794
  }
4414
- .selector .glyph[data-v-0e632fe0] {
4415
- opacity: 1;
4416
- transform: none;
4795
+ .hint[data-v-f27cd779] {
4796
+ overflow: hidden;
4797
+ color: var(--ui-text-muted);
4798
+ font-weight: var(--ui-font-normal);
4799
+ text-overflow: ellipsis;
4800
+ white-space: nowrap;
4417
4801
  }
4802
+ .list[data-v-f27cd779] {
4803
+ max-height: 280px;
4804
+ padding: var(--ui-space-1) 0;
4805
+ margin: 0;
4806
+ overflow-y: auto;
4807
+ overscroll-behavior: contain;
4808
+ list-style: none;
4809
+ /* Each edge that hides content fades: the scroll fade every Looma scroller uses (see ui-scroll-area). */
4810
+ --_ui-scroll-fade-direction: to bottom;
4811
+ --_ui-scroll-fade-size: var(--ui-scroll-fade-size, 24px);
4812
+ mask-image: linear-gradient(
4813
+ var(--_ui-scroll-fade-direction),
4814
+ transparent,
4815
+ #000 var(--_ui-scroll-fade-start),
4816
+ #000 calc(100% - var(--_ui-scroll-fade-end)),
4817
+ transparent
4818
+ );
4819
+ animation:
4820
+ ui-scroll-fade-start linear,
4821
+ ui-scroll-fade-start-hold linear,
4822
+ ui-scroll-fade-end-hold linear,
4823
+ ui-scroll-fade-end linear;
4824
+ animation-timeline: scroll(self block);
4825
+ animation-range:
4826
+ 0 var(--_ui-scroll-fade-size),
4827
+ var(--_ui-scroll-fade-size) calc(100% + 1px),
4828
+ -1px calc(100% - var(--_ui-scroll-fade-size)),
4829
+ calc(100% - var(--_ui-scroll-fade-size)) 100%;
4418
4830
  }
4419
- .cell-menu[data-v-0e632fe0] {
4420
- width: 24px;
4421
- height: 24px;
4422
- border-radius: var(--ui-radius-sm);
4423
- background: color-mix(in srgb, var(--ui-surface-muted) 78%, transparent);
4831
+ .item[data-v-f27cd779] {
4832
+ display: flex;
4833
+ align-items: center;
4834
+ min-height: 44px;
4835
+ padding: var(--ui-space-2) var(--ui-space-3);
4836
+ gap: var(--ui-space-3);
4837
+ cursor: pointer;
4424
4838
  }
4425
- .cell-menu[data-v-0e632fe0] {
4426
- --_ui-default-icon-size: 15px;
4427
- --_ui-default-icon-stroke-width: 2;
4839
+ .item.active[data-v-f27cd779] {
4840
+ background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
4428
4841
  }
4429
- .drop-indicator[data-v-0e632fe0] {
4430
- position: absolute;
4431
- z-index: 3;
4432
- background: var(--ui-accent-solid);
4433
- box-shadow: 0 0 0 var(--ui-border-width) var(--ui-surface);
4434
- pointer-events: none;
4842
+
4843
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
4844
+ the surface and a fine accent ring, so the initials stay visible. */
4845
+ .item.active .avatar[data-v-f27cd779] {
4846
+ background: var(--ui-surface);
4847
+ box-shadow: inset 0 0 0 1px var(--ui-accent-soft, var(--ui-accent-subtle));
4435
4848
  }
4436
- .drop-indicator.row[data-v-0e632fe0] {
4437
- left: 0;
4438
- width: 100%;
4439
- height: var(--ui-accent-line-width);
4849
+ .avatar[data-v-f27cd779] {
4850
+ display: inline-flex;
4851
+ align-items: center;
4852
+ justify-content: center;
4853
+ width: 32px;
4854
+ height: 32px;
4855
+ flex: 0 0 auto;
4856
+ color: var(--ui-accent-active, var(--ui-accent-solid));
4857
+ background: var(--ui-accent-soft, var(--ui-accent-subtle));
4858
+ border-radius: var(--ui-radius-round);
4859
+ font-size: var(--ui-font-size-xs);
4860
+ font-weight: var(--ui-font-semibold);
4440
4861
  }
4441
- .drop-indicator.column[data-v-0e632fe0] {
4442
- top: 0;
4443
- width: var(--ui-accent-line-width);
4444
- height: 100%;
4862
+ .body[data-v-f27cd779] {
4863
+ display: flex;
4864
+ min-width: 0;
4865
+ flex-direction: column;
4866
+ }
4867
+ .label[data-v-f27cd779],
4868
+ .detail[data-v-f27cd779] {
4869
+ overflow: hidden;
4870
+ text-overflow: ellipsis;
4871
+ white-space: nowrap;
4872
+ }
4873
+ .label[data-v-f27cd779] {
4874
+ color: var(--ui-text-primary);
4875
+ font-size: var(--ui-font-size-sm);
4876
+ font-weight: var(--ui-font-medium);
4877
+ }
4878
+ .detail[data-v-f27cd779],
4879
+ .loading[data-v-f27cd779] {
4880
+ color: var(--ui-text-muted);
4881
+ font-size: var(--ui-font-size-xs);
4445
4882
  }
4446
- .drop-indicator[hidden][data-v-0e632fe0] {
4447
- display: none;
4883
+ .loading[data-v-f27cd779] {
4884
+ min-height: 44px;
4885
+ padding: var(--ui-space-3);
4448
4886
  }
4449
- [data-component~="ui-editor-table-overlay"][hidden][data-v-0e632fe0] {
4450
- display: none;
4887
+ @media (max-width: 767px) {
4888
+ [data-component~="ui-editor-mention-menu"][data-v-f27cd779] {
4889
+ border-bottom: 0;
4890
+ border-radius: var(--ui-radius-dialog) var(--ui-radius-dialog) 0 0;
4451
4891
  }
4452
-
4453
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"][data-v-8c2d4497] {
4454
- min-width: max-content;
4455
- min-height: 100%;
4456
- padding: 0;
4457
- background: transparent;
4458
- border: 0;
4459
- border-radius: 0;
4460
- box-shadow: none;
4461
- backdrop-filter: none;
4892
+ .list[data-v-f27cd779] {
4893
+ max-height: calc(60dvh - 48px);
4462
4894
  }
4463
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button[data-v-8c2d4497] {
4464
- min-height: 44px;
4465
- background: transparent;
4466
4895
  }
4467
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.active[data-v-8c2d4497],
4468
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.selected[data-v-8c2d4497] {
4469
- background: var(--ui-accent-soft, var(--ui-accent-subtle));
4896
+ [data-component~="ui-editor-mention-menu"][hidden][data-v-f27cd779] {
4897
+ display: none;
4470
4898
  }
4471
- [data-component~="ui-editor-table-toolbar"][data-v-8c2d4497] {
4472
- display: inline-flex;
4899
+
4900
+ [data-component~="ui-editor-mention-menu-item"][data-v-aa8aa3c4] {
4901
+ display: flex;
4473
4902
  align-items: center;
4474
- gap: var(--ui-space-1);
4475
- padding: var(--ui-space-1);
4476
- background: color-mix(in srgb, var(--ui-surface) 94%, transparent);
4477
- border: var(--ui-border-width) solid var(--ui-border-strong);
4478
- border-radius: calc(var(--ui-radius-md) + 2 * var(--ui-border-width));
4479
- box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
4480
- backdrop-filter: blur(10px);
4903
+ min-block-size: 44px;
4904
+ padding: var(--ui-space-2) var(--ui-space-3);
4905
+ gap: var(--ui-space-3);
4906
+ cursor: pointer;
4907
+ list-style: none;
4481
4908
  }
4482
- .group[data-v-8c2d4497] {
4483
- display: inline-flex;
4484
- align-items: center;
4485
- gap: 2px;
4486
- overflow: hidden;
4909
+ [data-component~="ui-editor-mention-menu-item"][aria-selected="true"][data-v-aa8aa3c4] {
4910
+ background: var(--ui-accent-subtle);
4487
4911
  }
4488
- .sep[data-v-8c2d4497] {
4489
- width: 1px;
4490
- align-self: stretch;
4491
- background: var(--ui-border-divider);
4912
+
4913
+ /* The highlight and the initials circle share a tint; on the highlighted row the circle takes
4914
+ the surface and a fine accent ring, so the initials stay visible. */
4915
+ [data-component~="ui-editor-mention-menu-item"][aria-selected="true"] .avatar[data-v-aa8aa3c4] {
4916
+ background: var(--ui-surface);
4917
+ box-shadow: inset 0 0 0 1px var(--ui-accent-soft);
4492
4918
  }
4493
- .overflow[data-v-8c2d4497] {
4494
- position: relative;
4919
+
4920
+ /* A slotted Avatar (a person's photo) is its own circle. */
4921
+ [data-component~="ui-editor-mention-menu-item"] .avatar[data-v-aa8aa3c4]:has(> [data-component~="ui-avatar"]) {
4922
+ background: none;
4923
+ box-shadow: none;
4495
4924
  }
4496
- [data-component~="ui-editor-table-toolbar"] button[data-v-8c2d4497] {
4925
+ .avatar[data-v-aa8aa3c4] {
4497
4926
  display: inline-flex;
4498
4927
  align-items: center;
4499
4928
  justify-content: center;
4500
- gap: var(--ui-space-2);
4501
- min-height: 32px;
4502
- border: 0;
4503
- border-radius: var(--ui-radius-sm);
4504
- background: transparent;
4505
- color: var(--ui-text-primary);
4506
- cursor: pointer;
4507
- font-size: var(--ui-font-size-sm);
4508
- font-weight: 500;
4509
- line-height: 1;
4510
- padding: var(--ui-space-2) var(--ui-space-2);
4511
- white-space: nowrap;
4512
- }
4513
- [data-component~="ui-editor-table-toolbar"] button[data-v-8c2d4497]:hover {
4514
- background: var(--ui-surface-hover);
4515
- }
4516
- [data-component~="ui-editor-table-toolbar"] button.active[data-v-8c2d4497] {
4517
- background: var(--ui-accent-soft, var(--ui-accent-subtle));
4929
+ inline-size: 32px;
4930
+ block-size: 32px;
4931
+ flex: 0 0 auto;
4518
4932
  color: var(--ui-accent-active);
4933
+ background: var(--ui-accent-soft);
4934
+ border-radius: var(--ui-radius-round);
4935
+ font-size: var(--ui-font-size-xs);
4936
+ font-weight: var(--ui-font-semibold);
4519
4937
  }
4520
- .group button[data-v-8c2d4497] {
4521
- border-radius: var(--ui-radius-sm);
4522
- }
4523
- .group button + button[data-v-8c2d4497] {
4524
- border-left: 0;
4525
- }
4526
- [data-component~="ui-editor-table-toolbar"] .more[data-v-8c2d4497] {
4527
- border: 0;
4528
- border-radius: var(--ui-radius-sm);
4938
+ .body[data-v-aa8aa3c4] {
4939
+ display: flex;
4940
+ min-inline-size: 0;
4941
+ flex-direction: column;
4529
4942
  }
4530
- [data-component~="ui-editor-table-toolbar"] button.danger[data-v-8c2d4497] {
4531
- color: var(--ui-danger);
4943
+ .label[data-v-aa8aa3c4], .detail[data-v-aa8aa3c4] {
4944
+ overflow: hidden;
4945
+ text-overflow: ellipsis;
4946
+ white-space: nowrap;
4532
4947
  }
4533
- [data-component~="ui-editor-table-toolbar"][data-v-8c2d4497] {
4534
- --_ui-default-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
4535
- --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
4948
+ .label[data-v-aa8aa3c4] {
4949
+ color: var(--ui-text-primary);
4950
+ font-size: var(--ui-font-size-sm);
4951
+ font-weight: var(--ui-font-medium);
4536
4952
  }
4537
- .chevron[data-v-8c2d4497] {
4538
- display: inline-flex;
4539
- --_ui-default-icon-size: 0.875rem;
4953
+ .detail[data-v-aa8aa3c4] {
4954
+ color: var(--ui-text-muted);
4955
+ font-size: var(--ui-font-size-xs);
4540
4956
  }
4541
- [data-component~="ui-editor-table-toolbar"] .icon-button[data-v-8c2d4497] {
4542
- width: 32px;
4543
- padding-inline: 0;
4957
+ [data-component~="ui-editor-mention-menu-item"][hidden][data-v-aa8aa3c4] {
4958
+ display: none;
4544
4959
  }
4545
- .menu[data-v-8c2d4497] {
4546
- box-sizing: border-box;
4960
+
4961
+ [data-component~="ui-editor-slash-menu"][popover][data-v-a85c3b18] {
4547
4962
  position: fixed;
4548
4963
  inset: auto;
4549
4964
  margin: 0;
4550
- min-width: 12rem;
4551
- max-width: min(17rem, calc(100vw - 24px));
4552
- padding: var(--ui-space-1);
4965
+ }
4966
+ [data-component~="ui-editor-slash-menu"][data-v-a85c3b18] {
4967
+ user-select: none;
4968
+ }
4969
+ [data-component~="ui-editor-slash-menu"][data-v-a85c3b18] {
4553
4970
  background: var(--ui-surface);
4554
4971
  border: var(--ui-border-width) solid var(--ui-border-strong);
4555
- border-radius: var(--ui-radius-md);
4556
- box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
4972
+ border-radius: var(--ui-radius-dialog);
4973
+ box-shadow: var(--ui-shadow-lg, 0 8px 24px rgb(0 0 0 / 0.12));
4974
+ overflow: hidden;
4557
4975
  display: flex;
4558
4976
  flex-direction: column;
4559
- gap: 2px;
4560
- z-index: 2;
4561
- overflow-y: auto;
4562
- overscroll-behavior: contain;
4563
- scrollbar-width: thin;
4564
- }
4565
- .menu-section + .menu-section[data-v-8c2d4497] {
4566
- margin-top: var(--ui-space-1);
4567
- padding-top: var(--ui-space-1);
4568
- border-top: var(--ui-border-width) solid var(--ui-border-divider);
4569
- }
4570
- .menu-heading[data-v-8c2d4497] {
4571
- padding: var(--ui-space-1) var(--ui-space-2);
4572
- font-size: var(--ui-font-size-2xs);
4573
- font-weight: 700;
4574
- letter-spacing: 0.05em;
4575
- text-transform: uppercase;
4576
- color: var(--ui-text-muted);
4577
- }
4578
- .menu button[data-v-8c2d4497] {
4579
- display: flex;
4580
- justify-content: flex-start;
4581
- width: 100%;
4582
- text-align: left;
4583
- }
4584
- .swatches[data-v-8c2d4497] {
4585
- display: grid;
4586
- grid-template-columns: repeat(2, minmax(0, 1fr));
4587
- gap: 2px;
4588
- }
4589
- [data-component~="ui-editor-table-toolbar"] .swatch-button[data-v-8c2d4497] {
4590
- gap: var(--ui-space-1);
4591
- justify-content: flex-start;
4592
- }
4593
- .swatch[data-v-8c2d4497] {
4594
- width: 14px;
4595
- height: 14px;
4596
- flex: 0 0 14px;
4597
- border: var(--ui-border-width) solid color-mix(in srgb, var(--ui-border) 80%, #000);
4598
- border-radius: var(--ui-radius-round);
4599
- background: var(--_swatch);
4600
4977
  }
4601
- .swatch.default[data-v-8c2d4497] {
4602
- background:
4603
- linear-gradient(135deg, transparent 44%, var(--ui-danger) 46% 54%, transparent 56%),
4604
- var(--ui-surface);
4978
+ @media (max-width: 767px) {
4979
+ [data-component~="ui-editor-slash-menu"][data-v-a85c3b18] {
4980
+ border-radius: var(--ui-radius-dialog) var(--ui-radius-dialog) 0 0;
4981
+ border-bottom: none;
4605
4982
  }
4606
- .swatch-button.selected[data-v-8c2d4497] {
4607
- background: var(--ui-accent-soft, var(--ui-accent-subtle));
4608
4983
  }
4609
- [data-component~="ui-editor-table-toolbar"][hidden][data-v-8c2d4497] {
4984
+ .header[data-v-a85c3b18] {
4610
4985
  display: none;
4611
- }
4612
-
4613
- [data-component~="ui-editor-toolbar"][data-v-fa1e480e] {
4614
- position: sticky;
4615
- top: 0;
4616
- z-index: var(--ui-editor-toolbar-z-index, 10);
4617
- display: flex;
4618
- align-items: center;
4619
- padding: var(--ui-editor-toolbar-padding-block, 6px)
4620
- var(--ui-editor-toolbar-padding-inline, 12px);
4621
- min-height: var(--ui-editor-toolbar-min-height, 48px);
4622
- background: var(--ui-editor-toolbar-surface, var(--ui-surface));
4623
- border-bottom: var(--ui-border-width) solid
4624
- var(--ui-editor-toolbar-border, var(--ui-border-divider));
4625
- }
4626
-
4627
- /* One row, always. When the controls outgrow the space, the row scrolls sideways rather than
4628
- wrapping into several lines, and a fade at each edge that has more to show says so. */
4629
- .strip[data-v-fa1e480e] {
4630
- display: flex;
4631
- flex: 1 1 auto;
4632
4986
  align-items: center;
4633
- justify-content: flex-start;
4634
- gap: var(--ui-editor-toolbar-gap, 2px);
4635
- min-width: 0;
4636
- overflow-x: auto;
4637
- overflow-y: hidden;
4638
- overscroll-behavior-inline: contain;
4639
- scrollbar-width: none;
4987
+ gap: var(--ui-space-2);
4988
+ padding: var(--ui-space-3) var(--ui-space-4);
4989
+ border-bottom: var(--ui-border-width) solid var(--ui-border-divider);
4990
+ font-size: var(--ui-font-size-xs);
4991
+ color: var(--ui-text-muted);
4992
+ font-weight: var(--ui-font-semibold);
4993
+ text-transform: uppercase;
4994
+ letter-spacing: 0.05em;
4640
4995
  }
4641
- .strip[data-v-fa1e480e]::-webkit-scrollbar {
4996
+ [data-component~="ui-editor-slash-menu"] > .header[data-v-a85c3b18]:empty,
4997
+ [data-component~="ui-editor-slash-menu"] > .footer[data-v-a85c3b18]:empty,
4998
+ [data-component~="ui-editor-slash-menu"] > .empty[data-v-a85c3b18]:empty {
4642
4999
  display: none;
4643
5000
  }
4644
- .strip > [data-v-fa1e480e-s] {
4645
- flex: 0 0 auto;
5001
+ .empty[data-v-a85c3b18] {
5002
+ padding: var(--ui-space-3);
5003
+ color: var(--ui-text-muted);
5004
+ font-size: var(--ui-font-size-sm);
5005
+ }
5006
+ @media (max-width: 767px) {
5007
+ .header[data-v-a85c3b18] {
5008
+ display: flex;
5009
+ }
4646
5010
  }
4647
-
4648
- /* The edge fades are the scroll fade every Looma scroller uses (see ui-scroll-area), a mask on the
4649
- strip, so a floating toolbar's border and shadow stay whole. */
4650
- .strip[data-v-fa1e480e] {
4651
- --_ui-scroll-fade-direction: to right;
4652
- --_ui-scroll-fade-size: var(--ui-editor-toolbar-fade-size, var(--ui-scroll-fade-size, 24px));
5011
+ .list[data-v-a85c3b18] {
5012
+ list-style: none;
5013
+ margin: 0;
5014
+ padding: var(--ui-space-1) 0;
5015
+ overflow-y: auto;
5016
+ max-height: 280px;
5017
+ overscroll-behavior: contain;
5018
+ /* Each edge that hides content fades: the scroll fade every Looma scroller uses (see ui-scroll-area). */
5019
+ --_ui-scroll-fade-direction: to bottom;
5020
+ --_ui-scroll-fade-size: var(--ui-scroll-fade-size, 24px);
4653
5021
  mask-image: linear-gradient(
4654
5022
  var(--_ui-scroll-fade-direction),
4655
5023
  transparent,
@@ -4662,476 +5030,519 @@ ul[data-v-516afff1] {
4662
5030
  ui-scroll-fade-start-hold linear,
4663
5031
  ui-scroll-fade-end-hold linear,
4664
5032
  ui-scroll-fade-end linear;
4665
- animation-timeline: scroll(self inline);
5033
+ animation-timeline: scroll(self block);
4666
5034
  animation-range:
4667
5035
  0 var(--_ui-scroll-fade-size),
4668
5036
  var(--_ui-scroll-fade-size) calc(100% + 1px),
4669
5037
  -1px calc(100% - var(--_ui-scroll-fade-size)),
4670
5038
  calc(100% - var(--_ui-scroll-fade-size)) 100%;
4671
5039
  }
4672
- [data-component~="ui-editor-toolbar"]:dir(rtl) .strip[data-v-fa1e480e] {
4673
- --_ui-scroll-fade-direction: to left;
4674
- }
4675
- .divider[data-v-fa1e480e-s] {
4676
- width: 1px;
4677
- height: 20px;
4678
- background: var(--ui-editor-toolbar-divider, var(--ui-border-divider));
4679
- flex-shrink: 0;
4680
- margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
4681
- }
4682
- [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-fa1e480e] {
4683
- position: relative;
4684
- top: auto;
4685
- width: max-content;
4686
- max-width: min(calc(100vw - 24px), 100%);
4687
- min-height: auto;
4688
- padding: var(--ui-editor-toolbar-floating-padding, 4px);
4689
- background: color-mix(
4690
- in srgb,
4691
- var(--ui-editor-toolbar-surface, var(--ui-surface)) 96%,
4692
- transparent
4693
- );
4694
- border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
4695
- border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
4696
- box-shadow: var(
4697
- --ui-editor-toolbar-floating-shadow,
4698
- var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12))
4699
- );
4700
- backdrop-filter: blur(10px);
4701
- }
4702
5040
  @media (max-width: 767px) {
4703
- [data-component~="ui-editor-toolbar"][data-v-fa1e480e] {
4704
- position: fixed;
4705
- top: auto;
4706
- bottom: env(safe-area-inset-bottom);
4707
- left: 0;
4708
- right: 0;
4709
- min-height: var(--ui-editor-toolbar-mobile-min-height, 56px);
4710
- border-top: var(--ui-border-width) solid
4711
- var(--ui-editor-toolbar-border, var(--ui-border-divider));
4712
- border-bottom: none;
4713
- box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
5041
+ .list[data-v-a85c3b18] {
5042
+ max-height: calc(60dvh - 80px);
5043
+ padding: var(--ui-space-1) 0 var(--ui-space-2);
4714
5044
  }
4715
- [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-fa1e480e] {
4716
- position: relative;
4717
- inset: auto;
4718
- min-height: auto;
4719
- border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
4720
- border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
4721
- box-shadow: var(
4722
- --ui-editor-toolbar-floating-shadow,
4723
- var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12))
4724
- );
4725
5045
  }
5046
+ .item[data-v-a85c3b18] {
5047
+ display: flex;
5048
+ align-items: center;
5049
+ gap: var(--ui-space-3);
5050
+ padding: var(--ui-space-2) var(--ui-space-3);
5051
+ min-height: 44px;
5052
+ cursor: pointer;
5053
+ transition: background-color 120ms ease;
4726
5054
  }
4727
-
4728
- /* Inside LoomaEditor's sticky shell, the shell is the sticky surface. */
4729
- .looma-editor__sticky-toolbar-shell [data-component~="ui-editor-toolbar"][data-v-fa1e480e] {
4730
- position: relative;
4731
- min-height: var(--ui-editor-toolbar-min-height, 48px);
4732
- background: transparent;
4733
- border: 0;
4734
- box-shadow: none;
5055
+ .item.active[data-v-a85c3b18] {
5056
+ background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
4735
5057
  }
4736
-
4737
- /* Inside LoomaEditor's mobile shell, the toolbar is a scroll-snapping strip. */
4738
- .looma-editor__mobile-toolbar-shell
4739
- [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"][data-v-fa1e480e] {
4740
- width: 100%;
4741
- max-width: none;
4742
- min-height: 100%;
4743
- padding: 0;
4744
- background: transparent;
4745
- border: 0;
4746
- border-radius: 0;
4747
- box-shadow: none;
4748
- backdrop-filter: none;
5058
+ .icon[data-v-a85c3b18] {
5059
+ display: flex;
5060
+ align-items: center;
5061
+ justify-content: center;
5062
+ width: 32px;
5063
+ height: 32px;
5064
+ background: var(--ui-surface-hover);
5065
+ border: var(--ui-border-width) solid var(--ui-border);
5066
+ border-radius: var(--ui-radius-md);
5067
+ font-size: var(--ui-font-size-sm);
5068
+ font-weight: var(--ui-font-bold);
5069
+ color: var(--ui-text-secondary);
5070
+ font-family: var(--ui-font-family-mono, ui-monospace, monospace);
5071
+ flex-shrink: 0;
5072
+ line-height: 1;
4749
5073
  }
4750
- .looma-editor__mobile-toolbar-shell
4751
- [data-component~="ui-editor-toolbar"][data-ui-editor-toolbar-state~="floating"]
4752
- .strip[data-v-fa1e480e] {
4753
- scroll-snap-type: x mandatory;
5074
+ .item.active .icon[data-v-a85c3b18] {
5075
+ background: var(--ui-accent);
5076
+ border-color: var(--ui-accent);
5077
+ color: var(--ui-accent-contrast);
4754
5078
  }
4755
-
4756
- /* A component that sets its display still honours the hidden attribute on its root. */
4757
- [data-component~="ui-editor-toolbar"][hidden][data-v-fa1e480e] {
4758
- display: none;
5079
+ .icon[data-v-a85c3b18] {
5080
+ --_ui-default-icon-size: 1rem;
5081
+ --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
4759
5082
  }
4760
-
4761
- /* This component's hooks style the element they are set on, and never a nested one. */
4762
- @property --ui-floating-action-button-inset-block-end {
4763
- syntax: "*";
4764
- inherits: false;
5083
+ .body[data-v-a85c3b18] {
5084
+ display: flex;
5085
+ min-width: 0;
5086
+ flex-direction: column;
5087
+ gap: 1px;
4765
5088
  }
4766
- @property --ui-floating-action-button-inset-inline-end {
4767
- syntax: "*";
4768
- inherits: false;
5089
+ .title[data-v-a85c3b18] {
5090
+ font-size: var(--ui-font-size-sm);
5091
+ font-weight: var(--ui-font-medium);
5092
+ color: var(--ui-text);
5093
+ white-space: nowrap;
5094
+ overflow: hidden;
5095
+ text-overflow: ellipsis;
4769
5096
  }
4770
- @property --ui-floating-action-button-z-index {
4771
- syntax: "*";
4772
- inherits: false;
5097
+ .description[data-v-a85c3b18] {
5098
+ font-size: var(--ui-font-size-xs);
5099
+ color: var(--ui-text-muted);
5100
+ white-space: nowrap;
5101
+ overflow: hidden;
5102
+ text-overflow: ellipsis;
4773
5103
  }
4774
- [data-component~="ui-floating-action-button"][data-v-955cfa65] {
4775
- position: fixed;
4776
- inset-block-end: calc(
4777
- var(--ui-floating-action-button-inset-block-end, var(--ui-space-6)) +
4778
- env(safe-area-inset-bottom)
4779
- );
4780
- inset-inline-end: max(
4781
- var(--ui-floating-action-button-inset-inline-end, var(--ui-space-5)),
4782
- env(safe-area-inset-right)
4783
- );
4784
- inline-size: var(--ui-control-min-block-size);
4785
- block-size: var(--ui-control-min-block-size);
4786
- display: inline-flex;
4787
- z-index: var(--ui-floating-action-button-z-index, 100);
5104
+ .footer[data-v-a85c3b18] {
5105
+ padding: var(--ui-space-2) var(--ui-space-3);
5106
+ border-top: var(--ui-border-width) solid var(--ui-border-divider);
5107
+ font-size: var(--ui-font-size-xs);
5108
+ color: var(--ui-text-muted);
4788
5109
  }
4789
- [data-component~="ui-floating-action-button"][data-v-955cfa65] {
4790
- appearance: none;
4791
- border: none;
4792
- border-radius: var(--ui-radius-round);
4793
- margin: 0;
4794
- padding: 0;
5110
+ [data-component~="ui-editor-slash-menu"] kbd[data-v-a85c3b18] {
4795
5111
  display: inline-flex;
4796
5112
  align-items: center;
4797
5113
  justify-content: center;
4798
- background: var(--ui-accent);
4799
- color: var(--ui-on-accent);
4800
- box-shadow: 0 4px 12px color-mix(in srgb, var(--ui-accent) 40%, transparent);
4801
- cursor: pointer;
4802
- transition:
4803
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
4804
- transform var(--ui-motion-fast) var(--ui-motion-ease),
4805
- box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
4806
- }
4807
- [data-component~="ui-floating-action-button"][data-v-955cfa65]:hover:enabled {
4808
- background: var(--ui-accent-hover);
4809
- box-shadow: 0 6px 16px color-mix(in srgb, var(--ui-accent) 50%, transparent);
4810
- }
4811
- [data-component~="ui-floating-action-button"][data-v-955cfa65]:active:enabled {
4812
- transform: scale(0.94);
5114
+ font-family: var(--ui-font-family-mono, ui-monospace, monospace);
5115
+ font-size: var(--ui-font-size-2xs);
5116
+ background: var(--ui-surface-hover);
5117
+ border: var(--ui-border-width) solid var(--ui-border);
5118
+ border-radius: var(--ui-radius-sm);
5119
+ padding: 0 3px;
5120
+ color: var(--ui-text-secondary);
4813
5121
  }
4814
- [data-component~="ui-floating-action-button"][data-v-955cfa65]:focus-visible {
4815
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
4816
- outline-offset: var(--ui-focus-width);
5122
+ [data-component~="ui-editor-slash-menu"][hidden][data-v-a85c3b18] {
5123
+ display: none;
4817
5124
  }
4818
- [data-component~="ui-floating-action-button"][data-v-955cfa65]:disabled {
4819
- background: var(--ui-disabled-surface);
4820
- color: var(--ui-disabled-text);
4821
- box-shadow: none;
4822
- cursor: not-allowed;
5125
+
5126
+ [data-component~="ui-editor-slash-menu-group"][data-v-516afff1] {
5127
+ display: block;
5128
+ list-style: none;
4823
5129
  }
4824
- svg[data-v-955cfa65-s] {
4825
- inline-size: var(--ui-icon-size-lg);
4826
- block-size: var(--ui-icon-size-lg);
4827
- flex-shrink: 0;
5130
+ .heading[data-v-516afff1] {
5131
+ padding: var(--ui-space-2) var(--ui-space-3) var(--ui-space-1);
5132
+ color: var(--ui-text-muted);
5133
+ font-size: var(--ui-font-size-xs);
5134
+ font-weight: var(--ui-font-semibold);
4828
5135
  }
4829
- @media (min-width: 768px) {
4830
- [data-component~="ui-floating-action-button"][data-ui-floating-action-button-state~="mobileOnly"][data-v-955cfa65] {
4831
- display: none;
5136
+ ul[data-v-516afff1] {
5137
+ margin: 0;
5138
+ padding: 0;
5139
+ list-style: none;
4832
5140
  }
5141
+ [data-component~="ui-editor-slash-menu-group"][hidden][data-v-516afff1] {
5142
+ display: none;
4833
5143
  }
4834
5144
 
4835
- /* A component that sets its display still honours the hidden attribute on its root. */
4836
- [data-component~="ui-floating-action-button"][hidden][data-v-955cfa65] {
4837
- display: none;
5145
+ [data-component~="ui-editor-slash-menu-item"][data-v-dd4dbe75] {
5146
+ display: flex;
5147
+ align-items: center;
5148
+ gap: var(--ui-space-3);
5149
+ min-block-size: 44px;
5150
+ padding: var(--ui-space-2) var(--ui-space-3);
5151
+ cursor: pointer;
5152
+ list-style: none;
4838
5153
  }
4839
-
4840
- /* This component's hooks style the element they are set on, and never a nested one. */
4841
- @property --ui-form-field-danger {
4842
- syntax: "*";
4843
- inherits: false;
5154
+ [data-component~="ui-editor-slash-menu-item"][aria-selected="true"][data-v-dd4dbe75] {
5155
+ background: var(--ui-accent-subtle);
4844
5156
  }
4845
- @property --ui-form-field-help-font-size {
4846
- syntax: "*";
4847
- inherits: false;
5157
+ [data-component~="ui-editor-slash-menu-item"][aria-disabled="true"][data-v-dd4dbe75] {
5158
+ background: var(--ui-disabled-surface);
5159
+ cursor: not-allowed;
4848
5160
  }
4849
- @property --ui-form-field-help-min-block-size {
4850
- syntax: "*";
4851
- inherits: false;
5161
+ [data-component~="ui-editor-slash-menu-item"][aria-disabled="true"] .title[data-v-dd4dbe75],
5162
+ [data-component~="ui-editor-slash-menu-item"][aria-disabled="true"] .description[data-v-dd4dbe75],
5163
+ [data-component~="ui-editor-slash-menu-item"][aria-disabled="true"] .icon[data-v-dd4dbe75] {
5164
+ color: var(--ui-disabled-text);
4852
5165
  }
4853
- @property --ui-form-field-help-text {
4854
- syntax: "*";
4855
- inherits: false;
5166
+ .icon[data-v-dd4dbe75] {
5167
+ display: flex;
5168
+ align-items: center;
5169
+ justify-content: center;
5170
+ inline-size: 32px;
5171
+ block-size: 32px;
5172
+ flex: 0 0 auto;
5173
+ color: var(--ui-text-secondary);
5174
+ background: var(--ui-surface-hover);
5175
+ border: var(--ui-border-width) solid var(--ui-border);
5176
+ border-radius: var(--ui-radius-md);
4856
5177
  }
4857
- @property --ui-form-field-label-font-size {
4858
- syntax: "*";
4859
- inherits: false;
5178
+ .icon[data-v-dd4dbe75] {
5179
+ --_ui-default-icon-size: 1rem;
4860
5180
  }
4861
- @property --ui-form-field-label-text {
4862
- syntax: "*";
4863
- inherits: false;
5181
+ .body[data-v-dd4dbe75] {
5182
+ display: flex;
5183
+ min-inline-size: 0;
5184
+ flex-direction: column;
5185
+ gap: 1px;
4864
5186
  }
4865
- @property --ui-form-field-min-inline-size {
4866
- syntax: "*";
4867
- inherits: false;
5187
+ .title[data-v-dd4dbe75], .description[data-v-dd4dbe75] {
5188
+ overflow: hidden;
5189
+ text-overflow: ellipsis;
5190
+ white-space: nowrap;
4868
5191
  }
4869
- [data-component~="ui-form-field"][data-v-3feaf986] {
4870
- /* Hooks do not inherit, so the parts below read them from the root. */
4871
- --_ui-form-field-danger: var(--ui-form-field-danger);
4872
- --_ui-form-field-help-min-block-size: var(--ui-form-field-help-min-block-size);
4873
- --_ui-form-field-label-text: var(--ui-form-field-label-text);
4874
- --_ui-form-field-label-font-size: var(--ui-form-field-label-font-size);
4875
- --_ui-form-field-help-text: var(--ui-form-field-help-text);
4876
- --_ui-form-field-help-font-size: var(--ui-form-field-help-font-size);
4877
-
4878
- display: grid;
4879
- gap: var(--ui-space-2);
4880
- min-inline-size: var(--ui-form-field-min-inline-size, 0);
4881
- align-content: start;
5192
+ .title[data-v-dd4dbe75] {
4882
5193
  color: var(--ui-text-primary);
5194
+ font-size: var(--ui-font-size-sm);
5195
+ font-weight: var(--ui-font-medium);
5196
+ }
5197
+ .description[data-v-dd4dbe75] {
5198
+ color: var(--ui-text-muted);
5199
+ font-size: var(--ui-font-size-xs);
5200
+ }
5201
+ [data-component~="ui-editor-slash-menu-item"][hidden][data-v-dd4dbe75] {
5202
+ display: none;
4883
5203
  }
4884
5204
 
4885
- /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
4886
- in Vue), and generates no box of its own, so an empty region adds no gap. */
4887
- .label[data-v-3feaf986],
4888
- .help[data-v-3feaf986],
4889
- .error[data-v-3feaf986] {
4890
- display: contents;
5205
+ [data-component~="ui-editor-surface"][data-v-dee440af] {
5206
+ display: flex;
5207
+ flex-direction: column;
5208
+ min-inline-size: 0;
5209
+ max-inline-size: 100%;
4891
5210
  }
4892
- .label[data-v-3feaf986] {
4893
- color: var(--_ui-form-field-label-text, var(--ui-text-secondary));
4894
- font-size: var(--_ui-form-field-label-font-size, var(--ui-font-size-sm));
5211
+ /* The document renderer consumes these inherited surface settings. They do not style controls. */
5212
+ [data-component~="ui-editor-surface"][data-ui-editor-surface-state~="density=compact"][data-v-dee440af] {
5213
+ --_ui-editor-content-min-height: 0px;
5214
+ --_ui-editor-content-padding-block: 0px;
5215
+ --_ui-editor-content-padding-inline: 0px;
5216
+ --_ui-editor-mobile-bottom-space: 0px;
4895
5217
  }
4896
5218
 
4897
- /* A label action, such as a small help button, sits after the label text in a box one line
4898
- tall, centred on the first line and overflowing it. A button taller than a line of label
4899
- text then never makes this field's label row taller than its neighbours' in a grid row. */
4900
- .label[data-v-3feaf986]:has(> .label-action > *) {
5219
+ [data-component~="ui-editor-table-context-menu"][popover][data-v-f2ebbbc8] {
5220
+ position: fixed;
5221
+ inset: auto;
5222
+ margin: 0;
5223
+ }
5224
+ [data-component~="ui-editor-table-context-menu"][data-v-f2ebbbc8] {
5225
+ /* The max-width is a promise about the menu's footprint, so it counts padding and border. */
5226
+ box-sizing: border-box;
5227
+ min-width: min(14rem, calc(100vw - 24px));
5228
+ max-width: min(17rem, calc(100vw - 24px));
5229
+ max-height: min(28rem, calc(100vh - 24px));
5230
+ padding: var(--ui-space-2);
5231
+ background: var(--ui-surface);
5232
+ border: var(--ui-border-width) solid var(--ui-border-strong);
5233
+ border-radius: var(--ui-radius-lg);
5234
+ box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
4901
5235
  display: flex;
4902
- align-items: start;
4903
- gap: var(--ui-space-1);
5236
+ flex-direction: column;
5237
+ gap: 2px;
5238
+ overflow-y: auto;
5239
+ overscroll-behavior: contain;
5240
+ scrollbar-width: thin;
4904
5241
  }
4905
- .label-action[data-v-3feaf986] {
5242
+ .section[data-v-f2ebbbc8] {
4906
5243
  display: flex;
4907
- align-items: unsafe center;
4908
- block-size: 1lh;
5244
+ flex-direction: column;
5245
+ gap: 3px;
4909
5246
  }
4910
- .label-action[data-v-3feaf986]:not(:has(> *)) {
4911
- display: none;
5247
+ [data-component~="ui-editor-table-context-menu"] button[data-v-f2ebbbc8] {
5248
+ display: flex;
5249
+ align-items: center;
5250
+ gap: var(--ui-space-2);
5251
+ width: 100%;
5252
+ text-align: left;
5253
+ min-height: 32px;
5254
+ padding: var(--ui-space-2) var(--ui-space-2);
5255
+ border: none;
5256
+ border-radius: var(--ui-radius-sm);
5257
+ background: none;
5258
+ font-size: var(--ui-font-size-sm);
5259
+ cursor: pointer;
5260
+ color: var(--ui-text);
4912
5261
  }
4913
- .help[data-v-3feaf986] {
4914
- color: var(--_ui-form-field-help-text, var(--ui-text-muted));
4915
- font-size: var(--_ui-form-field-help-font-size, var(--ui-font-size-sm));
4916
- line-height: var(--ui-line-height-md);
5262
+ [data-component~="ui-editor-table-context-menu"] button[data-v-f2ebbbc8] {
5263
+ --_ui-default-icon-size: 1rem;
5264
+ --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
4917
5265
  }
4918
- .help > [data-v-3feaf986-s] {
4919
- min-block-size: var(--_ui-form-field-help-min-block-size, 0);
5266
+ [data-component~="ui-editor-table-context-menu"] button[data-v-f2ebbbc8]:hover:not(:disabled) {
5267
+ background: var(--ui-surface-hover);
4920
5268
  }
4921
- .error[data-v-3feaf986] {
4922
- display: none;
5269
+ [data-component~="ui-editor-table-context-menu"] button.selected[data-v-f2ebbbc8] {
5270
+ background: var(--ui-accent-subtle, rgb(59 130 246 / 0.1));
4923
5271
  }
4924
- [data-component~="ui-form-field"][data-ui-form-field-state~="invalid"] .error[data-v-3feaf986] {
4925
- display: contents;
5272
+ [data-component~="ui-editor-table-context-menu"] button.danger[data-v-f2ebbbc8] {
5273
+ color: var(--ui-danger);
4926
5274
  }
4927
5275
 
4928
- /* An error reads in the danger colour, the one the invalid control's border takes. */
4929
- .error[data-v-3feaf986],[role="alert"][data-v-3feaf986-s] {
4930
- color: var(--_ui-form-field-danger, var(--ui-field-danger, var(--ui-danger)));
4931
- font-size: var(--ui-font-size-sm);
5276
+ /* Swatches wrap like words: the row asks for the menu's full width, and a narrower menu fits fewer. */
5277
+ .swatches[data-v-f2ebbbc8] {
5278
+ display: flex;
5279
+ flex-wrap: wrap;
5280
+ gap: 3px;
4932
5281
  }
4933
5282
 
4934
- /* A component that sets its display still honours the hidden attribute on its root. */
4935
- [data-component~="ui-form-field"][hidden][data-v-3feaf986] {
4936
- display: none;
5283
+ /* Three to a row at the menu's full width; 5rem keeps the longest label, "Default", whole. */
5284
+ [data-component~="ui-editor-table-context-menu"] .swatch-button[data-v-f2ebbbc8] {
5285
+ display: inline-flex;
5286
+ align-items: center;
5287
+ gap: var(--ui-space-2);
5288
+ flex: 1 0 5rem;
5289
+ min-width: 5rem;
5290
+ max-width: calc((100% - 6px) / 3);
5291
+ padding-inline-end: var(--ui-space-1);
4937
5292
  }
4938
-
4939
- /* This component's hooks style the element they are set on, and never a nested one. */
4940
- @property --ui-grid-gap {
4941
- syntax: "*";
4942
- inherits: false;
5293
+ .swatch[data-v-f2ebbbc8] {
5294
+ display: inline-flex;
5295
+ width: 1rem;
5296
+ height: 1rem;
5297
+ border-radius: var(--ui-radius-round);
5298
+ border: var(--ui-border-width) solid var(--ui-border);
5299
+ background: var(--_swatch, #fff);
5300
+ box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.35);
5301
+ flex-shrink: 0;
4943
5302
  }
4944
- @property --ui-grid-min {
4945
- syntax: "*";
4946
- inherits: false;
5303
+ .swatch.default[data-v-f2ebbbc8] {
5304
+ position: relative;
5305
+ background:
5306
+ linear-gradient(
5307
+ 135deg,
5308
+ transparent calc(50% - 1px),
5309
+ var(--ui-text-muted) calc(50% - 1px),
5310
+ var(--ui-text-muted) calc(50% + 1px),
5311
+ transparent calc(50% + 1px)
5312
+ ),
5313
+ var(--ui-surface);
4947
5314
  }
4948
- [data-component~="ui-grid"][data-v-d42a2c9e] {
4949
- --_grid-gap: var(--ui-space-4);
4950
- --_grid-min: 12rem;
4951
- display: grid;
4952
- gap: var(--ui-grid-gap, var(--_grid-gap));
4953
- grid-template-columns:
4954
- repeat(
4955
- auto-fit,
4956
- minmax(
4957
- min(
4958
- max(
4959
- var(--ui-grid-min, var(--_grid-min)),
4960
- calc(
4961
- (
4962
- 100% -
4963
- (max(1, var(--_grid-column-cap, 9999)) - 1) * var(--ui-grid-gap, var(--_grid-gap))
4964
- ) /
4965
- max(1, var(--_grid-column-cap, 9999))
4966
- )
4967
- ),
4968
- 100%
4969
- ),
4970
- 1fr
4971
- )
4972
- );
4973
- min-inline-size: 0;
4974
- max-inline-size: 100%;
4975
- margin: 0;
5315
+ .swatch-label[data-v-f2ebbbc8] {
5316
+ min-width: 0;
5317
+ white-space: nowrap;
5318
+ }
5319
+ .heading[data-v-f2ebbbc8] {
5320
+ padding: var(--ui-space-1) var(--ui-space-2);
5321
+ font-size: var(--ui-font-size-2xs);
5322
+ font-weight: 700;
5323
+ letter-spacing: 0.05em;
5324
+ text-transform: uppercase;
5325
+ color: var(--ui-text-muted);
5326
+ }
5327
+ .sep[data-v-f2ebbbc8] {
5328
+ height: 1px;
5329
+ background: var(--ui-border-divider);
5330
+ margin: var(--ui-space-1) 0;
4976
5331
  }
4977
- [data-component~="ui-grid"][data-ui-grid-state~="gap=xs"][data-v-d42a2c9e] {
4978
- --_grid-gap: var(--ui-space-2);
5332
+
5333
+ /* Separators divide sections, so none sits above the first. */
5334
+ .sep[data-v-f2ebbbc8]:first-child {
5335
+ display: none;
4979
5336
  }
4980
- [data-component~="ui-grid"][data-ui-grid-state~="gap=s"][data-v-d42a2c9e] {
4981
- --_grid-gap: var(--ui-space-3);
5337
+ [data-component~="ui-editor-table-context-menu"][hidden][data-v-f2ebbbc8] {
5338
+ display: none;
4982
5339
  }
4983
- [data-component~="ui-grid"][data-ui-grid-state~="gap=m"][data-v-d42a2c9e] {
4984
- --_grid-gap: var(--ui-space-4);
5340
+
5341
+ [data-component~="ui-editor-table-overlay"][data-v-0e632fe0] {
5342
+ display: block;
5343
+ width: 100%;
5344
+ height: 100%;
5345
+ overflow: visible;
5346
+ pointer-events: none;
4985
5347
  }
4986
- [data-component~="ui-grid"][data-ui-grid-state~="gap=l"][data-v-d42a2c9e] {
4987
- --_grid-gap: var(--ui-space-5);
5348
+ [data-component~="ui-editor-table-overlay"][data-v-0e632fe0] {
5349
+ position: relative;
5350
+ width: 100%;
5351
+ height: 100%;
5352
+ overflow: visible;
5353
+ pointer-events: none;
4988
5354
  }
4989
- [data-component~="ui-grid"][data-ui-grid-state~="gap=xl"][data-v-d42a2c9e] {
4990
- --_grid-gap: var(--ui-space-6);
5355
+ .rows[data-v-0e632fe0],
5356
+ .cols[data-v-0e632fe0] {
5357
+ pointer-events: none;
5358
+ position: absolute;
4991
5359
  }
4992
- [data-component~="ui-grid"][data-ui-grid-state~="min=md"][data-v-d42a2c9e] {
4993
- --_grid-min: 16rem;
5360
+ .rows[data-v-0e632fe0] {
5361
+ inset: 0;
5362
+ width: 100%;
4994
5363
  }
4995
- [data-component~="ui-grid"][data-ui-grid-state~="min=lg"][data-v-d42a2c9e] {
4996
- --_grid-min: 20rem;
5364
+ .cols[data-v-0e632fe0] {
5365
+ inset: 0;
5366
+ height: 100%;
4997
5367
  }
4998
-
4999
- /* A component that sets its display still honours the hidden attribute on its root. */
5000
- [data-component~="ui-grid"][hidden][data-v-d42a2c9e] {
5001
- display: none;
5368
+ .control[data-v-0e632fe0] {
5369
+ position: absolute;
5370
+ z-index: 1;
5371
+ pointer-events: none;
5002
5372
  }
5003
-
5004
- /* This component's hooks style the element they are set on, and never a nested one. */
5005
- @property --ui-icon-button-active-scale {
5006
- syntax: "*";
5007
- inherits: false;
5373
+ .handle[data-v-0e632fe0] {
5374
+ position: absolute;
5375
+ display: inline-flex;
5376
+ align-items: center;
5377
+ justify-content: center;
5378
+ width: 24px;
5379
+ height: 24px;
5380
+ padding: 0;
5381
+ border: var(--ui-border-width) solid var(--ui-affordance-near-color, var(--ui-border-strong));
5382
+ border-radius: var(--ui-radius-round);
5383
+ background: color-mix(in srgb, var(--ui-surface-elevated) 96%, transparent);
5384
+ color: var(--ui-affordance-near-color, var(--ui-text-secondary));
5385
+ font: inherit;
5386
+ font-size: 16px;
5387
+ line-height: 1;
5388
+ box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
5389
+ opacity: 0;
5390
+ scale: 0.72;
5391
+ transition:
5392
+ opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
5393
+ scale var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
5394
+ color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
5395
+ background-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
5396
+ border-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
5397
+ pointer-events: auto;
5398
+ cursor: pointer;
5008
5399
  }
5009
- @property --ui-icon-button-active-surface {
5010
- syntax: "*";
5011
- inherits: false;
5400
+ .handle[data-v-0e632fe0] {
5401
+ --_ui-default-icon-size: 14px;
5402
+ --_ui-default-icon-stroke-width: 2;
5012
5403
  }
5013
- @property --ui-icon-button-border {
5014
- syntax: "*";
5015
- inherits: false;
5404
+ .handle[data-ui-proximity="near"][data-v-0e632fe0],
5405
+ .control.active .handle[data-v-0e632fe0],
5406
+ .handle[data-v-0e632fe0]:focus-visible {
5407
+ opacity: 1;
5408
+ scale: 1;
5016
5409
  }
5017
- @property --ui-icon-button-disabled-filter {
5018
- syntax: "*";
5019
- inherits: false;
5410
+ .control.active .handle[data-v-0e632fe0],
5411
+ .handle[data-v-0e632fe0]:focus-visible {
5412
+ border-color: var(--ui-affordance-direct-color, var(--ui-accent-solid));
5413
+ background: var(--ui-affordance-direct-color, var(--ui-accent-solid));
5414
+ color: var(--ui-text-on-accent);
5415
+ box-shadow: var(--ui-shadow-sm, 0 1px 3px rgb(0 0 0 / 0.1));
5020
5416
  }
5021
- @property --ui-icon-button-disabled-opacity {
5022
- syntax: "*";
5023
- inherits: false;
5417
+ .handle[data-v-0e632fe0]:focus-visible,
5418
+ .selector[data-v-0e632fe0]:focus-visible,
5419
+ .cell-menu[data-v-0e632fe0]:focus-visible {
5420
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
5421
+ outline-offset: var(--ui-focus-width);
5024
5422
  }
5025
- @property --ui-icon-button-hover-border {
5026
- syntax: "*";
5027
- inherits: false;
5423
+ .control.row[data-v-0e632fe0] {
5424
+ left: 0;
5425
+ width: 100%;
5426
+ height: 0;
5028
5427
  }
5029
- @property --ui-icon-button-hover-surface {
5030
- syntax: "*";
5031
- inherits: false;
5428
+ .control.row .handle[data-v-0e632fe0] {
5429
+ top: -12px;
5430
+ left: -30px;
5032
5431
  }
5033
- @property --ui-icon-button-hover-text {
5034
- syntax: "*";
5035
- inherits: false;
5432
+ .control.col[data-v-0e632fe0] {
5433
+ top: 0;
5434
+ width: 0;
5435
+ height: 100%;
5036
5436
  }
5037
- @property --ui-icon-button-icon-size {
5038
- syntax: "*";
5039
- inherits: false;
5437
+ .control.col .handle[data-v-0e632fe0] {
5438
+ top: -30px;
5439
+ left: -12px;
5040
5440
  }
5041
- @property --ui-icon-button-icon-stroke-width {
5042
- syntax: "*";
5043
- inherits: false;
5441
+ .line[data-v-0e632fe0] {
5442
+ position: absolute;
5443
+ background: var(--ui-affordance-direct-color, var(--ui-accent-solid));
5444
+ opacity: 0;
5445
+ transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
5044
5446
  }
5045
- @property --ui-icon-button-outline-surface {
5046
- syntax: "*";
5047
- inherits: false;
5447
+ .control.row .line[data-v-0e632fe0] {
5448
+ inset: calc(-0.5 * var(--ui-accent-line-width)) 0 auto;
5449
+ height: var(--ui-accent-line-width);
5048
5450
  }
5049
- @property --ui-icon-button-outline-text {
5050
- syntax: "*";
5051
- inherits: false;
5451
+ .control.col .line[data-v-0e632fe0] {
5452
+ inset: 0 auto 0 calc(-0.5 * var(--ui-accent-line-width));
5453
+ width: var(--ui-accent-line-width);
5052
5454
  }
5053
- @property --ui-icon-button-radius {
5054
- syntax: "*";
5055
- inherits: false;
5455
+ .control.active .line[data-v-0e632fe0] {
5456
+ opacity: 0.8;
5056
5457
  }
5057
- @property --ui-icon-button-size {
5058
- syntax: "*";
5059
- inherits: false;
5458
+ .guide[data-v-0e632fe0] {
5459
+ position: absolute;
5460
+ width: var(--ui-affordance-guide-size);
5461
+ height: var(--ui-affordance-guide-size);
5462
+ border-radius: var(--ui-radius-round);
5463
+ background: var(--ui-affordance-guide-color, var(--ui-border-strong));
5464
+ opacity: calc(var(--ui-affordance-guide-opacity) * var(--ui-affordance-scope-guide, 1));
5465
+ transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
5060
5466
  }
5061
- @property --ui-icon-button-solid-hover-surface {
5062
- syntax: "*";
5063
- inherits: false;
5467
+ .control.row .guide[data-v-0e632fe0] {
5468
+ left: -10px;
5469
+ top: -2px;
5064
5470
  }
5065
- @property --ui-icon-button-solid-shadow {
5066
- syntax: "*";
5067
- inherits: false;
5471
+ .control.col .guide[data-v-0e632fe0] {
5472
+ left: -2px;
5473
+ top: -10px;
5068
5474
  }
5069
- @property --ui-icon-button-solid-surface {
5070
- syntax: "*";
5071
- inherits: false;
5475
+ .control:has(.handle[data-ui-proximity="near"]) .guide[data-v-0e632fe0],
5476
+ .control.active .guide[data-v-0e632fe0] {
5477
+ opacity: 0;
5072
5478
  }
5073
- @property --ui-icon-button-solid-text {
5074
- syntax: "*";
5075
- inherits: false;
5479
+ .tooltip[data-v-0e632fe0] {
5480
+ position: absolute;
5481
+ z-index: 2;
5482
+ top: calc(100% + 6px);
5483
+ left: 50%;
5484
+ width: max-content;
5485
+ max-width: 14rem;
5486
+ padding: var(--ui-space-1) var(--ui-space-2);
5487
+ border-radius: var(--ui-radius-sm);
5488
+ background: var(--ui-text-primary);
5489
+ color: var(--ui-surface-elevated);
5490
+ font-size: var(--ui-font-size-xs);
5491
+ font-weight: var(--ui-font-medium);
5492
+ line-height: var(--ui-line-height-md);
5493
+ opacity: 0;
5494
+ transform: translateX(-50%);
5495
+ transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
5496
+ pointer-events: none;
5076
5497
  }
5077
- @property --ui-icon-button-surface {
5078
- syntax: "*";
5079
- inherits: false;
5498
+ .control.row .tooltip[data-v-0e632fe0] {
5499
+ top: 50%;
5500
+ left: auto;
5501
+ right: calc(100% + 8px);
5502
+ transform: translateY(-50%);
5080
5503
  }
5081
- [data-component~="ui-icon-button"][data-v-ea2a5496] {
5082
- /* Optional inherited action-group values keep text and icon actions under the same light.
5083
- One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
5084
- A single ambient lift avoids stacking a face gradient or another inset bevel. */
5085
- --_ui-action-start: 1px;
5086
- --_ui-action-edge: var(
5087
- --ui-action-edge,
5088
- inset var(--_ui-action-start) 1px 0 light-dark(
5089
- rgb(255 255 255 / 0.08),
5090
- rgb(255 255 255 / 0.06)
5091
- ),
5092
- inset calc(-1 * var(--_ui-action-start)) -1px 0 light-dark(rgb(0 0 0 / 0.08), rgb(0 0 0 / 0.08))
5093
- );
5094
- --_ui-action-shadow:
5095
- var(--_ui-action-edge),
5096
- 0 1px 2px light-dark(rgb(0 0 0 / 0.10), rgb(0 0 0 / 0.20));
5097
- /* Hooks do not inherit, so the parts below read them from the root. */
5098
- --_ui-icon-button-icon-size: var(--ui-icon-button-icon-size);
5099
- --_ui-icon-button-icon-stroke-width: var(--ui-icon-button-icon-stroke-width);
5100
-
5504
+ .control.active .tooltip[data-v-0e632fe0],
5505
+ .handle:focus-visible .tooltip[data-v-0e632fe0] {
5506
+ opacity: 1;
5507
+ }
5508
+ .selector[data-v-0e632fe0],
5509
+ .cell-menu[data-v-0e632fe0] {
5510
+ position: absolute;
5511
+ z-index: 2;
5101
5512
  display: inline-flex;
5513
+ align-items: center;
5514
+ justify-content: center;
5515
+ padding: 0;
5516
+ border: var(--ui-border-width) solid transparent;
5517
+ background: transparent;
5102
5518
  color: var(--ui-text-secondary);
5519
+ box-shadow: none;
5520
+ pointer-events: auto;
5521
+ cursor: pointer;
5522
+ transition:
5523
+ color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
5524
+ background-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
5525
+ border-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
5526
+ box-shadow var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
5103
5527
  }
5104
- [data-component~="ui-icon-button"][data-v-ea2a5496]:dir(rtl) {
5105
- --_ui-action-start: -1px;
5106
- }
5107
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="tone=accent"][data-v-ea2a5496] {
5108
- --_icon-button-border: var(--ui-accent-solid);
5109
- --_icon-button-hover-border: var(--ui-accent-hover);
5110
- --_icon-button-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
5111
- --_icon-button-outline-surface: color-mix(
5112
- in srgb,
5113
- var(--ui-accent-solid) 5%,
5114
- var(--ui-surface-default)
5115
- );
5116
- color: var(--_icon-button-text);
5528
+ .selector[data-v-0e632fe0]:hover,
5529
+ .cell-menu[data-v-0e632fe0]:hover {
5530
+ background: var(--ui-surface-muted);
5531
+ color: var(--ui-text-primary);
5532
+ box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
5117
5533
  }
5118
-
5119
- /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
5120
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="tone=neutral"][data-v-ea2a5496] {
5121
- --_icon-button-solid-surface: var(--ui-text-primary);
5122
- --_icon-button-solid-hover-surface: var(--ui-text-primary);
5123
- --_icon-button-solid-text: var(--ui-surface-default);
5534
+ .selector[data-v-0e632fe0] {
5535
+ border-radius: var(--ui-radius-round);
5536
+ touch-action: none;
5537
+ cursor: grab;
5124
5538
  }
5125
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496] {
5126
- position: relative;
5539
+ .selector[data-v-0e632fe0]:active {
5540
+ cursor: grabbing;
5127
5541
  }
5128
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]::before {
5542
+ .selector[data-v-0e632fe0]::before {
5129
5543
  content: "";
5130
5544
  position: absolute;
5131
5545
  inset: 50% auto auto 50%;
5132
- z-index: 1;
5133
- inline-size: var(--ui-affordance-guide-size);
5134
- block-size: var(--ui-affordance-guide-size);
5135
5546
  border-radius: var(--ui-radius-round);
5136
5547
  background: var(--ui-affordance-guide-color, var(--ui-border-strong));
5137
5548
  opacity: calc(var(--ui-affordance-guide-opacity) * var(--ui-affordance-scope-guide, 1));
@@ -5139,291 +5550,391 @@ svg[data-v-955cfa65-s] {
5139
5550
  transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
5140
5551
  pointer-events: none;
5141
5552
  }
5142
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-ui-icon-button-state~="guide=bar"][data-v-ea2a5496]::before {
5143
- inline-size: 2px;
5144
- block-size: 20px;
5145
- background: var(--ui-border-strong);
5146
- opacity: 1;
5553
+ .selector .glyph[data-v-0e632fe0] {
5554
+ display: block;
5555
+ width: 14px;
5556
+ height: 14px;
5557
+ --_ui-default-icon-size: 14px;
5558
+ --_ui-default-icon-stroke-width: 2;
5559
+ opacity: 0;
5560
+ transform: scale(0.72);
5561
+ transition:
5562
+ opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
5563
+ transform var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
5147
5564
  }
5148
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]:disabled::before {
5565
+ .selector[data-v-0e632fe0]:hover::before,
5566
+ .selector[data-v-0e632fe0]:focus-visible::before {
5149
5567
  opacity: 0;
5150
5568
  }
5151
-
5152
- /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
5153
- proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
5154
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-ea2a5496] {
5569
+ .selector:hover .glyph[data-v-0e632fe0],
5570
+ .selector:focus-visible .glyph[data-v-0e632fe0] {
5155
5571
  opacity: 1;
5156
5572
  transform: scale(1);
5157
- transition:
5158
- opacity var(--ui-motion-fast) var(--ui-motion-ease),
5159
- transform calc(var(--ui-motion-fast) * 2) cubic-bezier(0.2, 1.4, 0.35, 1);
5160
5573
  }
5161
- @media (hover: hover) and (pointer: fine) {
5162
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible) {
5163
- border-color: transparent;
5164
- background-color: transparent;
5165
- box-shadow: none;
5574
+ .selector.row[data-v-0e632fe0] {
5575
+ left: -9px;
5576
+ width: 18px;
5577
+ height: 32px;
5578
+ transform: translateY(-50%);
5166
5579
  }
5167
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"]:not([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)
5168
- .content[data-v-ea2a5496] {
5580
+ .selector.row[data-v-0e632fe0]::before {
5581
+ width: 2px;
5582
+ height: 16px;
5583
+ }
5584
+ .selector.column[data-v-0e632fe0] {
5585
+ top: -9px;
5586
+ width: 32px;
5587
+ height: 18px;
5588
+ transform: translateX(-50%);
5589
+ }
5590
+ .selector.column[data-v-0e632fe0]::before {
5591
+ width: 16px;
5592
+ height: 2px;
5593
+ }
5594
+ @media (hover: none), (pointer: coarse) {
5595
+ .selector[data-v-0e632fe0]::before {
5169
5596
  opacity: 0;
5170
- transform: scale(0.65);
5171
- transition-duration: var(--ui-motion-fast);
5172
5597
  }
5598
+ .selector .glyph[data-v-0e632fe0] {
5599
+ opacity: 1;
5600
+ transform: none;
5173
5601
  }
5174
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"], [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
5175
- opacity: 0;
5176
5602
  }
5177
- [data-component~="ui-icon-button"][data-v-ea2a5496] {
5178
- /* The size prop resolves here; --ui-icon-button-size overrides it on an element. */
5179
- --_size: 2rem;
5180
- appearance: none;
5181
- inline-size: var(--ui-icon-button-size, var(--_size));
5182
- block-size: var(--ui-icon-button-size, var(--_size));
5183
- min-inline-size: var(--ui-icon-button-size, var(--_size));
5184
- min-block-size: var(--ui-icon-button-size, var(--_size));
5603
+ .cell-menu[data-v-0e632fe0] {
5604
+ width: 24px;
5605
+ height: 24px;
5606
+ border-radius: var(--ui-radius-sm);
5607
+ background: color-mix(in srgb, var(--ui-surface-muted) 78%, transparent);
5608
+ }
5609
+ .cell-menu[data-v-0e632fe0] {
5610
+ --_ui-default-icon-size: 15px;
5611
+ --_ui-default-icon-stroke-width: 2;
5612
+ }
5613
+ .drop-indicator[data-v-0e632fe0] {
5614
+ position: absolute;
5615
+ z-index: 3;
5616
+ background: var(--ui-accent-solid);
5617
+ box-shadow: 0 0 0 var(--ui-border-width) var(--ui-surface);
5618
+ pointer-events: none;
5619
+ }
5620
+ .drop-indicator.row[data-v-0e632fe0] {
5621
+ left: 0;
5622
+ width: 100%;
5623
+ height: var(--ui-accent-line-width);
5624
+ }
5625
+ .drop-indicator.column[data-v-0e632fe0] {
5626
+ top: 0;
5627
+ width: var(--ui-accent-line-width);
5628
+ height: 100%;
5629
+ }
5630
+ .drop-indicator[hidden][data-v-0e632fe0] {
5631
+ display: none;
5632
+ }
5633
+ [data-component~="ui-editor-table-overlay"][hidden][data-v-0e632fe0] {
5634
+ display: none;
5635
+ }
5636
+
5637
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"][data-v-8c2d4497] {
5638
+ min-width: max-content;
5639
+ min-height: 100%;
5185
5640
  padding: 0;
5186
- margin: 0;
5187
- border: var(--ui-border-width) solid transparent;
5188
- border-radius: var(--ui-icon-button-radius, var(--ui-action-radius, var(--ui-radius-md)));
5189
- background-color: var(--ui-icon-button-surface, transparent);
5190
- color: inherit;
5641
+ background: transparent;
5642
+ border: 0;
5643
+ border-radius: 0;
5644
+ box-shadow: none;
5645
+ backdrop-filter: none;
5646
+ }
5647
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button[data-v-8c2d4497] {
5648
+ min-height: 44px;
5649
+ background: transparent;
5650
+ }
5651
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.active[data-v-8c2d4497],
5652
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.selected[data-v-8c2d4497] {
5653
+ background: var(--ui-accent-soft, var(--ui-accent-subtle));
5654
+ }
5655
+ [data-component~="ui-editor-table-toolbar"][data-v-8c2d4497] {
5191
5656
  display: inline-flex;
5192
5657
  align-items: center;
5193
- justify-content: center;
5194
- cursor: pointer;
5195
- transition:
5196
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
5197
- border-color var(--ui-motion-fast) var(--ui-motion-ease),
5198
- color var(--ui-motion-fast) var(--ui-motion-ease),
5199
- box-shadow var(--ui-motion-base) var(--ui-motion-ease),
5200
- scale var(--ui-motion-fast) var(--ui-motion-ease);
5658
+ gap: var(--ui-space-1);
5659
+ padding: var(--ui-space-1);
5660
+ background: color-mix(in srgb, var(--ui-surface) 94%, transparent);
5661
+ border: var(--ui-border-width) solid var(--ui-border-strong);
5662
+ border-radius: calc(var(--ui-radius-md) + 2 * var(--ui-border-width));
5663
+ box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
5664
+ backdrop-filter: blur(10px);
5201
5665
  }
5202
- @media (hover: none), (pointer: coarse) {
5203
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"][data-v-ea2a5496]::before {
5204
- opacity: 0;
5666
+ .group[data-v-8c2d4497] {
5667
+ display: inline-flex;
5668
+ align-items: center;
5669
+ gap: 2px;
5670
+ overflow: hidden;
5205
5671
  }
5672
+ .sep[data-v-8c2d4497] {
5673
+ width: 1px;
5674
+ align-self: stretch;
5675
+ background: var(--ui-border-divider);
5206
5676
  }
5207
-
5208
- /* A touch target without a bigger button: an invisible hit area, at least the control
5209
- minimum, centred on the button (::before is the anticipatory guide). */
5210
- @media (pointer: coarse) {
5211
- [data-component~="ui-icon-button"][data-v-ea2a5496] {
5212
- position: relative;
5677
+ .overflow[data-v-8c2d4497] {
5678
+ position: relative;
5213
5679
  }
5214
- [data-component~="ui-icon-button"][data-v-ea2a5496]::after {
5215
- content: "";
5216
- position: absolute;
5217
- inset: 50% auto auto 50%;
5218
- inline-size: max(100%, var(--ui-control-min-block-size));
5219
- block-size: max(100%, var(--ui-control-min-block-size));
5220
- transform: translate(-50%, -50%);
5680
+ [data-component~="ui-editor-table-toolbar"] button[data-v-8c2d4497] {
5681
+ display: inline-flex;
5682
+ align-items: center;
5683
+ justify-content: center;
5684
+ gap: var(--ui-space-2);
5685
+ min-height: 32px;
5686
+ border: 0;
5687
+ border-radius: var(--ui-radius-sm);
5688
+ background: transparent;
5689
+ color: var(--ui-text-primary);
5690
+ cursor: pointer;
5691
+ font-size: var(--ui-font-size-sm);
5692
+ font-weight: 500;
5693
+ line-height: 1;
5694
+ padding: var(--ui-space-2) var(--ui-space-2);
5695
+ white-space: nowrap;
5221
5696
  }
5697
+ [data-component~="ui-editor-table-toolbar"] button[data-v-8c2d4497]:hover {
5698
+ background: var(--ui-surface-hover);
5222
5699
  }
5223
- html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-ea2a5496] {
5224
- position: relative;
5700
+ [data-component~="ui-editor-table-toolbar"] button.active[data-v-8c2d4497] {
5701
+ background: var(--ui-accent-soft, var(--ui-accent-subtle));
5702
+ color: var(--ui-accent-active);
5225
5703
  }
5226
- html[data-ui-input-modality="touch"] [data-component~="ui-icon-button"][data-v-ea2a5496]::after {
5227
- content: "";
5228
- position: absolute;
5229
- inset: 50% auto auto 50%;
5230
- inline-size: max(100%, var(--ui-control-min-block-size));
5231
- block-size: max(100%, var(--ui-control-min-block-size));
5232
- transform: translate(-50%, -50%);
5704
+ .group button[data-v-8c2d4497] {
5705
+ border-radius: var(--ui-radius-sm);
5233
5706
  }
5234
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-ea2a5496] {
5235
- --_size: 1.75rem;
5236
- inline-size: var(--ui-icon-button-size, var(--_size));
5237
- block-size: var(--ui-icon-button-size, var(--_size));
5238
- min-inline-size: var(--ui-icon-button-size, var(--_size));
5239
- min-block-size: var(--ui-icon-button-size, var(--_size));
5707
+ .group button + button[data-v-8c2d4497] {
5708
+ border-left: 0;
5240
5709
  }
5241
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-ea2a5496] {
5242
- --_size: 2.5rem;
5243
- inline-size: var(--ui-icon-button-size, var(--_size));
5244
- block-size: var(--ui-icon-button-size, var(--_size));
5245
- min-inline-size: var(--ui-icon-button-size, var(--_size));
5246
- min-block-size: var(--ui-icon-button-size, var(--_size));
5710
+ [data-component~="ui-editor-table-toolbar"] .more[data-v-8c2d4497] {
5711
+ border: 0;
5712
+ border-radius: var(--ui-radius-sm);
5247
5713
  }
5248
-
5249
- /* A text button's companion uses control geometry; compact icon buttons keep their own density. */
5250
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-v-ea2a5496] {
5251
- --_size: var(--ui-control-size-md);
5252
- block-size: auto;
5253
- align-self: stretch;
5714
+ [data-component~="ui-editor-table-toolbar"] button.danger[data-v-8c2d4497] {
5715
+ color: var(--ui-danger);
5254
5716
  }
5255
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=sm"][data-v-ea2a5496] {
5256
- --_size: var(--ui-control-size-sm);
5717
+ [data-component~="ui-editor-table-toolbar"][data-v-8c2d4497] {
5718
+ --_ui-default-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
5719
+ --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
5257
5720
  }
5258
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-ui-icon-button-state~="size=lg"][data-v-ea2a5496] {
5259
- --_size: var(--ui-control-size-lg);
5721
+ .chevron[data-v-8c2d4497] {
5722
+ display: inline-flex;
5723
+ --_ui-default-icon-size: 0.875rem;
5260
5724
  }
5261
- @media (pointer: coarse) {
5262
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="matchButton"][data-v-ea2a5496] {
5263
- inline-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
5264
- min-inline-size: max(
5265
- var(--ui-icon-button-size, var(--_size)),
5266
- var(--ui-control-min-block-size)
5267
- );
5268
- min-block-size: max(var(--ui-icon-button-size, var(--_size)), var(--ui-control-min-block-size));
5725
+ [data-component~="ui-editor-table-toolbar"] .icon-button[data-v-8c2d4497] {
5726
+ width: 32px;
5727
+ padding-inline: 0;
5269
5728
  }
5729
+ .menu[data-v-8c2d4497] {
5730
+ box-sizing: border-box;
5731
+ position: fixed;
5732
+ inset: auto;
5733
+ margin: 0;
5734
+ min-width: 12rem;
5735
+ max-width: min(17rem, calc(100vw - 24px));
5736
+ padding: var(--ui-space-1);
5737
+ background: var(--ui-surface);
5738
+ border: var(--ui-border-width) solid var(--ui-border-strong);
5739
+ border-radius: var(--ui-radius-md);
5740
+ box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
5741
+ display: flex;
5742
+ flex-direction: column;
5743
+ gap: 2px;
5744
+ z-index: 2;
5745
+ overflow-y: auto;
5746
+ overscroll-behavior: contain;
5747
+ scrollbar-width: thin;
5270
5748
  }
5271
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="round"][data-v-ea2a5496] {
5272
- border-radius: var(--ui-radius-round);
5749
+ .menu-section + .menu-section[data-v-8c2d4497] {
5750
+ margin-top: var(--ui-space-1);
5751
+ padding-top: var(--ui-space-1);
5752
+ border-top: var(--ui-border-width) solid var(--ui-border-divider);
5273
5753
  }
5274
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-ea2a5496] {
5275
- border-color: var(
5276
- --ui-icon-button-border,
5277
- var(--_icon-button-border, var(--ui-control-border, var(--ui-border-strong)))
5278
- );
5279
- background-color: var(
5280
- --ui-icon-button-outline-surface,
5281
- var(--_icon-button-outline-surface, var(--ui-surface-default))
5282
- );
5283
- background-image: none;
5284
- color: var(--ui-icon-button-outline-text, var(--_icon-button-text, var(--ui-text-primary)));
5285
- box-shadow: var(--ui-action-shadow, var(--_ui-action-shadow));
5754
+ .menu-heading[data-v-8c2d4497] {
5755
+ padding: var(--ui-space-1) var(--ui-space-2);
5756
+ font-size: var(--ui-font-size-2xs);
5757
+ font-weight: 700;
5758
+ letter-spacing: 0.05em;
5759
+ text-transform: uppercase;
5760
+ color: var(--ui-text-muted);
5286
5761
  }
5287
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-ea2a5496] {
5288
- background-color: var(
5289
- --ui-icon-button-solid-surface,
5290
- var(--_icon-button-solid-surface, var(--ui-accent-solid))
5291
- );
5292
- background-image: none;
5293
- color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
5294
- box-shadow: var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
5762
+ .menu button[data-v-8c2d4497] {
5763
+ display: flex;
5764
+ justify-content: flex-start;
5765
+ width: 100%;
5766
+ text-align: left;
5295
5767
  }
5296
- [data-component~="ui-icon-button"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]) {
5297
- /* Derived from the text colour so the ghost hover shows on any background. */
5298
- background-color: var(
5299
- --ui-icon-button-hover-surface,
5300
- color-mix(in srgb, currentColor 8%, transparent)
5301
- );
5302
- color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
5768
+ .swatches[data-v-8c2d4497] {
5769
+ display: grid;
5770
+ grid-template-columns: repeat(2, minmax(0, 1fr));
5771
+ gap: 2px;
5303
5772
  }
5304
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]) {
5305
- border-color: var(
5306
- --ui-icon-button-hover-border,
5307
- var(--_icon-button-hover-border, var(--ui-control-border-hover, var(--ui-control-border)))
5308
- );
5773
+ [data-component~="ui-editor-table-toolbar"] .swatch-button[data-v-8c2d4497] {
5774
+ gap: var(--ui-space-1);
5775
+ justify-content: flex-start;
5309
5776
  }
5310
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]) {
5311
- background-color: var(
5312
- --ui-icon-button-solid-hover-surface,
5313
- var(--_icon-button-solid-hover-surface, var(--ui-accent-hover))
5314
- );
5777
+ .swatch[data-v-8c2d4497] {
5778
+ width: 14px;
5779
+ height: 14px;
5780
+ flex: 0 0 14px;
5781
+ border: var(--ui-border-width) solid color-mix(in srgb, var(--ui-border) 80%, #000);
5782
+ border-radius: var(--ui-radius-round);
5783
+ background: var(--_swatch);
5315
5784
  }
5316
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=accent"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]),
5317
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=neutral"][data-v-ea2a5496]:hover:enabled:not([aria-disabled="true"]) {
5318
- color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
5785
+ .swatch.default[data-v-8c2d4497] {
5786
+ background:
5787
+ linear-gradient(135deg, transparent 44%, var(--ui-danger) 46% 54%, transparent 56%),
5788
+ var(--ui-surface);
5319
5789
  }
5320
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][aria-expanded="true"][data-v-ea2a5496]:enabled:not([aria-disabled="true"]) {
5321
- background-color: var(
5322
- --ui-icon-button-active-surface,
5323
- color-mix(in srgb, currentColor 16%, transparent)
5324
- );
5325
- color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
5326
- box-shadow: var(--ui-pressed);
5790
+ .swatch-button.selected[data-v-8c2d4497] {
5791
+ background: var(--ui-accent-soft, var(--ui-accent-subtle));
5792
+ }
5793
+ [data-component~="ui-editor-table-toolbar"][hidden][data-v-8c2d4497] {
5794
+ display: none;
5327
5795
  }
5328
5796
 
5329
- /* Native toggle state persists after pointer release, including during loading. */
5330
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-ea2a5496]:enabled {
5331
- background-color: var(
5332
- --ui-icon-button-active-surface,
5333
- color-mix(in srgb, currentColor 12%, var(--ui-surface-default))
5334
- );
5335
- background-image: none;
5336
- box-shadow: var(--ui-pressed);
5797
+ /* This component's hooks style the element they are set on, and never a nested one. */
5798
+ @property --ui-floating-action-button-inset-block-end {
5799
+ syntax: "*";
5800
+ inherits: false;
5337
5801
  }
5338
- [data-component~="ui-icon-button"][data-v-ea2a5496]:active:enabled:not([aria-disabled="true"]) {
5339
- scale: var(--ui-icon-button-active-scale, 0.96);
5802
+ @property --ui-floating-action-button-inset-inline-end {
5803
+ syntax: "*";
5804
+ inherits: false;
5340
5805
  }
5341
- :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"][data-v-ea2a5496], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"][data-v-ea2a5496]) {
5342
- cursor: progress;
5806
+ @property --ui-floating-action-button-z-index {
5807
+ syntax: "*";
5808
+ inherits: false;
5343
5809
  }
5344
- .content[data-v-ea2a5496] {
5810
+ [data-component~="ui-floating-action-button"][data-v-955cfa65] {
5811
+ position: fixed;
5812
+ inset-block-end: calc(
5813
+ var(--ui-floating-action-button-inset-block-end, var(--ui-space-6)) +
5814
+ env(safe-area-inset-bottom)
5815
+ );
5816
+ inset-inline-end: max(
5817
+ var(--ui-floating-action-button-inset-inline-end, var(--ui-space-5)),
5818
+ env(safe-area-inset-right)
5819
+ );
5820
+ inline-size: var(--ui-control-min-block-size);
5821
+ block-size: var(--ui-control-min-block-size);
5822
+ display: inline-flex;
5823
+ z-index: var(--ui-floating-action-button-z-index, 100);
5824
+ }
5825
+ [data-component~="ui-floating-action-button"][data-v-955cfa65] {
5826
+ appearance: none;
5827
+ border: none;
5828
+ border-radius: var(--ui-radius-round);
5829
+ margin: 0;
5830
+ padding: 0;
5345
5831
  display: inline-flex;
5346
5832
  align-items: center;
5347
5833
  justify-content: center;
5834
+ background: var(--ui-accent);
5835
+ color: var(--ui-on-accent);
5836
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--ui-accent) 40%, transparent);
5837
+ cursor: pointer;
5838
+ transition:
5839
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
5840
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
5841
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
5348
5842
  }
5349
- :is([data-component~="ui-icon-button"][data-ui-icon-button-state~="loading"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="pending"])
5350
- .content[data-v-ea2a5496] {
5351
- display: none;
5843
+ [data-component~="ui-floating-action-button"][data-v-955cfa65]:hover:enabled {
5844
+ background: var(--ui-accent-hover);
5845
+ box-shadow: 0 6px 16px color-mix(in srgb, var(--ui-accent) 50%, transparent);
5352
5846
  }
5353
- @media (prefers-reduced-motion: reduce) {
5354
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="anticipatory"] .content[data-v-ea2a5496] {
5355
- transition: none;
5847
+ [data-component~="ui-floating-action-button"][data-v-955cfa65]:active:enabled {
5848
+ transform: scale(0.94);
5356
5849
  }
5850
+ [data-component~="ui-floating-action-button"][data-v-955cfa65]:focus-visible {
5851
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
5852
+ outline-offset: var(--ui-focus-width);
5357
5853
  }
5358
- [data-component~="ui-icon-button"][data-v-ea2a5496]:focus-visible {
5359
- outline: none;
5360
- box-shadow: var(--ui-focus-halo);
5854
+ [data-component~="ui-floating-action-button"][data-v-955cfa65]:disabled {
5855
+ background: var(--ui-disabled-surface);
5856
+ color: var(--ui-disabled-text);
5857
+ box-shadow: none;
5858
+ cursor: not-allowed;
5361
5859
  }
5362
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][data-v-ea2a5496]:focus-visible {
5363
- box-shadow:
5364
- var(--ui-action-shadow, var(--_ui-action-shadow)),
5365
- var(--ui-focus-halo);
5860
+ svg[data-v-955cfa65-s] {
5861
+ inline-size: var(--ui-icon-size-lg);
5862
+ block-size: var(--ui-icon-size-lg);
5863
+ flex-shrink: 0;
5366
5864
  }
5367
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"][data-v-ea2a5496]:focus-visible {
5368
- box-shadow:
5369
- var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
5370
- var(--ui-focus-halo);
5865
+ @media (min-width: 768px) {
5866
+ [data-component~="ui-floating-action-button"][data-ui-floating-action-button-state~="mobileOnly"][data-v-955cfa65] {
5867
+ display: none;
5371
5868
  }
5372
- [data-component~="ui-icon-button"][data-v-ea2a5496]:is([data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"], [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=solid"]):active:enabled:not([aria-disabled="true"]) {
5373
- background-image: none;
5374
- box-shadow: var(--ui-pressed);
5375
5869
  }
5376
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-ea2a5496]:enabled:focus-visible {
5377
- box-shadow:
5378
- var(--ui-pressed),
5379
- var(--ui-focus-halo);
5870
+
5871
+ /* A component that sets its display still honours the hidden attribute on its root. */
5872
+ [data-component~="ui-floating-action-button"][hidden][data-v-955cfa65] {
5873
+ display: none;
5380
5874
  }
5381
- @media (forced-colors: active) {
5382
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-ea2a5496]:enabled {
5383
- outline: var(--ui-focus-width) solid Highlight;
5384
- outline-offset: calc(-2 * var(--ui-focus-width));
5875
+
5876
+ /* This component's hooks style the element they are set on, and never a nested one. */
5877
+ @property --ui-grid-gap {
5878
+ syntax: "*";
5879
+ inherits: false;
5880
+ }
5881
+ @property --ui-grid-min {
5882
+ syntax: "*";
5883
+ inherits: false;
5385
5884
  }
5386
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=outline"][aria-pressed="true"][data-v-ea2a5496]:enabled:focus-visible {
5387
- outline-offset: var(--ui-focus-width);
5885
+ [data-component~="ui-grid"][data-v-d42a2c9e] {
5886
+ --_grid-gap: var(--ui-space-4);
5887
+ --_grid-min: 12rem;
5888
+ display: grid;
5889
+ gap: var(--ui-grid-gap, var(--_grid-gap));
5890
+ grid-template-columns:
5891
+ repeat(
5892
+ auto-fit,
5893
+ minmax(
5894
+ min(
5895
+ max(
5896
+ var(--ui-grid-min, var(--_grid-min)),
5897
+ calc(
5898
+ (
5899
+ 100% -
5900
+ (max(1, var(--_grid-column-cap, 9999)) - 1) * var(--ui-grid-gap, var(--_grid-gap))
5901
+ ) /
5902
+ max(1, var(--_grid-column-cap, 9999))
5903
+ )
5904
+ ),
5905
+ 100%
5906
+ ),
5907
+ 1fr
5908
+ )
5909
+ );
5910
+ min-inline-size: 0;
5911
+ max-inline-size: 100%;
5912
+ margin: 0;
5388
5913
  }
5914
+ [data-component~="ui-grid"][data-ui-grid-state~="gap=xs"][data-v-d42a2c9e] {
5915
+ --_grid-gap: var(--ui-space-2);
5389
5916
  }
5390
-
5391
- /* Disabled is a flat neutral control, independent of the active variant's tone. */
5392
- [data-component~="ui-icon-button"][data-v-ea2a5496]:disabled {
5393
- border-color: var(--ui-disabled-border);
5394
- background-color: var(--ui-disabled-surface);
5395
- color: var(--ui-disabled-text);
5396
- filter: var(--ui-icon-button-disabled-filter, var(--ui-disabled-filter));
5397
- opacity: var(--ui-icon-button-disabled-opacity, 1);
5398
- cursor: not-allowed;
5399
- box-shadow: none;
5400
- background-image: none;
5917
+ [data-component~="ui-grid"][data-ui-grid-state~="gap=s"][data-v-d42a2c9e] {
5918
+ --_grid-gap: var(--ui-space-3);
5401
5919
  }
5402
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="variant=ghost"][data-v-ea2a5496]:disabled {
5403
- border-color: transparent;
5920
+ [data-component~="ui-grid"][data-ui-grid-state~="gap=m"][data-v-d42a2c9e] {
5921
+ --_grid-gap: var(--ui-space-4);
5404
5922
  }
5405
- [data-component~="ui-icon-button"][data-v-ea2a5496] {
5406
- --_icon-button-icon-default: var(--ui-icon-size-md);
5407
- /* A slotted ui-icon is its own component, out of reach of the svg rule below; these are its
5408
- defaults, which its own --ui-icon-* hooks still override. */
5409
- --_ui-default-icon-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
5410
- --_ui-default-icon-stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
5923
+ [data-component~="ui-grid"][data-ui-grid-state~="gap=l"][data-v-d42a2c9e] {
5924
+ --_grid-gap: var(--ui-space-5);
5411
5925
  }
5412
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=sm"][data-v-ea2a5496] {
5413
- --_icon-button-icon-default: var(--ui-icon-size-sm);
5926
+ [data-component~="ui-grid"][data-ui-grid-state~="gap=xl"][data-v-d42a2c9e] {
5927
+ --_grid-gap: var(--ui-space-6);
5414
5928
  }
5415
- [data-component~="ui-icon-button"][data-ui-icon-button-state~="size=lg"][data-v-ea2a5496] {
5416
- --_icon-button-icon-default: var(--ui-icon-size-lg);
5929
+ [data-component~="ui-grid"][data-ui-grid-state~="min=md"][data-v-d42a2c9e] {
5930
+ --_grid-min: 16rem;
5417
5931
  }
5418
- svg[data-v-ea2a5496-s] {
5419
- inline-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
5420
- block-size: var(--_ui-icon-button-icon-size, var(--_icon-button-icon-default));
5421
- flex-shrink: 0;
5422
- stroke-width: var(--_ui-icon-button-icon-stroke-width, 1.75);
5932
+ [data-component~="ui-grid"][data-ui-grid-state~="min=lg"][data-v-d42a2c9e] {
5933
+ --_grid-min: 20rem;
5423
5934
  }
5424
5935
 
5425
5936
  /* A component that sets its display still honours the hidden attribute on its root. */
5426
- [data-component~="ui-icon-button"][hidden][data-v-ea2a5496] {
5937
+ [data-component~="ui-grid"][hidden][data-v-d42a2c9e] {
5427
5938
  display: none;
5428
5939
  }
5429
5940
 
@@ -5520,276 +6031,61 @@ svg[data-v-ea2a5496-s] {
5520
6031
  }
5521
6032
  .handle[data-corner="bottom-left"][data-v-bfb3171c] {
5522
6033
  bottom: -12px;
5523
- left: -12px;
5524
- cursor: nesw-resize;
5525
- }
5526
- .handle[data-corner="bottom-right"][data-v-bfb3171c] {
5527
- bottom: -12px;
5528
- right: -12px;
5529
- cursor: nwse-resize;
5530
- }
5531
- .handles[hidden][data-v-bfb3171c], [data-component~="ui-image"][hidden][data-v-bfb3171c] {
5532
- display: none;
5533
- }
5534
- @media (max-width: 767px) {
5535
- [data-component~="ui-image"][data-v-bfb3171c]:is([data-component~="ui-image"][data-ui-image-state~="placement=wrap-left"], [data-component~="ui-image"][data-ui-image-state~="placement=wrap-right"]) {
5536
- float: none;
5537
- inline-size: 100%;
5538
- padding-inline: 0;
5539
- }
5540
- [data-component~="ui-image"]:is([data-component~="ui-image"][data-ui-image-state~="placement=wrap-left"], [data-component~="ui-image"][data-ui-image-state~="placement=wrap-right"])
5541
- .handles[data-v-bfb3171c] {
5542
- display: none;
5543
- }
5544
- }
5545
- @media (pointer: coarse) {
5546
- .handle[data-v-bfb3171c] {
5547
- inline-size: 44px;
5548
- block-size: 44px;
5549
- }
5550
- .handle[data-v-bfb3171c]::after {
5551
- inset: 18px;
5552
- }
5553
- .handle[data-corner="top-left"][data-v-bfb3171c] {
5554
- top: -22px;
5555
- left: -22px;
5556
- }
5557
- .handle[data-corner="top-right"][data-v-bfb3171c] {
5558
- top: -22px;
5559
- right: -22px;
5560
- }
5561
- .handle[data-corner="bottom-left"][data-v-bfb3171c] {
5562
- bottom: -22px;
5563
- left: -22px;
5564
- }
5565
- .handle[data-corner="bottom-right"][data-v-bfb3171c] {
5566
- bottom: -22px;
5567
- right: -22px;
5568
- }
5569
- }
5570
- @media (forced-colors: active) {
5571
- [data-component~="ui-image"][data-ui-image-state~="selected"] .frame[data-v-bfb3171c], .handle[data-v-bfb3171c]:focus-visible {
5572
- outline-color: Highlight;
5573
- }
5574
- .handle[data-v-bfb3171c]::after {
5575
- border-color: Highlight;
5576
- background: Canvas;
5577
- }
5578
- }
5579
-
5580
- /* This component's hooks style the element they are set on, and never a nested one. An Input
5581
- Group sets --_ui-default-input-* for the input inside it, below the input's own hooks. */
5582
- @property --ui-input-border {
5583
- syntax: "*";
5584
- inherits: false;
5585
- }
5586
- @property --ui-input-border-hover {
5587
- syntax: "*";
5588
- inherits: false;
5589
- }
5590
- @property --ui-input-border-width {
5591
- syntax: "*";
5592
- inherits: false;
5593
- }
5594
- @property --ui-input-focus-border {
5595
- syntax: "*";
5596
- inherits: false;
5597
- }
5598
- @property --ui-input-focus-outline {
5599
- syntax: "*";
5600
- inherits: false;
5601
- }
5602
- @property --ui-input-focus-shadow {
5603
- syntax: "*";
5604
- inherits: false;
5605
- }
5606
- @property --ui-input-inline-size {
5607
- syntax: "*";
5608
- inherits: false;
5609
- }
5610
- @property --ui-input-invalid-border {
5611
- syntax: "*";
5612
- inherits: false;
5613
- }
5614
- @property --ui-input-invalid-focus-shadow {
5615
- syntax: "*";
5616
- inherits: false;
5617
- }
5618
- @property --ui-input-min-block-size {
5619
- syntax: "*";
5620
- inherits: false;
5621
- }
5622
- @property --ui-input-radius {
5623
- syntax: "*";
5624
- inherits: false;
5625
- }
5626
- @property --ui-input-shadow {
5627
- syntax: "*";
5628
- inherits: false;
5629
- }
5630
- @property --ui-input-surface {
5631
- syntax: "*";
5632
- inherits: false;
5633
- }
5634
- [data-component~="ui-input"][data-v-3c4d919b] {
5635
- box-sizing: border-box;
5636
- display: inline-block;
5637
- inline-size: var(--ui-input-inline-size, 100%);
5638
- min-inline-size: 0;
5639
- min-block-size: var(
5640
- --ui-input-min-block-size,
5641
- var(--_ui-default-input-min-block-size, var(--ui-control-size-md))
5642
- );
5643
- margin: 0;
5644
- padding: var(--ui-space-2) var(--ui-space-3);
5645
- appearance: none;
5646
- padding-inline-start: var(--_ui-default-input-padding-inline-start, var(--ui-space-3));
5647
- border: var(
5648
- --ui-input-border-width,
5649
- var(--_ui-default-input-border-width, var(--ui-border-width))
5650
- ) solid
5651
- var(
5652
- --ui-input-border,
5653
- var(--_ui-default-input-border, var(--ui-control-border, var(--ui-border-strong)))
5654
- );
5655
- border-radius: var(
5656
- --ui-input-radius,
5657
- var(--_ui-default-input-radius, var(--ui-field-radius, var(--ui-radius-md)))
5658
- );
5659
- background: var(
5660
- --ui-input-surface,
5661
- var(--_ui-default-input-surface, var(--ui-control-surface, var(--ui-surface-elevated)))
5662
- );
5663
- color: var(--ui-text-primary);
5664
- font: inherit;
5665
- line-height: var(--ui-line-height-tight);
5666
- box-shadow: var(--ui-input-shadow, var(--_ui-default-input-shadow, var(--ui-control-inset)));
5667
- transition:
5668
- border-color var(--ui-motion-fast) var(--ui-motion-ease),
5669
- box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
5670
- background-color var(--ui-motion-fast) var(--ui-motion-ease);
5671
- }
5672
-
5673
- /* Each size reads the hook and then an Input Group's default first, so a group, which draws the frame, can zero it. */
5674
- [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-3c4d919b] {
5675
- min-block-size: var(
5676
- --ui-input-min-block-size,
5677
- var(--_ui-default-input-min-block-size, var(--ui-control-size-sm))
5678
- );
5679
- padding: var(--ui-space-1) var(--ui-space-2);
5680
- font-size: var(--ui-font-size-sm);
5681
- }
5682
- [data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-3c4d919b] {
5683
- min-block-size: var(
5684
- --ui-input-min-block-size,
5685
- var(--_ui-default-input-min-block-size, var(--ui-control-size-lg))
5686
- );
5687
- padding: var(--ui-space-3) var(--ui-space-4);
5688
- font-size: var(--ui-font-size-md);
5689
- }
5690
-
5691
- /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
5692
- body-size text: below 16px, iOS zooms the page into the focused field. */
5693
- @media (pointer: coarse) {
5694
- [data-component~="ui-input"][data-v-3c4d919b] {
5695
- min-block-size: var(
5696
- --ui-input-min-block-size,
5697
- var(
5698
- --_ui-default-input-min-block-size,
5699
- max(var(--ui-control-size-md), var(--ui-control-min-block-size))
5700
- )
5701
- );
6034
+ left: -12px;
6035
+ cursor: nesw-resize;
5702
6036
  }
5703
- [data-component~="ui-input"][data-v-3c4d919b],
5704
- [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-3c4d919b],
5705
- [data-component~="ui-input"][data-ui-input-state~="size=lg"][data-v-3c4d919b] {
5706
- font-size: var(--ui-font-size-md);
6037
+ .handle[data-corner="bottom-right"][data-v-bfb3171c] {
6038
+ bottom: -12px;
6039
+ right: -12px;
6040
+ cursor: nwse-resize;
5707
6041
  }
5708
- [data-component~="ui-input"][data-ui-input-state~="size=sm"][data-v-3c4d919b] {
5709
- min-block-size: var(
5710
- --ui-input-min-block-size,
5711
- var(--_ui-default-input-min-block-size, var(--ui-control-min-block-size))
5712
- );
6042
+ .handles[hidden][data-v-bfb3171c], [data-component~="ui-image"][hidden][data-v-bfb3171c] {
6043
+ display: none;
5713
6044
  }
6045
+ @media (max-width: 767px) {
6046
+ [data-component~="ui-image"][data-v-bfb3171c]:is([data-component~="ui-image"][data-ui-image-state~="placement=wrap-left"], [data-component~="ui-image"][data-ui-image-state~="placement=wrap-right"]) {
6047
+ float: none;
6048
+ inline-size: 100%;
6049
+ padding-inline: 0;
5714
6050
  }
5715
-
5716
- /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
5717
- [data-component~="ui-input"][data-v-3c4d919b]::selection {
5718
- background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
5719
- color: inherit;
6051
+ [data-component~="ui-image"]:is([data-component~="ui-image"][data-ui-image-state~="placement=wrap-left"], [data-component~="ui-image"][data-ui-image-state~="placement=wrap-right"])
6052
+ .handles[data-v-bfb3171c] {
6053
+ display: none;
5720
6054
  }
5721
- [data-component~="ui-input"][data-v-3c4d919b]::placeholder {
5722
- color: var(--ui-control-placeholder, var(--ui-text-secondary));
5723
- opacity: 1;
5724
6055
  }
5725
- [data-component~="ui-input"][data-v-3c4d919b]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
5726
- border-color: var(
5727
- --ui-input-border-hover,
5728
- var(--_ui-default-input-border-hover, var(--ui-control-border-hover, var(--ui-text-secondary)))
5729
- );
6056
+ @media (pointer: coarse) {
6057
+ .handle[data-v-bfb3171c] {
6058
+ inline-size: 44px;
6059
+ block-size: 44px;
5730
6060
  }
5731
- [data-component~="ui-input"][data-v-3c4d919b]:focus-visible {
5732
- border-color: var(
5733
- --ui-input-focus-border,
5734
- var(--_ui-default-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid)))
5735
- );
5736
- outline: none;
5737
- box-shadow: var(
5738
- --ui-input-focus-shadow,
5739
- var(
5740
- --_ui-default-input-focus-shadow,
5741
- var(--ui-control-inset),
5742
- var(--ui-control-focus-halo-shadow)
5743
- )
5744
- );
6061
+ .handle[data-v-bfb3171c]::after {
6062
+ inset: 18px;
5745
6063
  }
5746
-
5747
- /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
5748
- [data-component~="ui-input"][aria-invalid="true"][data-v-3c4d919b],
5749
- [data-component~="ui-input"][data-v-3c4d919b]:is(:user-invalid, [data-user-invalid]) {
5750
- border-color: var(
5751
- --ui-input-invalid-border,
5752
- var(--_ui-default-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)))
5753
- );
6064
+ .handle[data-corner="top-left"][data-v-bfb3171c] {
6065
+ top: -22px;
6066
+ left: -22px;
5754
6067
  }
5755
- [data-component~="ui-input"][data-v-3c4d919b]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
5756
- box-shadow: var(
5757
- --ui-input-invalid-focus-shadow,
5758
- var(
5759
- --_ui-default-input-invalid-focus-shadow,
5760
- var(--ui-control-inset),
5761
- 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
5762
- in srgb,
5763
- var(--ui-input-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
5764
- transparent
5765
- )
5766
- )
5767
- );
6068
+ .handle[data-corner="top-right"][data-v-bfb3171c] {
6069
+ top: -22px;
6070
+ right: -22px;
6071
+ }
6072
+ .handle[data-corner="bottom-left"][data-v-bfb3171c] {
6073
+ bottom: -22px;
6074
+ left: -22px;
6075
+ }
6076
+ .handle[data-corner="bottom-right"][data-v-bfb3171c] {
6077
+ bottom: -22px;
6078
+ right: -22px;
5768
6079
  }
5769
- [data-component~="ui-input"][data-v-3c4d919b]:disabled {
5770
- background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
5771
- color: var(--ui-disabled-text);
5772
- box-shadow: none;
5773
- cursor: not-allowed;
5774
6080
  }
5775
-
5776
- /* Forced colors drop box shadows, so the focus ring becomes an outline. */
5777
6081
  @media (forced-colors: active) {
5778
- [data-component~="ui-input"][data-v-3c4d919b]:focus-visible {
5779
- outline: var(
5780
- --ui-input-focus-outline,
5781
- var(--_ui-default-input-focus-outline, var(--ui-focus-width) solid Highlight)
5782
- );
5783
- outline-offset: var(--ui-border-width);
6082
+ [data-component~="ui-image"][data-ui-image-state~="selected"] .frame[data-v-bfb3171c], .handle[data-v-bfb3171c]:focus-visible {
6083
+ outline-color: Highlight;
5784
6084
  }
6085
+ .handle[data-v-bfb3171c]::after {
6086
+ border-color: Highlight;
6087
+ background: Canvas;
5785
6088
  }
5786
-
5787
- /* No text-box-trim here: trimming a native input's line box below its line height lets the text
5788
- * scroll vertically inside the field. Native inputs already center their single line. */
5789
-
5790
- /* A component that sets its display still honours the hidden attribute on its root. */
5791
- [data-component~="ui-input"][hidden][data-v-3c4d919b] {
5792
- display: none;
5793
6089
  }
5794
6090
 
5795
6091
  @property --ui-input-group-radius {
@@ -7011,174 +7307,64 @@ svg[data-v-ea2a5496-s] {
7011
7307
  min-inline-size: 0;
7012
7308
  }
7013
7309
  .leading[data-v-093b89cc] {
7014
- display: inline-flex;
7015
- flex: none;
7016
- align-self: center;
7017
- color: var(--ui-text-muted);
7018
- font-size: var(--ui-font-size-2xl);
7019
- }
7020
- .copy[data-v-093b89cc] {
7021
- display: flex;
7022
- flex: 1 1 16rem;
7023
- flex-direction: column;
7024
- gap: var(--ui-space-1);
7025
- min-inline-size: 0;
7026
- }
7027
- .eyebrow[data-v-093b89cc] {
7028
- color: var(--ui-text-muted);
7029
- font-size: var(--ui-font-size-xs);
7030
- font-weight: var(--ui-font-semibold);
7031
- letter-spacing: 0.06em;
7032
- text-transform: uppercase;
7033
- }
7034
- .title[data-v-093b89cc] {
7035
- margin: 0;
7036
- color: var(--ui-text-primary);
7037
- font-size: var(--ui-font-size-2xl);
7038
- font-weight: var(--ui-font-bold, 700);
7039
- line-height: var(--ui-line-height-tight);
7040
- overflow-wrap: anywhere;
7041
- }
7042
- .description[data-v-093b89cc] {
7043
- color: var(--ui-text-secondary);
7044
- font-size: var(--ui-font-size-md);
7045
- line-height: var(--ui-line-height);
7046
- }
7047
- .actions[data-v-093b89cc] {
7048
- display: inline-flex;
7049
- flex: none;
7050
- flex-wrap: wrap;
7051
- align-items: center;
7052
- gap: var(--ui-space-2);
7053
- }
7054
- [data-component~="ui-page-header"][data-ui-page-header-state~="align=center"][data-v-093b89cc] {
7055
- flex-direction: column;
7056
- text-align: center;
7057
- }
7058
- [data-component~="ui-page-header"][data-ui-page-header-state~="align=center"] .copy[data-v-093b89cc] {
7059
- align-items: center;
7060
- flex-basis: auto;
7061
- }
7062
- .leading[data-v-093b89cc]:empty,
7063
- .eyebrow[data-v-093b89cc]:empty,
7064
- .description[data-v-093b89cc]:empty,
7065
- .actions[data-v-093b89cc]:empty {
7066
- display: none;
7067
- }
7068
-
7069
- /* A component that sets its display still honours the hidden attribute on its root. */
7070
- [data-component~="ui-page-header"][hidden][data-v-093b89cc] {
7071
- display: none;
7072
- }
7073
-
7074
- /* This component's hooks style the element they are set on, and never a nested one. */
7075
- @property --ui-popover-surface {
7076
- syntax: "*";
7077
- inherits: false;
7078
- }
7079
- @property --ui-popover-border {
7080
- syntax: "*";
7081
- inherits: false;
7082
- }
7083
- @property --ui-popover-radius {
7084
- syntax: "*";
7085
- inherits: false;
7086
- }
7087
- @property --ui-popover-shadow {
7088
- syntax: "*";
7089
- inherits: false;
7090
- }
7091
- @property --ui-popover-viewport-gap {
7092
- syntax: "*";
7093
- inherits: false;
7094
- }
7095
- @property --ui-popover-offset {
7096
- syntax: "*";
7097
- inherits: false;
7098
- }
7099
- @property --ui-popover-padding {
7100
- syntax: "*";
7101
- inherits: false;
7102
- }
7103
- [data-component~="ui-popover"][data-v-c3034191] {
7104
- --_ui-popover-surface: var(--ui-popover-surface);
7105
- --_ui-popover-border: var(--ui-popover-border);
7106
- --_ui-popover-radius: var(--ui-popover-radius);
7107
- --_ui-popover-shadow: var(--ui-popover-shadow);
7108
- --_ui-popover-padding: var(--ui-popover-padding);
7109
- box-sizing: border-box;
7110
- max-inline-size: min(
7111
- 20rem,
7112
- calc(100vw - var(--ui-popover-viewport-gap, var(--ui-space-2)) * 2)
7113
- );
7114
- max-block-size: calc(100dvh - var(--ui-popover-viewport-gap, var(--ui-space-2)) * 2);
7115
- overflow: visible;
7116
- padding: 0;
7117
- border: 0;
7118
- outline: 0;
7119
- border-radius: 0;
7120
- background: transparent;
7121
- box-shadow: none;
7122
- }
7123
- .surface[data-v-c3034191] {
7124
- box-sizing: border-box;
7125
- max-inline-size: inherit;
7126
- max-block-size: inherit;
7127
- overflow: auto;
7128
- padding: var(--_ui-popover-padding, var(--ui-space-3));
7129
- background: var(--_ui-popover-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
7130
- border: var(--ui-border-width) solid
7131
- var(--_ui-popover-border, var(--ui-overlay-border, var(--ui-border-strong)));
7132
- border-radius: var(--_ui-popover-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
7133
- box-shadow: var(
7134
- --_ui-popover-shadow,
7135
- var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
7136
- );
7137
- }
7138
- [data-component~="ui-popover"][data-v-c3034191]:not([data-component~="ui-popover"][data-ui-popover-state~="internalOpen"]) {
7139
- display: none;
7140
- }
7141
- [data-component~="ui-popover"][popover][data-v-c3034191] {
7142
- position: fixed;
7143
- inset: auto;
7144
- margin: 0;
7145
- opacity: 0;
7146
- transform: translateY(-4px) scale(0.99);
7147
- transition:
7148
- opacity var(--ui-motion-fast) var(--ui-motion-ease),
7149
- transform var(--ui-motion-fast) var(--ui-motion-ease),
7150
- display var(--ui-motion-fast) allow-discrete,
7151
- overlay var(--ui-motion-fast) allow-discrete;
7310
+ display: inline-flex;
7311
+ flex: none;
7312
+ align-self: center;
7313
+ color: var(--ui-text-muted);
7314
+ font-size: var(--ui-font-size-2xl);
7152
7315
  }
7153
- [data-component~="ui-popover"][popover][data-v-c3034191]:popover-open {
7154
- opacity: 1;
7155
- transform: translateY(0) scale(1);
7316
+ .copy[data-v-093b89cc] {
7317
+ display: flex;
7318
+ flex: 1 1 16rem;
7319
+ flex-direction: column;
7320
+ gap: var(--ui-space-1);
7321
+ min-inline-size: 0;
7156
7322
  }
7157
- @starting-style {
7158
- [data-component~="ui-popover"][popover][data-v-c3034191]:popover-open {
7159
- opacity: 0;
7160
- transform: translateY(-4px) scale(0.99);
7323
+ .eyebrow[data-v-093b89cc] {
7324
+ color: var(--ui-text-muted);
7325
+ font-size: var(--ui-font-size-xs);
7326
+ font-weight: var(--ui-font-semibold);
7327
+ letter-spacing: 0.06em;
7328
+ text-transform: uppercase;
7161
7329
  }
7330
+ .title[data-v-093b89cc] {
7331
+ margin: 0;
7332
+ color: var(--ui-text-primary);
7333
+ font-size: var(--ui-font-size-2xl);
7334
+ font-weight: var(--ui-font-bold, 700);
7335
+ line-height: var(--ui-line-height-tight);
7336
+ overflow-wrap: anywhere;
7162
7337
  }
7163
- [data-component~="ui-popover"][data-ui-popover-state~="size=sm"][data-v-c3034191] {
7164
- inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
7165
- max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
7338
+ .description[data-v-093b89cc] {
7339
+ color: var(--ui-text-secondary);
7340
+ font-size: var(--ui-font-size-md);
7341
+ line-height: var(--ui-line-height);
7166
7342
  }
7167
- [data-component~="ui-popover"][data-ui-popover-state~="size=md"][data-v-c3034191] {
7168
- inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
7169
- max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
7343
+ .actions[data-v-093b89cc] {
7344
+ display: inline-flex;
7345
+ flex: none;
7346
+ flex-wrap: wrap;
7347
+ align-items: center;
7348
+ gap: var(--ui-space-2);
7170
7349
  }
7171
- [data-component~="ui-popover"][data-ui-popover-state~="size=lg"][data-v-c3034191] {
7172
- inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
7173
- max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
7350
+ [data-component~="ui-page-header"][data-ui-page-header-state~="align=center"][data-v-093b89cc] {
7351
+ flex-direction: column;
7352
+ text-align: center;
7174
7353
  }
7175
- [data-component~="ui-popover"][hidden][data-v-c3034191] {
7176
- display: none;
7354
+ [data-component~="ui-page-header"][data-ui-page-header-state~="align=center"] .copy[data-v-093b89cc] {
7355
+ align-items: center;
7356
+ flex-basis: auto;
7177
7357
  }
7178
- @media (prefers-reduced-motion: reduce) {
7179
- [data-component~="ui-popover"][popover][data-v-c3034191] {
7180
- transition: none;
7358
+ .leading[data-v-093b89cc]:empty,
7359
+ .eyebrow[data-v-093b89cc]:empty,
7360
+ .description[data-v-093b89cc]:empty,
7361
+ .actions[data-v-093b89cc]:empty {
7362
+ display: none;
7181
7363
  }
7364
+
7365
+ /* A component that sets its display still honours the hidden attribute on its root. */
7366
+ [data-component~="ui-page-header"][hidden][data-v-093b89cc] {
7367
+ display: none;
7182
7368
  }
7183
7369
 
7184
7370
  /* This component's hooks style the element they are set on, and never a nested one. */
@@ -8234,75 +8420,6 @@ dialog[data-v-62b2f3da] {
8234
8420
  display: none;
8235
8421
  }
8236
8422
 
8237
- /* This component's hooks style the element they are set on, and never a nested one. */
8238
- @property --ui-stack-height {
8239
- syntax: "*";
8240
- inherits: false;
8241
- }
8242
- @property --ui-stack-gap {
8243
- syntax: "*";
8244
- inherits: false;
8245
- }
8246
- [data-component~="ui-stack"][data-v-10ce261e] {
8247
- --_layout-gap: var(--ui-space-4);
8248
- display: flex;
8249
- flex-direction: column;
8250
- align-items: stretch;
8251
- gap: var(--ui-stack-gap, var(--_layout-gap));
8252
- min-inline-size: 0;
8253
- max-inline-size: 100%;
8254
- margin: 0;
8255
- }
8256
- [data-component~="ui-stack"][data-ui-stack-state~="fill"][data-v-10ce261e] {
8257
- flex: 1;
8258
- min-block-size: 0;
8259
- }
8260
- [data-component~="ui-stack"][data-ui-stack-state~="height"][data-v-10ce261e] {
8261
- block-size: calc(var(--ui-stack-height, 0) * 1px);
8262
- min-block-size: 0;
8263
- }
8264
- [data-component~="ui-stack"][data-ui-stack-state~="gap=none"][data-v-10ce261e] {
8265
- --_layout-gap: 0px;
8266
- }
8267
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"][data-v-10ce261e] {
8268
- --_layout-gap: var(--ui-space-2);
8269
- }
8270
- [data-component~="ui-stack"][data-ui-stack-state~="gap=s"][data-v-10ce261e] {
8271
- --_layout-gap: var(--ui-space-3);
8272
- }
8273
- [data-component~="ui-stack"][data-ui-stack-state~="gap=m"][data-v-10ce261e] {
8274
- --_layout-gap: var(--ui-space-4);
8275
- }
8276
- [data-component~="ui-stack"][data-ui-stack-state~="gap=l"][data-v-10ce261e] {
8277
- --_layout-gap: var(--ui-space-5);
8278
- }
8279
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"][data-v-10ce261e] {
8280
- --_layout-gap: var(--ui-space-6);
8281
- }
8282
- [data-component~="ui-stack"][data-ui-stack-state~="align=start"][data-v-10ce261e] {
8283
- align-items: flex-start;
8284
- }
8285
- [data-component~="ui-stack"][data-ui-stack-state~="align=center"][data-v-10ce261e] {
8286
- align-items: center;
8287
- }
8288
- [data-component~="ui-stack"][data-ui-stack-state~="align=end"][data-v-10ce261e] {
8289
- align-items: flex-end;
8290
- }
8291
- [data-component~="ui-stack"][data-ui-stack-state~="justify=center"][data-v-10ce261e] {
8292
- justify-content: center;
8293
- }
8294
- [data-component~="ui-stack"][data-ui-stack-state~="justify=end"][data-v-10ce261e] {
8295
- justify-content: flex-end;
8296
- }
8297
- [data-component~="ui-stack"][data-ui-stack-state~="justify=between"][data-v-10ce261e] {
8298
- justify-content: space-between;
8299
- }
8300
-
8301
- /* A component that sets its display still honours the hidden attribute on its root. */
8302
- [data-component~="ui-stack"][hidden][data-v-10ce261e] {
8303
- display: none;
8304
- }
8305
-
8306
8423
  /* The one way a view says it is loading, has nothing yet, or failed, with an optional next step.
8307
8424
  Every view says it the same way, in the same place, at the same size. */
8308
8425
  [data-component~="ui-status-message"][data-v-8783f735] {
@@ -8839,123 +8956,6 @@ tbody tr[data-v-722ca2ea-s]:last-child > * {
8839
8956
  display: none;
8840
8957
  }
8841
8958
 
8842
- /* Running text, set on the type scale and in a tone that says what it is, so a view never styles
8843
- text of its own. The root is a paragraph unless as= names a span, div, small, strong, label, or
8844
- heading. */
8845
- [data-component~="ui-text"][data-ui-text-state~="grow"][data-v-a12d976f] {
8846
- flex: 1;
8847
- }
8848
- [data-component~="ui-text"][data-v-a12d976f] {
8849
- margin: 0;
8850
- min-inline-size: 0;
8851
- color: var(--ui-text-primary);
8852
- text-align: start;
8853
- }
8854
-
8855
- /* A heading drops the browser's heading size and weight, so size and weight set it as they set
8856
- any text, and inherit keeps the text around it. */
8857
- [data-component~="ui-text"][data-v-a12d976f]:is(h2, h3, h4, h5, h6) {
8858
- font-size: inherit;
8859
- font-weight: inherit;
8860
- }
8861
- [data-component~="ui-text"][data-ui-text-state~="size=xs"][data-v-a12d976f] {
8862
- font-size: var(--ui-font-size-xs);
8863
- line-height: var(--ui-line-height);
8864
- }
8865
- [data-component~="ui-text"][data-ui-text-state~="size=sm"][data-v-a12d976f] {
8866
- font-size: var(--ui-font-size-sm);
8867
- line-height: var(--ui-line-height);
8868
- }
8869
- [data-component~="ui-text"][data-ui-text-state~="size=md"][data-v-a12d976f] {
8870
- font-size: var(--ui-font-size-md);
8871
- line-height: var(--ui-line-height);
8872
- }
8873
- [data-component~="ui-text"][data-ui-text-state~="size=lg"][data-v-a12d976f] {
8874
- font-size: var(--ui-font-size-lg);
8875
- line-height: var(--ui-line-height-relaxed);
8876
- }
8877
-
8878
- /* Opt in at the text owner; trimming does not inherit from a surrounding layout. */
8879
- [data-component~="ui-text"][data-ui-text-state~="trim"][data-v-a12d976f] {
8880
- text-box-trim: trim-both;
8881
- text-box-edge: cap alphabetic;
8882
- }
8883
- [data-component~="ui-text"][data-ui-text-state~="tone=secondary"][data-v-a12d976f] {
8884
- color: var(--ui-text-secondary);
8885
- }
8886
- [data-component~="ui-text"][data-ui-text-state~="tone=muted"][data-v-a12d976f] {
8887
- color: var(--ui-text-muted);
8888
- }
8889
- [data-component~="ui-text"][data-ui-text-state~="tone=accent"][data-v-a12d976f] {
8890
- color: var(--ui-accent-active);
8891
- }
8892
- /* Every status tone uses the text-safe token a subtle badge sets its words in, so text and badges
8893
- in one tone match, and each holds 4.5:1 on sunken surfaces where some base colours fall short. */
8894
- [data-component~="ui-text"][data-ui-text-state~="tone=danger"][data-v-a12d976f] {
8895
- color: var(--ui-danger-subtle-text);
8896
- }
8897
- [data-component~="ui-text"][data-ui-text-state~="tone=success"][data-v-a12d976f] {
8898
- color: var(--ui-success-subtle-text);
8899
- }
8900
- [data-component~="ui-text"][data-ui-text-state~="tone=info"][data-v-a12d976f] {
8901
- color: var(--ui-info-subtle-text);
8902
- }
8903
- [data-component~="ui-text"][data-ui-text-state~="tone=warning"][data-v-a12d976f] {
8904
- color: var(--ui-warning-subtle-text);
8905
- }
8906
- [data-component~="ui-text"][data-ui-text-state~="weight=normal"][data-v-a12d976f] {
8907
- font-weight: var(--ui-font-normal);
8908
- }
8909
- [data-component~="ui-text"][data-ui-text-state~="weight=medium"][data-v-a12d976f] {
8910
- font-weight: var(--ui-font-medium);
8911
- }
8912
- [data-component~="ui-text"][data-ui-text-state~="weight=semibold"][data-v-a12d976f] {
8913
- font-weight: var(--ui-font-semibold);
8914
- }
8915
- [data-component~="ui-text"][data-ui-text-state~="variant=eyebrow"][data-v-a12d976f] {
8916
- font-size: var(--ui-font-size-xs);
8917
- font-weight: var(--ui-font-semibold);
8918
- letter-spacing: 0.06em;
8919
- text-transform: uppercase;
8920
- }
8921
- [data-component~="ui-text"][data-ui-text-state~="variant=code"][data-v-a12d976f] {
8922
- font-family: var(--ui-font-family-mono);
8923
- }
8924
-
8925
- /* A link in running text is underlined, so it stands apart from the words around it by more than
8926
- colour. */
8927
- [data-component~="ui-text"] a[data-v-a12d976f-s] {
8928
- color: var(--ui-accent-active);
8929
- text-decoration: underline;
8930
- text-decoration-thickness: 0.06em;
8931
- text-underline-offset: 0.18em;
8932
- }
8933
- [data-component~="ui-text"][data-ui-text-state~="truncate"][data-v-a12d976f] {
8934
- overflow: hidden;
8935
- text-overflow: ellipsis;
8936
- white-space: nowrap;
8937
- }
8938
-
8939
- /* Trim ends the layout box at the baseline; preserve descending ink while clipping long labels. */
8940
- [data-component~="ui-text"][data-ui-text-state~="trim"][data-ui-text-state~="truncate"][data-v-a12d976f] {
8941
- overflow-x: clip;
8942
- overflow-y: visible;
8943
- }
8944
- [data-component~="ui-text"][data-ui-text-state~="align=center"][data-v-a12d976f] {
8945
- text-align: center;
8946
- }
8947
- [data-component~="ui-text"][data-ui-text-state~="font=sans"][data-v-a12d976f] {
8948
- font-family: var(--ui-font-family-sans, sans-serif);
8949
- }
8950
- [data-component~="ui-text"][data-ui-text-state~="wrap=anywhere"][data-v-a12d976f] {
8951
- overflow-wrap: anywhere;
8952
- }
8953
-
8954
- /* A component that sets its display still honours the hidden attribute on its root. */
8955
- [data-component~="ui-text"][hidden][data-v-a12d976f] {
8956
- display: none;
8957
- }
8958
-
8959
8959
  /* This component's hooks style the element they are set on, and never a nested one. */
8960
8960
  @property --ui-textarea-border-width {
8961
8961
  syntax: "*";