domma-js 0.55.0 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Complete CSS Bundle v0.55.0
2
+ * Domma Complete CSS Bundle v0.56.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T15:07:57.680Z
5
+ * Built: 2026-10-24T16:12:49.309Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.55.0
14
+ * Domma Core CSS v0.56.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-24T15:07:57.499Z
18
- * Commit: 253e259
17
+ * Built: 2026-10-24T16:12:49.151Z
18
+ * Commit: f768320
19
19
  */
20
20
 
21
21
  /**
@@ -4971,11 +4971,11 @@ body.dm-cloaked.dm-ready {
4971
4971
  ============================================ */
4972
4972
 
4973
4973
  /*!
4974
- * Domma Grid CSS v0.55.0
4974
+ * Domma Grid CSS v0.56.0
4975
4975
  * Dynamic Object Manipulation & Modeling API
4976
4976
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4977
- * Built: 2026-10-24T15:07:57.504Z
4978
- * Commit: 253e259
4977
+ * Built: 2026-10-24T16:12:49.154Z
4978
+ * Commit: f768320
4979
4979
  */
4980
4980
 
4981
4981
  /**
@@ -5596,11 +5596,11 @@ body.dm-cloaked.dm-ready {
5596
5596
  ============================================ */
5597
5597
 
5598
5598
  /*!
5599
- * Domma Elements CSS v0.55.0
5599
+ * Domma Elements CSS v0.56.0
5600
5600
  * Dynamic Object Manipulation & Modeling API
5601
5601
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5602
- * Built: 2026-10-24T15:07:57.510Z
5603
- * Commit: 253e259
5602
+ * Built: 2026-10-24T16:12:49.159Z
5603
+ * Commit: f768320
5604
5604
  */
5605
5605
 
