softui-css 1.5.0 → 1.7.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
  /* ===========================================
@@ -5574,8 +5589,114 @@ a.sui-btn-warning:visited {
5574
5589
  .sui-gap-4 { gap: 24px !important; }
5575
5590
  .sui-gap-5 { gap: 48px !important; }
5576
5591
 
5577
- /* Min-height viewport */
5578
- .sui-min-vh-100 { min-height: 100vh !important; }
5592
+ /* --- Display --- */
5593
+ .sui-d-inline { display: inline !important; }
5594
+ .sui-d-inline-block { display: inline-block !important; }
5595
+ .sui-d-grid { display: grid !important; }
5596
+
5597
+ /* --- Position --- */
5598
+ .sui-relative { position: relative !important; }
5599
+ .sui-absolute { position: absolute !important; }
5600
+ .sui-fixed { position: fixed !important; }
5601
+ .sui-sticky { position: sticky !important; top: 0; }
5602
+
5603
+ .sui-inset-0 { inset: 0 !important; }
5604
+ .sui-top-0 { top: 0 !important; }
5605
+ .sui-right-0 { right: 0 !important; }
5606
+ .sui-bottom-0 { bottom: 0 !important; }
5607
+ .sui-left-0 { left: 0 !important; }
5608
+
5609
+ /* --- Overflow --- */
5610
+ .sui-overflow-hidden { overflow: hidden !important; }
5611
+ .sui-overflow-auto { overflow: auto !important; }
5612
+ .sui-overflow-scroll { overflow: scroll !important; }
5613
+ .sui-overflow-visible { overflow: visible !important; }
5614
+ .sui-overflow-x-auto { overflow-x: auto !important; }
5615
+ .sui-overflow-y-auto { overflow-y: auto !important; }
5616
+ .sui-overflow-x-hidden { overflow-x: hidden !important; }
5617
+ .sui-overflow-y-hidden { overflow-y: hidden !important; }
5618
+
5619
+ /* --- Width --- */
5620
+ .sui-w-full { width: 100% !important; }
5621
+ .sui-w-auto { width: auto !important; }
5622
+ .sui-w-screen { width: 100vw !important; }
5623
+ .sui-max-w-sm { max-width: 320px !important; }
5624
+ .sui-max-w-md { max-width: 480px !important; }
5625
+ .sui-max-w-lg { max-width: 640px !important; }
5626
+ .sui-max-w-xl { max-width: 800px !important; }
5627
+ .sui-max-w-2xl { max-width: 1024px !important; }
5628
+ .sui-max-w-full { max-width: 100% !important; }
5629
+ .sui-max-w-none { max-width: none !important; }
5630
+ .sui-min-w-0 { min-width: 0 !important; }
5631
+
5632
+ /* --- Height --- */
5633
+ .sui-h-full { height: 100% !important; }
5634
+ .sui-h-auto { height: auto !important; }
5635
+ .sui-h-screen { height: 100vh !important; }
5636
+ .sui-min-h-0 { min-height: 0 !important; }
5637
+ .sui-min-h-full { min-height: 100% !important; }
5638
+ .sui-min-h-screen { min-height: 100vh !important; }
5639
+ .sui-min-vh-100 { min-height: 100vh !important; }
5640
+ .sui-max-h-full { max-height: 100% !important; }
5641
+ .sui-max-h-screen { max-height: 100vh !important; }
5642
+
5643
+ /* --- Opacity --- */
5644
+ .sui-opacity-0 { opacity: 0 !important; }
5645
+ .sui-opacity-5 { opacity: 0.05 !important; }
5646
+ .sui-opacity-10 { opacity: 0.1 !important; }
5647
+ .sui-opacity-20 { opacity: 0.2 !important; }
5648
+ .sui-opacity-25 { opacity: 0.25 !important; }
5649
+ .sui-opacity-30 { opacity: 0.3 !important; }
5650
+ .sui-opacity-40 { opacity: 0.4 !important; }
5651
+ .sui-opacity-50 { opacity: 0.5 !important; }
5652
+ .sui-opacity-60 { opacity: 0.6 !important; }
5653
+ .sui-opacity-70 { opacity: 0.7 !important; }
5654
+ .sui-opacity-75 { opacity: 0.75 !important; }
5655
+ .sui-opacity-80 { opacity: 0.8 !important; }
5656
+ .sui-opacity-90 { opacity: 0.9 !important; }
5657
+ .sui-opacity-100 { opacity: 1 !important; }
5658
+
5659
+ /* --- Z-Index --- */
5660
+ .sui-z-0 { z-index: 0 !important; }
5661
+ .sui-z-10 { z-index: 10 !important; }
5662
+ .sui-z-20 { z-index: 20 !important; }
5663
+ .sui-z-30 { z-index: 30 !important; }
5664
+ .sui-z-40 { z-index: 40 !important; }
5665
+ .sui-z-50 { z-index: 50 !important; }
5666
+ .sui-z-auto { z-index: auto !important; }
5667
+
5668
+ /* --- Cursor --- */
5669
+ .sui-cursor-pointer { cursor: pointer !important; }
5670
+ .sui-cursor-default { cursor: default !important; }
5671
+ .sui-cursor-not-allowed { cursor: not-allowed !important; }
5672
+ .sui-cursor-grab { cursor: grab !important; }
5673
+ .sui-cursor-grabbing { cursor: grabbing !important; }
5674
+ .sui-cursor-move { cursor: move !important; }
5675
+ .sui-cursor-text { cursor: text !important; }
5676
+
5677
+ /* --- Visibility --- */
5678
+ .sui-visible { visibility: visible !important; }
5679
+ .sui-invisible { visibility: hidden !important; }
5680
+ .sui-sr-only {
5681
+ position: absolute !important;
5682
+ width: 1px !important;
5683
+ height: 1px !important;
5684
+ padding: 0 !important;
5685
+ margin: -1px !important;
5686
+ overflow: hidden !important;
5687
+ clip: rect(0, 0, 0, 0) !important;
5688
+ white-space: nowrap !important;
5689
+ border: 0 !important;
5690
+ }
5691
+
5692
+ /* --- Pointer Events --- */
5693
+ .sui-pointer-events-none { pointer-events: none !important; }
5694
+ .sui-pointer-events-auto { pointer-events: auto !important; }
5695
+
5696
+ /* --- User Select --- */
5697
+ .sui-select-none { user-select: none !important; }
5698
+ .sui-select-text { user-select: text !important; }
5699
+ .sui-select-all { user-select: all !important; }
5579
5700
 
5580
5701
  /* Auto margins */
5581
5702
  .sui-ms-auto { margin-left: auto !important; }
@@ -9190,6 +9311,14 @@ a.sui-btn-warning:visited {
9190
9311
  }
9191
9312
 
9192
9313
  /* Inset style */
