softui-css 1.6.0 → 1.8.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
@@ -1,4 +1,4 @@
1
- /*! SoftUI v1.1.0 — A Neumorphic CSS Library */
1
+ /*! SoftUI v1.8.0 — A Neumorphic CSS Library */
2
2
 
3
3
  /* ===========================================
4
4
  CSS Variables / Tokens
@@ -23,8 +23,8 @@
23
23
  --sui-info-hover: #146BAE;
24
24
 
25
25
  --sui-text: #2D3748;
26
- --sui-text-muted: #8492A6;
27
- --sui-text-light: #A0AEC0;
26
+ --sui-text-muted: #5A6A7E;
27
+ --sui-text-light: #6A7D94;
28
28
 
29
29
  --sui-radius-xs: 6px;
30
30
  --sui-radius: 16px;
@@ -59,7 +59,7 @@
59
59
 
60
60
  --sui-text: #E2E8F0;
61
61
  --sui-text-muted: #9BA5B8;
62
- --sui-text-light: #7A8494;
62
+ --sui-text-light: #8A94A6;
63
63
  }
64
64
  [data-theme="dark"] .sui-badge-warning,
65
65
  [data-theme="dark"] .sui-btn-warning,
@@ -85,6 +85,7 @@ body {
85
85
  color: var(--sui-text);
86
86
  font-size: 15px;
87
87
  line-height: 1.6;
88
+ opacity: 1;
88
89
  -webkit-font-smoothing: antialiased;
89
90
  -moz-osx-font-smoothing: grayscale;
90
91
  transition: background var(--sui-transition-base) ease, color var(--sui-transition-base) ease;
@@ -131,6 +132,11 @@ a {
131
132
  a:hover {
132
133
  color: var(--sui-primary-hover);
133
134
  }
135
+ a:focus-visible {
136
+ outline: 2px solid var(--sui-primary);
137
+ outline-offset: 2px;
138
+ border-radius: 2px;
139
+ }
134
140
 
135
141
  /* ===========================================
136
142
  Buttons
@@ -4827,7 +4833,7 @@ a.sui-btn-warning:visited {
4827
4833
  color: var(--sui-text-light);
4828
4834
  }
4829
4835
 
4830
- .sui-combobox-input:focus {
4836
+ .sui-combobox-input:focus-visible {
4831
4837
  box-shadow: var(--sui-shadow-inset-sm), 0 0 0 2px rgba(124, 92, 252, 0.2);
4832
4838
  }
4833
4839
 
@@ -5589,8 +5595,114 @@ a.sui-btn-warning:visited {
5589
5595
  .sui-gap-4 { gap: 24px !important; }
5590
5596
  .sui-gap-5 { gap: 48px !important; }
5591
5597
 
5592
- /* Min-height viewport */
5593
- .sui-min-vh-100 { min-height: 100vh !important; }
5598
+ /* --- Display --- */
5599
+ .sui-d-inline { display: inline !important; }
5600
+ .sui-d-inline-block { display: inline-block !important; }
5601
+ .sui-d-grid { display: grid !important; }
5602
+
5603
+ /* --- Position --- */
5604
+ .sui-relative { position: relative !important; }
5605
+ .sui-absolute { position: absolute !important; }
5606
+ .sui-fixed { position: fixed !important; }
5607
+ .sui-sticky { position: sticky !important; top: 0; }
5608
+
5609
+ .sui-inset-0 { inset: 0 !important; }
5610
+ .sui-top-0 { top: 0 !important; }
5611
+ .sui-right-0 { right: 0 !important; }
5612
+ .sui-bottom-0 { bottom: 0 !important; }
5613
+ .sui-left-0 { left: 0 !important; }
5614
+
5615
+ /* --- Overflow --- */
5616
+ .sui-overflow-hidden { overflow: hidden !important; }
5617
+ .sui-overflow-auto { overflow: auto !important; }
5618
+ .sui-overflow-scroll { overflow: scroll !important; }
5619
+ .sui-overflow-visible { overflow: visible !important; }
5620
+ .sui-overflow-x-auto { overflow-x: auto !important; }
5621
+ .sui-overflow-y-auto { overflow-y: auto !important; }
5622
+ .sui-overflow-x-hidden { overflow-x: hidden !important; }
5623
+ .sui-overflow-y-hidden { overflow-y: hidden !important; }
5624
+
5625
+ /* --- Width --- */
5626
+ .sui-w-full { width: 100% !important; }
5627
+ .sui-w-auto { width: auto !important; }
5628
+ .sui-w-screen { width: 100vw !important; }
5629
+ .sui-max-w-sm { max-width: 320px !important; }
5630
+ .sui-max-w-md { max-width: 480px !important; }
5631
+ .sui-max-w-lg { max-width: 640px !important; }
5632
+ .sui-max-w-xl { max-width: 800px !important; }
5633
+ .sui-max-w-2xl { max-width: 1024px !important; }
5634
+ .sui-max-w-full { max-width: 100% !important; }
5635
+ .sui-max-w-none { max-width: none !important; }
5636
+ .sui-min-w-0 { min-width: 0 !important; }
5637
+
5638
+ /* --- Height --- */
5639
+ .sui-h-full { height: 100% !important; }
5640
+ .sui-h-auto { height: auto !important; }
5641
+ .sui-h-screen { height: 100vh !important; }
5642
+ .sui-min-h-0 { min-height: 0 !important; }
5643
+ .sui-min-h-full { min-height: 100% !important; }
5644
+ .sui-min-h-screen { min-height: 100vh !important; }
5645
+ .sui-min-vh-100 { min-height: 100vh !important; }
5646
+ .sui-max-h-full { max-height: 100% !important; }
5647
+ .sui-max-h-screen { max-height: 100vh !important; }
5648
+
5649
+ /* --- Opacity --- */
5650
+ .sui-opacity-0 { opacity: 0 !important; }
5651
+ .sui-opacity-5 { opacity: 0.05 !important; }
5652
+ .sui-opacity-10 { opacity: 0.1 !important; }
5653
+ .sui-opacity-20 { opacity: 0.2 !important; }
5654
+ .sui-opacity-25 { opacity: 0.25 !important; }
5655
+ .sui-opacity-30 { opacity: 0.3 !important; }
5656
+ .sui-opacity-40 { opacity: 0.4 !important; }
5657
+ .sui-opacity-50 { opacity: 0.5 !important; }
5658
+ .sui-opacity-60 { opacity: 0.6 !important; }
5659
+ .sui-opacity-70 { opacity: 0.7 !important; }
5660
+ .sui-opacity-75 { opacity: 0.75 !important; }
5661
+ .sui-opacity-80 { opacity: 0.8 !important; }
5662
+ .sui-opacity-90 { opacity: 0.9 !important; }
5663
+ .sui-opacity-100 { opacity: 1 !important; }
5664
+
5665
+ /* --- Z-Index --- */
5666
+ .sui-z-0 { z-index: 0 !important; }
5667
+ .sui-z-10 { z-index: 10 !important; }
5668
+ .sui-z-20 { z-index: 20 !important; }
5669
+ .sui-z-30 { z-index: 30 !important; }
5670
+ .sui-z-40 { z-index: 40 !important; }
5671
+ .sui-z-50 { z-index: 50 !important; }
5672
+ .sui-z-auto { z-index: auto !important; }
5673
+
5674
+ /* --- Cursor --- */
5675
+ .sui-cursor-pointer { cursor: pointer !important; }
5676
+ .sui-cursor-default { cursor: default !important; }
5677
+ .sui-cursor-not-allowed { cursor: not-allowed !important; }
5678
+ .sui-cursor-grab { cursor: grab !important; }
5679
+ .sui-cursor-grabbing { cursor: grabbing !important; }
5680
+ .sui-cursor-move { cursor: move !important; }
5681
+ .sui-cursor-text { cursor: text !important; }
5682
+
5683
+ /* --- Visibility --- */
5684
+ .sui-visible { visibility: visible !important; }
5685
+ .sui-invisible { visibility: hidden !important; }
5686
+ .sui-sr-only {
5687
+ position: absolute !important;
5688
+ width: 1px !important;
5689
+ height: 1px !important;
5690
+ padding: 0 !important;
5691
+ margin: -1px !important;
5692
+ overflow: hidden !important;
5693
+ clip: rect(0, 0, 0, 0) !important;
5694
+ white-space: nowrap !important;
5695
+ border: 0 !important;
5696
+ }
5697
+
5698
+ /* --- Pointer Events --- */
5699
+ .sui-pointer-events-none { pointer-events: none !important; }
5700
+ .sui-pointer-events-auto { pointer-events: auto !important; }
5701
+
5702
+ /* --- User Select --- */
5703
+ .sui-select-none { user-select: none !important; }
5704
+ .sui-select-text { user-select: text !important; }
5705
+ .sui-select-all { user-select: all !important; }
5594
5706
 
