softui-css 1.5.0 → 1.6.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.
package/dist/softui.css CHANGED
@@ -814,7 +814,7 @@ a.sui-btn-warning:visited {
814
814
  }
815
815
 
816
816
  .sui-table tbody tr:hover {
817
- background: var(--sui-bg);
817
+ background: rgba(91, 84, 224, 0.04);
818
818
  }
819
819
 
820
820
  /* Table inside card — inherit card's surface */
@@ -1094,14 +1094,15 @@ a.sui-btn-warning:visited {
1094
1094
  Modal / Dialog
1095
1095
  =========================================== */
1096
1096
  .sui-modal-backdrop {
1097
+ --sui-modal-blur: 6px;
1097
1098
  position: fixed;
1098
1099
  top: 0;
1099
1100
  left: 0;
1100
1101
  width: 100%;
1101
1102
  height: 100%;
1102
1103
  background: rgba(0, 0, 0, 0.3);
1103
- backdrop-filter: blur(6px);
1104
- -webkit-backdrop-filter: blur(6px);
1104
+ backdrop-filter: blur(var(--sui-modal-blur));
1105
+ -webkit-backdrop-filter: blur(var(--sui-modal-blur));
1105
1106
  display: flex;
1106
1107
  align-items: center;
1107
1108
  justify-content: center;
@@ -1116,10 +1117,16 @@ a.sui-btn-warning:visited {
1116
1117
  visibility: visible;
1117
1118
  }
1118
1119
 
1120
+ .sui-modal-blur-none { --sui-modal-blur: 0px; }
1121
+ .sui-modal-blur-sm { --sui-modal-blur: 3px; }
1122
+ .sui-modal-blur-md { --sui-modal-blur: 6px; }
1123
+ .sui-modal-blur-lg { --sui-modal-blur: 12px; }
1124
+ .sui-modal-blur-xl { --sui-modal-blur: 20px; }
1125
+
1119
1126
  .sui-modal {
1120
1127
  background: var(--sui-bg);
1121
1128
  border-radius: var(--sui-radius-lg);
1122
- box-shadow: var(--sui-shadow-raised-lg);
1129
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15), 0 2px 8px rgba(0, 0, 0, 0.1);
1123
1130
  width: 90%;
1124
1131
  max-width: 520px;
1125
1132
  max-height: 85vh;
@@ -2615,6 +2622,15 @@ a.sui-btn-warning:visited {
2615
2622
  =========================================== */
2616
2623
  .sui-table-inset {
2617
2624
  box-shadow: var(--sui-shadow-inset);
2625
+ overflow: hidden;
2626
+ }
2627
+
2628
+ .sui-table-inset tbody tr:hover {
2629
+ background: none;
2630
+ }
2631
+
2632
+ .sui-table-inset tbody tr:hover td {
2633
+ background: rgba(91, 84, 224, 0.04);
2618
2634
  }
2619
2635
 
2620
2636
  /* ===========================================
@@ -5066,26 +5082,25 @@ a.sui-btn-warning:visited {
5066
5082
  Custom Scrollbar (global)
5067
5083
  =========================================== */
5068
5084
  * {
5069
- scrollbar-width: thin;
5070
- scrollbar-color: var(--sui-text-light) var(--sui-bg-dark);
5071
5085
  }
5072
- *::-webkit-scrollbar {
5073
- width: 8px;
5074
- height: 8px;
5086
+ ::-webkit-scrollbar {
5087
+ width: 6px;
5088
+ height: 6px;
5075
5089
  }
5076
- *::-webkit-scrollbar-track {
5077
- background: var(--sui-bg-dark);
5078
- border-radius: var(--sui-radius-full);
5090
+ ::-webkit-scrollbar-track {
5091
+ background: transparent;
5079
5092
  }
5080
- *::-webkit-scrollbar-thumb {
5093
+ ::-webkit-scrollbar-thumb {
5081
5094
  background: var(--sui-text-light);
5082
- border-radius: var(--sui-radius-full);
5095
+ border-radius: 3px;
5096
+ border: 1px solid transparent;
5097
+ background-clip: content-box;
5083
5098
  }
5084
- *::-webkit-scrollbar-thumb:hover {
5099
+ ::-webkit-scrollbar-thumb:hover {
5085
5100
  background: var(--sui-text-muted);
5086
5101
  }
5087
- *::-webkit-scrollbar-corner {
5088
- background: transparent;
5102
+ ::-webkit-scrollbar-corner {
5103
+ display: none;
5089
5104
  }
5090
5105
 
5091
5106
  /* ===========================================
@@ -9190,6 +9205,14 @@ a.sui-btn-warning:visited {
9190
9205
  }
9191
9206
 
9192
9207
  /* Inset style */
9208
+ .sui-rating-raised {
9209
+ background: var(--sui-bg);
9210
+ box-shadow: var(--sui-shadow-raised-sm);
9211
+ border-radius: var(--sui-radius);
9212
+ padding: 6px 10px;
9213
+ gap: 4px;
9214
+ }
9215
+
9193
9216
  .sui-rating-inset {
9194
9217
  background: var(--sui-bg);
9195
9218
  box-shadow: var(--sui-shadow-inset-sm);
@@ -9573,6 +9596,13 @@ a.sui-btn-warning:visited {
9573
9596
  }
9574
9597
 
9575
9598
  /* Inset container */
9599
+ .sui-color-picker-raised {
9600
+ background: var(--sui-bg);
9601
+ box-shadow: var(--sui-shadow-raised-sm);
9602
+ border-radius: var(--sui-radius);
9603
+ padding: 12px;
9604
+ }
9605
+
9576
9606
  .sui-color-picker-inset {
9577
9607
  background: var(--sui-bg);
9578
9608
  box-shadow: var(--sui-shadow-inset-sm);
@@ -10605,6 +10635,15 @@ a.sui-btn-warning:visited {
10605
10635
  .sui-swap-lg svg { width: 32px; height: 32px; }
10606
10636
 
10607
10637
  /* Inset */
10638
+ .sui-swap-raised {
10639
+ background: var(--sui-bg);
10640
+ box-shadow: var(--sui-shadow-raised-sm);
10641
+ border-radius: var(--sui-radius-sm);
10642
+ padding: 8px;
10643
+ width: auto;
10644
+ height: auto;
10645
+ }
10646
+
10608
10647
  .sui-swap-inset {
10609
10648
  background: var(--sui-bg);
10610
10649
  box-shadow: var(--sui-shadow-inset-sm);
@@ -10620,3 +10659,944 @@ a.sui-btn-warning:visited {
10620
10659
  color: var(--sui-text-muted);
10621
10660
  text-transform: uppercase;
10622
10661
  }
10662
+
10663
+ /* =========================================
10664
+ Tree View
10665
+ ========================================= */
10666
+ .sui-tree {
10667
+ display: flex;
10668
+ flex-direction: column;
10669
+ font-size: 14px;
10670
+ }
10671
+
10672
+ .sui-tree-item {
10673
+ display: flex;
10674
+ flex-direction: column;
10675
+ }
10676
+
10677
+ .sui-tree-label {
10678
+ display: flex;
10679
+ align-items: center;
10680
+ gap: 6px;
10681
+ padding: 5px 8px;
10682
+ border-radius: var(--sui-radius-sm);
10683
+ cursor: pointer;
10684
+ color: var(--sui-text);
10685
+ font-weight: 500;
10686
+ transition: background 0.15s ease;
10687
+ user-select: none;
10688
+ }
10689
+
10690
+ .sui-tree-label:hover {
10691
+ background: rgba(91, 84, 224, 0.06);
10692
+ }
10693
+
10694
+ .sui-tree-label.active {
10695
+ background: rgba(91, 84, 224, 0.1);
10696
+ color: var(--sui-primary);
10697
+ }
10698
+
10699
+ .sui-tree-toggle {
10700
+ width: 16px;
10701
+ height: 16px;
10702
+ display: flex;
10703
+ align-items: center;
10704
+ justify-content: center;
10705
+ flex-shrink: 0;
10706
+ transition: transform 0.2s ease;
10707
+ }
10708
+
10709
+ .sui-tree-toggle svg {
10710
+ width: 12px;
10711
+ height: 12px;
10712
+ stroke: var(--sui-text-muted);
10713
+ fill: none;
10714
+ stroke-width: 2;
10715
+ stroke-linecap: round;
10716
+ stroke-linejoin: round;
10717
+ }
10718
+
10719
+ .sui-tree-item.expanded > .sui-tree-label .sui-tree-toggle {
10720
+ transform: rotate(90deg);
10721
+ }
10722
+
10723
+ .sui-tree-toggle-spacer {
10724
+ width: 16px;
10725
+ flex-shrink: 0;
10726
+ }
10727
+
10728
+ .sui-tree-icon {
10729
+ width: 16px;
10730
+ height: 16px;
10731
+ display: flex;
10732
+ align-items: center;
10733
+ justify-content: center;
10734
+ flex-shrink: 0;
10735
+ }
10736
+
10737
+ .sui-tree-icon svg {
10738
+ width: 16px;
10739
+ height: 16px;
10740
+ stroke: var(--sui-text-muted);
10741
+ fill: none;
10742
+ stroke-width: 2;
10743
+ stroke-linecap: round;
10744
+ stroke-linejoin: round;
10745
+ }
10746
+
10747
+ .sui-tree-item.expanded > .sui-tree-label .sui-tree-icon svg {
10748
+ stroke: var(--sui-primary);
10749
+ }
10750
+
10751
+ .sui-tree-text {
10752
+ flex: 1;
10753
+ line-height: 1.4;
10754
+ }
10755
+
10756
+ .sui-tree-children {
10757
+ display: none;
10758
+ padding-left: 22px;
10759
+ }
10760
+
10761
+ .sui-tree-item.expanded > .sui-tree-children {
10762
+ display: flex;
10763
+ flex-direction: column;
10764
+ }
10765
+
10766
+ /* With guide lines */
10767
+ .sui-tree-lines .sui-tree-children {
10768
+ margin-left: 7px;
10769
+ padding-left: 15px;
10770
+ border-left: 1px solid var(--sui-bg-dark);
10771
+ }
10772
+
10773
+ /* With checkboxes */
10774
+ .sui-tree-label .sui-checkbox {
10775
+ margin: 0;
10776
+ font-size: inherit;
10777
+ }
10778
+
10779
+ /* Sizes */
10780
+ .sui-tree-sm .sui-tree-label {
10781
+ padding: 3px 6px;
10782
+ font-size: 13px;
10783
+ gap: 4px;
10784
+ }
10785
+
10786
+ .sui-tree-sm .sui-tree-toggle,
10787
+ .sui-tree-sm .sui-tree-icon {
10788
+ width: 14px;
10789
+ height: 14px;
10790
+ }
10791
+
10792
+ .sui-tree-sm .sui-tree-toggle svg,
10793
+ .sui-tree-sm .sui-tree-icon svg {
10794
+ width: 12px;
10795
+ height: 12px;
10796
+ }
10797
+
10798
+ .sui-tree-sm .sui-tree-children {
10799
+ padding-left: 18px;
10800
+ }
10801
+
10802
+ .sui-tree-lg .sui-tree-label {
10803
+ padding: 7px 10px;
10804
+ font-size: 15px;
10805
+ gap: 8px;
10806
+ }
10807
+
10808
+ .sui-tree-lg .sui-tree-toggle,
10809
+ .sui-tree-lg .sui-tree-icon {
10810
+ width: 18px;
10811
+ height: 18px;
10812
+ }
10813
+
10814
+ .sui-tree-lg .sui-tree-toggle svg,
10815
+ .sui-tree-lg .sui-tree-icon svg {
10816
+ width: 16px;
10817
+ height: 16px;
10818
+ }
10819
+
10820
+ .sui-tree-lg .sui-tree-children {
10821
+ padding-left: 26px;
10822
+ }
10823
+
10824
+ /* Inset container */
10825
+ /* Raised container */
10826
+ .sui-tree-raised {
10827
+ background: var(--sui-bg);
10828
+ box-shadow: var(--sui-shadow-raised-sm);
10829
+ border-radius: var(--sui-radius);
10830
+ padding: 10px;
10831
+ }
10832
+
10833
+ /* Inset container */
10834
+ .sui-tree-inset {
10835
+ background: var(--sui-bg);
10836
+ box-shadow: var(--sui-shadow-inset-sm);
10837
+ border-radius: var(--sui-radius);
10838
+ padding: 10px;
10839
+ }
10840
+
10841
+ /* =========================================
10842
+ Speed Dial / FAB
10843
+ ========================================= */
10844
+ .sui-speed-dial {
10845
+ position: fixed;
10846
+ z-index: 900;
10847
+ display: flex;
10848
+ flex-direction: column-reverse;
10849
+ align-items: center;
10850
+ gap: 12px;
10851
+ }
10852
+
10853
+ /* Relative mode for demos */
10854
+ .sui-speed-dial-relative {
10855
+ position: relative;
10856
+ }
10857
+
10858
+ /* Positions */
10859
+ .sui-speed-dial-br { bottom: 24px; right: 24px; }
10860
+ .sui-speed-dial-bl { bottom: 24px; left: 24px; }
10861
+ .sui-speed-dial-tr { top: 24px; right: 24px; }
10862
+ .sui-speed-dial-tl { top: 24px; left: 24px; }
10863
+
10864
+ /* Trigger button */
10865
+ .sui-speed-dial-trigger {
10866
+ width: 52px;
10867
+ height: 52px;
10868
+ border-radius: 50%;
10869
+ border: none;
10870
+ background: var(--sui-primary);
10871
+ color: #fff;
10872
+ display: flex;
10873
+ align-items: center;
10874
+ justify-content: center;
10875
+ cursor: pointer;
10876
+ box-shadow: 0 4px 14px rgba(91, 84, 224, 0.4);
10877
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.2s ease;
10878
+ padding: 0;
10879
+ font: inherit;
10880
+ outline: none;
10881
+ z-index: 1;
10882
+ }
10883
+
10884
+ .sui-speed-dial-trigger svg {
10885
+ width: 24px;
10886
+ height: 24px;
10887
+ stroke: currentColor;
10888
+ fill: none;
10889
+ stroke-width: 2;
10890
+ stroke-linecap: round;
10891
+ stroke-linejoin: round;
10892
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
10893
+ }
10894
+
10895
+ .sui-speed-dial-trigger:hover {
10896
+ box-shadow: 0 6px 20px rgba(91, 84, 224, 0.5);
10897
+ transform: scale(1.05);
10898
+ }
10899
+
10900
+ .sui-speed-dial.open .sui-speed-dial-trigger svg {
10901
+ transform: rotate(45deg);
10902
+ }
10903
+
10904
+ /* Actions container */
10905
+ .sui-speed-dial-actions {
10906
+ display: flex;
10907
+ flex-direction: column-reverse;
10908
+ align-items: center;
10909
+ gap: 10px;
10910
+ opacity: 0;
10911
+ transform: translateY(10px) scale(0.8);
10912
+ pointer-events: none;
10913
+ transition: opacity 0.25s ease, transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
10914
+ }
10915
+
10916
+ .sui-speed-dial.open .sui-speed-dial-actions {
10917
+ opacity: 1;
10918
+ transform: translateY(0) scale(1);
10919
+ pointer-events: auto;
10920
+ }
10921
+
10922
+ /* Individual action */
10923
+ .sui-speed-dial-action {
10924
+ width: 40px;
10925
+ height: 40px;
10926
+ border-radius: 50%;
10927
+ border: none;
10928
+ background: var(--sui-bg);
10929
+ box-shadow: var(--sui-shadow-raised-sm);
10930
+ color: var(--sui-text);
10931
+ display: flex;
10932
+ align-items: center;
10933
+ justify-content: center;
10934
+ cursor: pointer;
10935
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
10936
+ padding: 0;
10937
+ font: inherit;
10938
+ outline: none;
10939
+ position: relative;
10940
+ }
10941
+
10942
+ .sui-speed-dial-action svg {
10943
+ width: 18px;
10944
+ height: 18px;
10945
+ stroke: currentColor;
10946
+ fill: none;
10947
+ stroke-width: 2;
10948
+ stroke-linecap: round;
10949
+ stroke-linejoin: round;
10950
+ }
10951
+
10952
+ .sui-speed-dial-action:hover {
10953
+ transform: scale(1.1);
10954
+ box-shadow: var(--sui-shadow-raised);
10955
+ }
10956
+
10957
+ /* Staggered animation */
10958
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(1) { transition-delay: 0.03s; }
10959
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(2) { transition-delay: 0.06s; }
10960
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(3) { transition-delay: 0.09s; }
10961
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(4) { transition-delay: 0.12s; }
10962
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(5) { transition-delay: 0.15s; }
10963
+
10964
+ /* Labels */
10965
+ .sui-speed-dial-action[data-label]::before {
10966
+ content: attr(data-label);
10967
+ position: absolute;
10968
+ right: calc(100% + 10px);
10969
+ top: 50%;
10970
+ transform: translateY(-50%) scale(0.8);
10971
+ background: var(--sui-text);
10972
+ color: var(--sui-bg);
10973
+ font-size: 12px;
10974
+ font-weight: 600;
10975
+ padding: 4px 10px;
10976
+ border-radius: var(--sui-radius-sm);
10977
+ white-space: nowrap;
10978
+ opacity: 0;
10979
+ pointer-events: none;
10980
+ transition: opacity 0.15s ease, transform 0.15s ease;
10981
+ }
10982
+
10983
+ .sui-speed-dial-action[data-label]:hover::before {
10984
+ opacity: 1;
10985
+ transform: translateY(-50%) scale(1);
10986
+ }
10987
+
10988
+ /* Left-side labels (for right-positioned dials) */
10989
+ .sui-speed-dial-bl .sui-speed-dial-action[data-label]::before,
10990
+ .sui-speed-dial-tl .sui-speed-dial-action[data-label]::before {
10991
+ right: auto;
10992
+ left: calc(100% + 10px);
10993
+ }
10994
+
10995
+ /* Direction: down */
10996
+ .sui-speed-dial-down {
10997
+ flex-direction: column;
10998
+ }
10999
+
11000
+ .sui-speed-dial-down .sui-speed-dial-actions {
11001
+ flex-direction: column;
11002
+ transform: translateY(-10px) scale(0.8);
11003
+ }
11004
+
11005
+ .sui-speed-dial-down.open .sui-speed-dial-actions {
11006
+ transform: translateY(0) scale(1);
11007
+ }
11008
+
11009
+ /* Direction: left */
11010
+ .sui-speed-dial-left {
11011
+ flex-direction: row-reverse;
11012
+ }
11013
+
11014
+ .sui-speed-dial-left .sui-speed-dial-actions {
11015
+ flex-direction: row-reverse;
11016
+ transform: translateX(-10px) scale(0.8);
11017
+ }
11018
+
11019
+ .sui-speed-dial-left.open .sui-speed-dial-actions {
11020
+ transform: translateX(0) scale(1);
11021
+ }
11022
+
11023
+ .sui-speed-dial-left .sui-speed-dial-action[data-label]::before {
11024
+ right: auto;
11025
+ left: auto;
11026
+ top: auto;
11027
+ bottom: calc(100% + 10px);
11028
+ left: 50%;
11029
+ transform: translateX(-50%) scale(0.8);
11030
+ }
11031
+
11032
+ .sui-speed-dial-left .sui-speed-dial-action[data-label]:hover::before {
11033
+ transform: translateX(-50%) scale(1);
11034
+ }
11035
+
11036
+ /* Direction: right */
11037
+ .sui-speed-dial-right {
11038
+ flex-direction: row;
11039
+ }
11040
+
11041
+ .sui-speed-dial-right .sui-speed-dial-actions {
11042
+ flex-direction: row;
11043
+ transform: translateX(10px) scale(0.8);
11044
+ }
11045
+
11046
+ .sui-speed-dial-right.open .sui-speed-dial-actions {
11047
+ transform: translateX(0) scale(1);
11048
+ }
11049
+
11050
+ .sui-speed-dial-right .sui-speed-dial-action[data-label]::before {
11051
+ right: auto;
11052
+ left: auto;
11053
+ top: auto;
11054
+ bottom: calc(100% + 10px);
11055
+ left: 50%;
11056
+ transform: translateX(-50%) scale(0.8);
11057
+ }
11058
+
11059
+ .sui-speed-dial-right .sui-speed-dial-action[data-label]:hover::before {
11060
+ transform: translateX(-50%) scale(1);
11061
+ }
11062
+
11063
+ /* Color variants */
11064
+ .sui-speed-dial-success .sui-speed-dial-trigger {
11065
+ background: var(--sui-success);
11066
+ box-shadow: 0 4px 14px rgba(45, 206, 137, 0.4);
11067
+ }
11068
+
11069
+ .sui-speed-dial-danger .sui-speed-dial-trigger {
11070
+ background: var(--sui-danger);
11071
+ box-shadow: 0 4px 14px rgba(231, 76, 111, 0.4);
11072
+ }
11073
+
11074
+ /* Sizes */
11075
+ .sui-speed-dial-sm .sui-speed-dial-trigger {
11076
+ width: 42px;
11077
+ height: 42px;
11078
+ }
11079
+
11080
+ .sui-speed-dial-sm .sui-speed-dial-trigger svg {
11081
+ width: 20px;
11082
+ height: 20px;
11083
+ }
11084
+
11085
+ .sui-speed-dial-sm .sui-speed-dial-action {
11086
+ width: 34px;
11087
+ height: 34px;
11088
+ }
11089
+
11090
+ .sui-speed-dial-sm .sui-speed-dial-action svg {
11091
+ width: 15px;
11092
+ height: 15px;
11093
+ }
11094
+
11095
+ .sui-speed-dial-lg .sui-speed-dial-trigger {
11096
+ width: 62px;
11097
+ height: 62px;
11098
+ }
11099
+
11100
+ .sui-speed-dial-lg .sui-speed-dial-trigger svg {
11101
+ width: 28px;
11102
+ height: 28px;
11103
+ }
11104
+
11105
+ .sui-speed-dial-lg .sui-speed-dial-action {
11106
+ width: 48px;
11107
+ height: 48px;
11108
+ }
11109
+
11110
+ .sui-speed-dial-lg .sui-speed-dial-action svg {
11111
+ width: 22px;
11112
+ height: 22px;
11113
+ }
11114
+
11115
+ /* =========================================
11116
+ Image Lightbox
11117
+ ========================================= */
11118
+
11119
+ /* Thumbnail trigger */
11120
+ .sui-lightbox-thumb {
11121
+ cursor: pointer;
11122
+ border-radius: var(--sui-radius-sm);
11123
+ overflow: hidden;
11124
+ box-shadow: var(--sui-shadow-raised-sm);
11125
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
11126
+ display: inline-block;
11127
+ }
11128
+
11129
+ .sui-lightbox-thumb:hover {
11130
+ transform: translateY(-2px);
11131
+ box-shadow: var(--sui-shadow-raised);
11132
+ }
11133
+
11134
+ .sui-lightbox-thumb img {
11135
+ display: block;
11136
+ width: 100%;
11137
+ height: 100%;
11138
+ object-fit: cover;
11139
+ }
11140
+
11141
+ /* Grid layout */
11142
+ .sui-lightbox-grid {
11143
+ display: grid;
11144
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
11145
+ gap: 12px;
11146
+ }
11147
+
11148
+ .sui-lightbox-grid .sui-lightbox-thumb {
11149
+ aspect-ratio: 4/3;
11150
+ }
11151
+
11152
+ /* Filmstrip — horizontal scroll */
11153
+ .sui-lightbox-filmstrip {
11154
+ display: flex;
11155
+ gap: 10px;
11156
+ overflow-x: auto;
11157
+ padding-bottom: 8px;
11158
+ }
11159
+
11160
+ .sui-lightbox-filmstrip .sui-lightbox-thumb {
11161
+ flex-shrink: 0;
11162
+ width: 160px;
11163
+ height: 110px;
11164
+ }
11165
+
11166
+ /* Vertical gallery — main image + side thumbnails */
11167
+ .sui-lightbox-vertical {
11168
+ display: flex;
11169
+ gap: 12px;
11170
+ }
11171
+
11172
+ .sui-lightbox-vertical-main {
11173
+ flex: 1;
11174
+ border-radius: var(--sui-radius-sm);
11175
+ overflow: hidden;
11176
+ box-shadow: var(--sui-shadow-raised-sm);
11177
+ cursor: pointer;
11178
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
11179
+ }
11180
+
11181
+ .sui-lightbox-vertical-main:hover {
11182
+ transform: translateY(-2px);
11183
+ box-shadow: var(--sui-shadow-raised);
11184
+ }
11185
+
11186
+ .sui-lightbox-vertical-main img {
11187
+ width: 100%;
11188
+ height: 100%;
11189
+ object-fit: cover;
11190
+ display: block;
11191
+ }
11192
+
11193
+ .sui-lightbox-vertical-strip {
11194
+ display: flex;
11195
+ flex-direction: column;
11196
+ gap: 8px;
11197
+ width: 82px;
11198
+ flex-shrink: 0;
11199
+ overflow-y: auto;
11200
+ overflow-x: hidden;
11201
+ }
11202
+
11203
+ .sui-lightbox-vertical-strip .sui-lightbox-thumb {
11204
+ width: 72px;
11205
+ height: 54px;
11206
+ flex-shrink: 0;
11207
+ opacity: 0.6;
11208
+ transition: opacity 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
11209
+ }
11210
+
11211
+ .sui-lightbox-vertical-strip .sui-lightbox-thumb:hover,
11212
+ .sui-lightbox-vertical-strip .sui-lightbox-thumb.active {
11213
+ opacity: 1;
11214
+ }
11215
+
11216
+ /* Inset container */
11217
+ .sui-lightbox-inset {
11218
+ background: var(--sui-bg);
11219
+ box-shadow: var(--sui-shadow-inset-sm);
11220
+ border-radius: var(--sui-radius);
11221
+ padding: 12px;
11222
+ }
11223
+
11224
+ /* Overlay */
11225
+ .sui-lightbox-overlay {
11226
+ position: fixed;
11227
+ inset: 0;
11228
+ z-index: 1100;
11229
+ background: rgba(0, 0, 0, 0.85);
11230
+ backdrop-filter: blur(8px);
11231
+ -webkit-backdrop-filter: blur(8px);
11232
+ display: flex;
11233
+ align-items: center;
11234
+ justify-content: center;
11235
+ flex-direction: column;
11236
+ opacity: 0;
11237
+ visibility: hidden;
11238
+ transition: opacity 0.3s ease, visibility 0.3s ease;
11239
+ }
11240
+
11241
+ .sui-lightbox-overlay.open {
11242
+ opacity: 1;
11243
+ visibility: visible;
11244
+ }
11245
+
11246
+ /* Main image */
11247
+ .sui-lightbox-overlay img {
11248
+ max-width: 90vw;
11249
+ max-height: 80vh;
11250
+ object-fit: contain;
11251
+ border-radius: var(--sui-radius);
11252
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4);
11253
+ transform: scale(0.95);
11254
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
11255
+ }
11256
+
11257
+ .sui-lightbox-overlay.open img {
11258
+ transform: scale(1);
11259
+ }
11260
+
11261
+ /* Zoomed */
11262
+ .sui-lightbox-overlay.zoomed img {
11263
+ max-width: none;
11264
+ max-height: none;
11265
+ cursor: zoom-out;
11266
+ transform: scale(1.5);
11267
+ }
11268
+
11269
+ .sui-lightbox-overlay:not(.zoomed) img {
11270
+ cursor: zoom-in;
11271
+ }
11272
+
11273
+ /* Close button */
11274
+ .sui-lightbox-close {
11275
+ position: absolute;
11276
+ top: 16px;
11277
+ right: 16px;
11278
+ width: 40px;
11279
+ height: 40px;
11280
+ border: none;
11281
+ background: rgba(255, 255, 255, 0.1);
11282
+ color: #fff;
11283
+ border-radius: 50%;
11284
+ display: flex;
11285
+ align-items: center;
11286
+ justify-content: center;
11287
+ cursor: pointer;
11288
+ font-size: 20px;
11289
+ transition: background 0.2s ease;
11290
+ padding: 0;
11291
+ z-index: 1;
11292
+ }
11293
+
11294
+ .sui-lightbox-close:hover {
11295
+ background: rgba(255, 255, 255, 0.2);
11296
+ }
11297
+
11298
+ /* Navigation arrows */
11299
+ .sui-lightbox-prev,
11300
+ .sui-lightbox-next {
11301
+ position: absolute;
11302
+ top: 50%;
11303
+ transform: translateY(-50%);
11304
+ width: 44px;
11305
+ height: 44px;
11306
+ border: none;
11307
+ background: rgba(255, 255, 255, 0.1);
11308
+ color: #fff;
11309
+ border-radius: 50%;
11310
+ display: flex;
11311
+ align-items: center;
11312
+ justify-content: center;
11313
+ cursor: pointer;
11314
+ transition: background 0.2s ease;
11315
+ padding: 0;
11316
+ }
11317
+
11318
+ .sui-lightbox-prev { left: 16px; }
11319
+ .sui-lightbox-next { right: 16px; }
11320
+
11321
+ .sui-lightbox-prev:hover,
11322
+ .sui-lightbox-next:hover {
11323
+ background: rgba(255, 255, 255, 0.2);
11324
+ }
11325
+
11326
+ .sui-lightbox-prev svg,
11327
+ .sui-lightbox-next svg {
11328
+ width: 20px;
11329
+ height: 20px;
11330
+ stroke: currentColor;
11331
+ fill: none;
11332
+ stroke-width: 2;
11333
+ stroke-linecap: round;
11334
+ stroke-linejoin: round;
11335
+ }
11336
+
11337
+ /* Caption */
11338
+ .sui-lightbox-caption {
11339
+ color: rgba(255, 255, 255, 0.8);
11340
+ font-size: 14px;
11341
+ text-align: center;
11342
+ margin-top: 12px;
11343
+ max-width: 600px;
11344
+ }
11345
+
11346
+ /* Counter */
11347
+ .sui-lightbox-counter {
11348
+ position: absolute;
11349
+ top: 20px;
11350
+ left: 20px;
11351
+ color: rgba(255, 255, 255, 0.6);
11352
+ font-size: 13px;
11353
+ font-weight: 600;
11354
+ }
11355
+
11356
+ /* =========================================
11357
+ Loading Overlay
11358
+ ========================================= */
11359
+ .sui-loading-overlay {
11360
+ position: absolute;
11361
+ inset: 0;
11362
+ display: flex;
11363
+ flex-direction: column;
11364
+ align-items: center;
11365
+ justify-content: center;
11366
+ gap: 12px;
11367
+ background: rgba(var(--sui-bg-rgb, 230, 232, 240), 0.8);
11368
+ border-radius: inherit;
11369
+ z-index: 10;
11370
+ opacity: 0;
11371
+ visibility: hidden;
11372
+ transition: opacity 0.25s ease, visibility 0.25s ease;
11373
+ }
11374
+
11375
+ .sui-loading-overlay.active {
11376
+ opacity: 1;
11377
+ visibility: visible;
11378
+ }
11379
+
11380
+ .sui-loading-overlay-text {
11381
+ font-size: 13px;
11382
+ font-weight: 600;
11383
+ color: var(--sui-text-muted);
11384
+ }
11385
+
11386
+ /* Blur variant */
11387
+ .sui-loading-blur {
11388
+ backdrop-filter: blur(4px);
11389
+ -webkit-backdrop-filter: blur(4px);
11390
+ background: rgba(var(--sui-bg-rgb, 230, 232, 240), 0.5);
11391
+ }
11392
+
11393
+ /* Fullscreen */
11394
+ .sui-loading-fullscreen {
11395
+ position: fixed;
11396
+ inset: 0;
11397
+ border-radius: 0;
11398
+ z-index: 1200;
11399
+ }
11400
+
11401
+ /* Dark mode support */
11402
+ [data-theme="dark"] .sui-loading-overlay {
11403
+ background: rgba(27, 29, 42, 0.8);
11404
+ }
11405
+
11406
+ [data-theme="dark"] .sui-loading-blur {
11407
+ background: rgba(27, 29, 42, 0.5);
11408
+ }
11409
+
11410
+ /* =========================================
11411
+ Diff — Image Compare Slider
11412
+ ========================================= */
11413
+ .sui-diff {
11414
+ position: relative;
11415
+ overflow: hidden;
11416
+ border-radius: var(--sui-radius);
11417
+ box-shadow: var(--sui-shadow-raised-sm);
11418
+ cursor: ew-resize;
11419
+ user-select: none;
11420
+ }
11421
+
11422
+ .sui-diff .sui-diff-after {
11423
+ display: block;
11424
+ width: 100%;
11425
+ height: auto;
11426
+ }
11427
+
11428
+ .sui-diff .sui-diff-before {
11429
+ position: absolute;
11430
+ top: 0;
11431
+ left: 0;
11432
+ width: 100%;
11433
+ height: 100%;
11434
+ object-fit: cover;
11435
+ object-position: left;
11436
+ z-index: 1;
11437
+ clip-path: inset(0 50% 0 0);
11438
+ }
11439
+
11440
+ .sui-diff-handle {
11441
+ position: absolute;
11442
+ top: 0;
11443
+ bottom: 0;
11444
+ left: 50%;
11445
+ width: 3px;
11446
+ background: #fff;
11447
+ z-index: 2;
11448
+ transform: translateX(-50%);
11449
+ box-shadow: 0 0 6px rgba(0, 0, 0, 0.3);
11450
+ }
11451
+
11452
+ .sui-diff-handle::before {
11453
+ content: "";
11454
+ position: absolute;
11455
+ top: 50%;
11456
+ left: 50%;
11457
+ transform: translate(-50%, -50%);
11458
+ width: 32px;
11459
+ height: 32px;
11460
+ border-radius: 50%;
11461
+ background: #fff;
11462
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
11463
+ }
11464
+
11465
+ .sui-diff-handle-arrows {
11466
+ position: absolute;
11467
+ top: 50%;
11468
+ left: 50%;
11469
+ transform: translate(-50%, -50%);
11470
+ display: flex;
11471
+ align-items: center;
11472
+ gap: 4px;
11473
+ z-index: 1;
11474
+ }
11475
+
11476
+ .sui-diff-handle-arrows svg {
11477
+ width: 8px;
11478
+ height: 12px;
11479
+ fill: var(--sui-text-muted);
11480
+ }
11481
+
11482
+ /* Labels */
11483
+ .sui-diff-label-before,
11484
+ .sui-diff-label-after {
11485
+ position: absolute;
11486
+ bottom: 12px;
11487
+ font-size: 12px;
11488
+ font-weight: 600;
11489
+ color: #fff;
11490
+ background: rgba(0, 0, 0, 0.5);
11491
+ padding: 4px 10px;
11492
+ border-radius: var(--sui-radius-sm);
11493
+ z-index: 3;
11494
+ }
11495
+
11496
+ .sui-diff-label-before {
11497
+ left: 12px;
11498
+ }
11499
+
11500
+ .sui-diff-label-after {
11501
+ right: 12px;
11502
+ }
11503
+
11504
+ /* Vertical mode */
11505
+ .sui-diff-vertical {
11506
+ cursor: ns-resize;
11507
+ }
11508
+
11509
+ .sui-diff-vertical .sui-diff-before {
11510
+ width: 100%;
11511
+ height: 100%;
11512
+ object-fit: cover;
11513
+ object-position: top;
11514
+ clip-path: inset(0 0 50% 0);
11515
+ }
11516
+
11517
+ .sui-diff-vertical .sui-diff-handle {
11518
+ top: 50%;
11519
+ left: 0;
11520
+ right: 0;
11521
+ bottom: auto;
11522
+ width: 100%;
11523
+ height: 3px;
11524
+ transform: translateY(-50%);
11525
+ }
11526
+
11527
+ .sui-diff-vertical .sui-diff-handle-arrows {
11528
+ flex-direction: column;
11529
+ gap: 4px;
11530
+ }
11531
+
11532
+ .sui-diff-vertical .sui-diff-handle-arrows svg {
11533
+ width: 12px;
11534
+ height: 8px;
11535
+ }
11536
+
11537
+ /* =========================================
11538
+ Stack
11539
+ ========================================= */
11540
+ .sui-stack {
11541
+ position: relative;
11542
+ display: inline-flex;
11543
+ }
11544
+
11545
+ .sui-stack > * {
11546
+ transition: transform 0.3s ease, box-shadow 0.3s ease, opacity 0.3s ease;
11547
+ }
11548
+
11549
+ .sui-stack {
11550
+ padding-bottom: 24px;
11551
+ padding-right: 24px;
11552
+ }
11553
+
11554
+ .sui-stack > *:not(:first-child) {
11555
+ position: absolute;
11556
+ top: 0;
11557
+ left: 0;
11558
+ }
11559
+
11560
+ /* Default — offset down-right */
11561
+ .sui-stack > *:nth-child(2) { transform: translate(12px, 12px); z-index: -1; opacity: 0.75; }
11562
+ .sui-stack > *:nth-child(3) { transform: translate(24px, 24px); z-index: -2; opacity: 0.5; }
11563
+ .sui-stack > *:nth-child(4) { transform: translate(36px, 36px); z-index: -3; opacity: 0.3; }
11564
+
11565
+ /* Fanned — wider rotation for visibility */
11566
+ .sui-stack-fanned > *:nth-child(1) { transform: rotate(-5deg); z-index: 3; }
11567
+ .sui-stack-fanned > *:nth-child(2) { transform: rotate(0deg) translate(10px, 4px); z-index: 2; opacity: 0.8; }
11568
+ .sui-stack-fanned > *:nth-child(3) { transform: rotate(5deg) translate(20px, 8px); z-index: 1; opacity: 0.6; }
11569
+ .sui-stack-fanned > *:nth-child(4) { transform: rotate(10deg) translate(30px, 12px); z-index: 0; opacity: 0.4; }
11570
+
11571
+ /* Offset up-left */
11572
+ .sui-stack-up > *:nth-child(2) { transform: translate(-8px, -8px); }
11573
+ .sui-stack-up > *:nth-child(3) { transform: translate(-16px, -16px); }
11574
+ .sui-stack-up > *:nth-child(4) { transform: translate(-24px, -24px); }
11575
+
11576
+ /* Offset right only */
11577
+ .sui-stack-right > *:nth-child(2) { transform: translateX(8px); }
11578
+ .sui-stack-right > *:nth-child(3) { transform: translateX(16px); }
11579
+ .sui-stack-right > *:nth-child(4) { transform: translateX(24px); }
11580
+
11581
+ /* Spread on hover — controlled by --sui-stack-gap and --sui-stack-spread */
11582
+ .sui-stack-hover {
11583
+ --sui-stack-gap: 180px;
11584
+ --sui-stack-spread: 0.6;
11585
+ }
11586
+
11587
+ .sui-stack-spread-xs { --sui-stack-spread: 0.15; }
11588
+ .sui-stack-spread-sm { --sui-stack-spread: 0.3; }
11589
+ .sui-stack-spread-md { --sui-stack-spread: 0.6; }
11590
+ .sui-stack-spread-lg { --sui-stack-spread: 0.85; }
11591
+ .sui-stack-spread-full { --sui-stack-spread: 1; }
11592
+
11593
+ .sui-stack-hover:hover > *:nth-child(1) { transform: translate(calc(var(--sui-stack-gap) * var(--sui-stack-spread) * -1), 0); z-index: 3; opacity: 1; }
11594
+ .sui-stack-hover:hover > *:nth-child(2) { transform: translate(0, 0); z-index: 2; opacity: 1; }
11595
+ .sui-stack-hover:hover > *:nth-child(3) { transform: translate(calc(var(--sui-stack-gap) * var(--sui-stack-spread)), 0); z-index: 1; opacity: 1; }
11596
+ .sui-stack-hover:hover > *:nth-child(4) { transform: translate(calc(var(--sui-stack-gap) * var(--sui-stack-spread) * 2), 0); z-index: 0; opacity: 1; }
11597
+
11598
+ .sui-stack-hover.sui-stack-fanned:hover > *:nth-child(1) { transform: rotate(-6deg) translate(calc(var(--sui-stack-gap) * var(--sui-stack-spread) * -0.9), calc(var(--sui-stack-spread) * -10px)); opacity: 1; }
11599
+ .sui-stack-hover.sui-stack-fanned:hover > *:nth-child(2) { transform: rotate(0deg) translate(0, 0); opacity: 1; }
11600
+ .sui-stack-hover.sui-stack-fanned:hover > *:nth-child(3) { transform: rotate(6deg) translate(calc(var(--sui-stack-gap) * var(--sui-stack-spread) * 0.9), calc(var(--sui-stack-spread) * -10px)); opacity: 1; }
11601
+ .sui-stack-hover.sui-stack-fanned:hover > *:nth-child(4) { transform: rotate(10deg) translate(calc(var(--sui-stack-gap) * var(--sui-stack-spread) * 1.8), calc(var(--sui-stack-spread) * -20px)); opacity: 1; }
11602
+