softui-css 1.4.0 → 1.5.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
@@ -1946,6 +1946,49 @@ a.sui-btn-warning:visited {
1946
1946
  justify-content: center;
1947
1947
  }
1948
1948
 
1949
+ /* ===========================================
1950
+ Cards — Empty State
1951
+ =========================================== */
1952
+ .sui-card-empty {
1953
+ display: flex;
1954
+ flex-direction: column;
1955
+ align-items: center;
1956
+ justify-content: center;
1957
+ text-align: center;
1958
+ padding: 40px 24px;
1959
+ }
1960
+
1961
+ .sui-card-empty-icon {
1962
+ width: 48px;
1963
+ height: 48px;
1964
+ color: var(--sui-text-light);
1965
+ margin-bottom: 12px;
1966
+ }
1967
+
1968
+ .sui-card-empty-icon svg {
1969
+ width: 100%;
1970
+ height: 100%;
1971
+ stroke: currentColor;
1972
+ fill: none;
1973
+ stroke-width: 1.5;
1974
+ stroke-linecap: round;
1975
+ stroke-linejoin: round;
1976
+ }
1977
+
1978
+ .sui-card-empty-title {
1979
+ font-size: 16px;
1980
+ font-weight: 600;
1981
+ color: var(--sui-text);
1982
+ margin-bottom: 4px;
1983
+ }
1984
+
1985
+ .sui-card-empty-text {
1986
+ font-size: 13px;
1987
+ color: var(--sui-text-muted);
1988
+ margin-bottom: 16px;
1989
+ max-width: 280px;
1990
+ }
1991
+
1949
1992
  /* ===========================================
1950
1993
  Cards — Hoverable
1951
1994
  =========================================== */
@@ -2030,6 +2073,185 @@ a.sui-btn-warning:visited {
2030
2073
  padding-right: 22px;
2031
2074
  }
2032
2075
 
2076
+ /* --- Number Input --- */
2077
+ .sui-number-input {
2078
+ display: inline-flex;
2079
+ align-items: center;
2080
+ }
2081
+
2082
+ .sui-number-input .sui-input {
2083
+ text-align: center;
2084
+ border-radius: 0;
2085
+ -moz-appearance: textfield;
2086
+ width: 64px;
2087
+ }
2088
+
2089
+ .sui-number-input .sui-input::-webkit-inner-spin-button,
2090
+ .sui-number-input .sui-input::-webkit-outer-spin-button {
2091
+ -webkit-appearance: none;
2092
+ margin: 0;
2093
+ }
2094
+
2095
+ .sui-number-input-btn {
2096
+ display: flex;
2097
+ align-items: center;
2098
+ justify-content: center;
2099
+ width: 42px;
2100
+ align-self: stretch;
2101
+ border: none;
2102
+ background: var(--sui-bg);
2103
+ box-shadow: var(--sui-shadow-raised-sm);
2104
+ color: var(--sui-text);
2105
+ font-size: 18px;
2106
+ font-weight: 600;
2107
+ cursor: pointer;
2108
+ transition: var(--sui-transition);
2109
+ padding: 0;
2110
+ line-height: 1;
2111
+ }
2112
+
2113
+ .sui-number-input-btn:first-child {
2114
+ border-radius: var(--sui-radius-sm) 0 0 var(--sui-radius-sm);
2115
+ }
2116
+
2117
+ .sui-number-input-btn:last-child {
2118
+ border-radius: 0 var(--sui-radius-sm) var(--sui-radius-sm) 0;
2119
+ }
2120
+
2121
+ .sui-number-input-btn:hover {
2122
+ box-shadow: var(--sui-shadow-raised);
2123
+ }
2124
+
2125
+ .sui-number-input-btn:active {
2126
+ box-shadow: var(--sui-shadow-inset-sm);
2127
+ }
2128
+
2129
+ .sui-number-input-sm .sui-input {
2130
+ height: 30px;
2131
+ font-size: 13px;
2132
+ width: 50px;
2133
+ }
2134
+
2135
+ .sui-number-input-sm .sui-number-input-btn {
2136
+ width: 30px;
2137
+ height: 30px;
2138
+ font-size: 14px;
2139
+ }
2140
+
2141
+ .sui-number-input-lg .sui-input {
2142
+ height: 46px;
2143
+ font-size: 18px;
2144
+ width: 80px;
2145
+ }
2146
+
2147
+ .sui-number-input-lg .sui-number-input-btn {
2148
+ width: 46px;
2149
+ height: 46px;
2150
+ font-size: 22px;
2151
+ }
2152
+
2153
+ /* --- Password Input --- */
2154
+ .sui-password-input {
2155
+ position: relative;
2156
+ }
2157
+
2158
+ .sui-password-input .sui-input {
2159
+ padding-right: 40px;
2160
+ width: 100%;
2161
+ }
2162
+
2163
+ .sui-password-input .sui-password-toggle {
2164
+ position: absolute;
2165
+ right: 10px;
2166
+ top: 50%;
2167
+ transform: translateY(-50%);
2168
+ width: 20px;
2169
+ height: 20px;
2170
+ border: none;
2171
+ background: none;
2172
+ padding: 0;
2173
+ cursor: pointer;
2174
+ color: var(--sui-text-muted);
2175
+ z-index: 1;
2176
+ display: flex;
2177
+ align-items: center;
2178
+ justify-content: center;
2179
+ }
2180
+
2181
+ .sui-password-toggle svg {
2182
+ width: 18px;
2183
+ height: 18px;
2184
+ stroke: currentColor;
2185
+ fill: none;
2186
+ stroke-width: 2;
2187
+ stroke-linecap: round;
2188
+ stroke-linejoin: round;
2189
+ }
2190
+
2191
+ .sui-password-toggle:hover {
2192
+ color: var(--sui-text);
2193
+ }
2194
+
2195
+ .sui-password-rules {
2196
+ display: flex;
2197
+ flex-direction: column;
2198
+ gap: 4px;
2199
+ }
2200
+
2201
+ .sui-password-rule {
2202
+ display: flex;
2203
+ align-items: center;
2204
+ gap: 6px;
2205
+ font-size: 12px;
2206
+ color: var(--sui-text-muted);
2207
+ transition: color 0.2s ease;
2208
+ }
2209
+
2210
+ .sui-password-rule.valid {
2211
+ color: var(--sui-success);
2212
+ }
2213
+
2214
+
2215
+ /* --- Tags Input --- */
2216
+ .sui-tags-input {
2217
+ display: flex;
2218
+ flex-wrap: wrap;
2219
+ align-items: center;
2220
+ gap: 6px;
2221
+ padding: 6px 10px;
2222
+ background: var(--sui-bg);
2223
+ box-shadow: var(--sui-shadow-inset-sm);
2224
+ border-radius: var(--sui-radius-sm);
2225
+ min-height: 38px;
2226
+ cursor: text;
2227
+ transition: var(--sui-transition);
2228
+ }
2229
+
2230
+ .sui-tags-input:focus-within {
2231
+ box-shadow: var(--sui-shadow-inset-sm), 0 0 0 2px var(--sui-primary);
2232
+ }
2233
+
2234
+ .sui-tags-input .sui-chip {
2235
+ margin: 0;
2236
+ font-size: 12px;
2237
+ }
2238
+
2239
+ .sui-tags-input-field {
2240
+ border: none;
2241
+ background: none;
2242
+ outline: none;
2243
+ font-size: 14px;
2244
+ font-family: var(--sui-font);
2245
+ color: var(--sui-text);
2246
+ flex: 1;
2247
+ min-width: 80px;
2248
+ padding: 2px 0;
2249
+ }
2250
+
2251
+ .sui-tags-input-field::placeholder {
2252
+ color: var(--sui-text-light);
2253
+ }
2254
+
2033
2255
  /* ===========================================
2034
2256
  Toggles — Sizes
2035
2257
  =========================================== */