5595
5707
  /* Auto margins */
5596
5708
  .sui-ms-auto { margin-left: auto !important; }
@@ -8192,6 +8304,12 @@ a.sui-btn-warning:visited {
8192
8304
  color: var(--sui-text);
8193
8305
  }
8194
8306
 
8307
+ .sui-sidebar-nav li a:focus-visible,
8308
+ .sui-sidebar-nav li button:focus-visible {
8309
+ outline: 2px solid var(--sui-primary);
8310
+ outline-offset: -2px;
8311
+ }
8312
+
8195
8313
  .sui-sidebar-nav li a.active,
8196
8314
  .sui-sidebar-nav li button.active {
8197
8315
  background: rgba(91, 84, 224, 0.1);
@@ -9729,7 +9847,7 @@ a.sui-btn-warning:visited {
9729
9847
  width: 100%;
9730
9848
  }
9731
9849
 
9732
- .sui-color-spectrum-hex input:focus {
9850
+ .sui-color-spectrum-hex input:focus-visible {
9733
9851
  box-shadow: var(--sui-shadow-inset-sm), 0 0 0 2px var(--sui-primary);
9734
9852
  }
9735
9853
 
@@ -9761,7 +9879,7 @@ a.sui-btn-warning:visited {
9761
9879
  outline: none;
9762
9880
  }
9763
9881
 
9764
- .sui-color-spectrum-rgb-field input:focus {
9882
+ .sui-color-spectrum-rgb-field input:focus-visible {
9765
9883
  box-shadow: var(--sui-shadow-inset-sm), 0 0 0 2px var(--sui-primary);
9766
9884
  }
9767
9885
 
@@ -11600,3 +11718,909 @@ a.sui-btn-warning:visited {
11600
11718
  .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
11719
  .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
11720
 
11721
+ /* =========================================
11722
+ Copy Button
11723
+ ========================================= */
11724
+ .sui-copy {
11725
+ display: inline-flex;
11726
+ align-items: center;
11727
+ gap: 8px;
11728
+ background: var(--sui-bg);
11729
+ box-shadow: var(--sui-shadow-raised-sm);
11730
+ border-radius: var(--sui-radius-sm);
11731
+ padding: 8px 12px;
11732
+ font-size: 14px;
11733
+ font-family: var(--sui-font-mono);
11734
+ color: var(--sui-text);
11735
+ }
11736
+
11737
+ .sui-copy-text {
11738
+ flex: 1;
11739
+ overflow: hidden;
11740
+ text-overflow: ellipsis;
11741
+ white-space: nowrap;
11742
+ }
11743
+
11744
+ .sui-copy-btn {
11745
+ display: flex;
11746
+ align-items: center;
11747
+ justify-content: center;
11748
+ width: 28px;
11749
+ height: 28px;
11750
+ border: none;
11751
+ background: var(--sui-bg);
11752
+ box-shadow: var(--sui-shadow-raised-sm);
11753
+ border-radius: var(--sui-radius-xs);
11754
+ cursor: pointer;
11755
+ color: var(--sui-text-muted);
11756
+ padding: 0;
11757
+ flex-shrink: 0;
11758
+ transition: var(--sui-transition);
11759
+ }
11760
+
11761
+ .sui-copy-btn svg {
11762
+ width: 16px;
11763
+ height: 16px;
11764
+ stroke: currentColor;
11765
+ fill: none;
11766
+ stroke-width: 2;
11767
+ stroke-linecap: round;
11768
+ stroke-linejoin: round;
11769
+ }
11770
+
11771
+ .sui-copy-btn:hover {
11772
+ color: var(--sui-primary);
11773
+ box-shadow: var(--sui-shadow-raised);
11774
+ }
11775
+
11776
+ .sui-copy-btn.copied {
11777
+ color: var(--sui-success);
11778
+ }
11779
+
11780
+ /* Inline — just the icon button, no wrapper */
11781
+ .sui-copy-inline {
11782
+ display: inline-flex;
11783
+ align-items: center;
11784
+ justify-content: center;
11785
+ width: 28px;
11786
+ height: 28px;
11787
+ border: none;
11788
+ background: none;
11789
+ cursor: pointer;
11790
+ color: var(--sui-text-muted);
11791
+ padding: 0;
11792
+ border-radius: var(--sui-radius-xs);
11793
+ transition: var(--sui-transition);
11794
+ }
11795
+
11796
+ .sui-copy-inline svg {
11797
+ width: 16px;
11798
+ height: 16px;
11799
+ stroke: currentColor;
11800
+ fill: none;
11801
+ stroke-width: 2;
11802
+ stroke-linecap: round;
11803
+ stroke-linejoin: round;
11804
+ }
11805
+
11806
+ .sui-copy-inline:hover {
11807
+ color: var(--sui-primary);
11808
+ background: rgba(91, 84, 224, 0.06);
11809
+ }
11810
+
11811
+ .sui-copy-inline.copied {
11812
+ color: var(--sui-success);
11813
+ }
11814
+
11815
+ /* With input */
11816
+ .sui-copy-input {
11817
+ display: flex;
11818
+ align-items: center;
11819
+ gap: 0;
11820
+ }
11821
+
11822
+ .sui-copy-input .sui-input {
11823
+ border-radius: var(--sui-radius-sm) 0 0 var(--sui-radius-sm);
11824
+ font-family: var(--sui-font-mono);
11825
+ }
11826
+
11827
+ .sui-copy-input .sui-copy-btn {
11828
+ border-radius: 0 var(--sui-radius-sm) var(--sui-radius-sm) 0;
11829
+ height: auto;
11830
+ align-self: stretch;
11831
+ width: 40px;
11832
+ }
11833
+
11834
+ /* Sizes */
11835
+ .sui-copy-sm {
11836
+ padding: 6px 10px;
11837
+ font-size: 12px;
11838
+ }
11839
+
11840
+ .sui-copy-sm .sui-copy-btn {
11841
+ width: 24px;
11842
+ height: 24px;
11843
+ }
11844
+
11845
+ .sui-copy-sm .sui-copy-btn svg {
11846
+ width: 13px;
11847
+ height: 13px;
11848
+ }
11849
+
11850
+ .sui-copy-lg {
11851
+ padding: 12px 16px;
11852
+ font-size: 16px;
11853
+ }
11854
+
11855
+ .sui-copy-lg .sui-copy-btn {
11856
+ width: 34px;
11857
+ height: 34px;
11858
+ }
11859
+
11860
+ .sui-copy-lg .sui-copy-btn svg {
11861
+ width: 18px;
11862
+ height: 18px;
11863
+ }
11864
+
11865
+ /* Inset */
11866
+ .sui-copy-inset {
11867
+ box-shadow: var(--sui-shadow-inset-sm);
11868
+ }
11869
+
11870
+ .sui-copy-inset .sui-copy-btn {
11871
+ box-shadow: var(--sui-shadow-raised-sm);
11872
+ }
11873
+
11874
+ /* =========================================
11875
+ Text Rotate
11876
+ ========================================= */
11877
+ .sui-text-rotate {
11878
+ display: inline-block;
11879
+ position: relative;
11880
+ vertical-align: bottom;
11881
+ }
11882
+
11883
+ .sui-text-rotate-word {
11884
+ display: inline-block;
11885
+ position: absolute;
11886
+ left: 0;
11887
+ top: 0;
11888
+ opacity: 0;
11889
+ transition: opacity 0.4s ease, transform 0.4s ease;
11890
+ white-space: nowrap;
11891
+ }
11892
+
11893
+ .sui-text-rotate-word.active {
11894
+ opacity: 1;
11895
+ position: relative;
11896
+ transform: none;
11897
+ }
11898
+
11899
+ /* Fade (default) */
11900
+ .sui-text-rotate-fade .sui-text-rotate-word {
11901
+ transform: none;
11902
+ }
11903
+
11904
+ /* Slide up */
11905
+ .sui-text-rotate-slide .sui-text-rotate-word {
11906
+ transform: translateY(100%);
11907
+ }
11908
+
11909
+ .sui-text-rotate-slide .sui-text-rotate-word.active {
11910
+ transform: translateY(0);
11911
+ }
11912
+
11913
+ .sui-text-rotate-slide .sui-text-rotate-word.exit {
11914
+ opacity: 0;
11915
+ transform: translateY(-100%);
11916
+ }
11917
+
11918
+ /* Slide down */
11919
+ .sui-text-rotate-slide-down .sui-text-rotate-word {
11920
+ transform: translateY(-100%);
11921
+ }
11922
+
11923
+ .sui-text-rotate-slide-down .sui-text-rotate-word.active {
11924
+ transform: translateY(0);
11925
+ }
11926
+
11927
+ .sui-text-rotate-slide-down .sui-text-rotate-word.exit {
11928
+ opacity: 0;
11929
+ transform: translateY(100%);
11930
+ }
11931
+
11932
+ /* Flip */
11933
+ .sui-text-rotate-flip {
11934
+ perspective: 300px;
11935
+ }
11936
+
11937
+ .sui-text-rotate-flip .sui-text-rotate-word {
11938
+ transform: rotateX(90deg);
11939
+ transform-origin: center bottom;
11940
+ }
11941
+
11942
+ .sui-text-rotate-flip .sui-text-rotate-word.active {
11943
+ transform: rotateX(0deg);
11944
+ }
11945
+
11946
+ .sui-text-rotate-flip .sui-text-rotate-word.exit {
11947
+ opacity: 0;
11948
+ transform: rotateX(-90deg);
11949
+ }
11950
+
11951
+ /* Zoom */
11952
+ .sui-text-rotate-zoom .sui-text-rotate-word {
11953
+ transform: scale(0);
11954
+ }
11955
+
11956
+ .sui-text-rotate-zoom .sui-text-rotate-word.active {
11957
+ transform: scale(1);
11958
+ }
11959
+
11960
+ .sui-text-rotate-zoom .sui-text-rotate-word.exit {
11961
+ opacity: 0;
11962
+ transform: scale(1.5);
11963
+ }
11964
+
11965
+ /* Color highlight on the rotating word */
11966
+ .sui-text-rotate-primary .sui-text-rotate-word.active { color: var(--sui-primary); }
11967
+ .sui-text-rotate-success .sui-text-rotate-word.active { color: var(--sui-success); }
11968
+ .sui-text-rotate-danger .sui-text-rotate-word.active { color: var(--sui-danger); }
11969
+ .sui-text-rotate-warning .sui-text-rotate-word.active { color: var(--sui-warning); }
11970
+ .sui-text-rotate-info .sui-text-rotate-word.active { color: var(--sui-info); }
11971
+
11972
+ /* =========================================
11973
+ Typewriter
11974
+ ========================================= */
11975
+ .sui-typewriter {
11976
+ display: inline;
11977
+ }
11978
+
11979
+ .sui-typewriter-cursor::after {
11980
+ content: "|";
11981
+ display: inline-block;
11982
+ animation: sui-blink 0.7s step-end infinite;
11983
+ margin-left: 1px;
11984
+ font-weight: 400;
11985
+ }
11986
+
11987
+ @keyframes sui-blink {
11988
+ 0%, 100% { opacity: 1; }
11989
+ 50% { opacity: 0; }
11990
+ }
11991
+
11992
+ /* Cursor variants */
11993
+ .sui-typewriter-cursor-block::after {
11994
+ content: "\2588";
11995
+ font-weight: 400;
11996
+ }
11997
+
11998
+ .sui-typewriter-cursor-underscore::after {
11999
+ content: "_";
12000
+ font-weight: 700;
12001
+ }
12002
+
12003
+ /* Colors */
12004
+ .sui-typewriter-primary { color: var(--sui-primary); }
12005
+ .sui-typewriter-success { color: var(--sui-success); }
12006
+ .sui-typewriter-danger { color: var(--sui-danger); }
12007
+ .sui-typewriter-warning { color: var(--sui-warning); }
12008
+ .sui-typewriter-info { color: var(--sui-info); }
12009
+
12010
+ /* =========================================
12011
+ Marquee
12012
+ ========================================= */
12013
+ .sui-marquee {
12014
+ overflow: hidden;
12015
+ position: relative;
12016
+ padding: 8px 0;
12017
+ }
12018
+
12019
+ .sui-marquee-track {
12020
+ display: flex;
12021
+ width: max-content;
12022
+ animation: sui-marquee 20s linear infinite;
12023
+ gap: 24px;
12024
+ }
12025
+
12026
+ @keyframes sui-marquee {
12027
+ 0% { transform: translateX(0); }
12028
+ 100% { transform: translateX(-50%); }
12029
+ }
12030
+
12031
+ /* Reverse */
12032
+ .sui-marquee-reverse .sui-marquee-track {
12033
+ animation-direction: reverse;
12034
+ }
12035
+
12036
+ /* Speeds */
12037
+ .sui-marquee-slow .sui-marquee-track { animation-duration: 40s; }
12038
+ .sui-marquee-fast .sui-marquee-track { animation-duration: 10s; }
12039
+
12040
+ /* Pause on hover */
12041
+ .sui-marquee-hover:hover .sui-marquee-track {
12042
+ animation-play-state: paused;
12043
+ }
12044
+
12045
+ /* Fade edges */
12046
+ .sui-marquee-fade::before,
12047
+ .sui-marquee-fade::after {
12048
+ content: "";
12049
+ position: absolute;
12050
+ top: 0;
12051
+ bottom: 0;
12052
+ width: 60px;
12053
+ z-index: 1;
12054
+ pointer-events: none;
12055
+ }
12056
+
12057
+ .sui-marquee-fade::before {
12058
+ left: 0;
12059
+ background: linear-gradient(to right, var(--sui-bg), transparent);
12060
+ }
12061
+
12062
+ .sui-marquee-fade::after {
12063
+ right: 0;
12064
+ background: linear-gradient(to left, var(--sui-bg), transparent);
12065
+ }
12066
+
12067
+ /* Vertical */
12068
+ .sui-marquee-vertical {
12069
+ overflow: hidden;
12070
+ height: 200px;
12071
+ padding: 0 8px;
12072
+ }
12073
+
12074
+ .sui-marquee-vertical .sui-marquee-track {
12075
+ flex-direction: column;
12076
+ animation-name: sui-marquee-y;
12077
+ width: auto;
12078
+ }
12079
+
12080
+ @keyframes sui-marquee-y {
12081
+ 0% { transform: translateY(0); }
12082
+ 100% { transform: translateY(-50%); }
12083
+ }
12084
+
12085
+ /* Items */
12086
+ .sui-marquee-item {
12087
+ flex-shrink: 0;
12088
+ display: flex;
12089
+ align-items: center;
12090
+ justify-content: center;
12091
+ }
12092
+
12093
+ .sui-marquee-logo {
12094
+ flex-shrink: 0;
12095
+ display: flex;
12096
+ align-items: center;
12097
+ justify-content: center;
12098
+ padding: 8px 20px;
12099
+ font-size: 16px;
12100
+ font-weight: 700;
12101
+ color: var(--sui-text-muted);
12102
+ white-space: nowrap;
12103
+ }
12104
+
12105
+ .sui-marquee-card {
12106
+ flex-shrink: 0;
12107
+ background: var(--sui-bg);
12108
+ box-shadow: var(--sui-shadow-raised-sm);
12109
+ border-radius: var(--sui-radius);
12110
+ padding: 16px 20px;
12111
+ min-width: 200px;
12112
+ }
12113
+
12114
+ .sui-marquee-text {
12115
+ flex-shrink: 0;
12116
+ padding: 0 24px;
12117
+ font-size: 14px;
12118
+ white-space: nowrap;
12119
+ color: var(--sui-text-muted);
12120
+ }
12121
+
12122
+ /* =========================================
12123
+ Browser Mockup
12124
+ ========================================= */
12125
+ .sui-browser {
12126
+ border-radius: var(--sui-radius-lg);
12127
+ overflow: hidden;
12128
+ box-shadow: var(--sui-shadow-raised);
12129
+ background: var(--sui-bg);
12130
+ }
12131
+
12132
+ .sui-browser-bar {
12133
+ display: flex;
12134
+ align-items: center;
12135
+ gap: 10px;
12136
+ padding: 10px 14px;
12137
+ background: var(--sui-bg-dark);
12138
+ }
12139
+
12140
+ .sui-browser-dots {
12141
+ display: flex;
12142
+ gap: 6px;
12143
+ flex-shrink: 0;
12144
+ }
12145
+
12146
+ .sui-browser-dots span {
12147
+ width: 10px;
12148
+ height: 10px;
12149
+ border-radius: 50%;
12150
+ }
12151
+
12152
+ .sui-browser-dots span:nth-child(1) { background: #E74C6F; }
12153
+ .sui-browser-dots span:nth-child(2) { background: #F5A623; }
12154
+ .sui-browser-dots span:nth-child(3) { background: #2DCE89; }
12155
+
12156
+ .sui-browser-url {
12157
+ flex: 1;
12158
+ background: var(--sui-bg);
12159
+ box-shadow: var(--sui-shadow-inset-sm);
12160
+ border-radius: var(--sui-radius-full);
12161
+ padding: 5px 14px;
12162
+ font-size: 12px;
12163
+ color: var(--sui-text-muted);
12164
+ font-family: var(--sui-font);
12165
+ white-space: nowrap;
12166
+ overflow: hidden;
12167
+ text-overflow: ellipsis;
12168
+ }
12169
+
12170
+ .sui-browser-actions {
12171
+ display: flex;
12172
+ gap: 8px;
12173
+ flex-shrink: 0;
12174
+ }
12175
+
12176
+ .sui-browser-actions svg {
12177
+ width: 14px;
12178
+ height: 14px;
12179
+ stroke: var(--sui-text-light);
12180
+ fill: none;
12181
+ stroke-width: 2;
12182
+ stroke-linecap: round;
12183
+ stroke-linejoin: round;
12184
+ }
12185
+
12186
+ .sui-browser-body {
12187
+ min-height: 120px;
12188
+ }
12189
+
12190
+ .sui-browser-body img {
12191
+ display: block;
12192
+ width: 100%;
12193
+ height: auto;
12194
+ }
12195
+
12196
+ /* Tabs */
12197
+ .sui-browser-tabs {
12198
+ display: flex;
12199
+ align-items: flex-end;
12200
+ gap: 2px;
12201
+ padding: 8px 14px 0;
12202
+ background: var(--sui-bg-dark);
12203
+ }
12204
+
12205
+ .sui-browser-tab {
12206
+ padding: 6px 16px;
12207
+ font-size: 11px;
12208
+ font-weight: 600;
12209
+ color: var(--sui-text-muted);
12210
+ border-radius: var(--sui-radius-sm) var(--sui-radius-sm) 0 0;
12211
+ background: transparent;
12212
+ }
12213
+
12214
+ .sui-browser-tab.active {
12215
+ background: var(--sui-bg);
12216
+ color: var(--sui-text);
12217
+ }
12218
+
12219
+ .sui-browser-tabs + .sui-browser-bar {
12220
+ padding-top: 8px;
12221
+ }
12222
+
12223
+ /* Windows-style buttons (right side) */
12224
+ .sui-browser-win .sui-browser-bar {
12225
+ position: relative;
12226
+ }
12227
+
12228
+ .sui-browser-win .sui-browser-dots {
12229
+ display: none;
12230
+ }
12231
+
12232
+ .sui-browser-win-btns {
12233
+ display: flex;
12234
+ margin-left: auto;
12235
+ flex-shrink: 0;
12236
+ }
12237
+
12238
+ .sui-browser-win-btns button {
12239
+ width: 28px;
12240
+ height: 24px;
12241
+ display: flex;
12242
+ align-items: center;
12243
+ justify-content: center;
12244
+ border: none;
12245
+ background: transparent;
12246
+ cursor: pointer;
12247
+ padding: 0;
12248
+ }
12249
+
12250
+ .sui-browser-win-btns button svg {
12251
+ width: 10px;
12252
+ height: 10px;
12253
+ stroke: var(--sui-text-muted);
12254
+ fill: none;
12255
+ stroke-width: 1.5;
12256
+ stroke-linecap: round;
12257
+ stroke-linejoin: round;
12258
+ }
12259
+
12260
+ .sui-browser-win-btns button:hover {
12261
+ background: rgba(0, 0, 0, 0.06);
12262
+ }
12263
+
12264
+ .sui-browser-win-btns button:last-child:hover {
12265
+ background: #E74C6F;
12266
+ }
12267
+
12268
+ .sui-browser-win-btns button:last-child:hover svg {
12269
+ stroke: #fff;
12270
+ }
12271
+
12272
+ /* Dark chrome */
12273
+ .sui-browser-dark .sui-browser-bar,
12274
+ .sui-browser-dark .sui-browser-tabs {
12275
+ background: #1B1D2A;
12276
+ }
12277
+
12278
+ .sui-browser-dark .sui-browser-url {
12279
+ background: rgba(255, 255, 255, 0.08);
12280
+ box-shadow: none;
12281
+ color: rgba(255, 255, 255, 0.5);
12282
+ }
12283
+
12284
+ .sui-browser-dark .sui-browser-actions svg {
12285
+ stroke: rgba(255, 255, 255, 0.4);
12286
+ }
12287
+
12288
+ .sui-browser-dark .sui-browser-tab {
12289
+ color: rgba(255, 255, 255, 0.4);
12290
+ }
12291
+
12292
+ .sui-browser-dark .sui-browser-tab.active {
12293
+ background: var(--sui-bg);
12294
+ color: var(--sui-text);
12295
+ }
12296
+
12297
+ /* =========================================
12298
+ Phone Mockup
12299
+ ========================================= */
12300
+ .sui-phone {
12301
+ display: inline-block;
12302
+ position: relative;
12303
+ background: #1B1D2A;
12304
+ border-radius: 36px;
12305
+ padding: 12px;
12306
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2), inset 0 0 0 2px rgba(255, 255, 255, 0.1);
12307
+ }
12308
+
12309
+ .sui-phone-screen {
12310
+ position: relative;
12311
+ width: 260px;
12312
+ height: 520px;
12313
+ background: var(--sui-bg);
12314
+ border-radius: 24px;
12315
+ overflow: hidden;
12316
+ }
12317
+
12318
+ .sui-phone-screen img {
12319
+ display: block;
12320
+ width: 100%;
12321
+ height: 100%;
12322
+ object-fit: cover;
12323
+ }
12324
+
12325
+ /* Notch */
12326
+ .sui-phone-notch::before {
12327
+ content: "";
12328
+ position: absolute;
12329
+ top: 0;
12330
+ left: 50%;
12331
+ transform: translateX(-50%);
12332
+ width: 100px;
12333
+ height: 24px;
12334
+ background: #1B1D2A;
12335
+ border-radius: 0 0 16px 16px;
12336
+ z-index: 2;
12337
+ }
12338
+
12339
+ /* Dynamic Island */
12340
+ .sui-phone-island::before {
12341
+ content: "";
12342
+ position: absolute;
12343
+ top: 10px;
12344
+ left: 50%;
12345
+ transform: translateX(-50%);
12346
+ width: 80px;
12347
+ height: 22px;
12348
+ background: #1B1D2A;
12349
+ border-radius: 20px;
12350
+ z-index: 2;
12351
+ }
12352
+
12353
+ /* Teardrop notch */
12354
+ .sui-phone-teardrop::before {
12355
+ content: "";
12356
+ position: absolute;
12357
+ top: 0;
12358
+ left: 50%;
12359
+ transform: translateX(-50%);
12360
+ width: 16px;
12361
+ height: 16px;
12362
+ background: #1B1D2A;
12363
+ border-radius: 0 0 50% 50%;
12364
+ z-index: 2;
12365
+ }
12366
+
12367
+ /* Punch hole — single */
12368
+ .sui-phone-punch::before {
12369
+ content: "";
12370
+ position: absolute;
12371
+ top: 12px;
12372
+ left: 50%;
12373
+ transform: translateX(-50%);
12374
+ width: 12px;
12375
+ height: 12px;
12376
+ background: #1B1D2A;
12377
+ border-radius: 50%;
12378
+ z-index: 2;
12379
+ }
12380
+
12381
+ /* Punch hole — double */
12382
+ .sui-phone-punch-double::before {
12383
+ content: "";
12384
+ position: absolute;
12385
+ top: 12px;
12386
+ left: 50%;
12387
+ transform: translateX(-50%);
12388
+ width: 12px;
12389
+ height: 12px;
12390
+ background: #1B1D2A;
12391
+ border-radius: 50%;
12392
+ z-index: 2;
12393
+ box-shadow: 18px 0 0 0 #1B1D2A;
12394
+ }
12395
+
12396
+ /* White/Gold frame overrides for new cutouts */
12397
+ .sui-phone-white .sui-phone-teardrop::before,
12398
+ .sui-phone-white .sui-phone-punch::before,
12399
+ .sui-phone-white .sui-phone-punch-double::before { background: #E8E8ED; box-shadow-color: #E8E8ED; }
12400
+
12401
+ .sui-phone-white .sui-phone-punch-double::before { box-shadow: 18px 0 0 0 #E8E8ED; }
12402
+
12403
+ .sui-phone-gold .sui-phone-teardrop::before,
12404
+ .sui-phone-gold .sui-phone-punch::before,
12405
+ .sui-phone-gold .sui-phone-punch-double::before { background: #D4C5A9; }
12406
+
12407
+ .sui-phone-gold .sui-phone-punch-double::before { box-shadow: 18px 0 0 0 #D4C5A9; }
12408
+
12409
+ /* Status bar */
12410
+ .sui-phone-status {
12411
+ position: absolute;
12412
+ top: 0;
12413
+ left: 0;
12414
+ right: 0;
12415
+ height: 44px;
12416
+ display: flex;
12417
+ align-items: center;
12418
+ justify-content: space-between;
12419
+ padding: 0 20px;
12420
+ font-size: 12px;
12421
+ font-weight: 600;
12422
+ color: var(--sui-text);
12423
+ z-index: 3;
12424
+ }
12425
+
12426
+ /* Home indicator */
12427
+ .sui-phone-home {
12428
+ position: absolute;
12429
+ bottom: 6px;
12430
+ left: 50%;
12431
+ transform: translateX(-50%);
12432
+ width: 100px;
12433
+ height: 4px;
12434
+ background: var(--sui-text-muted);
12435
+ border-radius: 2px;
12436
+ z-index: 2;
12437
+ opacity: 0.4;
12438
+ }
12439
+
12440
+ /* Frame colors */
12441
+ .sui-phone-white {
12442
+ background: #E8E8ED;
12443
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12), inset 0 0 0 2px rgba(0, 0, 0, 0.06);
12444
+ }
12445
+
12446
+ .sui-phone-white .sui-phone-notch::before,
12447
+ .sui-phone-white .sui-phone-island::before {
12448
+ background: #E8E8ED;
12449
+ }
12450
+
12451
+ .sui-phone-gold {
12452
+ background: #D4C5A9;
12453
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15), inset 0 0 0 2px rgba(255, 255, 255, 0.2);
12454
+ }
12455
+
12456
+ .sui-phone-gold .sui-phone-notch::before,
12457
+ .sui-phone-gold .sui-phone-island::before {
12458
+ background: #D4C5A9;
12459
+ }
12460
+
12461
+ /* Sizes */
12462
+ .sui-phone-sm .sui-phone-screen {
12463
+ width: 180px;
12464
+ height: 360px;
12465
+ border-radius: 18px;
12466
+ }
12467
+
12468
+ .sui-phone-sm {
12469
+ border-radius: 26px;
12470
+ padding: 8px;
12471
+ }
12472
+
12473
+ .sui-phone-sm .sui-phone-notch::before {
12474
+ width: 70px;
12475
+ height: 18px;
12476
+ border-radius: 0 0 12px 12px;
12477
+ }
12478
+
12479
+ .sui-phone-sm .sui-phone-island::before {
12480
+ width: 56px;
12481
+ height: 16px;
12482
+ top: 8px;
12483
+ }
12484
+
12485
+ .sui-phone-sm .sui-phone-home {
12486
+ width: 70px;
12487
+ height: 3px;
12488
+ }
12489
+
12490
+ /* Landscape */
12491
+ .sui-phone-landscape {
12492
+ transform: rotate(-90deg);
12493
+ }
12494
+
12495
+ .sui-phone-landscape .sui-phone-screen {
12496
+ transform: rotate(90deg);
12497
+ }
12498
+
12499
+ /* =========================================
12500
+ Tour / Walkthrough
12501
+ ========================================= */
12502
+
12503
+ /* Overlay with spotlight cutout */
12504
+ .sui-tour-overlay {
12505
+ position: fixed;
12506
+ inset: 0;
12507
+ z-index: 1000;
12508
+ pointer-events: none;
12509
+ opacity: 0;
12510
+ visibility: hidden;
12511
+ transition: opacity 0.3s ease, visibility 0.3s ease;
12512
+ }
12513
+
12514
+ .sui-tour-overlay.active {
12515
+ opacity: 1;
12516
+ visibility: visible;
12517
+ pointer-events: auto;
12518
+ }
12519
+
12520
+ .sui-tour-backdrop {
12521
+ position: fixed;
12522
+ inset: 0;
12523
+ background: rgba(0, 0, 0, 0.5);
12524
+ z-index: 1;
12525
+ }
12526
+
12527
+ /* Spotlight ring around target */
12528
+ .sui-tour-spotlight {
12529
+ position: fixed;
12530
+ border-radius: var(--sui-radius);
12531
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.5);
12532
+ z-index: 2;
12533
+ pointer-events: none;
12534
+ transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease;
12535
+ }
12536
+
12537
+ /* Tooltip */
12538
+ .sui-tour-tooltip {
12539
+ position: fixed;
12540
+ z-index: 3;
12541
+ background: var(--sui-bg);
12542
+ border-radius: var(--sui-radius);
12543
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15), 0 2px 8px rgba(0, 0, 0, 0.1);
12544
+ padding: 20px;
12545
+ width: 300px;
12546
+ max-width: 90vw;
12547
+ transition: top 0.3s ease, left 0.3s ease;
12548
+ }
12549
+
12550
+ .sui-tour-tooltip-title {
12551
+ font-size: 16px;
12552
+ font-weight: 700;
12553
+ color: var(--sui-text);
12554
+ margin-bottom: 6px;
12555
+ }
12556
+
12557
+ .sui-tour-tooltip-desc {
12558
+ font-size: 13px;
12559
+ color: var(--sui-text-muted);
12560
+ line-height: 1.5;
12561
+ margin-bottom: 16px;
12562
+ }
12563
+
12564
+ .sui-tour-tooltip-footer {
12565
+ display: flex;
12566
+ align-items: center;
12567
+ justify-content: space-between;
12568
+ }
12569
+
12570
+ .sui-tour-tooltip-counter {
12571
+ font-size: 12px;
12572
+ color: var(--sui-text-light);
12573
+ font-weight: 600;
12574
+ }
12575
+
12576
+ .sui-tour-tooltip-actions {
12577
+ display: flex;
12578
+ gap: 8px;
12579
+ }
12580
+
12581
+ /* Progress dots */
12582
+ .sui-tour-dots {
12583
+ display: flex;
12584
+ gap: 6px;
12585
+ align-items: center;
12586
+ }
12587
+
12588
+ .sui-tour-dot {
12589
+ width: 6px;
12590
+ height: 6px;
12591
+ border-radius: 50%;
12592
+ background: var(--sui-bg-dark);
12593
+ transition: background 0.2s ease;
12594
+ }
12595
+
12596
+ .sui-tour-dot.active {
12597
+ background: var(--sui-primary);
12598
+ }
12599
+
12600
+ /* No overlay variant */
12601
+ .sui-tour-no-overlay .sui-tour-backdrop {
12602
+ display: none;
12603
+ }
12604
+
12605
+ .sui-tour-no-overlay .sui-tour-spotlight {
12606
+ background: transparent;
12607
+ box-shadow: 0 0 0 3px var(--sui-primary), 0 0 0 6px rgba(91, 84, 224, 0.2);
12608
+ }
12609
+
12610
+ .sui-tour-no-overlay .sui-tour-tooltip {
12611
+ box-shadow: var(--sui-shadow-raised);
12612
+ }
12613
+
12614
+ /* ===========================================
12615
+ Reduced Motion
12616
+ =========================================== */
12617
+ @media (prefers-reduced-motion: reduce) {
12618
+ *, *::before, *::after {
12619
+ animation-duration: 0.01ms !important;
12620
+ animation-iteration-count: 1 !important;
12621
+ transition-duration: 0.01ms !important;
12622
+ scroll-behavior: auto !important;
12623
+ }
12624
+ }
12625
+
12626
+