9314
+ .sui-rating-raised {
9315
+ background: var(--sui-bg);
9316
+ box-shadow: var(--sui-shadow-raised-sm);
9317
+ border-radius: var(--sui-radius);
9318
+ padding: 6px 10px;
9319
+ gap: 4px;
9320
+ }
9321
+
9193
9322
  .sui-rating-inset {
9194
9323
  background: var(--sui-bg);
9195
9324
  box-shadow: var(--sui-shadow-inset-sm);
@@ -9573,6 +9702,13 @@ a.sui-btn-warning:visited {
9573
9702
  }
9574
9703
 
9575
9704
  /* Inset container */
9705
+ .sui-color-picker-raised {
9706
+ background: var(--sui-bg);
9707
+ box-shadow: var(--sui-shadow-raised-sm);
9708
+ border-radius: var(--sui-radius);
9709
+ padding: 12px;
9710
+ }
9711
+
9576
9712
  .sui-color-picker-inset {
9577
9713
  background: var(--sui-bg);
9578
9714
  box-shadow: var(--sui-shadow-inset-sm);
@@ -10605,6 +10741,15 @@ a.sui-btn-warning:visited {
10605
10741
  .sui-swap-lg svg { width: 32px; height: 32px; }
10606
10742
 
10607
10743
  /* Inset */
10744
+ .sui-swap-raised {
10745
+ background: var(--sui-bg);
10746
+ box-shadow: var(--sui-shadow-raised-sm);
10747
+ border-radius: var(--sui-radius-sm);
10748
+ padding: 8px;
10749
+ width: auto;
10750
+ height: auto;
10751
+ }
10752
+
10608
10753
  .sui-swap-inset {
10609
10754
  background: var(--sui-bg);
10610
10755
  box-shadow: var(--sui-shadow-inset-sm);
@@ -10620,3 +10765,1837 @@ a.sui-btn-warning:visited {
10620
10765
  color: var(--sui-text-muted);
10621
10766
  text-transform: uppercase;
10622
10767
  }
10768
+
10769
+ /* =========================================
10770
+ Tree View
10771
+ ========================================= */
10772
+ .sui-tree {
10773
+ display: flex;
10774
+ flex-direction: column;
10775
+ font-size: 14px;
10776
+ }
10777
+
10778
+ .sui-tree-item {
10779
+ display: flex;
10780
+ flex-direction: column;
10781
+ }
10782
+
10783
+ .sui-tree-label {
10784
+ display: flex;
10785
+ align-items: center;
10786
+ gap: 6px;
10787
+ padding: 5px 8px;
10788
+ border-radius: var(--sui-radius-sm);
10789
+ cursor: pointer;
10790
+ color: var(--sui-text);
10791
+ font-weight: 500;
10792
+ transition: background 0.15s ease;
10793
+ user-select: none;
10794
+ }
10795
+
10796
+ .sui-tree-label:hover {
10797
+ background: rgba(91, 84, 224, 0.06);
10798
+ }
10799
+
10800
+ .sui-tree-label.active {
10801
+ background: rgba(91, 84, 224, 0.1);
10802
+ color: var(--sui-primary);
10803
+ }
10804
+
10805
+ .sui-tree-toggle {
10806
+ width: 16px;
10807
+ height: 16px;
10808
+ display: flex;
10809
+ align-items: center;
10810
+ justify-content: center;
10811
+ flex-shrink: 0;
10812
+ transition: transform 0.2s ease;
10813
+ }
10814
+
10815
+ .sui-tree-toggle svg {
10816
+ width: 12px;
10817
+ height: 12px;
10818
+ stroke: var(--sui-text-muted);
10819
+ fill: none;
10820
+ stroke-width: 2;
10821
+ stroke-linecap: round;
10822
+ stroke-linejoin: round;
10823
+ }
10824
+
10825
+ .sui-tree-item.expanded > .sui-tree-label .sui-tree-toggle {
10826
+ transform: rotate(90deg);
10827
+ }
10828
+
10829
+ .sui-tree-toggle-spacer {
10830
+ width: 16px;
10831
+ flex-shrink: 0;
10832
+ }
10833
+
10834
+ .sui-tree-icon {
10835
+ width: 16px;
10836
+ height: 16px;
10837
+ display: flex;
10838
+ align-items: center;
10839
+ justify-content: center;
10840
+ flex-shrink: 0;
10841
+ }
10842
+
10843
+ .sui-tree-icon svg {
10844
+ width: 16px;
10845
+ height: 16px;
10846
+ stroke: var(--sui-text-muted);
10847
+ fill: none;
10848
+ stroke-width: 2;
10849
+ stroke-linecap: round;
10850
+ stroke-linejoin: round;
10851
+ }
10852
+
10853
+ .sui-tree-item.expanded > .sui-tree-label .sui-tree-icon svg {
10854
+ stroke: var(--sui-primary);
10855
+ }
10856
+
10857
+ .sui-tree-text {
10858
+ flex: 1;
10859
+ line-height: 1.4;
10860
+ }
10861
+
10862
+ .sui-tree-children {
10863
+ display: none;
10864
+ padding-left: 22px;
10865
+ }
10866
+
10867
+ .sui-tree-item.expanded > .sui-tree-children {
10868
+ display: flex;
10869
+ flex-direction: column;
10870
+ }
10871
+
10872
+ /* With guide lines */
10873
+ .sui-tree-lines .sui-tree-children {
10874
+ margin-left: 7px;
10875
+ padding-left: 15px;
10876
+ border-left: 1px solid var(--sui-bg-dark);
10877
+ }
10878
+
10879
+ /* With checkboxes */
10880
+ .sui-tree-label .sui-checkbox {
10881
+ margin: 0;
10882
+ font-size: inherit;
10883
+ }
10884
+
10885
+ /* Sizes */
10886
+ .sui-tree-sm .sui-tree-label {
10887
+ padding: 3px 6px;
10888
+ font-size: 13px;
10889
+ gap: 4px;
10890
+ }
10891
+
10892
+ .sui-tree-sm .sui-tree-toggle,
10893
+ .sui-tree-sm .sui-tree-icon {
10894
+ width: 14px;
10895
+ height: 14px;
10896
+ }
10897
+
10898
+ .sui-tree-sm .sui-tree-toggle svg,
10899
+ .sui-tree-sm .sui-tree-icon svg {
10900
+ width: 12px;
10901
+ height: 12px;
10902
+ }
10903
+
10904
+ .sui-tree-sm .sui-tree-children {
10905
+ padding-left: 18px;
10906
+ }
10907
+
10908
+ .sui-tree-lg .sui-tree-label {
10909
+ padding: 7px 10px;
10910
+ font-size: 15px;
10911
+ gap: 8px;
10912
+ }
10913
+
10914
+ .sui-tree-lg .sui-tree-toggle,
10915
+ .sui-tree-lg .sui-tree-icon {
10916
+ width: 18px;
10917
+ height: 18px;
10918
+ }
10919
+
10920
+ .sui-tree-lg .sui-tree-toggle svg,
10921
+ .sui-tree-lg .sui-tree-icon svg {
10922
+ width: 16px;
10923
+ height: 16px;
10924
+ }
10925
+
10926
+ .sui-tree-lg .sui-tree-children {
10927
+ padding-left: 26px;
10928
+ }
10929
+
10930
+ /* Inset container */
10931
+ /* Raised container */
10932
+ .sui-tree-raised {
10933
+ background: var(--sui-bg);
10934
+ box-shadow: var(--sui-shadow-raised-sm);
10935
+ border-radius: var(--sui-radius);
10936
+ padding: 10px;
10937
+ }
10938
+
10939
+ /* Inset container */
10940
+ .sui-tree-inset {
10941
+ background: var(--sui-bg);
10942
+ box-shadow: var(--sui-shadow-inset-sm);
10943
+ border-radius: var(--sui-radius);
10944
+ padding: 10px;
10945
+ }
10946
+
10947
+ /* =========================================
10948
+ Speed Dial / FAB
10949
+ ========================================= */
10950
+ .sui-speed-dial {
10951
+ position: fixed;
10952
+ z-index: 900;
10953
+ display: flex;
10954
+ flex-direction: column-reverse;
10955
+ align-items: center;
10956
+ gap: 12px;
10957
+ }
10958
+
10959
+ /* Relative mode for demos */
10960
+ .sui-speed-dial-relative {
10961
+ position: relative;
10962
+ }
10963
+
10964
+ /* Positions */
10965
+ .sui-speed-dial-br { bottom: 24px; right: 24px; }
10966
+ .sui-speed-dial-bl { bottom: 24px; left: 24px; }
10967
+ .sui-speed-dial-tr { top: 24px; right: 24px; }
10968
+ .sui-speed-dial-tl { top: 24px; left: 24px; }
10969
+
10970
+ /* Trigger button */
10971
+ .sui-speed-dial-trigger {
10972
+ width: 52px;
10973
+ height: 52px;
10974
+ border-radius: 50%;
10975
+ border: none;
10976
+ background: var(--sui-primary);
10977
+ color: #fff;
10978
+ display: flex;
10979
+ align-items: center;
10980
+ justify-content: center;
10981
+ cursor: pointer;
10982
+ box-shadow: 0 4px 14px rgba(91, 84, 224, 0.4);
10983
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.2s ease;
10984
+ padding: 0;
10985
+ font: inherit;
10986
+ outline: none;
10987
+ z-index: 1;
10988
+ }
10989
+
10990
+ .sui-speed-dial-trigger svg {
10991
+ width: 24px;
10992
+ height: 24px;
10993
+ stroke: currentColor;
10994
+ fill: none;
10995
+ stroke-width: 2;
10996
+ stroke-linecap: round;
10997
+ stroke-linejoin: round;
10998
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
10999
+ }
11000
+
11001
+ .sui-speed-dial-trigger:hover {
11002
+ box-shadow: 0 6px 20px rgba(91, 84, 224, 0.5);
11003
+ transform: scale(1.05);
11004
+ }
11005
+
11006
+ .sui-speed-dial.open .sui-speed-dial-trigger svg {
11007
+ transform: rotate(45deg);
11008
+ }
11009
+
11010
+ /* Actions container */
11011
+ .sui-speed-dial-actions {
11012
+ display: flex;
11013
+ flex-direction: column-reverse;
11014
+ align-items: center;
11015
+ gap: 10px;
11016
+ opacity: 0;
11017
+ transform: translateY(10px) scale(0.8);
11018
+ pointer-events: none;
11019
+ transition: opacity 0.25s ease, transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
11020
+ }
11021
+
11022
+ .sui-speed-dial.open .sui-speed-dial-actions {
11023
+ opacity: 1;
11024
+ transform: translateY(0) scale(1);
11025
+ pointer-events: auto;
11026
+ }
11027
+
11028
+ /* Individual action */
11029
+ .sui-speed-dial-action {
11030
+ width: 40px;
11031
+ height: 40px;
11032
+ border-radius: 50%;
11033
+ border: none;
11034
+ background: var(--sui-bg);
11035
+ box-shadow: var(--sui-shadow-raised-sm);
11036
+ color: var(--sui-text);
11037
+ display: flex;
11038
+ align-items: center;
11039
+ justify-content: center;
11040
+ cursor: pointer;
11041
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
11042
+ padding: 0;
11043
+ font: inherit;
11044
+ outline: none;
11045
+ position: relative;
11046
+ }
11047
+
11048
+ .sui-speed-dial-action svg {
11049
+ width: 18px;
11050
+ height: 18px;
11051
+ stroke: currentColor;
11052
+ fill: none;
11053
+ stroke-width: 2;
11054
+ stroke-linecap: round;
11055
+ stroke-linejoin: round;
11056
+ }
11057
+
11058
+ .sui-speed-dial-action:hover {
11059
+ transform: scale(1.1);
11060
+ box-shadow: var(--sui-shadow-raised);
11061
+ }
11062
+
11063
+ /* Staggered animation */
11064
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(1) { transition-delay: 0.03s; }
11065
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(2) { transition-delay: 0.06s; }
11066
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(3) { transition-delay: 0.09s; }
11067
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(4) { transition-delay: 0.12s; }
11068
+ .sui-speed-dial.open .sui-speed-dial-action:nth-child(5) { transition-delay: 0.15s; }
11069
+
11070
+ /* Labels */
11071
+ .sui-speed-dial-action[data-label]::before {
11072
+ content: attr(data-label);
11073
+ position: absolute;
11074
+ right: calc(100% + 10px);
11075
+ top: 50%;
11076
+ transform: translateY(-50%) scale(0.8);
11077
+ background: var(--sui-text);
11078
+ color: var(--sui-bg);
11079
+ font-size: 12px;
11080
+ font-weight: 600;
11081
+ padding: 4px 10px;
11082
+ border-radius: var(--sui-radius-sm);
11083
+ white-space: nowrap;
11084
+ opacity: 0;
11085
+ pointer-events: none;
11086
+ transition: opacity 0.15s ease, transform 0.15s ease;
11087
+ }
11088
+
11089
+ .sui-speed-dial-action[data-label]:hover::before {
11090
+ opacity: 1;
11091
+ transform: translateY(-50%) scale(1);
11092
+ }
11093
+
11094
+ /* Left-side labels (for right-positioned dials) */
11095
+ .sui-speed-dial-bl .sui-speed-dial-action[data-label]::before,
11096
+ .sui-speed-dial-tl .sui-speed-dial-action[data-label]::before {
11097
+ right: auto;
11098
+ left: calc(100% + 10px);
11099
+ }
11100
+
11101
+ /* Direction: down */
11102
+ .sui-speed-dial-down {
11103
+ flex-direction: column;
11104
+ }
11105
+
11106
+ .sui-speed-dial-down .sui-speed-dial-actions {
11107
+ flex-direction: column;
11108
+ transform: translateY(-10px) scale(0.8);
11109
+ }
11110
+
11111
+ .sui-speed-dial-down.open .sui-speed-dial-actions {
11112
+ transform: translateY(0) scale(1);
11113
+ }
11114
+
11115
+ /* Direction: left */
11116
+ .sui-speed-dial-left {
11117
+ flex-direction: row-reverse;
11118
+ }
11119
+
11120
+ .sui-speed-dial-left .sui-speed-dial-actions {
11121
+ flex-direction: row-reverse;
11122
+ transform: translateX(-10px) scale(0.8);
11123
+ }
11124
+
11125
+ .sui-speed-dial-left.open .sui-speed-dial-actions {
11126
+ transform: translateX(0) scale(1);
11127
+ }
11128
+
11129
+ .sui-speed-dial-left .sui-speed-dial-action[data-label]::before {
11130
+ right: auto;
11131
+ left: auto;
11132
+ top: auto;
11133
+ bottom: calc(100% + 10px);
11134
+ left: 50%;
11135
+ transform: translateX(-50%) scale(0.8);
11136
+ }
11137
+
11138
+ .sui-speed-dial-left .sui-speed-dial-action[data-label]:hover::before {
11139
+ transform: translateX(-50%) scale(1);
11140
+ }
11141
+
11142
+ /* Direction: right */
11143
+ .sui-speed-dial-right {
11144
+ flex-direction: row;
11145
+ }
11146
+
11147
+ .sui-speed-dial-right .sui-speed-dial-actions {
11148
+ flex-direction: row;
11149
+ transform: translateX(10px) scale(0.8);
11150
+ }
11151
+
11152
+ .sui-speed-dial-right.open .sui-speed-dial-actions {
11153
+ transform: translateX(0) scale(1);
11154
+ }
11155
+
11156
+ .sui-speed-dial-right .sui-speed-dial-action[data-label]::before {
11157
+ right: auto;
11158
+ left: auto;
11159
+ top: auto;
11160
+ bottom: calc(100% + 10px);
11161
+ left: 50%;
11162
+ transform: translateX(-50%) scale(0.8);
11163
+ }
11164
+
11165
+ .sui-speed-dial-right .sui-speed-dial-action[data-label]:hover::before {
11166
+ transform: translateX(-50%) scale(1);
11167
+ }
11168
+
11169
+ /* Color variants */
11170
+ .sui-speed-dial-success .sui-speed-dial-trigger {
11171
+ background: var(--sui-success);
11172
+ box-shadow: 0 4px 14px rgba(45, 206, 137, 0.4);
11173
+ }
11174
+
11175
+ .sui-speed-dial-danger .sui-speed-dial-trigger {
11176
+ background: var(--sui-danger);
11177
+ box-shadow: 0 4px 14px rgba(231, 76, 111, 0.4);
11178
+ }
11179
+
11180
+ /* Sizes */
11181
+ .sui-speed-dial-sm .sui-speed-dial-trigger {
11182
+ width: 42px;
11183
+ height: 42px;
11184
+ }
11185
+
11186
+ .sui-speed-dial-sm .sui-speed-dial-trigger svg {
11187
+ width: 20px;
11188
+ height: 20px;
11189
+ }
11190
+
11191
+ .sui-speed-dial-sm .sui-speed-dial-action {
11192
+ width: 34px;
11193
+ height: 34px;
11194
+ }
11195
+
11196
+ .sui-speed-dial-sm .sui-speed-dial-action svg {
11197
+ width: 15px;
11198
+ height: 15px;
11199
+ }
11200
+
11201
+ .sui-speed-dial-lg .sui-speed-dial-trigger {
11202
+ width: 62px;
11203
+ height: 62px;
11204
+ }
11205
+
11206
+ .sui-speed-dial-lg .sui-speed-dial-trigger svg {
11207
+ width: 28px;
11208
+ height: 28px;
11209
+ }
11210
+
11211
+ .sui-speed-dial-lg .sui-speed-dial-action {
11212
+ width: 48px;
11213
+ height: 48px;
11214
+ }
11215
+
11216
+ .sui-speed-dial-lg .sui-speed-dial-action svg {
11217
+ width: 22px;
11218
+ height: 22px;
11219
+ }
11220
+
11221
+ /* =========================================
11222
+ Image Lightbox
11223
+ ========================================= */
11224
+
11225
+ /* Thumbnail trigger */
11226
+ .sui-lightbox-thumb {
11227
+ cursor: pointer;
11228
+ border-radius: var(--sui-radius-sm);
11229
+ overflow: hidden;
11230
+ box-shadow: var(--sui-shadow-raised-sm);
11231
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
11232
+ display: inline-block;
11233
+ }
11234
+
11235
+ .sui-lightbox-thumb:hover {
11236
+ transform: translateY(-2px);
11237
+ box-shadow: var(--sui-shadow-raised);
11238
+ }
11239
+
11240
+ .sui-lightbox-thumb img {
11241
+ display: block;
11242
+ width: 100%;
11243
+ height: 100%;
11244
+ object-fit: cover;
11245
+ }
11246
+
11247
+ /* Grid layout */
11248
+ .sui-lightbox-grid {
11249
+ display: grid;
11250
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
11251
+ gap: 12px;
11252
+ }
11253
+
11254
+ .sui-lightbox-grid .sui-lightbox-thumb {
11255
+ aspect-ratio: 4/3;
11256
+ }
11257
+
11258
+ /* Filmstrip — horizontal scroll */
11259
+ .sui-lightbox-filmstrip {
11260
+ display: flex;
11261
+ gap: 10px;
11262
+ overflow-x: auto;
11263
+ padding-bottom: 8px;
11264
+ }
11265
+
11266
+ .sui-lightbox-filmstrip .sui-lightbox-thumb {
11267
+ flex-shrink: 0;
11268
+ width: 160px;
11269
+ height: 110px;
11270
+ }
11271
+
11272
+ /* Vertical gallery — main image + side thumbnails */
11273
+ .sui-lightbox-vertical {
11274
+ display: flex;
11275
+ gap: 12px;
11276
+ }
11277
+
11278
+ .sui-lightbox-vertical-main {
11279
+ flex: 1;
11280
+ border-radius: var(--sui-radius-sm);
11281
+ overflow: hidden;
11282
+ box-shadow: var(--sui-shadow-raised-sm);
11283
+ cursor: pointer;
11284
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
11285
+ }
11286
+
11287
+ .sui-lightbox-vertical-main:hover {
11288
+ transform: translateY(-2px);
11289
+ box-shadow: var(--sui-shadow-raised);
11290
+ }
11291
+
11292
+ .sui-lightbox-vertical-main img {
11293
+ width: 100%;
11294
+ height: 100%;
11295
+ object-fit: cover;
11296
+ display: block;
11297
+ }
11298
+
11299
+ .sui-lightbox-vertical-strip {
11300
+ display: flex;
11301
+ flex-direction: column;
11302
+ gap: 8px;
11303
+ width: 82px;
11304
+ flex-shrink: 0;
11305
+ overflow-y: auto;
11306
+ overflow-x: hidden;
11307
+ }
11308
+
11309
+ .sui-lightbox-vertical-strip .sui-lightbox-thumb {
11310
+ width: 72px;
11311
+ height: 54px;
11312
+ flex-shrink: 0;
11313
+ opacity: 0.6;
11314
+ transition: opacity 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
11315
+ }
11316
+
11317
+ .sui-lightbox-vertical-strip .sui-lightbox-thumb:hover,
11318
+ .sui-lightbox-vertical-strip .sui-lightbox-thumb.active {
11319
+ opacity: 1;
11320
+ }
11321
+
11322
+ /* Inset container */
11323
+ .sui-lightbox-inset {
11324
+ background: var(--sui-bg);
11325
+ box-shadow: var(--sui-shadow-inset-sm);
11326
+ border-radius: var(--sui-radius);
11327
+ padding: 12px;
11328
+ }
11329
+
11330
+ /* Overlay */
11331
+ .sui-lightbox-overlay {
11332
+ position: fixed;
11333
+ inset: 0;
11334
+ z-index: 1100;
11335
+ background: rgba(0, 0, 0, 0.85);
11336
+ backdrop-filter: blur(8px);
11337
+ -webkit-backdrop-filter: blur(8px);
11338
+ display: flex;
11339
+ align-items: center;
11340
+ justify-content: center;
11341
+ flex-direction: column;
11342
+ opacity: 0;
11343
+ visibility: hidden;
11344
+ transition: opacity 0.3s ease, visibility 0.3s ease;
11345
+ }
11346
+
11347
+ .sui-lightbox-overlay.open {
11348
+ opacity: 1;
11349
+ visibility: visible;
11350
+ }
11351
+
11352
+ /* Main image */
11353
+ .sui-lightbox-overlay img {
11354
+ max-width: 90vw;
11355
+ max-height: 80vh;
11356
+ object-fit: contain;
11357
+ border-radius: var(--sui-radius);
11358
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4);
11359
+ transform: scale(0.95);
11360
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
11361
+ }
11362
+
11363
+ .sui-lightbox-overlay.open img {
11364
+ transform: scale(1);
11365
+ }
11366
+
11367
+ /* Zoomed */
11368
+ .sui-lightbox-overlay.zoomed img {
11369
+ max-width: none;
11370
+ max-height: none;
11371
+ cursor: zoom-out;
11372
+ transform: scale(1.5);
11373
+ }
11374
+
11375
+ .sui-lightbox-overlay:not(.zoomed) img {
11376
+ cursor: zoom-in;
11377
+ }
11378
+
11379
+ /* Close button */
11380
+ .sui-lightbox-close {
11381
+ position: absolute;
11382
+ top: 16px;
11383
+ right: 16px;
11384
+ width: 40px;
11385
+ height: 40px;
11386
+ border: none;
11387
+ background: rgba(255, 255, 255, 0.1);
11388
+ color: #fff;
11389
+ border-radius: 50%;
11390
+ display: flex;
11391
+ align-items: center;
11392
+ justify-content: center;
11393
+ cursor: pointer;
11394
+ font-size: 20px;
11395
+ transition: background 0.2s ease;
11396
+ padding: 0;
11397
+ z-index: 1;
11398
+ }
11399
+
11400
+ .sui-lightbox-close:hover {
11401
+ background: rgba(255, 255, 255, 0.2);
11402
+ }
11403
+
11404
+ /* Navigation arrows */
11405
+ .sui-lightbox-prev,
11406
+ .sui-lightbox-next {
11407
+ position: absolute;
11408
+ top: 50%;
11409
+ transform: translateY(-50%);
11410
+ width: 44px;
11411
+ height: 44px;
11412
+ border: none;
11413
+ background: rgba(255, 255, 255, 0.1);
11414
+ color: #fff;
11415
+ border-radius: 50%;
11416
+ display: flex;
11417
+ align-items: center;
11418
+ justify-content: center;
11419
+ cursor: pointer;
11420
+ transition: background 0.2s ease;
11421
+ padding: 0;
11422
+ }
11423
+
11424
+ .sui-lightbox-prev { left: 16px; }
11425
+ .sui-lightbox-next { right: 16px; }
11426
+
11427
+ .sui-lightbox-prev:hover,
11428
+ .sui-lightbox-next:hover {
11429
+ background: rgba(255, 255, 255, 0.2);
11430
+ }
11431
+
11432
+ .sui-lightbox-prev svg,
11433
+ .sui-lightbox-next svg {
11434
+ width: 20px;
11435
+ height: 20px;
11436
+ stroke: currentColor;
11437
+ fill: none;
11438
+ stroke-width: 2;
11439
+ stroke-linecap: round;
11440
+ stroke-linejoin: round;
11441
+ }
11442
+
11443
+ /* Caption */
11444
+ .sui-lightbox-caption {
11445
+ color: rgba(255, 255, 255, 0.8);
11446
+ font-size: 14px;
11447
+ text-align: center;
11448
+ margin-top: 12px;
11449
+ max-width: 600px;
11450
+ }
11451
+
11452
+ /* Counter */
11453
+ .sui-lightbox-counter {
11454
+ position: absolute;
11455
+ top: 20px;
11456
+ left: 20px;
11457
+ color: rgba(255, 255, 255, 0.6);
11458
+ font-size: 13px;
11459
+ font-weight: 600;
11460
+ }
11461
+
11462
+ /* =========================================
11463
+ Loading Overlay
11464
+ ========================================= */
11465
+ .sui-loading-overlay {
11466
+ position: absolute;
11467
+ inset: 0;
11468
+ display: flex;
11469
+ flex-direction: column;
11470
+ align-items: center;
11471
+ justify-content: center;
11472
+ gap: 12px;
11473
+ background: rgba(var(--sui-bg-rgb, 230, 232, 240), 0.8);
11474
+ border-radius: inherit;
11475
+ z-index: 10;
11476
+ opacity: 0;
11477
+ visibility: hidden;
11478
+ transition: opacity 0.25s ease, visibility 0.25s ease;
11479
+ }
11480
+
11481
+ .sui-loading-overlay.active {
11482
+ opacity: 1;
11483
+ visibility: visible;
11484
+ }
11485
+
11486
+ .sui-loading-overlay-text {
11487
+ font-size: 13px;
11488
+ font-weight: 600;
11489
+ color: var(--sui-text-muted);
11490
+ }
11491
+
11492
+ /* Blur variant */
11493
+ .sui-loading-blur {
11494
+ backdrop-filter: blur(4px);
11495
+ -webkit-backdrop-filter: blur(4px);
11496
+ background: rgba(var(--sui-bg-rgb, 230, 232, 240), 0.5);
11497
+ }
11498
+
11499
+ /* Fullscreen */
11500
+ .sui-loading-fullscreen {
11501
+ position: fixed;
11502
+ inset: 0;
11503
+ border-radius: 0;
11504
+ z-index: 1200;
11505
+ }
11506
+
11507
+ /* Dark mode support */
11508
+ [data-theme="dark"] .sui-loading-overlay {
11509
+ background: rgba(27, 29, 42, 0.8);
11510
+ }
11511
+
11512
+ [data-theme="dark"] .sui-loading-blur {
11513
+ background: rgba(27, 29, 42, 0.5);
11514
+ }
11515
+
11516
+ /* =========================================
11517
+ Diff — Image Compare Slider
11518
+ ========================================= */
11519
+ .sui-diff {
11520
+ position: relative;
11521
+ overflow: hidden;
11522
+ border-radius: var(--sui-radius);
11523
+ box-shadow: var(--sui-shadow-raised-sm);
11524
+ cursor: ew-resize;
11525
+ user-select: none;
11526
+ }
11527
+
11528
+ .sui-diff .sui-diff-after {
11529
+ display: block;
11530
+ width: 100%;
11531
+ height: auto;
11532
+ }
11533
+
11534
+ .sui-diff .sui-diff-before {
11535
+ position: absolute;
11536
+ top: 0;
11537
+ left: 0;
11538
+ width: 100%;
11539
+ height: 100%;
11540
+ object-fit: cover;
11541
+ object-position: left;
11542
+ z-index: 1;
11543
+ clip-path: inset(0 50% 0 0);
11544
+ }
11545
+
11546
+ .sui-diff-handle {
11547
+ position: absolute;
11548
+ top: 0;
11549
+ bottom: 0;
11550
+ left: 50%;
11551
+ width: 3px;
11552
+ background: #fff;
11553
+ z-index: 2;
11554
+ transform: translateX(-50%);
11555
+ box-shadow: 0 0 6px rgba(0, 0, 0, 0.3);
11556
+ }
11557
+
11558
+ .sui-diff-handle::before {
11559
+ content: "";
11560
+ position: absolute;
11561
+ top: 50%;
11562
+ left: 50%;
11563
+ transform: translate(-50%, -50%);
11564
+ width: 32px;
11565
+ height: 32px;
11566
+ border-radius: 50%;
11567
+ background: #fff;
11568
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
11569
+ }
11570
+
11571
+ .sui-diff-handle-arrows {
11572
+ position: absolute;
11573
+ top: 50%;
11574
+ left: 50%;
11575
+ transform: translate(-50%, -50%);
11576
+ display: flex;
11577
+ align-items: center;
11578
+ gap: 4px;
11579
+ z-index: 1;
11580
+ }
11581
+
11582
+ .sui-diff-handle-arrows svg {
11583
+ width: 8px;
11584
+ height: 12px;
11585
+ fill: var(--sui-text-muted);
11586
+ }
11587
+
11588
+ /* Labels */
11589
+ .sui-diff-label-before,
11590
+ .sui-diff-label-after {
11591
+ position: absolute;
11592
+ bottom: 12px;
11593
+ font-size: 12px;
11594
+ font-weight: 600;
11595
+ color: #fff;
11596
+ background: rgba(0, 0, 0, 0.5);
11597
+ padding: 4px 10px;
11598
+ border-radius: var(--sui-radius-sm);
11599
+ z-index: 3;
11600
+ }
11601
+
11602
+ .sui-diff-label-before {
11603
+ left: 12px;
11604
+ }
11605
+
11606
+ .sui-diff-label-after {
11607
+ right: 12px;
11608
+ }
11609
+
11610
+ /* Vertical mode */
11611
+ .sui-diff-vertical {
11612
+ cursor: ns-resize;
11613
+ }
11614
+
11615
+ .sui-diff-vertical .sui-diff-before {
11616
+ width: 100%;
11617
+ height: 100%;
11618
+ object-fit: cover;
11619
+ object-position: top;
11620
+ clip-path: inset(0 0 50% 0);
11621
+ }
11622
+
11623
+ .sui-diff-vertical .sui-diff-handle {
11624
+ top: 50%;
11625
+ left: 0;
11626
+ right: 0;
11627
+ bottom: auto;
11628
+ width: 100%;
11629
+ height: 3px;
11630
+ transform: translateY(-50%);
11631
+ }
11632
+
11633
+ .sui-diff-vertical .sui-diff-handle-arrows {
11634
+ flex-direction: column;
11635
+ gap: 4px;
11636
+ }
11637
+
11638
+ .sui-diff-vertical .sui-diff-handle-arrows svg {
11639
+ width: 12px;
11640
+ height: 8px;
11641
+ }
11642
+
11643
+ /* =========================================
11644
+ Stack
11645
+ ========================================= */
11646
+ .sui-stack {
11647
+ position: relative;
11648
+ display: inline-flex;
11649
+ }
11650
+
11651
+ .sui-stack > * {
11652
+ transition: transform 0.3s ease, box-shadow 0.3s ease, opacity 0.3s ease;
11653
+ }
11654
+
11655
+ .sui-stack {
11656
+ padding-bottom: 24px;
11657
+ padding-right: 24px;
11658
+ }
11659
+
11660
+ .sui-stack > *:not(:first-child) {
11661
+ position: absolute;
11662
+ top: 0;
11663
+ left: 0;
11664
+ }
11665
+
11666
+ /* Default — offset down-right */
11667
+ .sui-stack > *:nth-child(2) { transform: translate(12px, 12px); z-index: -1; opacity: 0.75; }
11668
+ .sui-stack > *:nth-child(3) { transform: translate(24px, 24px); z-index: -2; opacity: 0.5; }
11669
+ .sui-stack > *:nth-child(4) { transform: translate(36px, 36px); z-index: -3; opacity: 0.3; }
11670
+
11671
+ /* Fanned — wider rotation for visibility */
11672
+ .sui-stack-fanned > *:nth-child(1) { transform: rotate(-5deg); z-index: 3; }
11673
+ .sui-stack-fanned > *:nth-child(2) { transform: rotate(0deg) translate(10px, 4px); z-index: 2; opacity: 0.8; }
11674
+ .sui-stack-fanned > *:nth-child(3) { transform: rotate(5deg) translate(20px, 8px); z-index: 1; opacity: 0.6; }
11675
+ .sui-stack-fanned > *:nth-child(4) { transform: rotate(10deg) translate(30px, 12px); z-index: 0; opacity: 0.4; }
11676
+
11677
+ /* Offset up-left */
11678
+ .sui-stack-up > *:nth-child(2) { transform: translate(-8px, -8px); }
11679
+ .sui-stack-up > *:nth-child(3) { transform: translate(-16px, -16px); }
11680
+ .sui-stack-up > *:nth-child(4) { transform: translate(-24px, -24px); }
11681
+
11682
+ /* Offset right only */
11683
+ .sui-stack-right > *:nth-child(2) { transform: translateX(8px); }
11684
+ .sui-stack-right > *:nth-child(3) { transform: translateX(16px); }
11685
+ .sui-stack-right > *:nth-child(4) { transform: translateX(24px); }
11686
+
11687
+ /* Spread on hover — controlled by --sui-stack-gap and --sui-stack-spread */
11688
+ .sui-stack-hover {
11689
+ --sui-stack-gap: 180px;
11690
+ --sui-stack-spread: 0.6;
11691
+ }
11692
+
11693
+ .sui-stack-spread-xs { --sui-stack-spread: 0.15; }
11694
+ .sui-stack-spread-sm { --sui-stack-spread: 0.3; }
11695
+ .sui-stack-spread-md { --sui-stack-spread: 0.6; }
11696
+ .sui-stack-spread-lg { --sui-stack-spread: 0.85; }
11697
+ .sui-stack-spread-full { --sui-stack-spread: 1; }
11698
+
11699
+ .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; }
11700
+ .sui-stack-hover:hover > *:nth-child(2) { transform: translate(0, 0); z-index: 2; opacity: 1; }
11701
+ .sui-stack-hover:hover > *:nth-child(3) { transform: translate(calc(var(--sui-stack-gap) * var(--sui-stack-spread)), 0); z-index: 1; opacity: 1; }
11702
+ .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; }
11703
+
11704
+ .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; }
11705
+ .sui-stack-hover.sui-stack-fanned:hover > *:nth-child(2) { transform: rotate(0deg) translate(0, 0); opacity: 1; }
11706
+ .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; }
11707
+ .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; }
11708
+
11709
+ /* =========================================
11710
+ Copy Button
11711
+ ========================================= */
11712
+ .sui-copy {
11713
+ display: inline-flex;
11714
+ align-items: center;
11715
+ gap: 8px;
11716
+ background: var(--sui-bg);
11717
+ box-shadow: var(--sui-shadow-raised-sm);
11718
+ border-radius: var(--sui-radius-sm);
11719
+ padding: 8px 12px;
11720
+ font-size: 14px;
11721
+ font-family: var(--sui-font-mono);
11722
+ color: var(--sui-text);
11723
+ }
11724
+
11725
+ .sui-copy-text {
11726
+ flex: 1;
11727
+ overflow: hidden;
11728
+ text-overflow: ellipsis;
11729
+ white-space: nowrap;
11730
+ }
11731
+
11732
+ .sui-copy-btn {
11733
+ display: flex;
11734
+ align-items: center;
11735
+ justify-content: center;
11736
+ width: 28px;
11737
+ height: 28px;
11738
+ border: none;
11739
+ background: var(--sui-bg);
11740
+ box-shadow: var(--sui-shadow-raised-sm);
11741
+ border-radius: var(--sui-radius-xs);
11742
+ cursor: pointer;
11743
+ color: var(--sui-text-muted);
11744
+ padding: 0;
11745
+ flex-shrink: 0;
11746
+ transition: var(--sui-transition);
11747
+ }
11748
+
11749
+ .sui-copy-btn svg {
11750
+ width: 16px;
11751
+ height: 16px;
11752
+ stroke: currentColor;
11753
+ fill: none;
11754
+ stroke-width: 2;
11755
+ stroke-linecap: round;
11756
+ stroke-linejoin: round;
11757
+ }
11758
+
11759
+ .sui-copy-btn:hover {
11760
+ color: var(--sui-primary);
11761
+ box-shadow: var(--sui-shadow-raised);
11762
+ }
11763
+
11764
+ .sui-copy-btn.copied {
11765
+ color: var(--sui-success);
11766
+ }
11767
+
11768
+ /* Inline — just the icon button, no wrapper */
11769
+ .sui-copy-inline {
11770
+ display: inline-flex;
11771
+ align-items: center;
11772
+ justify-content: center;
11773
+ width: 28px;
11774
+ height: 28px;
11775
+ border: none;
11776
+ background: none;
11777
+ cursor: pointer;
11778
+ color: var(--sui-text-muted);
11779
+ padding: 0;
11780
+ border-radius: var(--sui-radius-xs);
11781
+ transition: var(--sui-transition);
11782
+ }
11783
+
11784
+ .sui-copy-inline svg {
11785
+ width: 16px;
11786
+ height: 16px;
11787
+ stroke: currentColor;
11788
+ fill: none;
11789
+ stroke-width: 2;
11790
+ stroke-linecap: round;
11791
+ stroke-linejoin: round;
11792
+ }
11793
+
11794
+ .sui-copy-inline:hover {
11795
+ color: var(--sui-primary);
11796
+ background: rgba(91, 84, 224, 0.06);
11797
+ }
11798
+
11799
+ .sui-copy-inline.copied {
11800
+ color: var(--sui-success);
11801
+ }
11802
+
11803
+ /* With input */
11804
+ .sui-copy-input {
11805
+ display: flex;
11806
+ align-items: center;
11807
+ gap: 0;
11808
+ }
11809
+
11810
+ .sui-copy-input .sui-input {
11811
+ border-radius: var(--sui-radius-sm) 0 0 var(--sui-radius-sm);
11812
+ font-family: var(--sui-font-mono);
11813
+ }
11814
+
11815
+ .sui-copy-input .sui-copy-btn {
11816
+ border-radius: 0 var(--sui-radius-sm) var(--sui-radius-sm) 0;
11817
+ height: auto;
11818
+ align-self: stretch;
11819
+ width: 40px;
11820
+ }
11821
+
11822
+ /* Sizes */
11823
+ .sui-copy-sm {
11824
+ padding: 6px 10px;
11825
+ font-size: 12px;
11826
+ }
11827
+
11828
+ .sui-copy-sm .sui-copy-btn {
11829
+ width: 24px;
11830
+ height: 24px;
11831
+ }
11832
+
11833
+ .sui-copy-sm .sui-copy-btn svg {
11834
+ width: 13px;
11835
+ height: 13px;
11836
+ }
11837
+
11838
+ .sui-copy-lg {
11839
+ padding: 12px 16px;
11840
+ font-size: 16px;
11841
+ }
11842
+
11843
+ .sui-copy-lg .sui-copy-btn {
11844
+ width: 34px;
11845
+ height: 34px;
11846
+ }
11847
+
11848
+ .sui-copy-lg .sui-copy-btn svg {
11849
+ width: 18px;
11850
+ height: 18px;
11851
+ }
11852
+
11853
+ /* Inset */
11854
+ .sui-copy-inset {
11855
+ box-shadow: var(--sui-shadow-inset-sm);
11856
+ }
11857
+
11858
+ .sui-copy-inset .sui-copy-btn {
11859
+ box-shadow: var(--sui-shadow-raised-sm);
11860
+ }
11861
+
11862
+ /* =========================================
11863
+ Text Rotate
11864
+ ========================================= */
11865
+ .sui-text-rotate {
11866
+ display: inline-block;
11867
+ position: relative;
11868
+ vertical-align: bottom;
11869
+ }
11870
+
11871
+ .sui-text-rotate-word {
11872
+ display: inline-block;
11873
+ position: absolute;
11874
+ left: 0;
11875
+ top: 0;
11876
+ opacity: 0;
11877
+ transition: opacity 0.4s ease, transform 0.4s ease;
11878
+ white-space: nowrap;
11879
+ }
11880
+
11881
+ .sui-text-rotate-word.active {
11882
+ opacity: 1;
11883
+ position: relative;
11884
+ transform: none;
11885
+ }
11886
+
11887
+ /* Fade (default) */
11888
+ .sui-text-rotate-fade .sui-text-rotate-word {
11889
+ transform: none;
11890
+ }
11891
+
11892
+ /* Slide up */
11893
+ .sui-text-rotate-slide .sui-text-rotate-word {
11894
+ transform: translateY(100%);
11895
+ }
11896
+
11897
+ .sui-text-rotate-slide .sui-text-rotate-word.active {
11898
+ transform: translateY(0);
11899
+ }
11900
+
11901
+ .sui-text-rotate-slide .sui-text-rotate-word.exit {
11902
+ opacity: 0;
11903
+ transform: translateY(-100%);
11904
+ }
11905
+
11906
+ /* Slide down */
11907
+ .sui-text-rotate-slide-down .sui-text-rotate-word {
11908
+ transform: translateY(-100%);
11909
+ }
11910
+
11911
+ .sui-text-rotate-slide-down .sui-text-rotate-word.active {
11912
+ transform: translateY(0);
11913
+ }
11914
+
11915
+ .sui-text-rotate-slide-down .sui-text-rotate-word.exit {
11916
+ opacity: 0;
11917
+ transform: translateY(100%);
11918
+ }
11919
+
11920
+ /* Flip */
11921
+ .sui-text-rotate-flip {
11922
+ perspective: 300px;
11923
+ }
11924
+
11925
+ .sui-text-rotate-flip .sui-text-rotate-word {
11926
+ transform: rotateX(90deg);
11927
+ transform-origin: center bottom;
11928
+ }
11929
+
11930
+ .sui-text-rotate-flip .sui-text-rotate-word.active {
11931
+ transform: rotateX(0deg);
11932
+ }
11933
+
11934
+ .sui-text-rotate-flip .sui-text-rotate-word.exit {
11935
+ opacity: 0;
11936
+ transform: rotateX(-90deg);
11937
+ }
11938
+
11939
+ /* Zoom */
11940
+ .sui-text-rotate-zoom .sui-text-rotate-word {
11941
+ transform: scale(0);
11942
+ }
11943
+
11944
+ .sui-text-rotate-zoom .sui-text-rotate-word.active {
11945
+ transform: scale(1);
11946
+ }
11947
+
11948
+ .sui-text-rotate-zoom .sui-text-rotate-word.exit {
11949
+ opacity: 0;
11950
+ transform: scale(1.5);
11951
+ }
11952
+
11953
+ /* Color highlight on the rotating word */
11954
+ .sui-text-rotate-primary .sui-text-rotate-word.active { color: var(--sui-primary); }
11955
+ .sui-text-rotate-success .sui-text-rotate-word.active { color: var(--sui-success); }
11956
+ .sui-text-rotate-danger .sui-text-rotate-word.active { color: var(--sui-danger); }
11957
+ .sui-text-rotate-warning .sui-text-rotate-word.active { color: var(--sui-warning); }
11958
+ .sui-text-rotate-info .sui-text-rotate-word.active { color: var(--sui-info); }
11959
+
11960
+ /* =========================================
11961
+ Typewriter
11962
+ ========================================= */
11963
+ .sui-typewriter {
11964
+ display: inline;
11965
+ }
11966
+
11967
+ .sui-typewriter-cursor::after {
11968
+ content: "|";
11969
+ display: inline-block;
11970
+ animation: sui-blink 0.7s step-end infinite;
11971
+ margin-left: 1px;
11972
+ font-weight: 400;
11973
+ }
11974
+
11975
+ @keyframes sui-blink {
11976
+ 0%, 100% { opacity: 1; }
11977
+ 50% { opacity: 0; }
11978
+ }
11979
+
11980
+ /* Cursor variants */
11981
+ .sui-typewriter-cursor-block::after {
11982
+ content: "\2588";
11983
+ font-weight: 400;
11984
+ }
11985
+
11986
+ .sui-typewriter-cursor-underscore::after {
11987
+ content: "_";
11988
+ font-weight: 700;
11989
+ }
11990
+
11991
+ /* Colors */
11992
+ .sui-typewriter-primary { color: var(--sui-primary); }
11993
+ .sui-typewriter-success { color: var(--sui-success); }
11994
+ .sui-typewriter-danger { color: var(--sui-danger); }
11995
+ .sui-typewriter-warning { color: var(--sui-warning); }
11996
+ .sui-typewriter-info { color: var(--sui-info); }
11997
+
11998
+ /* =========================================
11999
+ Marquee
12000
+ ========================================= */
12001
+ .sui-marquee {
12002
+ overflow: hidden;
12003
+ position: relative;
12004
+ padding: 8px 0;
12005
+ }
12006
+
12007
+ .sui-marquee-track {
12008
+ display: flex;
12009
+ width: max-content;
12010
+ animation: sui-marquee 20s linear infinite;
12011
+ gap: 24px;
12012
+ }
12013
+
12014
+ @keyframes sui-marquee {
12015
+ 0% { transform: translateX(0); }
12016
+ 100% { transform: translateX(-50%); }
12017
+ }
12018
+
12019
+ /* Reverse */
12020
+ .sui-marquee-reverse .sui-marquee-track {
12021
+ animation-direction: reverse;
12022
+ }
12023
+
12024
+ /* Speeds */
12025
+ .sui-marquee-slow .sui-marquee-track { animation-duration: 40s; }
12026
+ .sui-marquee-fast .sui-marquee-track { animation-duration: 10s; }
12027
+
12028
+ /* Pause on hover */
12029
+ .sui-marquee-hover:hover .sui-marquee-track {
12030
+ animation-play-state: paused;
12031
+ }
12032
+
12033
+ /* Fade edges */
12034
+ .sui-marquee-fade::before,
12035
+ .sui-marquee-fade::after {
12036
+ content: "";
12037
+ position: absolute;
12038
+ top: 0;
12039
+ bottom: 0;
12040
+ width: 60px;
12041
+ z-index: 1;
12042
+ pointer-events: none;
12043
+ }
12044
+
12045
+ .sui-marquee-fade::before {
12046
+ left: 0;
12047
+ background: linear-gradient(to right, var(--sui-bg), transparent);
12048
+ }
12049
+
12050
+ .sui-marquee-fade::after {
12051
+ right: 0;
12052
+ background: linear-gradient(to left, var(--sui-bg), transparent);
12053
+ }
12054
+
12055
+ /* Vertical */
12056
+ .sui-marquee-vertical {
12057
+ overflow: hidden;
12058
+ height: 200px;
12059
+ padding: 0 8px;
12060
+ }
12061
+
12062
+ .sui-marquee-vertical .sui-marquee-track {
12063
+ flex-direction: column;
12064
+ animation-name: sui-marquee-y;
12065
+ width: auto;
12066
+ }
12067
+
12068
+ @keyframes sui-marquee-y {
12069
+ 0% { transform: translateY(0); }
12070
+ 100% { transform: translateY(-50%); }
12071
+ }
12072
+
12073
+ /* Items */
12074
+ .sui-marquee-item {
12075
+ flex-shrink: 0;
12076
+ display: flex;
12077
+ align-items: center;
12078
+ justify-content: center;
12079
+ }
12080
+
12081
+ .sui-marquee-logo {
12082
+ flex-shrink: 0;
12083
+ display: flex;
12084
+ align-items: center;
12085
+ justify-content: center;
12086
+ padding: 8px 20px;
12087
+ font-size: 16px;
12088
+ font-weight: 700;
12089
+ color: var(--sui-text-muted);
12090
+ white-space: nowrap;
12091
+ }
12092
+
12093
+ .sui-marquee-card {
12094
+ flex-shrink: 0;
12095
+ background: var(--sui-bg);
12096
+ box-shadow: var(--sui-shadow-raised-sm);
12097
+ border-radius: var(--sui-radius);
12098
+ padding: 16px 20px;
12099
+ min-width: 200px;
12100
+ }
12101
+
12102
+ .sui-marquee-text {
12103
+ flex-shrink: 0;
12104
+ padding: 0 24px;
12105
+ font-size: 14px;
12106
+ white-space: nowrap;
12107
+ color: var(--sui-text-muted);
12108
+ }
12109
+
12110
+ /* =========================================
12111
+ Browser Mockup
12112
+ ========================================= */
12113
+ .sui-browser {
12114
+ border-radius: var(--sui-radius-lg);
12115
+ overflow: hidden;
12116
+ box-shadow: var(--sui-shadow-raised);
12117
+ background: var(--sui-bg);
12118
+ }
12119
+
12120
+ .sui-browser-bar {
12121
+ display: flex;
12122
+ align-items: center;
12123
+ gap: 10px;
12124
+ padding: 10px 14px;
12125
+ background: var(--sui-bg-dark);
12126
+ }
12127
+
12128
+ .sui-browser-dots {
12129
+ display: flex;
12130
+ gap: 6px;
12131
+ flex-shrink: 0;
12132
+ }
12133
+
12134
+ .sui-browser-dots span {
12135
+ width: 10px;
12136
+ height: 10px;
12137
+ border-radius: 50%;
12138
+ }
12139
+
12140
+ .sui-browser-dots span:nth-child(1) { background: #E74C6F; }
12141
+ .sui-browser-dots span:nth-child(2) { background: #F5A623; }
12142
+ .sui-browser-dots span:nth-child(3) { background: #2DCE89; }
12143
+
12144
+ .sui-browser-url {
12145
+ flex: 1;
12146
+ background: var(--sui-bg);
12147
+ box-shadow: var(--sui-shadow-inset-sm);
12148
+ border-radius: var(--sui-radius-full);
12149
+ padding: 5px 14px;
12150
+ font-size: 12px;
12151
+ color: var(--sui-text-muted);
12152
+ font-family: var(--sui-font);
12153
+ white-space: nowrap;
12154
+ overflow: hidden;
12155
+ text-overflow: ellipsis;
12156
+ }
12157
+
12158
+ .sui-browser-actions {
12159
+ display: flex;
12160
+ gap: 8px;
12161
+ flex-shrink: 0;
12162
+ }
12163
+
12164
+ .sui-browser-actions svg {
12165
+ width: 14px;
12166
+ height: 14px;
12167
+ stroke: var(--sui-text-light);
12168
+ fill: none;
12169
+ stroke-width: 2;
12170
+ stroke-linecap: round;
12171
+ stroke-linejoin: round;
12172
+ }
12173
+
12174
+ .sui-browser-body {
12175
+ min-height: 120px;
12176
+ }
12177
+
12178
+ .sui-browser-body img {
12179
+ display: block;
12180
+ width: 100%;
12181
+ height: auto;
12182
+ }
12183
+
12184
+ /* Tabs */
12185
+ .sui-browser-tabs {
12186
+ display: flex;
12187
+ align-items: flex-end;
12188
+ gap: 2px;
12189
+ padding: 8px 14px 0;
12190
+ background: var(--sui-bg-dark);
12191
+ }
12192
+
12193
+ .sui-browser-tab {
12194
+ padding: 6px 16px;
12195
+ font-size: 11px;
12196
+ font-weight: 600;
12197
+ color: var(--sui-text-muted);
12198
+ border-radius: var(--sui-radius-sm) var(--sui-radius-sm) 0 0;
12199
+ background: transparent;
12200
+ }
12201
+
12202
+ .sui-browser-tab.active {
12203
+ background: var(--sui-bg);
12204
+ color: var(--sui-text);
12205
+ }
12206
+
12207
+ .sui-browser-tabs + .sui-browser-bar {
12208
+ padding-top: 8px;
12209
+ }
12210
+
12211
+ /* Windows-style buttons (right side) */
12212
+ .sui-browser-win .sui-browser-bar {
12213
+ position: relative;
12214
+ }
12215
+
12216
+ .sui-browser-win .sui-browser-dots {
12217
+ display: none;
12218
+ }
12219
+
12220
+ .sui-browser-win-btns {
12221
+ display: flex;
12222
+ margin-left: auto;
12223
+ flex-shrink: 0;
12224
+ }
12225
+
12226
+ .sui-browser-win-btns button {
12227
+ width: 28px;
12228
+ height: 24px;
12229
+ display: flex;
12230
+ align-items: center;
12231
+ justify-content: center;
12232
+ border: none;
12233
+ background: transparent;
12234
+ cursor: pointer;
12235
+ padding: 0;
12236
+ }
12237
+
12238
+ .sui-browser-win-btns button svg {
12239
+ width: 10px;
12240
+ height: 10px;
12241
+ stroke: var(--sui-text-muted);
12242
+ fill: none;
12243
+ stroke-width: 1.5;
12244
+ stroke-linecap: round;
12245
+ stroke-linejoin: round;
12246
+ }
12247
+
12248
+ .sui-browser-win-btns button:hover {
12249
+ background: rgba(0, 0, 0, 0.06);
12250
+ }
12251
+
12252
+ .sui-browser-win-btns button:last-child:hover {
12253
+ background: #E74C6F;
12254
+ }
12255
+
12256
+ .sui-browser-win-btns button:last-child:hover svg {
12257
+ stroke: #fff;
12258
+ }
12259
+
12260
+ /* Dark chrome */
12261
+ .sui-browser-dark .sui-browser-bar,
12262
+ .sui-browser-dark .sui-browser-tabs {
12263
+ background: #1B1D2A;
12264
+ }
12265
+
12266
+ .sui-browser-dark .sui-browser-url {
12267
+ background: rgba(255, 255, 255, 0.08);
12268
+ box-shadow: none;
12269
+ color: rgba(255, 255, 255, 0.5);
12270
+ }
12271
+
12272
+ .sui-browser-dark .sui-browser-actions svg {
12273
+ stroke: rgba(255, 255, 255, 0.4);
12274
+ }
12275
+
12276
+ .sui-browser-dark .sui-browser-tab {
12277
+ color: rgba(255, 255, 255, 0.4);
12278
+ }
12279
+
12280
+ .sui-browser-dark .sui-browser-tab.active {
12281
+ background: var(--sui-bg);
12282
+ color: var(--sui-text);
12283
+ }
12284
+
12285
+ /* =========================================
12286
+ Phone Mockup
12287
+ ========================================= */
12288
+ .sui-phone {
12289
+ display: inline-block;
12290
+ position: relative;
12291
+ background: #1B1D2A;
12292
+ border-radius: 36px;
12293
+ padding: 12px;
12294
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2), inset 0 0 0 2px rgba(255, 255, 255, 0.1);
12295
+ }
12296
+
12297
+ .sui-phone-screen {
12298
+ position: relative;
12299
+ width: 260px;
12300
+ height: 520px;
12301
+ background: var(--sui-bg);
12302
+ border-radius: 24px;
12303
+ overflow: hidden;
12304
+ }
12305
+
12306
+ .sui-phone-screen img {
12307
+ display: block;
12308
+ width: 100%;
12309
+ height: 100%;
12310
+ object-fit: cover;
12311
+ }
12312
+
12313
+ /* Notch */
12314
+ .sui-phone-notch::before {
12315
+ content: "";
12316
+ position: absolute;
12317
+ top: 0;
12318
+ left: 50%;
12319
+ transform: translateX(-50%);
12320
+ width: 100px;
12321
+ height: 24px;
12322
+ background: #1B1D2A;
12323
+ border-radius: 0 0 16px 16px;
12324
+ z-index: 2;
12325
+ }
12326
+
12327
+ /* Dynamic Island */
12328
+ .sui-phone-island::before {
12329
+ content: "";
12330
+ position: absolute;
12331
+ top: 10px;
12332
+ left: 50%;
12333
+ transform: translateX(-50%);
12334
+ width: 80px;
12335
+ height: 22px;
12336
+ background: #1B1D2A;
12337
+ border-radius: 20px;
12338
+ z-index: 2;
12339
+ }
12340
+
12341
+ /* Teardrop notch */
12342
+ .sui-phone-teardrop::before {
12343
+ content: "";
12344
+ position: absolute;
12345
+ top: 0;
12346
+ left: 50%;
12347
+ transform: translateX(-50%);
12348
+ width: 16px;
12349
+ height: 16px;
12350
+ background: #1B1D2A;
12351
+ border-radius: 0 0 50% 50%;
12352
+ z-index: 2;
12353
+ }
12354
+
12355
+ /* Punch hole — single */
12356
+ .sui-phone-punch::before {
12357
+ content: "";
12358
+ position: absolute;
12359
+ top: 12px;
12360
+ left: 50%;
12361
+ transform: translateX(-50%);
12362
+ width: 12px;
12363
+ height: 12px;
12364
+ background: #1B1D2A;
12365
+ border-radius: 50%;
12366
+ z-index: 2;
12367
+ }
12368
+
12369
+ /* Punch hole — double */
12370
+ .sui-phone-punch-double::before {
12371
+ content: "";
12372
+ position: absolute;
12373
+ top: 12px;
12374
+ left: 50%;
12375
+ transform: translateX(-50%);
12376
+ width: 12px;
12377
+ height: 12px;
12378
+ background: #1B1D2A;
12379
+ border-radius: 50%;
12380
+ z-index: 2;
12381
+ box-shadow: 18px 0 0 0 #1B1D2A;
12382
+ }
12383
+
12384
+ /* White/Gold frame overrides for new cutouts */
12385
+ .sui-phone-white .sui-phone-teardrop::before,
12386
+ .sui-phone-white .sui-phone-punch::before,
12387
+ .sui-phone-white .sui-phone-punch-double::before { background: #E8E8ED; box-shadow-color: #E8E8ED; }
12388
+
12389
+ .sui-phone-white .sui-phone-punch-double::before { box-shadow: 18px 0 0 0 #E8E8ED; }
12390
+
12391
+ .sui-phone-gold .sui-phone-teardrop::before,
12392
+ .sui-phone-gold .sui-phone-punch::before,
12393
+ .sui-phone-gold .sui-phone-punch-double::before { background: #D4C5A9; }
12394
+
12395
+ .sui-phone-gold .sui-phone-punch-double::before { box-shadow: 18px 0 0 0 #D4C5A9; }
12396
+
12397
+ /* Status bar */
12398
+ .sui-phone-status {
12399
+ position: absolute;
12400
+ top: 0;
12401
+ left: 0;
12402
+ right: 0;
12403
+ height: 44px;
12404
+ display: flex;
12405
+ align-items: center;
12406
+ justify-content: space-between;
12407
+ padding: 0 20px;
12408
+ font-size: 12px;
12409
+ font-weight: 600;
12410
+ color: var(--sui-text);
12411
+ z-index: 3;
12412
+ }
12413
+
12414
+ /* Home indicator */
12415
+ .sui-phone-home {
12416
+ position: absolute;
12417
+ bottom: 6px;
12418
+ left: 50%;
12419
+ transform: translateX(-50%);
12420
+ width: 100px;
12421
+ height: 4px;
12422
+ background: var(--sui-text-muted);
12423
+ border-radius: 2px;
12424
+ z-index: 2;
12425
+ opacity: 0.4;
12426
+ }
12427
+
12428
+ /* Frame colors */
12429
+ .sui-phone-white {
12430
+ background: #E8E8ED;
12431
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12), inset 0 0 0 2px rgba(0, 0, 0, 0.06);
12432
+ }
12433
+
12434
+ .sui-phone-white .sui-phone-notch::before,
12435
+ .sui-phone-white .sui-phone-island::before {
12436
+ background: #E8E8ED;
12437
+ }
12438
+
12439
+ .sui-phone-gold {
12440
+ background: #D4C5A9;
12441
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15), inset 0 0 0 2px rgba(255, 255, 255, 0.2);
12442
+ }
12443
+
12444
+ .sui-phone-gold .sui-phone-notch::before,
12445
+ .sui-phone-gold .sui-phone-island::before {
12446
+ background: #D4C5A9;
12447
+ }
12448
+
12449
+ /* Sizes */
12450
+ .sui-phone-sm .sui-phone-screen {
12451
+ width: 180px;
12452
+ height: 360px;
12453
+ border-radius: 18px;
12454
+ }
12455
+
12456
+ .sui-phone-sm {
12457
+ border-radius: 26px;
12458
+ padding: 8px;
12459
+ }
12460
+
12461
+ .sui-phone-sm .sui-phone-notch::before {
12462
+ width: 70px;
12463
+ height: 18px;
12464
+ border-radius: 0 0 12px 12px;
12465
+ }
12466
+
12467
+ .sui-phone-sm .sui-phone-island::before {
12468
+ width: 56px;
12469
+ height: 16px;
12470
+ top: 8px;
12471
+ }
12472
+
12473
+ .sui-phone-sm .sui-phone-home {
12474
+ width: 70px;
12475
+ height: 3px;
12476
+ }
12477
+
12478
+ /* Landscape */
12479
+ .sui-phone-landscape {
12480
+ transform: rotate(-90deg);
12481
+ }
12482
+
12483
+ .sui-phone-landscape .sui-phone-screen {
12484
+ transform: rotate(90deg);
12485
+ }
12486
+
12487
+ /* =========================================
12488
+ Tour / Walkthrough
12489
+ ========================================= */
12490
+
12491
+ /* Overlay with spotlight cutout */
12492
+ .sui-tour-overlay {
12493
+ position: fixed;
12494
+ inset: 0;
12495
+ z-index: 1000;
12496
+ pointer-events: none;
12497
+ opacity: 0;
12498
+ visibility: hidden;
12499
+ transition: opacity 0.3s ease, visibility 0.3s ease;
12500
+ }
12501
+
12502
+ .sui-tour-overlay.active {
12503
+ opacity: 1;
12504
+ visibility: visible;
12505
+ pointer-events: auto;
12506
+ }
12507
+
12508
+ .sui-tour-backdrop {
12509
+ position: fixed;
12510
+ inset: 0;
12511
+ background: rgba(0, 0, 0, 0.5);
12512
+ z-index: 1;
12513
+ }
12514
+
12515
+ /* Spotlight ring around target */
12516
+ .sui-tour-spotlight {
12517
+ position: fixed;
12518
+ border-radius: var(--sui-radius);
12519
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.5);
12520
+ z-index: 2;
12521
+ pointer-events: none;
12522
+ transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease;
12523
+ }
12524
+
12525
+ /* Tooltip */
12526
+ .sui-tour-tooltip {
12527
+ position: fixed;
12528
+ z-index: 3;
12529
+ background: var(--sui-bg);
12530
+ border-radius: var(--sui-radius);
12531
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15), 0 2px 8px rgba(0, 0, 0, 0.1);
12532
+ padding: 20px;
12533
+ width: 300px;
12534
+ max-width: 90vw;
12535
+ transition: top 0.3s ease, left 0.3s ease;
12536
+ }
12537
+
12538
+ .sui-tour-tooltip-title {
12539
+ font-size: 16px;
12540
+ font-weight: 700;
12541
+ color: var(--sui-text);
12542
+ margin-bottom: 6px;
12543
+ }
12544
+
12545
+ .sui-tour-tooltip-desc {
12546
+ font-size: 13px;
12547
+ color: var(--sui-text-muted);
12548
+ line-height: 1.5;
12549
+ margin-bottom: 16px;
12550
+ }
12551
+
12552
+ .sui-tour-tooltip-footer {
12553
+ display: flex;
12554
+ align-items: center;
12555
+ justify-content: space-between;
12556
+ }
12557
+
12558
+ .sui-tour-tooltip-counter {
12559
+ font-size: 12px;
12560
+ color: var(--sui-text-light);
12561
+ font-weight: 600;
12562
+ }
12563
+
12564
+ .sui-tour-tooltip-actions {
12565
+ display: flex;
12566
+ gap: 8px;
12567
+ }
12568
+
12569
+ /* Progress dots */
12570
+ .sui-tour-dots {
12571
+ display: flex;
12572
+ gap: 6px;
12573
+ align-items: center;
12574
+ }
12575
+
12576
+ .sui-tour-dot {
12577
+ width: 6px;
12578
+ height: 6px;
12579
+ border-radius: 50%;
12580
+ background: var(--sui-bg-dark);
12581
+ transition: background 0.2s ease;
12582
+ }
12583
+
12584
+ .sui-tour-dot.active {
12585
+ background: var(--sui-primary);
12586
+ }
12587
+
12588
+ /* No overlay variant */
12589
+ .sui-tour-no-overlay .sui-tour-backdrop {
12590
+ display: none;
12591
+ }
12592
+
12593
+ .sui-tour-no-overlay .sui-tour-spotlight {
12594
+ background: transparent;
12595
+ box-shadow: 0 0 0 3px var(--sui-primary), 0 0 0 6px rgba(91, 84, 224, 0.2);
12596
+ }
12597
+
12598
+ .sui-tour-no-overlay .sui-tour-tooltip {
12599
+ box-shadow: var(--sui-shadow-raised);
12600
+ }
12601
+