@quilltap/theme-storybook 1.0.62 → 1.0.63

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/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  All notable changes to `@quilltap/theme-storybook` will be documented in this file.
4
4
 
5
+ ## [1.0.63] - 2026-08-25
6
+
7
+ ### Added
8
+ - The rest of the `qt-*` utility families the app actually ships, so a theme can be previewed against what it will really meet: the missing opacity steps for `qt-bg-muted` (20–80), `qt-bg-card` (50–90), `qt-bg-primary`, `qt-bg-destructive`, `qt-bg-success`, `qt-bg-warning`, `qt-bg-info` and `qt-bg-secondary`; `qt-border-default`, `qt-border-primary`, `qt-border-destructive`, `qt-border-warning` and `qt-border-success` at their used opacities; `qt-text-secondary/50–80` and the status colours at `/80`; and the surface colours `qt-bg-default`, `qt-bg-input`, `qt-bg-secondary`, `qt-border-accent`, `qt-border-primary-foreground`.
9
+ - 34 state forms of those utilities — `hover:`, `focus:`, `disabled:`, `placeholder:`, `file:` and one named `group-hover/thumb:`. In the app every one of these is hand-written and escaped, because Tailwind generates no variants for a class declared inside `@layer utilities`; they are mirrored here so a theme author previewing hover states sees what the app actually ships rather than a resting state that never moves.
10
+
11
+ ### Notes
12
+ - The typography-sizing classes (`qt-text-small`, `qt-text-xs`, `qt-text-label`, `qt-text-label-xs`, `qt-text-large`, `qt-text-lead`, `qt-text-section`) live in the app's `@layer components` sheet and have never been mirrored here. Still outstanding; the color-carrying `qt-text-*` utilities are complete.
13
+
5
14
  ## [1.0.62] - 2026-08-25
6
15
 
7
16
  ### Added