@@ -4364,6 +4586,10 @@ a.sui-btn-warning:visited {
4364
4586
  padding: 2px 0;
4365
4587
  }
4366
4588
 
4589
+ .sui-command-group[hidden] {
4590
+ display: none;
4591
+ }
4592
+
4367
4593
  .sui-command-group-label {
4368
4594
  padding: 8px 10px 4px;
4369
4595
  font-size: 11px;
@@ -4373,6 +4599,10 @@ a.sui-btn-warning:visited {
4373
4599
  letter-spacing: 0.5px;
4374
4600
  }
4375
4601
 
4602
+ .sui-command-item[hidden] {
4603
+ display: none;
4604
+ }
4605
+
4376
4606
  .sui-command-item {
4377
4607
  display: flex;
4378
4608
  align-items: center;
@@ -4384,12 +4614,13 @@ a.sui-btn-warning:visited {
4384
4614
  color: var(--sui-text);
4385
4615
  background: transparent;
4386
4616
  border: none;
4387
- border-radius: var(--sui-radius-xs);
4617
+ border-radius: var(--sui-radius-sm);
4388
4618
  cursor: pointer;
4389
4619
  text-align: left;
4390
4620
  transition: var(--sui-transition);
4391
4621
  line-height: 1.4;
4392
4622
  gap: 10px;
4623
+ text-decoration: none;
4393
4624
  }
4394
4625
 
4395
4626
  .sui-command-item:hover,
@@ -8966,3 +9197,1426 @@ a.sui-btn-warning:visited {
8966
9197
  padding: 6px 10px;
8967
9198
  gap: 4px;
8968
9199
  }
9200
+
9201
+ /* =========================================
9202
+ Chat Bubble
9203
+ ========================================= */
9204
+ .sui-chat {
9205
+ display: flex;
9206
+ flex-direction: column;
9207
+ gap: 12px;
9208
+ }
9209
+
9210
+ .sui-chat-message {
9211
+ display: flex;
9212
+ align-items: flex-end;
9213
+ gap: 8px;
9214
+ max-width: 75%;
9215
+ }
9216
+
9217
+ .sui-chat-message-sent {
9218
+ align-self: flex-end;
9219
+ flex-direction: row-reverse;
9220
+ }
9221
+
9222
+ .sui-chat-message-received {
9223
+ align-self: flex-start;
9224
+ }
9225
+
9226
+ .sui-chat-avatar {
9227
+ width: 32px;
9228
+ height: 32px;
9229
+ border-radius: 50%;
9230
+ flex-shrink: 0;
9231
+ display: flex;
9232
+ align-items: center;
9233
+ justify-content: center;
9234
+ font-size: 13px;
9235
+ font-weight: 700;
9236
+ background: var(--sui-bg);
9237
+ box-shadow: var(--sui-shadow-raised-sm);
9238
+ color: var(--sui-text-muted);
9239
+ }
9240
+
9241
+ .sui-chat-bubble {
9242
+ padding: 10px 14px;
9243
+ border-radius: var(--sui-radius);
9244
+ font-size: 14px;
9245
+ line-height: 1.5;
9246
+ color: var(--sui-text);
9247
+ position: relative;
9248
+ }
9249
+
9250
+ .sui-chat-message-received .sui-chat-bubble {
9251
+ background: var(--sui-bg);
9252
+ box-shadow: var(--sui-shadow-raised-sm);
9253
+ border-bottom-left-radius: 4px;
9254
+ }
9255
+
9256
+ .sui-chat-message-sent .sui-chat-bubble {
9257
+ background: var(--sui-primary);
9258
+ color: #fff;
9259
+ box-shadow: var(--sui-shadow-raised-sm);
9260
+ border-bottom-right-radius: 4px;
9261
+ }
9262
+
9263
+ .sui-chat-meta {
9264
+ display: flex;
9265
+ align-items: center;
9266
+ gap: 6px;
9267
+ font-size: 11px;
9268
+ color: var(--sui-text-muted);
9269
+ margin-top: 4px;
9270
+ padding: 0 4px;
9271
+ }
9272
+
9273
+ .sui-chat-message-sent .sui-chat-meta {
9274
+ justify-content: flex-end;
9275
+ }
9276
+
9277
+ .sui-chat-status {
9278
+ display: inline-flex;
9279
+ font-size: 11px;
9280
+ }
9281
+
9282
+ .sui-chat-status-sent { color: var(--sui-text-muted); }
9283
+ .sui-chat-status-delivered { color: var(--sui-text-muted); }
9284
+ .sui-chat-status-read { color: var(--sui-primary); }
9285
+
9286
+ /* Grouped — no avatar, tighter spacing */
9287
+ .sui-chat-grouped {
9288
+ gap: 4px;
9289
+ }
9290
+
9291
+ .sui-chat-grouped .sui-chat-avatar {
9292
+ visibility: hidden;
9293
+ }
9294
+
9295
+ .sui-chat-grouped .sui-chat-message-received .sui-chat-bubble {
9296
+ border-bottom-left-radius: 4px;
9297
+ border-top-left-radius: 4px;
9298
+ }
9299
+
9300
+ .sui-chat-grouped .sui-chat-message-sent .sui-chat-bubble {
9301
+ border-bottom-right-radius: 4px;
9302
+ border-top-right-radius: 4px;
9303
+ }
9304
+
9305
+ .sui-chat-grouped .sui-chat-message:first-child .sui-chat-avatar {
9306
+ visibility: visible;
9307
+ }
9308
+
9309
+ .sui-chat-grouped .sui-chat-message-received:first-child .sui-chat-bubble {
9310
+ border-top-left-radius: var(--sui-radius);
9311
+ }
9312
+
9313
+ .sui-chat-grouped .sui-chat-message-sent:first-child .sui-chat-bubble {
9314
+ border-top-right-radius: var(--sui-radius);
9315
+ }
9316
+
9317
+ .sui-chat-grouped .sui-chat-message:last-child .sui-chat-bubble {
9318
+ border-bottom-left-radius: var(--sui-radius);
9319
+ border-bottom-right-radius: var(--sui-radius);
9320
+ }
9321
+
9322
+ /* Color variants — sent bubble */
9323
+ .sui-chat-success .sui-chat-message-sent .sui-chat-bubble { background: var(--sui-success); }
9324
+ .sui-chat-danger .sui-chat-message-sent .sui-chat-bubble { background: var(--sui-danger); }
9325
+ .sui-chat-warning .sui-chat-message-sent .sui-chat-bubble { background: var(--sui-warning); color: var(--sui-text); }
9326
+ .sui-chat-info .sui-chat-message-sent .sui-chat-bubble { background: var(--sui-info); }
9327
+
9328
+ /* Inset — both pressed-in; sent uses tinted background */
9329
+ .sui-chat-inset .sui-chat-message-received .sui-chat-bubble {
9330
+ box-shadow: var(--sui-shadow-inset-sm);
9331
+ }
9332
+
9333
+ .sui-chat-inset .sui-chat-message-sent .sui-chat-bubble {
9334
+ background: rgba(91, 84, 224, 0.15);
9335
+ color: var(--sui-text);
9336
+ box-shadow: var(--sui-shadow-inset-sm);
9337
+ }
9338
+
9339
+ .sui-chat-inset.sui-chat-success .sui-chat-message-sent .sui-chat-bubble {
9340
+ background: rgba(45, 206, 137, 0.15);
9341
+ color: var(--sui-text);
9342
+ }
9343
+
9344
+ .sui-chat-inset.sui-chat-danger .sui-chat-message-sent .sui-chat-bubble {
9345
+ background: rgba(231, 76, 111, 0.15);
9346
+ color: var(--sui-text);
9347
+ }
9348
+
9349
+ .sui-chat-inset.sui-chat-warning .sui-chat-message-sent .sui-chat-bubble {
9350
+ background: rgba(245, 166, 35, 0.15);
9351
+ color: var(--sui-text);
9352
+ }
9353
+
9354
+ .sui-chat-inset.sui-chat-info .sui-chat-message-sent .sui-chat-bubble {
9355
+ background: rgba(54, 163, 247, 0.15);
9356
+ color: var(--sui-text);
9357
+ }
9358
+
9359
+ /* =========================================
9360
+ Color Picker
9361
+ ========================================= */
9362
+ .sui-color-picker {
9363
+ display: inline-flex;
9364
+ flex-wrap: wrap;
9365
+ gap: 8px;
9366
+ }
9367
+
9368
+ .sui-color-swatch {
9369
+ width: 36px;
9370
+ height: 36px;
9371
+ border-radius: var(--sui-radius-sm);
9372
+ border: 2px solid transparent;
9373
+ cursor: pointer;
9374
+ box-shadow: var(--sui-shadow-raised-sm);
9375
+ transition: var(--sui-transition);
9376
+ position: relative;
9377
+ }
9378
+
9379
+ .sui-color-swatch:hover {
9380
+ transform: translateY(-2px);
9381
+ box-shadow: var(--sui-shadow-raised);
9382
+ }
9383
+
9384
+ .sui-color-swatch.active {
9385
+ border-color: var(--sui-text);
9386
+ box-shadow: var(--sui-shadow-raised);
9387
+ }
9388
+
9389
+ .sui-color-swatch.active::after {
9390
+ content: "";
9391
+ position: absolute;
9392
+ top: 50%;
9393
+ left: 50%;
9394
+ transform: translate(-50%, -60%) rotate(45deg);
9395
+ width: 6px;
9396
+ height: 10px;
9397
+ border: 2px solid #fff;
9398
+ border-top: none;
9399
+ border-left: none;
9400
+ }
9401
+
9402
+ /* Sizes */
9403
+ .sui-color-picker-sm .sui-color-swatch {
9404
+ width: 24px;
9405
+ height: 24px;
9406
+ }
9407
+
9408
+ .sui-color-picker-sm .sui-color-swatch.active::after {
9409
+ width: 4px;
9410
+ height: 8px;
9411
+ }
9412
+
9413
+ .sui-color-picker-lg .sui-color-swatch {
9414
+ width: 48px;
9415
+ height: 48px;
9416
+ }
9417
+
9418
+ .sui-color-picker-lg .sui-color-swatch.active::after {
9419
+ width: 8px;
9420
+ height: 14px;
9421
+ }
9422
+
9423
+ /* With label */
9424
+ .sui-color-picker-labeled {
9425
+ gap: 12px;
9426
+ }
9427
+
9428
+ .sui-color-picker-labeled .sui-color-item {
9429
+ display: flex;
9430
+ flex-direction: column;
9431
+ align-items: center;
9432
+ gap: 4px;
9433
+ }
9434
+
9435
+ .sui-color-picker-labeled .sui-color-label {
9436
+ font-size: 11px;
9437
+ color: var(--sui-text-muted);
9438
+ font-weight: 500;
9439
+ text-transform: uppercase;
9440
+ letter-spacing: 0.3px;
9441
+ }
9442
+
9443
+ /* Palette rows */
9444
+ .sui-color-palette {
9445
+ display: flex;
9446
+ flex-direction: column;
9447
+ gap: 8px;
9448
+ }
9449
+
9450
+ .sui-color-palette-row {
9451
+ display: flex;
9452
+ gap: 4px;
9453
+ }
9454
+
9455
+ .sui-color-palette-row .sui-color-swatch {
9456
+ border-radius: 4px;
9457
+ box-shadow: none;
9458
+ border: none;
9459
+ width: 32px;
9460
+ height: 32px;
9461
+ }
9462
+
9463
+ .sui-color-palette-row .sui-color-swatch:first-child {
9464
+ border-radius: var(--sui-radius-sm) 4px 4px var(--sui-radius-sm);
9465
+ }
9466
+
9467
+ .sui-color-palette-row .sui-color-swatch:last-child {
9468
+ border-radius: 4px var(--sui-radius-sm) var(--sui-radius-sm) 4px;
9469
+ }
9470
+
9471
+ .sui-color-palette-row .sui-color-swatch:hover {
9472
+ transform: scale(1.15);
9473
+ z-index: 1;
9474
+ box-shadow: var(--sui-shadow-raised-sm);
9475
+ }
9476
+
9477
+ .sui-color-palette-label {
9478
+ font-size: 12px;
9479
+ font-weight: 600;
9480
+ color: var(--sui-text-muted);
9481
+ min-width: 60px;
9482
+ display: flex;
9483
+ align-items: center;
9484
+ }
9485
+
9486
+ /* Native input */
9487
+ .sui-color-input {
9488
+ display: inline-flex;
9489
+ align-items: center;
9490
+ gap: 10px;
9491
+ background: var(--sui-bg);
9492
+ box-shadow: var(--sui-shadow-raised-sm);
9493
+ border-radius: var(--sui-radius);
9494
+ padding: 8px 12px;
9495
+ }
9496
+
9497
+ .sui-color-input input[type="color"] {
9498
+ -webkit-appearance: none;
9499
+ appearance: none;
9500
+ width: 36px;
9501
+ height: 36px;
9502
+ border: none;
9503
+ border-radius: var(--sui-radius-sm);
9504
+ cursor: pointer;
9505
+ padding: 0;
9506
+ background: none;
9507
+ box-shadow: var(--sui-shadow-inset-sm);
9508
+ }
9509
+
9510
+ .sui-color-input input[type="color"]::-webkit-color-swatch-wrapper {
9511
+ padding: 2px;
9512
+ }
9513
+
9514
+ .sui-color-input input[type="color"]::-webkit-color-swatch {
9515
+ border: none;
9516
+ border-radius: 4px;
9517
+ }
9518
+
9519
+ .sui-color-input input[type="color"]::-moz-color-swatch {
9520
+ border: none;
9521
+ border-radius: 4px;
9522
+ }
9523
+
9524
+ .sui-color-input-value {
9525
+ font-size: 14px;
9526
+ font-weight: 600;
9527
+ color: var(--sui-text);
9528
+ font-family: var(--sui-font-mono);
9529
+ text-transform: uppercase;
9530
+ }
9531
+
9532
+ .sui-color-input-label {
9533
+ font-size: 12px;
9534
+ color: var(--sui-text-muted);
9535
+ }
9536
+
9537
+ /* Preview */
9538
+ .sui-color-preview {
9539
+ display: inline-flex;
9540
+ align-items: center;
9541
+ gap: 12px;
9542
+ background: var(--sui-bg);
9543
+ box-shadow: var(--sui-shadow-raised-sm);
9544
+ border-radius: var(--sui-radius);
9545
+ padding: 12px 16px;
9546
+ }
9547
+
9548
+ .sui-color-preview-swatch {
9549
+ width: 48px;
9550
+ height: 48px;
9551
+ border-radius: var(--sui-radius-sm);
9552
+ box-shadow: var(--sui-shadow-inset-sm);
9553
+ flex-shrink: 0;
9554
+ }
9555
+
9556
+ .sui-color-preview-info {
9557
+ display: flex;
9558
+ flex-direction: column;
9559
+ gap: 2px;
9560
+ }
9561
+
9562
+ .sui-color-preview-hex {
9563
+ font-size: 16px;
9564
+ font-weight: 700;
9565
+ color: var(--sui-text);
9566
+ font-family: var(--sui-font-mono);
9567
+ text-transform: uppercase;
9568
+ }
9569
+
9570
+ .sui-color-preview-name {
9571
+ font-size: 12px;
9572
+ color: var(--sui-text-muted);
9573
+ }
9574
+
9575
+ /* Inset container */
9576
+ .sui-color-picker-inset {
9577
+ background: var(--sui-bg);
9578
+ box-shadow: var(--sui-shadow-inset-sm);
9579
+ border-radius: var(--sui-radius);
9580
+ padding: 12px;
9581
+ }
9582
+
9583
+ .sui-color-picker-inset .sui-color-swatch {
9584
+ box-shadow: var(--sui-shadow-raised-sm);
9585
+ }
9586
+
9587
+ /* Spectrum picker */
9588
+ .sui-color-spectrum {
9589
+ display: inline-flex;
9590
+ flex-direction: column;
9591
+ gap: 12px;
9592
+ background: var(--sui-bg);
9593
+ box-shadow: var(--sui-shadow-raised);
9594
+ border-radius: var(--sui-radius-lg);
9595
+ padding: 16px;
9596
+ width: 280px;
9597
+ }
9598
+
9599
+ .sui-color-spectrum-canvas {
9600
+ position: relative;
9601
+ width: 100%;
9602
+ height: 180px;
9603
+ border-radius: var(--sui-radius-sm);
9604
+ overflow: hidden;
9605
+ cursor: crosshair;
9606
+ box-shadow: var(--sui-shadow-inset-sm);
9607
+ }
9608
+
9609
+ .sui-color-spectrum-canvas canvas {
9610
+ width: 100%;
9611
+ height: 100%;
9612
+ display: block;
9613
+ }
9614
+
9615
+ .sui-color-spectrum-cursor {
9616
+ position: absolute;
9617
+ width: 14px;
9618
+ height: 14px;
9619
+ border: 2px solid #fff;
9620
+ border-radius: 50%;
9621
+ box-shadow: 0 0 0 1px rgba(0,0,0,0.3), 0 2px 4px rgba(0,0,0,0.3);
9622
+ pointer-events: none;
9623
+ transform: translate(-50%, -50%);
9624
+ top: 0;
9625
+ left: 100%;
9626
+ }
9627
+
9628
+ .sui-color-spectrum-hue {
9629
+ position: relative;
9630
+ width: 100%;
9631
+ height: 14px;
9632
+ border-radius: 7px;
9633
+ background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);
9634
+ cursor: pointer;
9635
+ box-shadow: var(--sui-shadow-inset-sm);
9636
+ }
9637
+
9638
+ .sui-color-spectrum-hue-cursor {
9639
+ position: absolute;
9640
+ width: 18px;
9641
+ height: 18px;
9642
+ border: 2px solid #fff;
9643
+ border-radius: 50%;
9644
+ box-shadow: 0 0 0 1px rgba(0,0,0,0.2), 0 2px 4px rgba(0,0,0,0.2);
9645
+ pointer-events: none;
9646
+ transform: translate(-50%, -50%);
9647
+ top: 50%;
9648
+ left: 0;
9649
+ background: #f00;
9650
+ }
9651
+
9652
+ .sui-color-spectrum-footer {
9653
+ display: flex;
9654
+ align-items: center;
9655
+ gap: 10px;
9656
+ }
9657
+
9658
+ .sui-color-spectrum-preview {
9659
+ width: 40px;
9660
+ height: 40px;
9661
+ border-radius: var(--sui-radius-sm);
9662
+ box-shadow: var(--sui-shadow-inset-sm);
9663
+ flex-shrink: 0;
9664
+ }
9665
+
9666
+ .sui-color-spectrum-values {
9667
+ flex: 1;
9668
+ display: flex;
9669
+ flex-direction: column;
9670
+ gap: 6px;
9671
+ }
9672
+
9673
+ .sui-color-spectrum-hex {
9674
+ display: flex;
9675
+ align-items: center;
9676
+ gap: 6px;
9677
+ }
9678
+
9679
+ .sui-color-spectrum-hex label {
9680
+ font-size: 11px;
9681
+ font-weight: 600;
9682
+ color: var(--sui-text-muted);
9683
+ text-transform: uppercase;
9684
+ }
9685
+
9686
+ .sui-color-spectrum-hex input {
9687
+ flex: 1;
9688
+ background: var(--sui-bg);
9689
+ box-shadow: var(--sui-shadow-inset-sm);
9690
+ border: none;
9691
+ border-radius: var(--sui-radius-sm);
9692
+ padding: 6px 8px;
9693
+ font-size: 13px;
9694
+ font-family: var(--sui-font-mono);
9695
+ font-weight: 600;
9696
+ color: var(--sui-text);
9697
+ text-transform: uppercase;
9698
+ outline: none;
9699
+ width: 100%;
9700
+ }
9701
+
9702
+ .sui-color-spectrum-hex input:focus {
9703
+ box-shadow: var(--sui-shadow-inset-sm), 0 0 0 2px var(--sui-primary);
9704
+ }
9705
+
9706
+ .sui-color-spectrum-rgb {
9707
+ display: flex;
9708
+ gap: 6px;
9709
+ }
9710
+
9711
+ .sui-color-spectrum-rgb-field {
9712
+ display: flex;
9713
+ flex-direction: column;
9714
+ align-items: center;
9715
+ gap: 2px;
9716
+ flex: 1;
9717
+ }
9718
+
9719
+ .sui-color-spectrum-rgb-field input {
9720
+ width: 100%;
9721
+ background: var(--sui-bg);
9722
+ box-shadow: var(--sui-shadow-inset-sm);
9723
+ border: none;
9724
+ border-radius: var(--sui-radius-sm);
9725
+ padding: 5px 4px;
9726
+ font-size: 12px;
9727
+ font-family: var(--sui-font-mono);
9728
+ font-weight: 600;
9729
+ color: var(--sui-text);
9730
+ text-align: center;
9731
+ outline: none;
9732
+ }
9733
+
9734
+ .sui-color-spectrum-rgb-field input:focus {
9735
+ box-shadow: var(--sui-shadow-inset-sm), 0 0 0 2px var(--sui-primary);
9736
+ }
9737
+
9738
+ .sui-color-spectrum-rgb-field input::-webkit-inner-spin-button,
9739
+ .sui-color-spectrum-rgb-field input::-webkit-outer-spin-button {
9740
+ -webkit-appearance: none;
9741
+ margin: 0;
9742
+ }
9743
+
9744
+ .sui-color-spectrum-rgb-field input[type="number"] {
9745
+ -moz-appearance: textfield;
9746
+ }
9747
+
9748
+ /* =========================================
9749
+ File Upload
9750
+ ========================================= */
9751
+ .sui-file-upload {
9752
+ display: flex;
9753
+ flex-direction: column;
9754
+ align-items: center;
9755
+ justify-content: center;
9756
+ gap: 8px;
9757
+ padding: 32px 24px;
9758
+ border: 2px dashed var(--sui-bg-dark);
9759
+ border-radius: var(--sui-radius-lg);
9760
+ background: var(--sui-bg);
9761
+ text-align: center;
9762
+ cursor: pointer;
9763
+ transition: var(--sui-transition);
9764
+ position: relative;
9765
+ }
9766
+
9767
+ .sui-file-upload:hover {
9768
+ border-color: var(--sui-primary);
9769
+ box-shadow: var(--sui-shadow-raised-sm);
9770
+ }
9771
+
9772
+ .sui-file-upload.sui-file-upload-dragover {
9773
+ border-color: var(--sui-primary);
9774
+ background: rgba(91, 84, 224, 0.05);
9775
+ box-shadow: var(--sui-shadow-raised-sm);
9776
+ }
9777
+
9778
+ .sui-file-upload input[type="file"] {
9779
+ position: absolute;
9780
+ inset: 0;
9781
+ width: 100%;
9782
+ height: 100%;
9783
+ opacity: 0;
9784
+ cursor: pointer;
9785
+ }
9786
+
9787
+ .sui-file-upload-icon {
9788
+ width: 40px;
9789
+ height: 40px;
9790
+ color: var(--sui-text-muted);
9791
+ }
9792
+
9793
+ .sui-file-upload-icon svg {
9794
+ width: 100%;
9795
+ height: 100%;
9796
+ stroke: currentColor;
9797
+ fill: none;
9798
+ stroke-width: 1.5;
9799
+ stroke-linecap: round;
9800
+ stroke-linejoin: round;
9801
+ }
9802
+
9803
+ .sui-file-upload-text {
9804
+ font-size: 14px;
9805
+ color: var(--sui-text-muted);
9806
+ line-height: 1.4;
9807
+ }
9808
+
9809
+ .sui-file-upload-text strong {
9810
+ color: var(--sui-primary);
9811
+ font-weight: 600;
9812
+ }
9813
+
9814
+ .sui-file-upload-hint {
9815
+ font-size: 12px;
9816
+ color: var(--sui-text-light);
9817
+ }
9818
+
9819
+ .sui-file-upload-btn {
9820
+ margin-top: 4px;
9821
+ }
9822
+
9823
+ /* File list */
9824
+ .sui-file-list {
9825
+ display: flex;
9826
+ flex-direction: column;
9827
+ gap: 8px;
9828
+ width: 100%;
9829
+ }
9830
+
9831
+ .sui-file-item {
9832
+ display: flex;
9833
+ align-items: center;
9834
+ gap: 10px;
9835
+ padding: 10px 12px;
9836
+ background: var(--sui-bg);
9837
+ box-shadow: var(--sui-shadow-raised-sm);
9838
+ border-radius: var(--sui-radius);
9839
+ }
9840
+
9841
+ .sui-file-item-icon {
9842
+ width: 32px;
9843
+ height: 32px;
9844
+ display: flex;
9845
+ align-items: center;
9846
+ justify-content: center;
9847
+ border-radius: var(--sui-radius-sm);
9848
+ background: rgba(91, 84, 224, 0.1);
9849
+ flex-shrink: 0;
9850
+ }
9851
+
9852
+ .sui-file-item-icon svg {
9853
+ width: 16px;
9854
+ height: 16px;
9855
+ stroke: var(--sui-primary);
9856
+ fill: none;
9857
+ stroke-width: 2;
9858
+ stroke-linecap: round;
9859
+ stroke-linejoin: round;
9860
+ }
9861
+
9862
+ .sui-file-item-icon-image { background: rgba(54, 163, 247, 0.1); }
9863
+ .sui-file-item-icon-image svg { stroke: var(--sui-info); }
9864
+
9865
+ .sui-file-item-icon-pdf { background: rgba(231, 76, 111, 0.1); }
9866
+ .sui-file-item-icon-pdf svg { stroke: var(--sui-danger); }
9867
+
9868
+ .sui-file-item-icon-video { background: rgba(91, 84, 224, 0.1); }
9869
+ .sui-file-item-icon-video svg { stroke: var(--sui-primary); }
9870
+
9871
+ .sui-file-item-icon-audio { background: rgba(245, 166, 35, 0.1); }
9872
+ .sui-file-item-icon-audio svg { stroke: var(--sui-warning); }
9873
+
9874
+ .sui-file-item-icon-code { background: rgba(45, 206, 137, 0.1); }
9875
+ .sui-file-item-icon-code svg { stroke: var(--sui-success); }
9876
+
9877
+ .sui-file-item-icon-archive { background: rgba(108, 117, 125, 0.1); }
9878
+ .sui-file-item-icon-archive svg { stroke: #6C757D; }
9879
+
9880
+ .sui-file-item-icon-spreadsheet { background: rgba(45, 206, 137, 0.1); }
9881
+ .sui-file-item-icon-spreadsheet svg { stroke: var(--sui-success); }
9882
+
9883
+ .sui-file-item-info {
9884
+ flex: 1;
9885
+ min-width: 0;
9886
+ }
9887
+
9888
+ .sui-file-item-name {
9889
+ font-size: 13px;
9890
+ font-weight: 600;
9891
+ color: var(--sui-text);
9892
+ white-space: nowrap;
9893
+ overflow: hidden;
9894
+ text-overflow: ellipsis;
9895
+ }
9896
+
9897
+ .sui-file-item-size {
9898
+ font-size: 11px;
9899
+ color: var(--sui-text-muted);
9900
+ }
9901
+
9902
+ .sui-file-item-remove {
9903
+ width: 24px;
9904
+ height: 24px;
9905
+ display: flex;
9906
+ align-items: center;
9907
+ justify-content: center;
9908
+ border: none;
9909
+ background: none;
9910
+ color: var(--sui-text-muted);
9911
+ cursor: pointer;
9912
+ border-radius: 50%;
9913
+ transition: var(--sui-transition);
9914
+ flex-shrink: 0;
9915
+ font-size: 16px;
9916
+ line-height: 1;
9917
+ }
9918
+
9919
+ .sui-file-item-remove:hover {
9920
+ color: var(--sui-danger);
9921
+ background: rgba(231, 76, 111, 0.1);
9922
+ }
9923
+
9924
+ /* With progress */
9925
+ .sui-file-item-progress {
9926
+ width: 100%;
9927
+ }
9928
+
9929
+ .sui-file-item-progress .sui-progress {
9930
+ margin-top: 6px;
9931
+ }
9932
+
9933
+ .sui-file-item-status {
9934
+ font-size: 11px;
9935
+ font-weight: 500;
9936
+ }
9937
+
9938
+ .sui-file-item-status-uploading { color: var(--sui-primary); }
9939
+ .sui-file-item-status-complete { color: var(--sui-success); font-weight: 700; }
9940
+ .sui-file-item-status-error { color: var(--sui-danger); font-weight: 700; }
9941
+
9942
+ /* Wrap container */
9943
+ .sui-file-upload-wrap {
9944
+ display: flex;
9945
+ flex-direction: column;
9946
+ gap: 12px;
9947
+ }
9948
+
9949
+ /* Preview thumbnails */
9950
+ .sui-file-preview-grid {
9951
+ display: flex;
9952
+ flex-wrap: wrap;
9953
+ gap: 10px;
9954
+ width: 100%;
9955
+ }
9956
+
9957
+ .sui-file-preview-item {
9958
+ position: relative;
9959
+ width: 80px;
9960
+ height: 80px;
9961
+ border-radius: var(--sui-radius-sm);
9962
+ overflow: hidden;
9963
+ box-shadow: var(--sui-shadow-raised-sm);
9964
+ }
9965
+
9966
+ .sui-file-preview-item img {
9967
+ width: 100%;
9968
+ height: 100%;
9969
+ object-fit: cover;
9970
+ display: block;
9971
+ }
9972
+
9973
+ .sui-file-preview-item-remove {
9974
+ position: absolute;
9975
+ top: 4px;
9976
+ right: 4px;
9977
+ width: 20px;
9978
+ height: 20px;
9979
+ display: flex;
9980
+ align-items: center;
9981
+ justify-content: center;
9982
+ border: none;
9983
+ background: rgba(0,0,0,0.6);
9984
+ color: #fff;
9985
+ cursor: pointer;
9986
+ border-radius: 50%;
9987
+ font-size: 12px;
9988
+ line-height: 1;
9989
+ transition: var(--sui-transition);
9990
+ }
9991
+
9992
+ .sui-file-preview-item-remove:hover {
9993
+ background: var(--sui-danger);
9994
+ }
9995
+
9996
+ /* Compact */
9997
+ .sui-file-upload-compact {
9998
+ flex-direction: row;
9999
+ padding: 12px 16px;
10000
+ gap: 12px;
10001
+ }
10002
+
10003
+ .sui-file-upload-compact .sui-file-upload-icon {
10004
+ width: 28px;
10005
+ height: 28px;
10006
+ }
10007
+
10008
+ .sui-file-upload-compact .sui-file-upload-text {
10009
+ font-size: 13px;
10010
+ }
10011
+
10012
+ /* Inset */
10013
+ .sui-file-upload-inset {
10014
+ border: none;
10015
+ box-shadow: var(--sui-shadow-inset-sm);
10016
+ }
10017
+
10018
+ .sui-file-upload-inset:hover {
10019
+ box-shadow: var(--sui-shadow-inset-sm), 0 0 0 2px var(--sui-primary);
10020
+ }
10021
+
10022
+ .sui-file-upload-inset.sui-file-upload-dragover {
10023
+ box-shadow: var(--sui-shadow-inset-sm), 0 0 0 2px var(--sui-primary);
10024
+ }
10025
+
10026
+ /* =========================================
10027
+ Radial Progress
10028
+ ========================================= */
10029
+ .sui-radial {
10030
+ position: relative;
10031
+ display: inline-flex;
10032
+ align-items: center;
10033
+ justify-content: center;
10034
+ width: 100px;
10035
+ height: 100px;
10036
+ }
10037
+
10038
+ .sui-radial svg {
10039
+ width: 100%;
10040
+ height: 100%;
10041
+ transform: rotate(-90deg);
10042
+ }
10043
+
10044
+ .sui-radial-track {
10045
+ fill: none;
10046
+ stroke: var(--sui-bg-dark);
10047
+ stroke-width: 8;
10048
+ }
10049
+
10050
+ .sui-radial-fill {
10051
+ fill: none;
10052
+ stroke: var(--sui-primary);
10053
+ stroke-width: 8;
10054
+ stroke-linecap: round;
10055
+ stroke-dasharray: 251.2;
10056
+ stroke-dashoffset: 251.2;
10057
+ transition: stroke-dashoffset 0.6s ease;
10058
+ }
10059
+
10060
+ .sui-radial-value {
10061
+ position: absolute;
10062
+ top: 50%;
10063
+ left: 50%;
10064
+ transform: translate(-50%, -50%);
10065
+ font-size: 20px;
10066
+ font-weight: 700;
10067
+ color: var(--sui-text);
10068
+ line-height: 1;
10069
+ }
10070
+
10071
+ .sui-radial-label {
10072
+ position: absolute;
10073
+ top: 50%;
10074
+ left: 50%;
10075
+ transform: translate(-50%, -50%);
10076
+ display: flex;
10077
+ flex-direction: column;
10078
+ align-items: center;
10079
+ gap: 2px;
10080
+ line-height: 1;
10081
+ }
10082
+
10083
+ .sui-radial-label .sui-radial-value {
10084
+ position: static;
10085
+ transform: none;
10086
+ }
10087
+
10088
+ .sui-radial-label-text {
10089
+ font-size: 11px;
10090
+ color: var(--sui-text-muted);
10091
+ font-weight: 500;
10092
+ }
10093
+
10094
+ /* Sizes */
10095
+ .sui-radial-sm {
10096
+ width: 64px;
10097
+ height: 64px;
10098
+ }
10099
+
10100
+ .sui-radial-sm .sui-radial-track,
10101
+ .sui-radial-sm .sui-radial-fill {
10102
+ stroke-width: 6;
10103
+ }
10104
+
10105
+ .sui-radial-sm .sui-radial-fill {
10106
+ stroke-dasharray: 163.4;
10107
+ stroke-dashoffset: 163.4;
10108
+ }
10109
+
10110
+ .sui-radial-sm .sui-radial-value {
10111
+ font-size: 14px;
10112
+ }
10113
+
10114
+ .sui-radial-sm .sui-radial-label-text {
10115
+ font-size: 9px;
10116
+ }
10117
+
10118
+ .sui-radial-lg {
10119
+ width: 140px;
10120
+ height: 140px;
10121
+ }
10122
+
10123
+ .sui-radial-lg .sui-radial-track,
10124
+ .sui-radial-lg .sui-radial-fill {
10125
+ stroke-width: 10;
10126
+ }
10127
+
10128
+ .sui-radial-lg .sui-radial-fill {
10129
+ stroke-dasharray: 345.6;
10130
+ stroke-dashoffset: 345.6;
10131
+ }
10132
+
10133
+ .sui-radial-lg .sui-radial-value {
10134
+ font-size: 28px;
10135
+ }
10136
+
10137
+ .sui-radial-lg .sui-radial-label-text {
10138
+ font-size: 13px;
10139
+ }
10140
+
10141
+ /* Colors */
10142
+ .sui-radial-success .sui-radial-fill { stroke: var(--sui-success); }
10143
+ .sui-radial-danger .sui-radial-fill { stroke: var(--sui-danger); }
10144
+ .sui-radial-warning .sui-radial-fill { stroke: var(--sui-warning); }
10145
+ .sui-radial-info .sui-radial-fill { stroke: var(--sui-info); }
10146
+
10147
+ /* Animated */
10148
+ .sui-radial-animated .sui-radial-fill {
10149
+ transition: stroke-dashoffset 1.2s cubic-bezier(0.4, 0, 0.2, 1);
10150
+ }
10151
+
10152
+ /* Inset — inner circle is pressed in */
10153
+ .sui-radial-inset .sui-radial-track {
10154
+ stroke: none;
10155
+ }
10156
+
10157
+ .sui-radial-inset::before {
10158
+ content: "";
10159
+ position: absolute;
10160
+ top: 12%;
10161
+ left: 12%;
10162
+ width: 76%;
10163
+ height: 76%;
10164
+ border-radius: 50%;
10165
+ background: var(--sui-bg);
10166
+ box-shadow: var(--sui-shadow-inset-sm);
10167
+ }
10168
+
10169
+ /* =========================================
10170
+ Dock
10171
+ ========================================= */
10172
+ .sui-dock {
10173
+ display: inline-flex;
10174
+ align-items: flex-end;
10175
+ gap: 4px;
10176
+ padding: 8px 12px;
10177
+ background: var(--sui-bg);
10178
+ border-radius: var(--sui-radius-lg);
10179
+ box-shadow: var(--sui-shadow-raised);
10180
+ }
10181
+
10182
+ .sui-dock-item {
10183
+ width: 40px;
10184
+ height: 40px;
10185
+ display: flex;
10186
+ align-items: center;
10187
+ justify-content: center;
10188
+ border-radius: var(--sui-radius-sm);
10189
+ background: var(--sui-bg);
10190
+ box-shadow: var(--sui-shadow-raised-sm);
10191
+ cursor: pointer;
10192
+ transition: transform 0.2s cubic-bezier(0.2, 0, 0, 1), width 0.2s cubic-bezier(0.2, 0, 0, 1), height 0.2s cubic-bezier(0.2, 0, 0, 1);
10193
+ position: relative;
10194
+ flex-shrink: 0;
10195
+ border: none;
10196
+ padding: 0;
10197
+ font: inherit;
10198
+ outline: none;
10199
+ }
10200
+
10201
+ .sui-dock-item svg {
10202
+ width: 22px;
10203
+ height: 22px;
10204
+ stroke: var(--sui-text-muted);
10205
+ fill: none;
10206
+ stroke-width: 1.5;
10207
+ stroke-linecap: round;
10208
+ stroke-linejoin: round;
10209
+ transition: width 0.2s cubic-bezier(0.2, 0, 0, 1), height 0.2s cubic-bezier(0.2, 0, 0, 1);
10210
+ }
10211
+
10212
+ .sui-dock-item:hover {
10213
+ box-shadow: var(--sui-shadow-raised);
10214
+ }
10215
+
10216
+ /* Tooltip label */
10217
+ .sui-dock-item[data-label]::after {
10218
+ content: attr(data-label);
10219
+ position: absolute;
10220
+ bottom: calc(100% + 8px);
10221
+ left: 50%;
10222
+ transform: translateX(-50%) scale(0.8);
10223
+ background: var(--sui-text);
10224
+ color: var(--sui-bg);
10225
+ font-size: 11px;
10226
+ font-weight: 600;
10227
+ padding: 4px 8px;
10228
+ border-radius: var(--sui-radius-sm);
10229
+ white-space: nowrap;
10230
+ opacity: 0;
10231
+ pointer-events: none;
10232
+ transition: opacity 0.15s ease, transform 0.15s ease;
10233
+ }
10234
+
10235
+ .sui-dock-item[data-label]:hover::after {
10236
+ opacity: 1;
10237
+ transform: translateX(-50%) scale(1);
10238
+ }
10239
+
10240
+ /* Vertical */
10241
+ .sui-dock-vertical {
10242
+ flex-direction: column;
10243
+ align-items: flex-start;
10244
+ padding: 12px 8px;
10245
+ }
10246
+
10247
+ .sui-dock-vertical .sui-dock-item[data-label]::after {
10248
+ bottom: auto;
10249
+ left: calc(100% + 8px);
10250
+ top: 50%;
10251
+ transform: translateY(-50%) scale(0.8);
10252
+ }
10253
+
10254
+ .sui-dock-vertical .sui-dock-item[data-label]:hover::after {
10255
+ transform: translateY(-50%) scale(1);
10256
+ }
10257
+
10258
+ /* Sizes */
10259
+ .sui-dock-sm .sui-dock-item {
10260
+ width: 32px;
10261
+ height: 32px;
10262
+ }
10263
+
10264
+ .sui-dock-sm .sui-dock-item svg {
10265
+ width: 16px;
10266
+ height: 16px;
10267
+ }
10268
+
10269
+ .sui-dock-lg .sui-dock-item {
10270
+ width: 52px;
10271
+ height: 52px;
10272
+ }
10273
+
10274
+ .sui-dock-lg .sui-dock-item svg {
10275
+ width: 28px;
10276
+ height: 28px;
10277
+ }
10278
+
10279
+ /* Colors */
10280
+ .sui-dock-dark {
10281
+ background: #1B1D2A;
10282
+ box-shadow: none;
10283
+ }
10284
+
10285
+ .sui-dock-dark .sui-dock-item {
10286
+ background: rgba(255, 255, 255, 0.1);
10287
+ box-shadow: none;
10288
+ }
10289
+
10290
+ .sui-dock-dark .sui-dock-item svg {
10291
+ stroke: rgba(255, 255, 255, 0.8);
10292
+ }
10293
+
10294
+ .sui-dock-dark .sui-dock-item:hover {
10295
+ background: rgba(255, 255, 255, 0.2);
10296
+ box-shadow: none;
10297
+ }
10298
+
10299
+ .sui-dock-primary {
10300
+ background: var(--sui-primary);
10301
+ box-shadow: none;
10302
+ }
10303
+
10304
+ .sui-dock-primary .sui-dock-item {
10305
+ background: rgba(255, 255, 255, 0.15);
10306
+ box-shadow: none;
10307
+ }
10308
+
10309
+ .sui-dock-primary .sui-dock-item svg {
10310
+ stroke: rgba(255, 255, 255, 0.9);
10311
+ }
10312
+
10313
+ .sui-dock-primary .sui-dock-item:hover {
10314
+ background: rgba(255, 255, 255, 0.25);
10315
+ box-shadow: none;
10316
+ }
10317
+
10318
+ /* Icon-only scale — button stays fixed, SVG grows */
10319
+ .sui-dock-icon-scale .sui-dock-item {
10320
+ transition: none;
10321
+ }
10322
+
10323
+ .sui-dock-icon-scale .sui-dock-item svg {
10324
+ transition: transform 0.2s cubic-bezier(0.2, 0, 0, 1);
10325
+ }
10326
+
10327
+ /* No scale */
10328
+ .sui-dock-no-scale .sui-dock-item {
10329
+ transition: none;
10330
+ }
10331
+
10332
+ /* Ghost — no tray background */
10333
+ .sui-dock-ghost {
10334
+ background: none;
10335
+ box-shadow: none;
10336
+ padding: 0;
10337
+ }
10338
+
10339
+ /* Inset */
10340
+ .sui-dock-inset {
10341
+ box-shadow: var(--sui-shadow-inset);
10342
+ }
10343
+
10344
+ .sui-dock-inset .sui-dock-item {
10345
+ box-shadow: var(--sui-shadow-raised-sm);
10346
+ }
10347
+
10348
+ /* =========================================
10349
+ Swap
10350
+ ========================================= */
10351
+ .sui-swap {
10352
+ display: inline-flex;
10353
+ align-items: center;
10354
+ justify-content: center;
10355
+ cursor: pointer;
10356
+ position: relative;
10357
+ width: 40px;
10358
+ height: 40px;
10359
+ border: none;
10360
+ background: none;
10361
+ padding: 0;
10362
+ font: inherit;
10363
+ outline: none;
10364
+ color: var(--sui-text);
10365
+ }
10366
+
10367
+ .sui-swap-on,
10368
+ .sui-swap-off {
10369
+ display: flex;
10370
+ align-items: center;
10371
+ justify-content: center;
10372
+ transition: opacity 0.3s ease, transform 0.3s ease;
10373
+ }
10374
+
10375
+ .sui-swap-on {
10376
+ position: absolute;
10377
+ opacity: 0;
10378
+ transform: scale(0);
10379
+ }
10380
+
10381
+ .sui-swap-off {
10382
+ opacity: 1;
10383
+ transform: scale(1);
10384
+ }
10385
+
10386
+ .sui-swap.active .sui-swap-on {
10387
+ opacity: 1;
10388
+ transform: scale(1);
10389
+ }
10390
+
10391
+ .sui-swap.active .sui-swap-off {
10392
+ opacity: 0;
10393
+ transform: scale(0);
10394
+ }
10395
+
10396
+ .sui-swap svg {
10397
+ width: 24px;
10398
+ height: 24px;
10399
+ stroke: currentColor;
10400
+ fill: none;
10401
+ stroke-width: 2;
10402
+ stroke-linecap: round;
10403
+ stroke-linejoin: round;
10404
+ }
10405
+
10406
+ /* Rotate */
10407
+ .sui-swap-rotate .sui-swap-on {
10408
+ transform: rotate(-180deg) scale(0);
10409
+ }
10410
+
10411
+ .sui-swap-rotate .sui-swap-off {
10412
+ transform: rotate(0deg) scale(1);
10413
+ }
10414
+
10415
+ .sui-swap-rotate.active .sui-swap-on {
10416
+ transform: rotate(0deg) scale(1);
10417
+ }
10418
+
10419
+ .sui-swap-rotate.active .sui-swap-off {
10420
+ transform: rotate(180deg) scale(0);
10421
+ }
10422
+
10423
+ /* Flip */
10424
+ .sui-swap-flip {
10425
+ perspective: 200px;
10426
+ }
10427
+
10428
+ .sui-swap-flip .sui-swap-on,
10429
+ .sui-swap-flip .sui-swap-off {
10430
+ backface-visibility: hidden;
10431
+ transition: transform 0.4s ease;
10432
+ transform-style: preserve-3d;
10433
+ }
10434
+
10435
+ .sui-swap-flip .sui-swap-on {
10436
+ transform: rotateY(180deg);
10437
+ opacity: 1;
10438
+ }
10439
+
10440
+ .sui-swap-flip .sui-swap-off {
10441
+ transform: rotateY(0deg);
10442
+ opacity: 1;
10443
+ }
10444
+
10445
+ .sui-swap-flip.active .sui-swap-on {
10446
+ transform: rotateY(0deg);
10447
+ }
10448
+
10449
+ .sui-swap-flip.active .sui-swap-off {
10450
+ transform: rotateY(-180deg);
10451
+ }
10452
+
10453
+ /* Fade */
10454
+ .sui-swap-fade .sui-swap-on {
10455
+ transform: none;
10456
+ opacity: 0;
10457
+ }
10458
+
10459
+ .sui-swap-fade .sui-swap-off {
10460
+ transform: none;
10461
+ opacity: 1;
10462
+ }
10463
+
10464
+ .sui-swap-fade.active .sui-swap-on {
10465
+ opacity: 1;
10466
+ }
10467
+
10468
+ .sui-swap-fade.active .sui-swap-off {
10469
+ opacity: 0;
10470
+ }
10471
+
10472
+ /* Slide */
10473
+ .sui-swap-slide {
10474
+ overflow: hidden;
10475
+ }
10476
+
10477
+ .sui-swap-slide .sui-swap-on,
10478
+ .sui-swap-slide .sui-swap-off {
10479
+ position: absolute;
10480
+ top: 0;
10481
+ left: 0;
10482
+ width: 100%;
10483
+ height: 100%;
10484
+ opacity: 1;
10485
+ }
10486
+
10487
+ .sui-swap-slide .sui-swap-off {
10488
+ transform: translateY(0);
10489
+ }
10490
+
10491
+ .sui-swap-slide .sui-swap-on {
10492
+ transform: translateY(-100%);
10493
+ }
10494
+
10495
+ .sui-swap-slide.active .sui-swap-on {
10496
+ transform: translateY(0);
10497
+ }
10498
+
10499
+ .sui-swap-slide.active .sui-swap-off {
10500
+ transform: translateY(100%);
10501
+ }
10502
+
10503
+ /* Text swap */
10504
+ .sui-swap-text {
10505
+ width: auto;
10506
+ height: auto;
10507
+ font-weight: 600;
10508
+ font-size: 14px;
10509
+ }
10510
+
10511
+ .sui-swap-text .sui-swap-on,
10512
+ .sui-swap-text .sui-swap-off {
10513
+ padding: 4px 8px;
10514
+ }
10515
+
10516
+ /* Cycle — multi-state swap */
10517
+ .sui-swap-cycle .sui-swap-state {
10518
+ display: flex;
10519
+ align-items: center;
10520
+ justify-content: center;
10521
+ position: absolute;
10522
+ opacity: 0;
10523
+ transform: scale(0);
10524
+ transition: opacity 0.3s ease, transform 0.3s ease;
10525
+ }
10526
+
10527
+ .sui-swap-cycle .sui-swap-state.active {
10528
+ opacity: 1;
10529
+ transform: scale(1);
10530
+ position: relative;
10531
+ }
10532
+
10533
+ .sui-swap-cycle.sui-swap-rotate .sui-swap-state {
10534
+ transform: rotate(-180deg) scale(0);
10535
+ }
10536
+
10537
+ .sui-swap-cycle.sui-swap-rotate .sui-swap-state.active {
10538
+ transform: rotate(0deg) scale(1);
10539
+ }
10540
+
10541
+ .sui-swap-cycle.sui-swap-fade .sui-swap-state {
10542
+ transform: none;
10543
+ }
10544
+
10545
+ .sui-swap-cycle.sui-swap-fade .sui-swap-state.active {
10546
+ transform: none;
10547
+ }
10548
+
10549
+ .sui-swap-cycle.sui-swap-slide {
10550
+ overflow: hidden;
10551
+ }
10552
+
10553
+ .sui-swap-cycle.sui-swap-slide .sui-swap-state {
10554
+ position: absolute;
10555
+ top: 0;
10556
+ left: 0;
10557
+ width: 100%;
10558
+ height: 100%;
10559
+ transform: translateY(-100%);
10560
+ opacity: 1;
10561
+ }
10562
+
10563
+ .sui-swap-cycle.sui-swap-slide .sui-swap-state.active {
10564
+ transform: translateY(0);
10565
+ }
10566
+
10567
+ .sui-swap-slide-x {
10568
+ overflow: hidden;
10569
+ }
10570
+
10571
+ .sui-swap-slide-x .sui-swap-on,
10572
+ .sui-swap-slide-x .sui-swap-off,
10573
+ .sui-swap-cycle.sui-swap-slide-x .sui-swap-state {
10574
+ position: absolute;
10575
+ top: 0;
10576
+ left: 0;
10577
+ width: 100%;
10578
+ height: 100%;
10579
+ opacity: 1;
10580
+ }
10581
+
10582
+ .sui-swap-slide-x .sui-swap-off,
10583
+ .sui-swap-cycle.sui-swap-slide-x .sui-swap-state.active {
10584
+ transform: translateX(0);
10585
+ }
10586
+
10587
+ .sui-swap-slide-x .sui-swap-on,
10588
+ .sui-swap-cycle.sui-swap-slide-x .sui-swap-state {
10589
+ transform: translateX(-100%);
10590
+ }
10591
+
10592
+ .sui-swap-slide-x.active .sui-swap-on {
10593
+ transform: translateX(0);
10594
+ }
10595
+
10596
+ .sui-swap-slide-x.active .sui-swap-off {
10597
+ transform: translateX(100%);
10598
+ }
10599
+
10600
+ /* Sizes */
10601
+ .sui-swap-sm { width: 28px; height: 28px; }
10602
+ .sui-swap-sm svg { width: 16px; height: 16px; }
10603
+
10604
+ .sui-swap-lg { width: 52px; height: 52px; }
10605
+ .sui-swap-lg svg { width: 32px; height: 32px; }
10606
+
10607
+ /* Inset */
10608
+ .sui-swap-inset {
10609
+ background: var(--sui-bg);
10610
+ box-shadow: var(--sui-shadow-inset-sm);
10611
+ border-radius: var(--sui-radius-sm);
10612
+ padding: 8px;
10613
+ width: auto;
10614
+ height: auto;
10615
+ }
10616
+
10617
+ .sui-color-spectrum-rgb-field label {
10618
+ font-size: 10px;
10619
+ font-weight: 600;
10620
+ color: var(--sui-text-muted);
10621
+ text-transform: uppercase;
10622
+ }