5606
5606
  /**
@@ -15536,6 +15536,1070 @@ a.avatar-more-person:hover .avatar-more-name {
15536
15536
  text-decoration: underline;
15537
15537
  }
15538
15538
 
15539
+ /* ===== Command Palette ===== */
15540
+ /*
15541
+ * E.commandPalette(options) - src/components/command-palette.js
15542
+ *
15543
+ * The overlay covers the viewport: a backdrop and a panel near the top, the way the
15544
+ * modal looks (--dm-modal-* tokens), so it sits with the site's dialogs in every theme.
15545
+ * Above modals and slideovers, which it is often opened over; below popovers (10045)
15546
+ * and the context menu (10050).
15547
+ */
15548
+ .dm-command-palette {
15549
+ position: fixed;
15550
+ inset: 0;
15551
+ z-index: 10040;
15552
+ display: flex;
15553
+ justify-content: center;
15554
+ align-items: flex-start;
15555
+ padding: 12vh 1rem 1rem;
15556
+ box-sizing: border-box;
15557
+ --dm-command-palette-duration: 150ms;
15558
+ }
15559
+
15560
+ .dm-command-palette[hidden] {
15561
+ display: none;
15562
+ }
15563
+
15564
+ .dm-command-palette *,
15565
+ .dm-command-palette *::before,
15566
+ .dm-command-palette *::after {
15567
+ box-sizing: border-box;
15568
+ }
15569
+
15570
+ .dm-command-palette-backdrop {
15571
+ position: fixed;
15572
+ inset: 0;
15573
+ background: var(--dm-modal-backdrop);
15574
+ opacity: 0;
15575
+ transition: opacity var(--dm-command-palette-duration) ease;
15576
+ }
15577
+
15578
+ .dm-command-palette-panel {
15579
+ position: relative;
15580
+ display: flex;
15581
+ flex-direction: column;
15582
+ width: min(40rem, 100%);
15583
+ max-height: min(32rem, 76vh);
15584
+ background: var(--dm-modal-bg);
15585
+ color: var(--dm-text);
15586
+ border: 1px solid var(--dm-modal-border);
15587
+ border-radius: var(--dm-radius-lg);
15588
+ box-shadow: var(--dm-modal-shadow);
15589
+ overflow: hidden;
15590
+ opacity: 0;
15591
+ transform: scale(0.97) translateY(-6px);
15592
+ transition:
15593
+ opacity var(--dm-command-palette-duration) ease,
15594
+ transform var(--dm-command-palette-duration) cubic-bezier(0.16, 1, 0.3, 1);
15595
+ }
15596
+
15597
+ .dm-command-palette.is-open .dm-command-palette-backdrop { opacity: 1; }
15598
+ .dm-command-palette.is-open .dm-command-palette-panel { opacity: 1; transform: none; }
15599
+
15600
+ @media (prefers-reduced-motion: reduce) {
15601
+ .dm-command-palette-backdrop,
15602
+ .dm-command-palette-panel {
15603
+ transition: none;
15604
+ }
15605
+ }
15606
+
15607
+ /* Where you are in nested pages, with a way back up. */
15608
+ .dm-command-palette-crumbs {
15609
+ display: flex;
15610
+ align-items: center;
15611
+ gap: 0.5rem;
15612
+ padding: 0.625rem 0.875rem 0;
15613
+ font-size: 0.8125rem;
15614
+ color: var(--dm-text-muted);
15615
+ }
15616
+
15617
+ .dm-command-palette-crumbs[hidden] { display: none; }
15618
+
15619
+ .dm-command-palette-back {
15620
+ display: inline-flex;
15621
+ align-items: center;
15622
+ justify-content: center;
15623
+ width: 1.75rem;
15624
+ height: 1.75rem;
15625
+ padding: 0;
15626
+ border: 1px solid var(--dm-border);
15627
+ border-radius: var(--dm-radius-sm);
15628
+ background: transparent;
15629
+ color: var(--dm-text);
15630
+ cursor: pointer;
15631
+ }
15632
+
15633
+ .dm-command-palette-back:hover { background: var(--dm-hover-bg); }
15634
+
15635
+ .dm-command-palette-back:focus-visible {
15636
+ outline: 2px solid var(--dm-border-focus);
15637
+ outline-offset: 1px;
15638
+ }
15639
+
15640
+ .dm-command-palette-trail {
15641
+ display: flex;
15642
+ flex-wrap: wrap;
15643
+ gap: 0.25rem;
15644
+ margin: 0;
15645
+ padding: 0;
15646
+ list-style: none;
15647
+ }
15648
+
15649
+ .dm-command-palette-trail li + li::before {
15650
+ content: "/";
15651
+ margin-right: 0.25rem;
15652
+ opacity: 0.6;
15653
+ }
15654
+
15655
+ .dm-command-palette-trail [aria-current] { color: var(--dm-text); font-weight: 500; }
15656
+
15657
+ .dm-command-palette-search {
15658
+ display: flex;
15659
+ align-items: center;
15660
+ gap: 0.625rem;
15661
+ padding: 0.75rem 0.875rem;
15662
+ border-bottom: 1px solid var(--dm-border);
15663
+ }
15664
+
15665
+ .dm-command-palette-search-icon {
15666
+ display: inline-flex;
15667
+ color: var(--dm-text-muted);
15668
+ }
15669
+
15670
+ .dm-command-palette-input {
15671
+ flex: 1;
15672
+ min-width: 0;
15673
+ padding: 0.25rem 0;
15674
+ border: 0;
15675
+ background: transparent;
15676
+ color: var(--dm-text);
15677
+ font: inherit;
15678
+ font-size: 1rem;
15679
+ outline: none;
15680
+ }
15681
+
15682
+ .dm-command-palette-input::placeholder { color: var(--dm-input-placeholder); opacity: 1; }
15683
+
15684
+ /* The box is the focus; the panel shows it rather than a ring round a borderless input. */
15685
+ .dm-command-palette-search:focus-within {
15686
+ border-bottom-color: var(--dm-border-focus);
15687
+ }
15688
+
15689
+ .dm-command-palette-spinner {
15690
+ width: 1rem;
15691
+ height: 1rem;
15692
+ border: 2px solid var(--dm-border);
15693
+ border-top-color: var(--dm-primary);
15694
+ border-radius: 50%;
15695
+ animation: dm-command-palette-spin 0.7s linear infinite;
15696
+ }
15697
+
15698
+ .dm-command-palette-spinner[hidden] { display: none; }
15699
+
15700
+ @keyframes dm-command-palette-spin {
15701
+ to { transform: rotate(360deg); }
15702
+ }
15703
+
15704
+ @media (prefers-reduced-motion: reduce) {
15705
+ .dm-command-palette-spinner { animation-duration: 2.4s; }
15706
+ }
15707
+
15708
+ .dm-command-palette-list {
15709
+ flex: 1 1 auto;
15710
+ min-height: 0;
15711
+ overflow-y: auto;
15712
+ overscroll-behavior: contain;
15713
+ padding: 0.375rem;
15714
+ }
15715
+
15716
+ .dm-command-palette-list[hidden] { display: none; }
15717
+
15718
+ .dm-command-palette-group + .dm-command-palette-group,
15719
+ .dm-command-palette-group + .dm-command-palette-item,
15720
+ .dm-command-palette-item + .dm-command-palette-group {
15721
+ margin-top: 0.375rem;
15722
+ }
15723
+
15724
+ .dm-command-palette-group-heading {
15725
+ padding: 0.375rem 0.625rem 0.25rem;
15726
+ font-size: 0.75rem;
15727
+ font-weight: 600;
15728
+ letter-spacing: 0.02em;
15729
+ color: var(--dm-text-muted);
15730
+ }
15731
+
15732
+ .dm-command-palette-item {
15733
+ display: flex;
15734
+ align-items: center;
15735
+ gap: 0.625rem;
15736
+ min-height: 2.5rem;
15737
+ padding: 0.375rem 0.625rem;
15738
+ border-radius: var(--dm-radius-md);
15739
+ color: var(--dm-text);
15740
+ cursor: pointer;
15741
+ user-select: none;
15742
+ }
15743
+
15744
+ .dm-command-palette-item.is-active {
15745
+ background: var(--dm-selected-bg);
15746
+ }
15747
+
15748
+ /* Forced colours drop backgrounds: the active row keeps an outline instead. */
15749
+ @media (forced-colors: active) {
15750
+ .dm-command-palette-item.is-active { outline: 2px solid Highlight; }
15751
+ }
15752
+
15753
+ .dm-command-palette-item[aria-disabled="true"] {
15754
+ cursor: default;
15755
+ opacity: var(--dm-disabled-opacity);
15756
+ }
15757
+
15758
+ .dm-command-palette-icon {
15759
+ flex: 0 0 1rem;
15760
+ display: inline-flex;
15761
+ justify-content: center;
15762
+ color: var(--dm-text-muted);
15763
+ }
15764
+
15765
+ .dm-command-palette-item.is-active .dm-command-palette-icon { color: var(--dm-text); }
15766
+
15767
+ .dm-command-palette-text {
15768
+ flex: 1;
15769
+ min-width: 0;
15770
+ display: flex;
15771
+ flex-direction: column;
15772
+ line-height: 1.3;
15773
+ }
15774
+
15775
+ .dm-command-palette-title,
15776
+ .dm-command-palette-subtitle {
15777
+ overflow: hidden;
15778
+ text-overflow: ellipsis;
15779
+ white-space: nowrap;
15780
+ }
15781
+
15782
+ .dm-command-palette-subtitle {
15783
+ font-size: 0.8125rem;
15784
+ color: var(--dm-text-muted);
15785
+ }
15786
+
15787
+ .dm-command-palette-match {
15788
+ color: var(--dm-primary);
15789
+ font-weight: 600;
15790
+ }
15791
+
15792
+ .dm-command-palette-shortcut,
15793
+ .dm-command-palette-hint {
15794
+ display: inline-flex;
15795
+ align-items: center;
15796
+ gap: 0.25rem;
15797
+ }
15798
+
15799
+ .dm-command-palette kbd {
15800
+ display: inline-flex;
15801
+ align-items: center;
15802
+ justify-content: center;
15803
+ min-width: 1.375rem;
15804
+ height: 1.375rem;
15805
+ padding: 0 0.3rem;
15806
+ border: 1px solid var(--dm-border);
15807
+ border-bottom-width: 2px;
15808
+ border-radius: var(--dm-radius-sm);
15809
+ background: var(--dm-background-alt);
15810
+ color: var(--dm-text-secondary);
15811
+ font-family: inherit;
15812
+ font-size: 0.6875rem;
15813
+ line-height: 1;
15814
+ }
15815
+
15816
+ .dm-command-palette-more {
15817
+ display: inline-flex;
15818
+ color: var(--dm-text-muted);
15819
+ }
15820
+
15821
+ .dm-command-palette-status {
15822
+ padding: 1.5rem 1rem;
15823
+ text-align: center;
15824
+ font-size: 0.875rem;
15825
+ color: var(--dm-text-muted);
15826
+ }
15827
+
15828
+ .dm-command-palette-status[hidden] { display: none; }
15829
+ .dm-command-palette-status[data-state="error"] { color: var(--dm-danger); }
15830
+
15831
+ .dm-command-palette-footer {
15832
+ display: flex;
15833
+ flex-wrap: wrap;
15834
+ gap: 0.5rem 1rem;
15835
+ padding: 0.5rem 0.875rem;
15836
+ border-top: 1px solid var(--dm-border);
15837
+ background: var(--dm-background-alt);
15838
+ color: var(--dm-text-secondary);
15839
+ font-size: 0.75rem;
15840
+ }
15841
+
15842
+ /* Phones: the whole width, from the top. */
15843
+ @media (max-width: 640px) {
15844
+ .dm-command-palette {
15845
+ padding: 0;
15846
+ }
15847
+
15848
+ .dm-command-palette-panel {
15849
+ width: 100%;
15850
+ max-height: 85vh;
15851
+ border-width: 0 0 1px;
15852
+ border-radius: 0 0 var(--dm-radius-lg) var(--dm-radius-lg);
15853
+ }
15854
+
15855
+ .dm-command-palette-footer { display: none; }
15856
+ }
15857
+
15858
+ /* ===== Split Pane ===== */
15859
+ /* E.splitPane(container): flexbox panes with a fixed flex-basis each, gutters between. */
15860
+ .dm-split {
15861
+ display: flex;
15862
+ min-width: 0;
15863
+ min-height: 0;
15864
+ }
15865
+
15866
+ .dm-split-horizontal {
15867
+ flex-direction: row;
15868
+ }
15869
+
15870
+ .dm-split-vertical {
15871
+ flex-direction: column;
15872
+ }
15873
+
15874
+ .dm-split > .dm-split-pane {
15875
+ min-width: 0;
15876
+ min-height: 0;
15877
+ overflow: auto;
15878
+ }
15879
+
15880
+ .dm-split-collapsed {
15881
+ overflow: hidden;
15882
+ }
15883
+
15884
+ .dm-split > .dm-split-gutter {
15885
+ position: relative;
15886
+ display: flex;
15887
+ align-items: center;
15888
+ justify-content: center;
15889
+ background: var(--dm-border);
15890
+ touch-action: none;
15891
+ user-select: none;
15892
+ transition: background-color var(--dm-transition-fast);
15893
+ }
15894
+
15895
+ /* A thin grip line drawn inside the gutter. */
15896
+ .dm-split > .dm-split-gutter::before {
15897
+ content: "";
15898
+ border-radius: var(--dm-radius-full);
15899
+ background: var(--dm-text-muted);
15900
+ opacity: 0.6;
15901
+ }
15902
+
15903
+ .dm-split-horizontal > .dm-split-gutter::before {
15904
+ width: 2px;
15905
+ height: 1.5rem;
15906
+ }
15907
+
15908
+ .dm-split-vertical > .dm-split-gutter::before {
15909
+ width: 1.5rem;
15910
+ height: 2px;
15911
+ }
15912
+
15913
+ .dm-split > .dm-split-gutter:hover,
15914
+ .dm-split > .dm-split-gutter.is-dragging {
15915
+ background: var(--dm-primary);
15916
+ }
15917
+
15918
+ .dm-split > .dm-split-gutter:hover::before,
15919
+ .dm-split > .dm-split-gutter.is-dragging::before {
15920
+ background: var(--dm-primary-text);
15921
+ }
15922
+
15923
+ .dm-split > .dm-split-gutter:focus-visible {
15924
+ outline: 2px solid var(--dm-primary);
15925
+ outline-offset: 1px;
15926
+ z-index: 1;
15927
+ }
15928
+
15929
+ .dm-split-disabled > .dm-split-gutter,
15930
+ .dm-split-disabled > .dm-split-gutter:hover {
15931
+ background: var(--dm-border);
15932
+ cursor: default;
15933
+ }
15934
+
15935
+ /* While dragging, the panes (and any iframe in them) take no pointer events, so the
15936
+ gutter's captured pointer keeps every move, and text does not get selected. */
15937
+ .dm-split-dragging > .dm-split-pane {
15938
+ pointer-events: none;
15939
+ user-select: none;
15940
+ }
15941
+
15942
+ .dm-split-horizontal.dm-split-dragging {
15943
+ cursor: col-resize;
15944
+ }
15945
+
15946
+ .dm-split-vertical.dm-split-dragging {
15947
+ cursor: row-resize;
15948
+ }
15949
+
15950
+ .dm-split-toggle {
15951
+ position: absolute;
15952
+ z-index: 1;
15953
+ display: inline-flex;
15954
+ align-items: center;
15955
+ justify-content: center;
15956
+ width: 1.25rem;
15957
+ height: 1.25rem;
15958
+ padding: 0;
15959
+ border: 1px solid var(--dm-border);
15960
+ border-radius: var(--dm-radius-full);
15961
+ background: var(--dm-surface);
15962
+ color: var(--dm-text);
15963
+ cursor: pointer;
15964
+ font: inherit;
15965
+ line-height: 1;
15966
+ }
15967
+
15968
+ .dm-split-horizontal > .dm-split-gutter > .dm-split-toggle {
15969
+ top: 0.5rem;
15970
+ }
15971
+
15972
+ .dm-split-vertical > .dm-split-gutter > .dm-split-toggle {
15973
+ left: 0.5rem;
15974
+ }
15975
+
15976
+ .dm-split-toggle::before {
15977
+ content: "";
15978
+ width: 0;
15979
+ height: 0;
15980
+ border: 4px solid transparent;
15981
+ }
15982
+
15983
+ .dm-split-horizontal > .dm-split-gutter > .dm-split-toggle::before {
15984
+ border-right-color: currentColor;
15985
+ margin-right: 4px;
15986
+ }
15987
+
15988
+ .dm-split-vertical > .dm-split-gutter > .dm-split-toggle::before {
15989
+ border-bottom-color: currentColor;
15990
+ margin-bottom: 4px;
15991
+ }
15992
+
15993
+ .dm-split-toggle:hover {
15994
+ background: var(--dm-hover-bg);
15995
+ }
15996
+
15997
+ @media (prefers-reduced-motion: reduce) {
15998
+ .dm-split > .dm-split-gutter {
15999
+ transition: none;
16000
+ }
16001
+ }
16002
+
16003
+ /* ===== Virtual List ===== */
16004
+ /* E.virtualList(container): the container scrolls; a spacer gives it its height and the
16005
+ rendered rows are placed by transform. The container needs a height from your CSS. */
16006
+ .dm-vlist {
16007
+ position: relative;
16008
+ overflow: auto;
16009
+ overflow-anchor: none;
16010
+ contain: content;
16011
+ background: var(--dm-surface);
16012
+ color: var(--dm-text);
16013
+ }
16014
+
16015
+ .dm-vlist-spacer {
16016
+ width: 1px;
16017
+ pointer-events: none;
16018
+ }
16019
+
16020
+ .dm-vlist-items {
16021
+ position: absolute;
16022
+ top: 0;
16023
+ left: 0;
16024
+ right: 0;
16025
+ height: 0;
16026
+ outline: none;
16027
+ }
16028
+
16029
+ .dm-vlist-row {
16030
+ position: absolute;
16031
+ top: 0;
16032
+ left: 0;
16033
+ right: 0;
16034
+ box-sizing: border-box;
16035
+ will-change: transform;
16036
+ }
16037
+
16038
+ .dm-vlist-fixed .dm-vlist-row {
16039
+ overflow: hidden;
16040
+ }
16041
+
16042
+ .dm-vlist-row:focus-visible {
16043
+ outline: 2px solid var(--dm-primary);
16044
+ outline-offset: -2px;
16045
+ }
16046
+
16047
+ .dm-vlist-status {
16048
+ position: absolute;
16049
+ top: 0;
16050
+ left: 0;
16051
+ right: 0;
16052
+ display: flex;
16053
+ align-items: center;
16054
+ justify-content: center;
16055
+ gap: var(--dm-space-2);
16056
+ padding: var(--dm-space-3);
16057
+ color: var(--dm-text-muted);
16058
+ box-sizing: border-box;
16059
+ }
16060
+
16061
+ .dm-vlist-status[hidden] {
16062
+ display: none;
16063
+ }
16064
+
16065
+ .dm-vlist-loading,
16066
+ .dm-vlist-error {
16067
+ display: inline-flex;
16068
+ align-items: center;
16069
+ gap: var(--dm-space-2);
16070
+ }
16071
+
16072
+ /* Plain text colour: --dm-danger is not readable on --dm-surface in every theme. */
16073
+ .dm-vlist-error {
16074
+ color: var(--dm-text);
16075
+ }
16076
+
16077
+ .dm-vlist-spinner {
16078
+ width: 1rem;
16079
+ height: 1rem;
16080
+ border: 2px solid var(--dm-border);
16081
+ border-top-color: var(--dm-primary);
16082
+ border-radius: var(--dm-radius-full);
16083
+ animation: dm-loader-spin 0.8s linear infinite;
16084
+ }
16085
+
16086
+ @media (prefers-reduced-motion: reduce) {
16087
+ .dm-vlist-spinner {
16088
+ animation-duration: 2.4s;
16089
+ }
16090
+ }
16091
+
16092
+ /* ===== Dropzone ===== */
16093
+ /*
16094
+ * E.dropzone(target, options) - src/components/dropzone.js
16095
+ *
16096
+ * The caller's element is the area (.dm-dropzone, role="button"); the file list
16097
+ * (.dm-dropzone-files) is drawn after it, because a button cannot hold buttons.
16098
+ * Theme tokens only, so every theme and its dark variant colour it.
16099
+ */
16100
+ .dm-dropzone {
16101
+ display: flex;
16102
+ flex-direction: column;
16103
+ align-items: center;
16104
+ justify-content: center;
16105
+ gap: var(--dm-space-2);
16106
+ min-height: 8rem;
16107
+ padding: var(--dm-space-6) var(--dm-space-4);
16108
+ border: 2px dashed var(--dm-border);
16109
+ border-radius: var(--dm-radius-md);
16110
+ background: var(--dm-surface);
16111
+ color: var(--dm-text);
16112
+ text-align: center;
16113
+ cursor: pointer;
16114
+ transition: border-color var(--dm-transition-fast), background-color var(--dm-transition-fast);
16115
+ }
16116
+
16117
+ .dm-dropzone:hover {
16118
+ border-color: var(--dm-primary);
16119
+ }
16120
+
16121
+ .dm-dropzone:focus-visible {
16122
+ outline: 2px solid var(--dm-border-focus);
16123
+ outline-offset: 2px;
16124
+ border-color: var(--dm-primary);
16125
+ }
16126
+
16127
+ .dm-dropzone.is-dragover {
16128
+ border-color: var(--dm-primary);
16129
+ border-style: solid;
16130
+ background: color-mix(in srgb, var(--dm-primary) 10%, var(--dm-surface));
16131
+ }
16132
+
16133
+ .dm-dropzone.is-invalid {
16134
+ border-color: var(--dm-danger);
16135
+ }
16136
+
16137
+ .dm-dropzone.is-disabled {
16138
+ opacity: var(--dm-disabled-opacity, 0.6);
16139
+ cursor: not-allowed;
16140
+ }
16141
+
16142
+ .dm-dropzone.is-disabled:hover {
16143
+ border-color: var(--dm-border);
16144
+ }
16145
+
16146
+ .dm-dropzone-prompt {
16147
+ display: flex;
16148
+ flex-direction: column;
16149
+ align-items: center;
16150
+ gap: var(--dm-space-1);
16151
+ pointer-events: none;
16152
+ }
16153
+
16154
+ .dm-dropzone-icon {
16155
+ color: var(--dm-text-secondary);
16156
+ }
16157
+
16158
+ .dm-dropzone:hover .dm-dropzone-icon,
16159
+ .dm-dropzone.is-dragover .dm-dropzone-icon {
16160
+ color: var(--dm-text);
16161
+ }
16162
+
16163
+ .dm-dropzone-text {
16164
+ font-weight: 500;
16165
+ }
16166
+
16167
+ .dm-dropzone-hint {
16168
+ color: var(--dm-text-muted);
16169
+ font-size: var(--dm-font-size-sm);
16170
+ }
16171
+
16172
+ .dm-dropzone-files {
16173
+ display: flex;
16174
+ flex-direction: column;
16175
+ gap: var(--dm-space-2);
16176
+ margin: var(--dm-space-3) 0;
16177
+ padding: 0;
16178
+ list-style: none;
16179
+ }
16180
+
16181
+ .dm-dropzone-files[hidden] {
16182
+ display: none;
16183
+ }
16184
+
16185
+ .dm-dropzone-file {
16186
+ display: grid;
16187
+ grid-template-columns: 2.75rem minmax(0, 1fr) auto auto;
16188
+ grid-template-areas: "thumb meta retry remove" "thumb bar bar bar";
16189
+ align-items: center;
16190
+ column-gap: var(--dm-space-3);
16191
+ row-gap: var(--dm-space-1);
16192
+ padding: var(--dm-space-2) var(--dm-space-3);
16193
+ border: 1px solid var(--dm-border);
16194
+ border-radius: var(--dm-radius-md);
16195
+ background: var(--dm-surface);
16196
+ color: var(--dm-text);
16197
+ }
16198
+
16199
+ .dm-dropzone-file[data-status="error"] {
16200
+ border-color: var(--dm-danger);
16201
+ }
16202
+
16203
+ .dm-dropzone-thumb {
16204
+ grid-area: thumb;
16205
+ display: flex;
16206
+ align-items: center;
16207
+ justify-content: center;
16208
+ width: 2.75rem;
16209
+ height: 2.75rem;
16210
+ overflow: hidden;
16211
+ border-radius: var(--dm-radius-sm);
16212
+ background: color-mix(in srgb, var(--dm-text) 8%, var(--dm-surface));
16213
+ color: var(--dm-text-secondary);
16214
+ font-size: var(--dm-font-size-xs);
16215
+ font-weight: 600;
16216
+ }
16217
+
16218
+ .dm-dropzone-thumb img {
16219
+ display: block;
16220
+ width: 100%;
16221
+ height: 100%;
16222
+ object-fit: cover;
16223
+ }
16224
+
16225
+ .dm-dropzone-meta {
16226
+ grid-area: meta;
16227
+ display: flex;
16228
+ flex-wrap: wrap;
16229
+ align-items: baseline;
16230
+ column-gap: var(--dm-space-2);
16231
+ min-width: 0;
16232
+ }
16233
+
16234
+ .dm-dropzone-name {
16235
+ flex: 1 1 auto;
16236
+ min-width: 0;
16237
+ overflow: hidden;
16238
+ text-overflow: ellipsis;
16239
+ white-space: nowrap;
16240
+ }
16241
+
16242
+ .dm-dropzone-size,
16243
+ .dm-dropzone-status {
16244
+ color: var(--dm-text-muted);
16245
+ font-size: var(--dm-font-size-sm);
16246
+ }
16247
+
16248
+ /* State colours stay on borders and bars (--dm-danger / --dm-success as text on a
16249
+ surface fail AA in several themes); the words carry the state */
16250
+ .dm-dropzone-file[data-status="error"] .dm-dropzone-status {
16251
+ color: var(--dm-text);
16252
+ font-weight: 600;
16253
+ }
16254
+
16255
+ .dm-dropzone-progress {
16256
+ grid-area: bar;
16257
+ display: block;
16258
+ height: 0.375rem;
16259
+ overflow: hidden;
16260
+ border-radius: var(--dm-radius-full);
16261
+ background: color-mix(in srgb, var(--dm-text) 10%, var(--dm-surface));
16262
+ }
16263
+
16264
+ .dm-dropzone-progress[hidden] {
16265
+ display: none;
16266
+ }
16267
+
16268
+ .dm-dropzone-progress-bar {
16269
+ display: block;
16270
+ width: 0;
16271
+ height: 100%;
16272
+ border-radius: inherit;
16273
+ background: var(--dm-primary);
16274
+ }
16275
+
16276
+ .dm-dropzone-file[data-status="done"] .dm-dropzone-progress-bar {
16277
+ background: var(--dm-success);
16278
+ }
16279
+
16280
+ .dm-dropzone-retry {
16281
+ grid-area: retry;
16282
+ }
16283
+
16284
+ .dm-dropzone-retry[hidden] {
16285
+ display: none;
16286
+ }
16287
+
16288
+ .dm-dropzone-remove {
16289
+ grid-area: remove;
16290
+ display: inline-flex;
16291
+ align-items: center;
16292
+ justify-content: center;
16293
+ width: 2rem;
16294
+ height: 2rem;
16295
+ padding: 0;
16296
+ border: 0;
16297
+ border-radius: var(--dm-radius-full);
16298
+ background: transparent;
16299
+ color: var(--dm-text-muted);
16300
+ font-size: 1.25rem;
16301
+ line-height: 1;
16302
+ cursor: pointer;
16303
+ }
16304
+
16305
+ .dm-dropzone-remove:hover:not(:disabled) {
16306
+ background: var(--dm-hover-bg);
16307
+ color: var(--dm-text);
16308
+ }
16309
+
16310
+ .dm-dropzone-remove:focus-visible {
16311
+ outline: 2px solid var(--dm-border-focus);
16312
+ outline-offset: 1px;
16313
+ }
16314
+
16315
+ @media (prefers-reduced-motion: no-preference) {
16316
+ .dm-dropzone-progress-bar {
16317
+ transition: width var(--dm-transition-fast);
16318
+ }
16319
+ }
16320
+
16321
+ @media (prefers-reduced-motion: reduce) {
16322
+ .dm-dropzone {
16323
+ transition: none;
16324
+ }
16325
+ }
16326
+
16327
+ /* ===== Range Slider ===== */
16328
+ /*
16329
+ * E.rangeSlider(target, options) / E.slider - src/components/range-slider.js
16330
+ *
16331
+ * The real <input type="range"> elements are hidden; this is the drawn slider in
16332
+ * front of them. The root is the hit area (2.75rem tall - a comfortable touch
16333
+ * target) with a thin track through its middle. Thumbs are positioned by JS
16334
+ * with left / right / bottom as a percentage and centred with a transform.
16335
+ */
16336
+ .dm-range-slider {
16337
+ position: relative;
16338
+ display: block;
16339
+ height: 2.75rem;
16340
+ margin: 0 0.625rem;
16341
+ color: var(--dm-text);
16342
+ cursor: pointer;
16343
+ user-select: none;
16344
+ -webkit-user-select: none;
16345
+ /* A horizontal slider still lets the page scroll vertically on touch */
16346
+ touch-action: pan-y;
16347
+ -webkit-tap-highlight-color: transparent;
16348
+ }
16349
+
16350
+ .dm-range-slider.has-tick-labels,
16351
+ .dm-range-slider.has-marks {
16352
+ margin-bottom: 1.5rem;
16353
+ }
16354
+
16355
+ /* A tooltip that is always shown needs room above the track */
16356
+ .dm-range-slider[data-tooltip="always"]:not([data-orientation="vertical"]) {
16357
+ margin-top: 1.75rem;
16358
+ }
16359
+
16360
+ .dm-range-slider[data-orientation="vertical"] {
16361
+ display: inline-block;
16362
+ width: 2.75rem;
16363
+ height: 12rem;
16364
+ margin: 0.625rem 0;
16365
+ touch-action: pan-x;
16366
+ vertical-align: top;
16367
+ }
16368
+
16369
+ .dm-range-slider[data-orientation="vertical"].has-tick-labels,
16370
+ .dm-range-slider[data-orientation="vertical"].has-marks {
16371
+ margin-bottom: 0.625rem;
16372
+ margin-right: 3rem;
16373
+ }
16374
+
16375
+ .dm-range-track {
16376
+ position: absolute;
16377
+ left: 0;
16378
+ right: 0;
16379
+ top: 50%;
16380
+ height: 0.375rem;
16381
+ transform: translateY(-50%);
16382
+ border-radius: var(--dm-radius-full);
16383
+ background: color-mix(in srgb, var(--dm-text) 16%, var(--dm-surface));
16384
+ }
16385
+
16386
+ .dm-range-slider[data-orientation="vertical"] .dm-range-track {
16387
+ left: 50%;
16388
+ right: auto;
16389
+ top: 0;
16390
+ bottom: 0;
16391
+ width: 0.375rem;
16392
+ height: auto;
16393
+ transform: translateX(-50%);
16394
+ }
16395
+
16396
+ .dm-range-fill {
16397
+ position: absolute;
16398
+ top: 0;
16399
+ bottom: 0;
16400
+ border-radius: inherit;
16401
+ background: var(--dm-primary);
16402
+ }
16403
+
16404
+ .dm-range-slider[data-orientation="vertical"] .dm-range-fill {
16405
+ left: 0;
16406
+ right: 0;
16407
+ top: auto;
16408
+ }
16409
+
16410
+ .dm-range-thumb {
16411
+ position: absolute;
16412
+ top: 50%;
16413
+ z-index: 2;
16414
+ width: 1.25rem;
16415
+ height: 1.25rem;
16416
+ border: 2px solid var(--dm-primary);
16417
+ border-radius: var(--dm-radius-full);
16418
+ background: var(--dm-surface);
16419
+ box-shadow: var(--dm-shadow-md);
16420
+ transform: translate(-50%, -50%);
16421
+ cursor: grab;
16422
+ touch-action: none;
16423
+ }
16424
+
16425
+ .dm-range-slider[dir="rtl"] .dm-range-thumb {
16426
+ transform: translate(50%, -50%);
16427
+ }
16428
+
16429
+ .dm-range-slider[data-orientation="vertical"] .dm-range-thumb {
16430
+ top: auto;
16431
+ left: 50%;
16432
+ transform: translate(-50%, 50%);
16433
+ }
16434
+
16435
+ .dm-range-thumb:hover {
16436
+ box-shadow: 0 0 0 0.375rem var(--dm-focus-ring);
16437
+ }
16438
+
16439
+ .dm-range-thumb:focus-visible {
16440
+ outline: 2px solid var(--dm-border-focus);
16441
+ outline-offset: 2px;
16442
+ box-shadow: 0 0 0 0.375rem var(--dm-focus-ring);
16443
+ }
16444
+
16445
+ /* The thumb being moved sits above the other when they meet */
16446
+ .dm-range-thumb.is-active,
16447
+ .dm-range-thumb:focus-visible {
16448
+ z-index: 3;
16449
+ }
16450
+
16451
+ .dm-range-slider.is-dragging,
16452
+ .dm-range-slider.is-dragging .dm-range-thumb {
16453
+ cursor: grabbing;
16454
+ }
16455
+
16456
+ .dm-range-tooltip {
16457
+ position: absolute;
16458
+ bottom: calc(100% + 0.5rem);
16459
+ left: 50%;
16460
+ padding: 0.125rem 0.5rem;
16461
+ border-radius: var(--dm-radius-sm);
16462
+ background: var(--dm-text);
16463
+ color: var(--dm-surface);
16464
+ font-size: var(--dm-font-size-xs);
16465
+ line-height: 1.5;
16466
+ white-space: nowrap;
16467
+ pointer-events: none;
16468
+ transform: translateX(-50%);
16469
+ opacity: 0;
16470
+ visibility: hidden;
16471
+ }
16472
+
16473
+ .dm-range-slider[data-orientation="vertical"] .dm-range-tooltip {
16474
+ bottom: auto;
16475
+ left: calc(100% + 0.5rem);
16476
+ top: 50%;
16477
+ transform: translateY(-50%);
16478
+ }
16479
+
16480
+ .dm-range-slider[data-tooltip="always"] .dm-range-tooltip,
16481
+ .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16482
+ .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16483
+ .dm-range-slider[data-tooltip="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16484
+ opacity: 1;
16485
+ visibility: visible;
16486
+ }
16487
+
16488
+ .dm-range-ticks,
16489
+ .dm-range-marks {
16490
+ position: absolute;
16491
+ inset: 0;
16492
+ pointer-events: none;
16493
+ }
16494
+
16495
+ .dm-range-tick,
16496
+ .dm-range-mark {
16497
+ position: absolute;
16498
+ top: calc(50% + 0.375rem);
16499
+ width: 1px;
16500
+ height: 0.375rem;
16501
+ background: var(--dm-border-dark);
16502
+ transform: translateX(-50%);
16503
+ }
16504
+
16505
+ .dm-range-slider[dir="rtl"] .dm-range-tick,
16506
+ .dm-range-slider[dir="rtl"] .dm-range-mark {
16507
+ transform: translateX(50%);
16508
+ }
16509
+
16510
+ .dm-range-tick.is-in-range {
16511
+ background: var(--dm-primary);
16512
+ }
16513
+
16514
+ .dm-range-slider[data-orientation="vertical"] .dm-range-tick,
16515
+ .dm-range-slider[data-orientation="vertical"] .dm-range-mark {
16516
+ top: auto;
16517
+ left: calc(50% + 0.375rem);
16518
+ width: 0.375rem;
16519
+ height: 1px;
16520
+ transform: translateY(50%);
16521
+ }
16522
+
16523
+ .dm-range-mark {
16524
+ width: 0.375rem;
16525
+ height: 0.375rem;
16526
+ top: 50%;
16527
+ border-radius: var(--dm-radius-full);
16528
+ background: var(--dm-surface);
16529
+ border: 1px solid var(--dm-border-dark);
16530
+ transform: translate(-50%, -50%);
16531
+ pointer-events: auto;
16532
+ z-index: 1;
16533
+ }
16534
+
16535
+ .dm-range-slider[dir="rtl"] .dm-range-mark {
16536
+ transform: translate(50%, -50%);
16537
+ }
16538
+
16539
+ .dm-range-slider[data-orientation="vertical"] .dm-range-mark {
16540
+ left: 50%;
16541
+ width: 0.375rem;
16542
+ height: 0.375rem;
16543
+ transform: translate(-50%, 50%);
16544
+ }
16545
+
16546
+ .dm-range-tick-label,
16547
+ .dm-range-mark-label {
16548
+ position: absolute;
16549
+ top: calc(100% + 0.25rem);
16550
+ left: 50%;
16551
+ color: var(--dm-text-muted);
16552
+ font-size: var(--dm-font-size-xs);
16553
+ line-height: 1.2;
16554
+ white-space: nowrap;
16555
+ transform: translateX(-50%);
16556
+ }
16557
+
16558
+ .dm-range-mark-label {
16559
+ top: calc(100% + 0.625rem);
16560
+ color: var(--dm-text-secondary);
16561
+ cursor: pointer;
16562
+ }
16563
+
16564
+ .dm-range-slider[data-orientation="vertical"] .dm-range-tick-label,
16565
+ .dm-range-slider[data-orientation="vertical"] .dm-range-mark-label {
16566
+ top: 50%;
16567
+ left: calc(100% + 0.5rem);
16568
+ transform: translateY(-50%);
16569
+ }
16570
+
16571
+ .dm-range-slider.is-disabled {
16572
+ opacity: var(--dm-disabled-opacity, 0.6);
16573
+ cursor: not-allowed;
16574
+ }
16575
+
16576
+ .dm-range-slider.is-disabled .dm-range-thumb {
16577
+ cursor: not-allowed;
16578
+ box-shadow: none;
16579
+ }
16580
+
16581
+ @media (prefers-reduced-motion: no-preference) {
16582
+ .dm-range-thumb {
16583
+ transition: box-shadow var(--dm-transition-fast);
16584
+ }
16585
+
16586
+ .dm-range-tooltip {
16587
+ transition: opacity var(--dm-transition-fast), visibility var(--dm-transition-fast);
16588
+ }
16589
+ }
16590
+
16591
+ @media (forced-colors: active) {
16592
+ .dm-range-fill,
16593
+ .dm-dropzone-progress-bar {
16594
+ background: Highlight;
16595
+ }
16596
+
16597
+ .dm-range-thumb {
16598
+ background: ButtonFace;
16599
+ border-color: ButtonText;
16600
+ }
16601
+ }
16602
+
15539
16603
 
15540
16604
  /* ============================================
15541
16605
  THEME SYSTEM
@@ -15543,11 +16607,11 @@ a.avatar-more-person:hover .avatar-more-name {
15543
16607
  ============================================ */
15544
16608
 
15545
16609
  /*!
15546
- * Domma Themes v0.55.0
16610
+ * Domma Themes v0.56.0
15547
16611
  * Dynamic Object Manipulation & Modeling API
15548
16612
  * (c) 2026 Darryl Waterhouse & DCBW-IT
15549
- * Built: 2026-10-24T15:07:57.484Z
15550
- * Commit: 253e259
16613
+ * Built: 2026-10-24T16:12:49.139Z
16614
+ * Commit: f768320
15551
16615
  */
15552
16616
 
15553
16617
  /**