package/dist/index.css CHANGED
@@ -1957,6 +1957,141 @@ body {
1957
1957
  .qt-text-on-destructive {
1958
1958
  color: var(--color-destructive-foreground);
1959
1959
  }
1960
+ .qt-bg-card\/50 {
1961
+ background-color: color-mix(in srgb, var(--color-card) 50%, transparent);
1962
+ }
1963
+ .qt-bg-card\/60 {
1964
+ background-color: color-mix(in srgb, var(--color-card) 60%, transparent);
1965
+ }
1966
+ .qt-bg-card\/80 {
1967
+ background-color: color-mix(in srgb, var(--color-card) 80%, transparent);
1968
+ }
1969
+ .qt-bg-card\/90 {
1970
+ background-color: color-mix(in srgb, var(--color-card) 90%, transparent);
1971
+ }
1972
+ .qt-bg-default {
1973
+ background-color: var(--color-background);
1974
+ }
1975
+ .qt-bg-destructive\/15 {
1976
+ background-color: color-mix(in srgb, var(--color-destructive) 15%, transparent);
1977
+ }
1978
+ .qt-bg-destructive\/80 {
1979
+ background-color: color-mix(in srgb, var(--color-destructive) 80%, transparent);
1980
+ }
1981
+ .qt-bg-info\/15 {
1982
+ background-color: color-mix(in srgb, var(--color-info) 15%, transparent);
1983
+ }
1984
+ .qt-bg-input {
1985
+ background-color: var(--color-input);
1986
+ }
1987
+ .qt-bg-muted-foreground\/20 {
1988
+ background-color: color-mix(in srgb, var(--color-muted-foreground) 20%, transparent);
1989
+ }
1990
+ .qt-bg-muted\/20 {
1991
+ background-color: color-mix(in srgb, var(--color-muted) 20%, transparent);
1992
+ }
1993
+ .qt-bg-muted\/30 {
1994
+ background-color: color-mix(in srgb, var(--color-muted) 30%, transparent);
1995
+ }
1996
+ .qt-bg-muted\/40 {
1997
+ background-color: color-mix(in srgb, var(--color-muted) 40%, transparent);
1998
+ }
1999
+ .qt-bg-muted\/50 {
2000
+ background-color: color-mix(in srgb, var(--color-muted) 50%, transparent);
2001
+ }
2002
+ .qt-bg-muted\/60 {
2003
+ background-color: color-mix(in srgb, var(--color-muted) 60%, transparent);
2004
+ }
2005
+ .qt-bg-muted\/70 {
2006
+ background-color: color-mix(in srgb, var(--color-muted) 70%, transparent);
2007
+ }
2008
+ .qt-bg-muted\/80 {
2009
+ background-color: color-mix(in srgb, var(--color-muted) 80%, transparent);
2010
+ }
2011
+ .qt-bg-primary\/15 {
2012
+ background-color: color-mix(in srgb, var(--color-primary) 15%, transparent);
2013
+ }
2014
+ .qt-bg-primary\/30 {
2015
+ background-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
2016
+ }
2017
+ .qt-bg-secondary\/50 {
2018
+ background-color: color-mix(in srgb, var(--color-secondary) 50%, transparent);
2019
+ }
2020
+ .qt-bg-success\/15 {
2021
+ background-color: color-mix(in srgb, var(--color-success) 15%, transparent);
2022
+ }
2023
+ .qt-bg-warning\/15 {
2024
+ background-color: color-mix(in srgb, var(--color-warning) 15%, transparent);
2025
+ }
2026
+ .qt-border-accent {
2027
+ border-color: var(--color-accent);
2028
+ }
2029
+ .qt-border-default\/50 {
2030
+ border-color: color-mix(in srgb, var(--color-border) 50%, transparent);
2031
+ }
2032
+ .qt-border-default\/60 {
2033
+ border-color: color-mix(in srgb, var(--color-border) 60%, transparent);
2034
+ }
2035
+ .qt-border-default\/70 {
2036
+ border-color: color-mix(in srgb, var(--color-border) 70%, transparent);
2037
+ }
2038
+ .qt-border-destructive\/20 {
2039
+ border-color: color-mix(in srgb, var(--color-destructive) 20%, transparent);
2040
+ }
2041
+ .qt-border-destructive\/40 {
2042
+ border-color: color-mix(in srgb, var(--color-destructive) 40%, transparent);
2043
+ }
2044
+ .qt-border-destructive\/50 {
2045
+ border-color: color-mix(in srgb, var(--color-destructive) 50%, transparent);
2046
+ }
2047
+ .qt-border-primary-foreground {
2048
+ border-color: var(--color-primary-foreground);
2049
+ }
2050
+ .qt-border-primary\/20 {
2051
+ border-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
2052
+ }
2053
+ .qt-border-primary\/30 {
2054
+ border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
2055
+ }
2056
+ .qt-border-primary\/40 {
2057
+ border-color: color-mix(in srgb, var(--color-primary) 40%, transparent);
2058
+ }
2059
+ .qt-border-primary\/50 {
2060
+ border-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
2061
+ }
2062
+ .qt-border-primary\/60 {
2063
+ border-color: color-mix(in srgb, var(--color-primary) 60%, transparent);
2064
+ }
2065
+ .qt-border-success\/50 {
2066
+ border-color: color-mix(in srgb, var(--color-success) 50%, transparent);
2067
+ }
2068
+ .qt-border-warning\/50 {
2069
+ border-color: color-mix(in srgb, var(--color-warning) 50%, transparent);
2070
+ }
2071
+ .qt-text-destructive\/80 {
2072
+ color: color-mix(in srgb, var(--color-destructive) 80%, transparent);
2073
+ }
2074
+ .qt-text-info\/80 {
2075
+ color: color-mix(in srgb, var(--color-info) 80%, transparent);
2076
+ }
2077
+ .qt-text-secondary\/50 {
2078
+ color: color-mix(in srgb, var(--color-muted-foreground) 50%, transparent);
2079
+ }
2080
+ .qt-text-secondary\/60 {
2081
+ color: color-mix(in srgb, var(--color-muted-foreground) 60%, transparent);
2082
+ }
2083
+ .qt-text-secondary\/70 {
2084
+ color: color-mix(in srgb, var(--color-muted-foreground) 70%, transparent);
2085
+ }
2086
+ .qt-text-secondary\/80 {
2087
+ color: color-mix(in srgb, var(--color-muted-foreground) 80%, transparent);
2088
+ }
2089
+ .qt-text-success\/80 {
2090
+ color: color-mix(in srgb, var(--color-success) 80%, transparent);
2091
+ }
2092
+ .qt-text-warning\/80 {
2093
+ color: color-mix(in srgb, var(--color-warning) 80%, transparent);
2094
+ }
1960
2095
  .qt-hover-accent {
1961
2096
  transition: background-color 0.15s ease, color 0.15s ease;
1962
2097
  }
@@ -2099,6 +2234,111 @@ body {
2099
2234
  .hover\:qt-text-on-destructive:hover {
2100
2235
  color: var(--color-destructive-foreground);
2101
2236
  }
2237
+ .hover\:qt-bg-surface-hover:hover {
2238
+ background-color: var(--color-muted);
2239
+ }
2240
+ .hover\:qt-bg-muted:hover {
2241
+ background-color: var(--color-muted);
2242
+ }
2243
+ .hover\:qt-bg-muted\/30:hover {
2244
+ background-color: color-mix(in srgb, var(--color-muted) 30%, transparent);
2245
+ }
2246
+ .hover\:qt-bg-muted\/40:hover {
2247
+ background-color: color-mix(in srgb, var(--color-muted) 40%, transparent);
2248
+ }
2249
+ .hover\:qt-bg-muted\/50:hover {
2250
+ background-color: color-mix(in srgb, var(--color-muted) 50%, transparent);
2251
+ }
2252
+ .hover\:qt-bg-muted\/80:hover {
2253
+ background-color: color-mix(in srgb, var(--color-muted) 80%, transparent);
2254
+ }
2255
+ .hover\:qt-bg-primary\/5:hover {
2256
+ background-color: color-mix(in srgb, var(--color-primary) 5%, transparent);
2257
+ }
2258
+ .hover\:qt-bg-primary\/15:hover {
2259
+ background-color: color-mix(in srgb, var(--color-primary) 15%, transparent);
2260
+ }
2261
+ .hover\:qt-bg-primary\/20:hover {
2262
+ background-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
2263
+ }
2264
+ .hover\:qt-bg-primary\/90:hover {
2265
+ background-color: color-mix(in srgb, var(--color-primary) 90%, transparent);
2266
+ }
2267
+ .hover\:qt-bg-destructive:hover {
2268
+ background-color: var(--color-destructive);
2269
+ }
2270
+ .hover\:qt-bg-destructive\/20:hover {
2271
+ background-color: color-mix(in srgb, var(--color-destructive) 20%, transparent);
2272
+ }
2273
+ .hover\:qt-bg-destructive\/90:hover {
2274
+ background-color: color-mix(in srgb, var(--color-destructive) 90%, transparent);
2275
+ }
2276
+ .hover\:qt-bg-success\/20:hover {
2277
+ background-color: color-mix(in srgb, var(--color-success) 20%, transparent);
2278
+ }
2279
+ .hover\:qt-bg-success\/90:hover {
2280
+ background-color: color-mix(in srgb, var(--color-success) 90%, transparent);
2281
+ }
2282
+ .hover\:qt-bg-warning\/20:hover {
2283
+ background-color: color-mix(in srgb, var(--color-warning) 20%, transparent);
2284
+ }
2285
+ .hover\:qt-bg-info\/20:hover {
2286
+ background-color: color-mix(in srgb, var(--color-info) 20%, transparent);
2287
+ }
2288
+ .hover\:qt-text-destructive:hover {
2289
+ color: var(--color-destructive);
2290
+ }
2291
+ .hover\:qt-text-destructive\/80:hover {
2292
+ color: color-mix(in srgb, var(--color-destructive) 80%, transparent);
2293
+ }
2294
+ .hover\:qt-text-warning\/80:hover {
2295
+ color: color-mix(in srgb, var(--color-warning) 80%, transparent);
2296
+ }
2297
+ .hover\:qt-text-info\/80:hover {
2298
+ color: color-mix(in srgb, var(--color-info) 80%, transparent);
2299
+ }
2300
+ .hover\:qt-text-primary:hover {
2301
+ color: var(--qt-text-primary-fg, var(--color-foreground));
2302
+ }
2303
+ .hover\:qt-border-primary:hover {
2304
+ border-color: var(--color-primary);
2305
+ }
2306
+ .hover\:qt-border-primary\/50:hover {
2307
+ border-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
2308
+ }
2309
+ .hover\:qt-border-primary\/60:hover {
2310
+ border-color: color-mix(in srgb, var(--color-primary) 60%, transparent);
2311
+ }
2312
+ .hover\:qt-border-accent:hover {
2313
+ border-color: var(--color-accent);
2314
+ }
2315
+ .focus\:qt-border-primary:focus {
2316
+ border-color: var(--color-primary);
2317
+ }
2318
+ .disabled\:qt-bg-muted:disabled {
2319
+ background-color: var(--color-muted);
2320
+ }
2321
+ .disabled\:qt-text-secondary:disabled {
2322
+ color: var(--color-muted-foreground);
2323
+ }
2324
+ .placeholder\:qt-text-secondary::-moz-placeholder {
2325
+ color: var(--color-muted-foreground);
2326
+ }
2327
+ .placeholder\:qt-text-secondary::placeholder {
2328
+ color: var(--color-muted-foreground);
2329
+ }
2330
+ .file\:qt-bg-primary\/20::file-selector-button {
2331
+ background-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
2332
+ }
2333
+ .hover\:file\:qt-bg-primary\/30:hover::file-selector-button {
2334
+ background-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
2335
+ }
2336
+ .hover\:qt-shadow-md:hover {
2337
+ box-shadow: var(--qt-card-shadow-hover, 0 4px 12px hsl(225 18% 10% / 0.1), 0 2px 4px hsl(225 18% 10% / 0.05));
2338
+ }
2339
+ .group\/thumb:hover .group-hover\/thumb\:qt-bg-overlay-light {
2340
+ background-color: var(--qt-overlay-light-bg, rgb(0 0 0 / 0.2));
2341
+ }
2102
2342
  .qt-bg-overlay {
2103
2343
  background-color: var(--qt-overlay-bg, rgb(0 0 0 / 0.85));
2104
2344
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quilltap/theme-storybook",
3
- "version": "1.0.62",
3
+ "version": "1.0.63",
4
4
  "description": "Storybook preset and stories for developing Quilltap theme plugins",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -2380,6 +2380,190 @@
2380
2380
  color: var(--color-destructive-foreground);
2381
2381
  }
2382
2382
 
2383
+ /* The remaining opacity steps and surface colours of the utility families. A
2384
+ theme that overrides --color-muted or --color-border gets all of these for
2385
+ free; they exist so that the app never has to reach for a raw Tailwind
2386
+ colour on a themed surface. */
2387
+ .qt-bg-card\/50 {
2388
+ background-color: color-mix(in srgb, var(--color-card) 50%, transparent);
2389
+ }
2390
+
2391
+ .qt-bg-card\/60 {
2392
+ background-color: color-mix(in srgb, var(--color-card) 60%, transparent);
2393
+ }
2394
+
2395
+ .qt-bg-card\/80 {
2396
+ background-color: color-mix(in srgb, var(--color-card) 80%, transparent);
2397
+ }
2398
+
2399
+ .qt-bg-card\/90 {
2400
+ background-color: color-mix(in srgb, var(--color-card) 90%, transparent);
2401
+ }
2402
+
2403
+ .qt-bg-default {
2404
+ background-color: var(--color-background);
2405
+ }
2406
+
2407
+ .qt-bg-destructive\/15 {
2408
+ background-color: color-mix(in srgb, var(--color-destructive) 15%, transparent);
2409
+ }
2410
+
2411
+ .qt-bg-destructive\/80 {
2412
+ background-color: color-mix(in srgb, var(--color-destructive) 80%, transparent);
2413
+ }
2414
+
2415
+ .qt-bg-info\/15 {
2416
+ background-color: color-mix(in srgb, var(--color-info) 15%, transparent);
2417
+ }
2418
+
2419
+ .qt-bg-input {
2420
+ background-color: var(--color-input);
2421
+ }
2422
+
2423
+ .qt-bg-muted-foreground\/20 {
2424
+ background-color: color-mix(in srgb, var(--color-muted-foreground) 20%, transparent);
2425
+ }
2426
+
2427
+ .qt-bg-muted\/20 {
2428
+ background-color: color-mix(in srgb, var(--color-muted) 20%, transparent);
2429
+ }
2430
+
2431
+ .qt-bg-muted\/30 {
2432
+ background-color: color-mix(in srgb, var(--color-muted) 30%, transparent);
2433
+ }
2434
+
2435
+ .qt-bg-muted\/40 {
2436
+ background-color: color-mix(in srgb, var(--color-muted) 40%, transparent);
2437
+ }
2438
+
2439
+ .qt-bg-muted\/50 {
2440
+ background-color: color-mix(in srgb, var(--color-muted) 50%, transparent);
2441
+ }
2442
+
2443
+ .qt-bg-muted\/60 {
2444
+ background-color: color-mix(in srgb, var(--color-muted) 60%, transparent);
2445
+ }
2446
+
2447
+ .qt-bg-muted\/70 {
2448
+ background-color: color-mix(in srgb, var(--color-muted) 70%, transparent);
2449
+ }
2450
+
2451
+ .qt-bg-muted\/80 {
2452
+ background-color: color-mix(in srgb, var(--color-muted) 80%, transparent);
2453
+ }
2454
+
2455
+ .qt-bg-primary\/15 {
2456
+ background-color: color-mix(in srgb, var(--color-primary) 15%, transparent);
2457
+ }
2458
+
2459
+ .qt-bg-primary\/30 {
2460
+ background-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
2461
+ }
2462
+
2463
+ .qt-bg-secondary\/50 {
2464
+ background-color: color-mix(in srgb, var(--color-secondary) 50%, transparent);
2465
+ }
2466
+
2467
+ .qt-bg-success\/15 {
2468
+ background-color: color-mix(in srgb, var(--color-success) 15%, transparent);
2469
+ }
2470
+
2471
+ .qt-bg-warning\/15 {
2472
+ background-color: color-mix(in srgb, var(--color-warning) 15%, transparent);
2473
+ }
2474
+
2475
+ .qt-border-accent {
2476
+ border-color: var(--color-accent);
2477
+ }
2478
+
2479
+ .qt-border-default\/50 {
2480
+ border-color: color-mix(in srgb, var(--color-border) 50%, transparent);
2481
+ }
2482
+
2483
+ .qt-border-default\/60 {
2484
+ border-color: color-mix(in srgb, var(--color-border) 60%, transparent);
2485
+ }
2486
+
2487
+ .qt-border-default\/70 {
2488
+ border-color: color-mix(in srgb, var(--color-border) 70%, transparent);
2489
+ }
2490
+
2491
+ .qt-border-destructive\/20 {
2492
+ border-color: color-mix(in srgb, var(--color-destructive) 20%, transparent);
2493
+ }
2494
+
2495
+ .qt-border-destructive\/40 {
2496
+ border-color: color-mix(in srgb, var(--color-destructive) 40%, transparent);
2497
+ }
2498
+
2499
+ .qt-border-destructive\/50 {
2500
+ border-color: color-mix(in srgb, var(--color-destructive) 50%, transparent);
2501
+ }
2502
+
2503
+ .qt-border-primary-foreground {
2504
+ border-color: var(--color-primary-foreground);
2505
+ }
2506
+
2507
+ .qt-border-primary\/20 {
2508
+ border-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
2509
+ }
2510
+
2511
+ .qt-border-primary\/30 {
2512
+ border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
2513
+ }
2514
+
2515
+ .qt-border-primary\/40 {
2516
+ border-color: color-mix(in srgb, var(--color-primary) 40%, transparent);
2517
+ }
2518
+
2519
+ .qt-border-primary\/50 {
2520
+ border-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
2521
+ }
2522
+
2523
+ .qt-border-primary\/60 {
2524
+ border-color: color-mix(in srgb, var(--color-primary) 60%, transparent);
2525
+ }
2526
+
2527
+ .qt-border-success\/50 {
2528
+ border-color: color-mix(in srgb, var(--color-success) 50%, transparent);
2529
+ }
2530
+
2531
+ .qt-border-warning\/50 {
2532
+ border-color: color-mix(in srgb, var(--color-warning) 50%, transparent);
2533
+ }
2534
+
2535
+ .qt-text-destructive\/80 {
2536
+ color: color-mix(in srgb, var(--color-destructive) 80%, transparent);
2537
+ }
2538
+
2539
+ .qt-text-info\/80 {
2540
+ color: color-mix(in srgb, var(--color-info) 80%, transparent);
2541
+ }
2542
+
2543
+ .qt-text-secondary\/50 {
2544
+ color: color-mix(in srgb, var(--color-muted-foreground) 50%, transparent);
2545
+ }
2546
+
2547
+ .qt-text-secondary\/60 {
2548
+ color: color-mix(in srgb, var(--color-muted-foreground) 60%, transparent);
2549
+ }
2550
+
2551
+ .qt-text-secondary\/70 {
2552
+ color: color-mix(in srgb, var(--color-muted-foreground) 70%, transparent);
2553
+ }
2554
+
2555
+ .qt-text-secondary\/80 {
2556
+ color: color-mix(in srgb, var(--color-muted-foreground) 80%, transparent);
2557
+ }
2558
+
2559
+ .qt-text-success\/80 {
2560
+ color: color-mix(in srgb, var(--color-success) 80%, transparent);
2561
+ }
2562
+
2563
+ .qt-text-warning\/80 {
2564
+ color: color-mix(in srgb, var(--color-warning) 80%, transparent);
2565
+ }
2566
+
2383
2567
  /* Hoverable accent surface — list rows, menu items, and option cards that
2384
2568
  should highlight on hover. On hover it paints the accent background AND
2385
2569
  forces the accent foreground onto the row and every descendant, so the whole
@@ -2591,6 +2775,147 @@
2591
2775
  color: var(--color-destructive-foreground);
2592
2776
  }
2593
2777
 
2778
+ /* State forms of the utilities above. Tailwind generates variants only for
2779
+ utilities it knows about, and a class declared in @layer utilities is
2780
+ invisible to it — so in the app every one of these is hand-written, escaped,
2781
+ with its own pseudo-selector, and an unwritten one is inert. Mirrored here so
2782
+ a theme author previewing hover states sees what the app actually ships. */
2783
+ .hover\:qt-bg-surface-hover:hover {
2784
+ background-color: var(--color-muted);
2785
+ }
2786
+
2787
+ .hover\:qt-bg-muted:hover {
2788
+ background-color: var(--color-muted);
2789
+ }
2790
+
2791
+ .hover\:qt-bg-muted\/30:hover {
2792
+ background-color: color-mix(in srgb, var(--color-muted) 30%, transparent);
2793
+ }
2794
+
2795
+ .hover\:qt-bg-muted\/40:hover {
2796
+ background-color: color-mix(in srgb, var(--color-muted) 40%, transparent);
2797
+ }
2798
+
2799
+ .hover\:qt-bg-muted\/50:hover {
2800
+ background-color: color-mix(in srgb, var(--color-muted) 50%, transparent);
2801
+ }
2802
+
2803
+ .hover\:qt-bg-muted\/80:hover {
2804
+ background-color: color-mix(in srgb, var(--color-muted) 80%, transparent);
2805
+ }
2806
+
2807
+ .hover\:qt-bg-primary\/5:hover {
2808
+ background-color: color-mix(in srgb, var(--color-primary) 5%, transparent);
2809
+ }
2810
+
2811
+ .hover\:qt-bg-primary\/15:hover {
2812
+ background-color: color-mix(in srgb, var(--color-primary) 15%, transparent);
2813
+ }
2814
+
2815
+ .hover\:qt-bg-primary\/20:hover {
2816
+ background-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
2817
+ }
2818
+
2819
+ .hover\:qt-bg-primary\/90:hover {
2820
+ background-color: color-mix(in srgb, var(--color-primary) 90%, transparent);
2821
+ }
2822
+
2823
+ .hover\:qt-bg-destructive:hover {
2824
+ background-color: var(--color-destructive);
2825
+ }
2826
+
2827
+ .hover\:qt-bg-destructive\/20:hover {
2828
+ background-color: color-mix(in srgb, var(--color-destructive) 20%, transparent);
2829
+ }
2830
+
2831
+ .hover\:qt-bg-destructive\/90:hover {
2832
+ background-color: color-mix(in srgb, var(--color-destructive) 90%, transparent);
2833
+ }
2834
+
2835
+ .hover\:qt-bg-success\/20:hover {
2836
+ background-color: color-mix(in srgb, var(--color-success) 20%, transparent);
2837
+ }
2838
+
2839
+ .hover\:qt-bg-success\/90:hover {
2840
+ background-color: color-mix(in srgb, var(--color-success) 90%, transparent);
2841
+ }
2842
+
2843
+ .hover\:qt-bg-warning\/20:hover {
2844
+ background-color: color-mix(in srgb, var(--color-warning) 20%, transparent);
2845
+ }
2846
+
2847
+ .hover\:qt-bg-info\/20:hover {
2848
+ background-color: color-mix(in srgb, var(--color-info) 20%, transparent);
2849
+ }
2850
+
2851
+ .hover\:qt-text-destructive:hover {
2852
+ color: var(--color-destructive);
2853
+ }
2854
+
2855
+ .hover\:qt-text-destructive\/80:hover {
2856
+ color: color-mix(in srgb, var(--color-destructive) 80%, transparent);
2857
+ }
2858
+
2859
+ .hover\:qt-text-warning\/80:hover {
2860
+ color: color-mix(in srgb, var(--color-warning) 80%, transparent);
2861
+ }
2862
+
2863
+ .hover\:qt-text-info\/80:hover {
2864
+ color: color-mix(in srgb, var(--color-info) 80%, transparent);
2865
+ }
2866
+
2867
+ .hover\:qt-text-primary:hover {
2868
+ color: var(--qt-text-primary-fg, var(--color-foreground));
2869
+ }
2870
+
2871
+ .hover\:qt-border-primary:hover {
2872
+ border-color: var(--color-primary);
2873
+ }
2874
+
2875
+ .hover\:qt-border-primary\/50:hover {
2876
+ border-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
2877
+ }
2878
+
2879
+ .hover\:qt-border-primary\/60:hover {
2880
+ border-color: color-mix(in srgb, var(--color-primary) 60%, transparent);
2881
+ }
2882
+
2883
+ .hover\:qt-border-accent:hover {
2884
+ border-color: var(--color-accent);
2885
+ }
2886
+
2887
+ .focus\:qt-border-primary:focus {
2888
+ border-color: var(--color-primary);
2889
+ }
2890
+
2891
+ .disabled\:qt-bg-muted:disabled {
2892
+ background-color: var(--color-muted);
2893
+ }
2894
+
2895
+ .disabled\:qt-text-secondary:disabled {
2896
+ color: var(--color-muted-foreground);
2897
+ }
2898
+
2899
+ .placeholder\:qt-text-secondary::placeholder {
2900
+ color: var(--color-muted-foreground);
2901
+ }
2902
+
2903
+ .file\:qt-bg-primary\/20::file-selector-button {
2904
+ background-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
2905
+ }
2906
+
2907
+ .hover\:file\:qt-bg-primary\/30:hover::file-selector-button {
2908
+ background-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
2909
+ }
2910
+
2911
+ .hover\:qt-shadow-md:hover {
2912
+ box-shadow: var(--qt-card-shadow-hover, 0 4px 12px hsl(225 18% 10% / 0.1), 0 2px 4px hsl(225 18% 10% / 0.05));
2913
+ }
2914
+
2915
+ .group\/thumb:hover .group-hover\/thumb\:qt-bg-overlay-light {
2916
+ background-color: var(--qt-overlay-light-bg, rgb(0 0 0 / 0.2));
2917
+ }
2918
+
2594
2919
  /* ==========================================================================
2595
2920
  OVERLAY UTILITIES
2596
2921
  For image modals, lightboxes, and overlay UI elements.