@pure-ds/storybook 0.4.16 → 0.4.17

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.
Files changed (51) hide show
  1. package/.storybook/addons/html-preview/Panel.jsx +71 -20
  2. package/dist/pds-reference.json +2 -7
  3. package/package.json +2 -2
  4. package/public/assets/js/app.js +617 -10565
  5. package/public/assets/js/lit.js +3 -1048
  6. package/public/assets/js/pds.js +396 -7354
  7. package/public/assets/pds/components/pds-calendar.js +1 -1
  8. package/public/assets/pds/custom-elements.json +263 -18
  9. package/public/assets/pds/pds-runtime-config.json +1 -1
  10. package/public/assets/pds/styles/pds-components.css +83 -221
  11. package/public/assets/pds/styles/pds-components.css.js +166 -442
  12. package/public/assets/pds/styles/pds-styles.css +240 -437
  13. package/public/assets/pds/styles/pds-styles.css.js +479 -881
  14. package/public/assets/pds/styles/pds-utilities.css +151 -214
  15. package/public/assets/pds/styles/pds-utilities.css.js +302 -428
  16. package/src/js/pds-core/pds-generator.js +88 -38
  17. package/src/js/pds-core/pds-ontology.js +1 -1
  18. package/stories/components/PdsCalendar.stories.js +2 -2
  19. package/stories/components/PdsDrawer.stories.js +15 -15
  20. package/stories/components/PdsJsonform.stories.js +78 -0
  21. package/stories/components/PdsRichtext.stories.js +4 -17
  22. package/stories/components/PdsScrollrow.stories.js +224 -72
  23. package/stories/components/PdsSplitpanel.stories.js +63 -28
  24. package/stories/components/PdsTabstrip.stories.js +7 -7
  25. package/stories/enhancements/Accordion.stories.js +2 -2
  26. package/stories/enhancements/Dropdowns.stories.js +13 -10
  27. package/stories/enhancements/RangeSliders.stories.js +9 -9
  28. package/stories/enhancements/RequiredFields.stories.js +8 -8
  29. package/stories/enhancements/Toggles.stories.js +45 -36
  30. package/stories/enhancements/_enhancement-header.js +2 -2
  31. package/stories/foundations/Colors.stories.js +13 -13
  32. package/stories/foundations/HTMLDefaults.stories.js +4 -4
  33. package/stories/foundations/Icons.stories.js +123 -288
  34. package/stories/foundations/MeshGradients.stories.js +161 -250
  35. package/stories/foundations/SmartSurfaces.stories.js +147 -64
  36. package/stories/foundations/Spacing.stories.js +30 -30
  37. package/stories/foundations/Typography.stories.js +352 -723
  38. package/stories/foundations/ZIndex.stories.js +124 -141
  39. package/stories/layout/LayoutOverview.stories.js +343 -250
  40. package/stories/layout/LayoutSystem.stories.js +60 -76
  41. package/stories/patterns/InteractiveStates.stories.js +29 -29
  42. package/stories/patterns/Utilities.stories.js +17 -5
  43. package/stories/primitives/Alerts.stories.js +6 -6
  44. package/stories/primitives/Cards.stories.js +22 -11
  45. package/stories/primitives/Forms.stories.js +17 -8
  46. package/stories/primitives/Media.stories.js +23 -20
  47. package/stories/utilities/Backdrop.stories.js +68 -27
  48. package/stories/utils/PdsAsk.stories.js +1 -1
  49. package/public/assets/js/app.js.map +0 -7
  50. package/public/assets/js/lit.js.map +0 -7
  51. package/public/assets/js/pds.js.map +0 -7
@@ -1092,6 +1092,36 @@ html[data-theme="dark"] {
1092
1092
  height: 0;
1093
1093
  }
1094
1094
 
1095
+ /* Labeled horizontal rule: <hr data-content="OR"> */
1096
+ :where(hr[data-content]) {
1097
+ position: relative;
1098
+ border: none;
1099
+ text-align: center;
1100
+ height: auto;
1101
+ overflow: visible;
1102
+
1103
+ &::before {
1104
+ content: "";
1105
+ position: absolute;
1106
+ left: 0;
1107
+ top: 50%;
1108
+ width: 100%;
1109
+ height: 1px;
1110
+ background: linear-gradient(to right, transparent, var(--color-border), transparent);
1111
+ }
1112
+
1113
+ &::after {
1114
+ content: attr(data-content);
1115
+ position: relative;
1116
+ display: inline-block;
1117
+ padding: 0 var(--spacing-3);
1118
+ background-color: var(--color-surface-base);
1119
+ color: var(--color-text-muted);
1120
+ font-size: var(--font-size-sm);
1121
+ line-height: var(--font-line-height-normal);
1122
+ }
1123
+ }
1124
+
1095
1125
  :where(dl) {
1096
1126
  margin: 0 0 var(--spacing-4) 0;
1097
1127
  }
@@ -1119,6 +1149,11 @@ html[data-theme="dark"] {
1119
1149
  width: 100%;
1120
1150
  }
1121
1151
 
1152
+ /* Headings within header elements have tight spacing for intro content */
1153
+ :where(header) > :where(h1, h2, h3, h4, h5, h6) {
1154
+ margin: 0;
1155
+ }
1156
+
1122
1157
  :where(article), :where(section), :where(aside) {
1123
1158
  display: block;
1124
1159
  margin-bottom: var(--spacing-6);
@@ -1225,7 +1260,7 @@ form {
1225
1260
  }
1226
1261
 
1227
1262
  fieldset {
1228
- margin: 0 0 var(--spacing-2) 0;
1263
+ margin: 0;
1229
1264
  padding: var(--spacing-5);
1230
1265
  width: 100%;
1231
1266
  background-color: color-mix(in oklab, var(--color-surface-subtle) 50%, transparent 50%);
@@ -1300,7 +1335,6 @@ fieldset fieldset fieldset > legend { font-size: var(--font-size-sm); }
1300
1335
 
1301
1336
  label {
1302
1337
  display: block;
1303
- margin-bottom: var(--spacing-3);
1304
1338
  font-weight: var(--font-weight-medium);
1305
1339
  color: var(--color-text-primary);
1306
1340
  font-size: var(--font-size-sm);
@@ -2004,16 +2038,7 @@ a.btn-working {
2004
2038
  border: 1px solid var(--color-border);
2005
2039
  border-radius: var(--radius-md);
2006
2040
  background-color: var(--color-surface-base);
2007
-
2008
- fieldset {
2009
- background-color: transparent;
2010
- margin-bottom: var(--spacing-3);
2011
-
2012
- &:last-of-type {
2013
- margin-bottom: 0;
2014
- }
2015
- }
2016
-
2041
+
2017
2042
  .array-controls {
2018
2043
  padding-top: var(--spacing-3);
2019
2044
  border-top: 1px solid var(--color-border);
@@ -2161,82 +2186,30 @@ a.btn-working {
2161
2186
  vertical-align: middle;
2162
2187
  background-color: var(--color-gray-200);
2163
2188
  color: var(--color-gray-800);
2164
- border-radius: var(--radius-full);
2165
- }
2166
-
2167
- .badge-primary {
2168
- background-color: var(--color-primary-600);
2169
- color: white;
2170
- }
2171
-
2172
- .badge-secondary {
2173
- background-color: var(--color-secondary-600);
2174
- color: white;
2175
- }
2176
-
2177
- .badge-success {
2178
- background-color: var(--color-success-600);
2179
- color: white;
2180
- }
2181
-
2182
- .badge-info {
2183
- background-color: var(--color-info-600);
2184
- color: white;
2185
- }
2186
-
2187
- .badge-warning {
2188
- background-color: var(--color-warning-600);
2189
- color: white;
2190
2189
  }
2191
2190
 
2192
- .badge-danger {
2193
- background-color: var(--color-danger-600);
2194
- color: white;
2195
- }
2191
+ .badge-primary, .badge-secondary, .badge-success, .badge-info, .badge-warning, .badge-danger { color: white; }
2192
+ .badge-primary { background-color: var(--color-primary-600); }
2193
+ .badge-secondary { background-color: var(--color-secondary-600); }
2194
+ .badge-success { background-color: var(--color-success-600); }
2195
+ .badge-info { background-color: var(--color-info-600); }
2196
+ .badge-warning { background-color: var(--color-warning-600); }
2197
+ .badge-danger { background-color: var(--color-danger-600); }
2196
2198
 
2197
2199
  .badge-outline {
2198
2200
  background-color: transparent;
2199
2201
  border: 1px solid currentColor;
2200
-
2201
- &.badge-primary {
2202
- color: var(--color-text-primary);
2203
- }
2204
-
2205
- &.badge-secondary {
2206
- color: var(--color-secondary-600);
2207
- }
2208
-
2209
- &.badge-success {
2210
- color: var(--color-success-600);
2211
- }
2212
-
2213
- &.badge-info {
2214
- color: var(--color-info-600);
2215
- }
2216
-
2217
- &.badge-warning {
2218
- color: var(--color-warning-600);
2219
- }
2220
-
2221
- &.badge-danger {
2222
- color: var(--color-danger-600);
2223
- }
2224
- }
2225
-
2226
- .badge-sm {
2227
- padding: 2px var(--spacing-1);
2228
- font-size: 10px;
2229
- }
2230
-
2231
- .badge-lg {
2232
- padding: var(--spacing-2) var(--spacing-3);
2233
- font-size: var(--font-size-sm);
2202
+ &.badge-primary { color: var(--color-text-primary); }
2203
+ &.badge-secondary { color: var(--color-secondary-600); }
2204
+ &.badge-success { color: var(--color-success-600); }
2205
+ &.badge-info { color: var(--color-info-600); }
2206
+ &.badge-warning { color: var(--color-warning-600); }
2207
+ &.badge-danger { color: var(--color-danger-600); }
2234
2208
  }
2235
2209
 
2236
- .pill {
2237
- padding: var(--spacing-1) var(--spacing-3);
2238
- border-radius: var(--radius-full);
2239
- }
2210
+ .badge-sm { padding: 2px var(--spacing-1); font-size: 10px; }
2211
+ .badge-lg { padding: var(--spacing-2) var(--spacing-3); font-size: var(--font-size-sm); }
2212
+ .pill { padding: var(--spacing-1) var(--spacing-3); border-radius: var(--radius-full); }
2240
2213
 
2241
2214
 
2242
2215
 
@@ -2270,8 +2243,7 @@ dialog {
2270
2243
  overlay 0.2s ease allow-discrete,
2271
2244
  display 0.2s ease allow-discrete;
2272
2245
 
2273
- /* Overflow handling */
2274
- overflow: hidden;
2246
+
2275
2247
  }
2276
2248
 
2277
2249
  /* Open state */
@@ -2373,7 +2345,7 @@ dialog {
2373
2345
  form > article,
2374
2346
  .dialog-body {
2375
2347
  flex: 1;
2376
- padding: var(--spacing-6);
2348
+ padding: var(--spacing-3) var(--spacing-6);
2377
2349
  overflow-y: auto;
2378
2350
  overflow-x: hidden;
2379
2351
  }
@@ -2393,50 +2365,20 @@ dialog {
2393
2365
  }
2394
2366
 
2395
2367
  /* Dialog size modifiers */
2396
- dialog.dialog-sm {
2397
- max-width: min(400px, calc(100vw - var(--spacing-8)));
2398
- }
2399
-
2400
- dialog.dialog-lg {
2401
- max-width: min(800px, calc(100vw - var(--spacing-8)));
2402
- }
2403
-
2404
- dialog.dialog-xl {
2405
- max-width: min(1200px, calc(100vw - var(--spacing-8)));
2406
- }
2407
-
2408
- dialog.dialog-full {
2409
- max-width: calc(100vw - var(--spacing-8));
2410
- max-height: calc(100vh - var(--spacing-8));
2411
- }
2368
+ dialog.dialog-sm { max-width: min(400px, calc(100vw - var(--spacing-8))); }
2369
+ dialog.dialog-lg { max-width: min(800px, calc(100vw - var(--spacing-8))); }
2370
+ dialog.dialog-xl { max-width: min(1200px, calc(100vw - var(--spacing-8))); }
2371
+ dialog.dialog-full { max-width: calc(100vw - var(--spacing-8)); max-height: calc(100vh - var(--spacing-8)); }
2412
2372
 
2413
2373
  /* Mobile responsiveness */
2414
2374
  @media (max-width: 639px) {
2415
- dialog {
2416
- max-width: 100vw;
2417
- max-height: 100vh;
2418
- border-radius: 0;
2419
- top: 50%;
2420
- transform: translateY(-50%);
2421
- margin: 0;
2422
- }
2423
-
2424
- dialog header,
2425
- dialog form > header,
2426
- dialog article,
2427
- dialog form > article,
2428
- dialog footer,
2429
- dialog form > footer {
2430
- padding: var(--spacing-4);
2431
- }
2375
+ dialog { max-width: 100vw; max-height: 100vh; border-radius: 0; top: 50%; transform: translateY(-50%); margin: 0; }
2376
+ dialog header, dialog form > header, dialog article, dialog form > article, dialog footer, dialog form > footer { padding: var(--spacing-4); }
2432
2377
  }
2433
2378
 
2434
2379
  /* Reduced motion support */
2435
2380
  @media (prefers-reduced-motion: reduce) {
2436
- dialog,
2437
- dialog::backdrop {
2438
- transition-duration: 0.01s !important;
2439
- }
2381
+ dialog, dialog::backdrop { transition-duration: 0.01s !important; }
2440
2382
  }
2441
2383
 
2442
2384
 
@@ -2759,30 +2701,15 @@ pds-tabstrip {
2759
2701
  }
2760
2702
 
2761
2703
  @keyframes tabFadeIn {
2762
- from {
2763
- opacity: 0;
2764
- transform: translateY(8px);
2765
- }
2766
- to {
2767
- opacity: 1;
2768
- transform: translateY(0);
2769
- }
2704
+ from { opacity: 0; transform: translateY(8px); }
2705
+ to { opacity: 1; transform: translateY(0); }
2770
2706
  }
2771
2707
 
2772
2708
  /* Mobile responsive */
2773
2709
  @media (max-width: 639px) {
2774
- pds-tabstrip > nav {
2775
- gap: var(--spacing-1);
2776
- }
2777
-
2778
- pds-tabstrip > nav > a {
2779
- padding: var(--spacing-2) var(--spacing-3);
2780
- font-size: var(--font-size-sm);
2781
- }
2782
-
2783
- pds-tabstrip > pds-tabpanel[data-tabpanel] {
2784
- padding: var(--spacing-3) 0;
2785
- }
2710
+ pds-tabstrip > nav { gap: var(--spacing-1); }
2711
+ pds-tabstrip > nav > a { padding: var(--spacing-2) var(--spacing-3); font-size: var(--font-size-sm); }
2712
+ pds-tabstrip > pds-tabpanel[data-tabpanel] { padding: var(--spacing-3) 0; }
2786
2713
  }
2787
2714
 
2788
2715
 
@@ -2896,106 +2823,41 @@ tbody {
2896
2823
  }
2897
2824
 
2898
2825
  /* Custom Scrollbars */
2899
-
2900
- ::-webkit-scrollbar {
2901
- width: 12px;
2902
- height: 12px;
2903
- }
2904
-
2905
- ::-webkit-scrollbar-track {
2906
- background: transparent;
2907
- }
2908
-
2826
+ ::-webkit-scrollbar { width: 12px; height: 12px; }
2827
+ ::-webkit-scrollbar-track { background: transparent; }
2909
2828
  ::-webkit-scrollbar-thumb {
2910
2829
  background: var(--color-secondary-300);
2911
2830
  border-radius: var(--radius-full);
2912
2831
  border: 3px solid transparent;
2913
2832
  background-clip: padding-box;
2914
2833
  transition: background-color var(--transition-fast);
2915
-
2916
- &:hover {
2917
- background: var(--color-secondary-400);
2918
- border: 2px solid transparent;
2919
- background-clip: padding-box;
2920
- }
2921
-
2922
- &:active {
2923
- background: var(--color-secondary-500);
2924
- border: 2px solid transparent;
2925
- background-clip: padding-box;
2926
- }
2927
-
2834
+ &:hover { background: var(--color-secondary-400); border: 2px solid transparent; background-clip: padding-box; }
2835
+ &:active { background: var(--color-secondary-500); border: 2px solid transparent; background-clip: padding-box; }
2928
2836
  @media (prefers-color-scheme: dark) {
2929
2837
  background: var(--color-secondary-600);
2930
-
2931
- &:hover {
2932
- background: var(--color-secondary-500);
2933
- }
2934
-
2935
- &:active {
2936
- background: var(--color-secondary-400);
2937
- }
2838
+ &:hover { background: var(--color-secondary-500); }
2839
+ &:active { background: var(--color-secondary-400); }
2938
2840
  }
2939
2841
  }
2940
2842
 
2941
2843
  * {
2942
2844
  scrollbar-width: thin;
2943
2845
  scrollbar-color: var(--color-secondary-300) transparent;
2944
-
2945
- @media (prefers-color-scheme: dark) {
2946
- scrollbar-color: var(--color-secondary-600) transparent;
2947
- }
2948
- }
2949
-
2950
- /* Hover effect for scrollable containers */
2951
- *:hover {
2952
- scrollbar-color: var(--color-secondary-400) transparent;
2953
- }
2954
-
2955
- @media (prefers-color-scheme: dark) {
2956
- *:hover {
2957
- scrollbar-color: var(--color-secondary-500) transparent;
2958
- }
2846
+ @media (prefers-color-scheme: dark) { scrollbar-color: var(--color-secondary-600) transparent; }
2959
2847
  }
2848
+ *:hover { scrollbar-color: var(--color-secondary-400) transparent; }
2849
+ @media (prefers-color-scheme: dark) { *:hover { scrollbar-color: var(--color-secondary-500) transparent; } }
2960
2850
 
2961
2851
 
2962
2852
 
2963
2853
  /* Alert dark mode adjustments */
2964
- html[data-theme="dark"] .alert-success {
2965
- background-color: var(--color-success-50);
2966
- border-color: var(--color-success-500);
2967
- color: var(--color-success-900);
2968
- }
2969
-
2970
- html[data-theme="dark"] .alert-info {
2971
- background-color: var(--color-info-50);
2972
- border-color: var(--color-info-500);
2973
- color: var(--color-info-900);
2974
- }
2975
-
2976
- html[data-theme="dark"] .alert-warning {
2977
- background-color: var(--color-warning-50);
2978
- border-color: var(--color-warning-500);
2979
- color: var(--color-warning-900);
2980
- }
2981
-
2982
- html[data-theme="dark"] .alert-danger,
2983
- html[data-theme="dark"] .alert-error {
2984
- background-color: var(--color-danger-50);
2985
- border-color: var(--color-danger-500);
2986
- color: var(--color-danger-900);
2987
- }
2988
-
2989
- /* Dim images in dark mode */
2990
- html[data-theme="dark"] img,
2991
- html[data-theme="dark"] video {
2992
- opacity: 0.8;
2993
- transition: opacity var(--transition-normal);
2994
- }
2995
-
2996
- html[data-theme="dark"] img:hover,
2997
- html[data-theme="dark"] video:hover {
2998
- opacity: 1;
2854
+ html[data-theme="dark"] {
2855
+ .alert-success { background-color: var(--color-success-50); border-color: var(--color-success-500); color: var(--color-success-900); }
2856
+ .alert-info { background-color: var(--color-info-50); border-color: var(--color-info-500); color: var(--color-info-900); }
2857
+ .alert-warning { background-color: var(--color-warning-50); border-color: var(--color-warning-500); color: var(--color-warning-900); }
2858
+ .alert-danger, .alert-error { background-color: var(--color-danger-50); border-color: var(--color-danger-500); color: var(--color-danger-900); }
2859
+ img, video { opacity: 0.8; transition: opacity var(--transition-normal); }
2860
+ img:hover, video:hover { opacity: 1; }
2999
2861
  }
3000
2862
 
3001
2863
  }
@@ -3014,102 +2876,28 @@ pds-icon {
3014
2876
  }
3015
2877
 
3016
2878
  /* Icon size utilities */
3017
- .icon-xs,
3018
- pds-icon[size="xs"] {
3019
- width: var(--icon-size-xs);
3020
- height: var(--icon-size-xs);
3021
- }
3022
-
3023
- .icon-sm,
3024
- pds-icon[size="sm"] {
3025
- width: var(--icon-size-sm);
3026
- height: var(--icon-size-sm);
3027
- }
3028
-
3029
- .icon-md,
3030
- pds-icon[size="md"] {
3031
- width: var(--icon-size-md);
3032
- height: var(--icon-size-md);
3033
- }
3034
-
3035
- .icon-lg,
3036
- pds-icon[size="lg"] {
3037
- width: var(--icon-size-lg);
3038
- height: var(--icon-size-lg);
3039
- }
3040
-
3041
- .icon-xl,
3042
- pds-icon[size="xl"] {
3043
- width: var(--icon-size-xl);
3044
- height: var(--icon-size-xl);
3045
- }
3046
-
3047
- .icon-2xl,
3048
- pds-icon[size="2xl"] {
3049
- width: var(--icon-size-2xl);
3050
- height: var(--icon-size-2xl);
3051
- }
2879
+ .icon-xs, pds-icon[size="xs"] { width: var(--icon-size-xs); height: var(--icon-size-xs); }
2880
+ .icon-sm, pds-icon[size="sm"] { width: var(--icon-size-sm); height: var(--icon-size-sm); }
2881
+ .icon-md, pds-icon[size="md"] { width: var(--icon-size-md); height: var(--icon-size-md); }
2882
+ .icon-lg, pds-icon[size="lg"] { width: var(--icon-size-lg); height: var(--icon-size-lg); }
2883
+ .icon-xl, pds-icon[size="xl"] { width: var(--icon-size-xl); height: var(--icon-size-xl); }
2884
+ .icon-2xl, pds-icon[size="2xl"] { width: var(--icon-size-2xl); height: var(--icon-size-2xl); }
3052
2885
 
3053
2886
  /* Icon color utilities */
3054
- .icon-primary,
3055
- pds-icon.primary {
3056
- color: var(--color-primary-600);
3057
- }
3058
-
3059
- .icon-secondary,
3060
- pds-icon.secondary {
3061
- color: var(--color-secondary-600);
3062
- }
3063
-
3064
- .icon-accent,
3065
- pds-icon.accent {
3066
- color: var(--color-accent-600);
3067
- }
3068
-
3069
- .icon-success,
3070
- pds-icon.success {
3071
- color: var(--color-success-600);
3072
- }
3073
-
3074
- .icon-warning,
3075
- pds-icon.warning {
3076
- color: var(--color-warning-600);
3077
- }
3078
-
3079
- .icon-danger,
3080
- pds-icon.danger {
3081
- color: var(--color-danger-600);
3082
- }
3083
-
3084
- .icon-info,
3085
- pds-icon.info {
3086
- color: var(--color-info-600);
3087
- }
3088
-
3089
- .icon-muted,
3090
- pds-icon.muted {
3091
- color: var(--color-text-muted);
3092
- }
3093
-
3094
- .icon-subtle,
3095
- pds-icon.subtle {
3096
- color: var(--color-text-subtle);
3097
- }
2887
+ .icon-primary, pds-icon.primary { color: var(--color-primary-600); }
2888
+ .icon-secondary, pds-icon.secondary { color: var(--color-secondary-600); }
2889
+ .icon-accent, pds-icon.accent { color: var(--color-accent-600); }
2890
+ .icon-success, pds-icon.success { color: var(--color-success-600); }
2891
+ .icon-warning, pds-icon.warning { color: var(--color-warning-600); }
2892
+ .icon-danger, pds-icon.danger { color: var(--color-danger-600); }
2893
+ .icon-info, pds-icon.info { color: var(--color-info-600); }
2894
+ .icon-muted, pds-icon.muted { color: var(--color-text-muted); }
2895
+ .icon-subtle, pds-icon.subtle { color: var(--color-text-subtle); }
3098
2896
 
3099
2897
  /* Icon with text combinations */
3100
- .icon-text {
3101
- display: inline-flex;
3102
- align-items: center;
3103
- gap: var(--spacing-2);
3104
- }
3105
-
3106
- .icon-text-start {
3107
- flex-direction: row;
3108
- }
3109
-
3110
- .icon-text-end {
3111
- flex-direction: row-reverse;
3112
- }
2898
+ .icon-text { display: inline-flex; align-items: center; gap: var(--spacing-2); }
2899
+ .icon-text-start { flex-direction: row; }
2900
+ .icon-text-end { flex-direction: row-reverse; }
3113
2901
 
3114
2902
  /* Button icon utilities */
3115
2903
  button, a {
@@ -3129,46 +2917,19 @@ button, a {
3129
2917
  }
3130
2918
 
3131
2919
  /* Icon in inputs */
3132
- .input-icon {
2920
+ .input-icon, .input-icon-end {
3133
2921
  position: relative;
3134
2922
  display: flex;
3135
2923
  align-items: center;
3136
-
3137
- pds-icon {
3138
- position: absolute;
3139
- left: var(--spacing-3);
3140
- color: var(--color-text-muted);
3141
- pointer-events: none;
3142
- width: var(--icon-size-md);
3143
- height: var(--icon-size-md);
3144
- }
3145
-
3146
- input {
3147
- padding-left: calc(var(--icon-size-md) + var(--spacing-6));
3148
- width: 100%;
3149
- }
2924
+ pds-icon { position: absolute; color: var(--color-text-muted); pointer-events: none; width: var(--icon-size-md); height: var(--icon-size-md); }
2925
+ }
2926
+ .input-icon {
2927
+ pds-icon { left: var(--spacing-3); }
2928
+ input { padding-left: calc(var(--icon-size-md) + var(--spacing-6)); width: 100%; }
3150
2929
  }
3151
-
3152
2930
  .input-icon-end {
3153
- position: relative;
3154
- display: flex;
3155
- align-items: center;
3156
-
3157
- pds-icon {
3158
- position: absolute;
3159
- left: unset;
3160
- right: var(--spacing-3);
3161
- color: var(--color-text-muted);
3162
- pointer-events: none;
3163
- width: var(--icon-size-md);
3164
- height: var(--icon-size-md);
3165
- }
3166
-
3167
- input {
3168
- padding-left: var(--spacing-4);
3169
- padding-right: calc(var(--icon-size-md) + var(--spacing-6));
3170
- width: 100%;
3171
- }
2931
+ pds-icon { left: unset; right: var(--spacing-3); }
2932
+ input { padding-left: var(--spacing-4); padding-right: calc(var(--icon-size-md) + var(--spacing-6)); width: 100%; }
3172
2933
  }
3173
2934
 
3174
2935
 
@@ -3207,44 +2968,45 @@ button, a {
3207
2968
  .grid-auto-xl { grid-template-columns: repeat(auto-fit, minmax(450px, 1fr)); }
3208
2969
 
3209
2970
  /* Gap utilities */
3210
- .gap-0 { gap: 0; }
3211
- .gap-xs { gap: var(--spacing-1); }
3212
- .gap-sm { gap: var(--spacing-2); }
3213
- .gap-md { gap: var(--spacing-4); }
3214
- .gap-lg { gap: var(--spacing-6); }
3215
- .gap-xl { gap: var(--spacing-8); }
2971
+ .gap-0 { gap: 0; } .gap-xs { gap: var(--spacing-1); } .gap-sm { gap: var(--spacing-2); } .gap-md { gap: var(--spacing-4); } .gap-lg { gap: var(--spacing-6); } .gap-xl { gap: var(--spacing-8); }
3216
2972
 
3217
2973
 
3218
2974
  /* Flexbox System */
3219
- .flex {
3220
- display: flex;
2975
+ .flex { display: flex; }
2976
+ .flex-wrap { flex-wrap: wrap; }
2977
+ .flex-col { flex-direction: column; }
2978
+ .flex-row { flex-direction: row; }
2979
+ .grow { flex: 1 1 0%; }
2980
+
2981
+ /* Alignment utilities */
2982
+ .items-start { align-items: flex-start; } .items-center { align-items: center; } .items-end { align-items: flex-end; } .items-stretch { align-items: stretch; } .items-baseline { align-items: baseline; }
2983
+ .justify-start { justify-content: flex-start; } .justify-center { justify-content: center; } .justify-end { justify-content: flex-end; } .justify-between { justify-content: space-between; } .justify-around { justify-content: space-around; } .justify-evenly { justify-content: space-evenly; }
2984
+ .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; }
2985
+
2986
+ /* Text overflow utility */
2987
+ .truncate {
2988
+ overflow: hidden;
2989
+ text-overflow: ellipsis;
2990
+ white-space: nowrap;
3221
2991
  }
3222
2992
 
3223
- .flex-wrap {
3224
- flex-wrap: wrap;
3225
- }
2993
+ /* Max-width utilities */
2994
+ .max-w-sm { max-width: 400px; } .max-w-md { max-width: 600px; } .max-w-lg { max-width: 800px; } .max-w-xl { max-width: 1200px; }
3226
2995
 
3227
- .flex-col {
2996
+ /* Stack utilities - vertical rhythm for stacked elements */
2997
+ [class^="stack-"], [class*=" stack-"] {
2998
+ display: flex;
3228
2999
  flex-direction: column;
3229
3000
  }
3001
+ .stack-xs { gap: var(--spacing-1); }
3002
+ .stack-sm { gap: var(--spacing-2); }
3003
+ .stack-md { gap: var(--spacing-4); }
3004
+ .stack-lg { gap: var(--spacing-6); }
3005
+ .stack-xl { gap: var(--spacing-8); }
3230
3006
 
3231
- .flex-row {
3232
- flex-direction: row;
3233
- }
3234
-
3235
- /* Flex alignment */
3236
- .items-start { align-items: flex-start; }
3237
- .items-center { align-items: center; }
3238
- .items-end { align-items: flex-end; }
3239
- .items-stretch { align-items: stretch; }
3240
- .items-baseline { align-items: baseline; }
3241
-
3242
- .justify-start { justify-content: flex-start; }
3243
- .justify-center { justify-content: center; }
3244
- .justify-end { justify-content: flex-end; }
3245
- .justify-between { justify-content: space-between; }
3246
- .justify-around { justify-content: space-around; }
3247
- .justify-evenly { justify-content: space-evenly; }
3007
+ /* Section spacing - for major content blocks */
3008
+ .section { padding-block: var(--spacing-8); }
3009
+ .section-lg { padding-block: var(--spacing-12); }
3248
3010
 
3249
3011
  /* Responsive helpers */
3250
3012
  @media (max-width: 767px) {
@@ -3275,27 +3037,9 @@ button, a {
3275
3037
  }
3276
3038
 
3277
3039
  /* Backdrop variants */
3278
- .backdrop-light {
3279
- --backdrop-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2));
3280
- --backdrop-brightness: 1.1;
3281
- }
3282
-
3283
- .backdrop-dark {
3284
- --backdrop-bg: linear-gradient(135deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.5));
3285
- --backdrop-brightness: 0.6;
3286
- }
3287
-
3288
- .backdrop-blur-sm {
3289
- --backdrop-blur: 5px;
3290
- }
3291
-
3292
- .backdrop-blur-md {
3293
- --backdrop-blur: 10px;
3294
- }
3295
-
3296
- .backdrop-blur-lg {
3297
- --backdrop-blur: 20px;
3298
- }
3040
+ .backdrop-light { --backdrop-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2)); --backdrop-brightness: 1.1; }
3041
+ .backdrop-dark { --backdrop-bg: linear-gradient(135deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.5)); --backdrop-brightness: 0.6; }
3042
+ .backdrop-blur-sm { --backdrop-blur: 5px; } .backdrop-blur-md { --backdrop-blur: 10px; } .backdrop-blur-lg { --backdrop-blur: 20px; }
3299
3043
 
3300
3044
 
3301
3045
  /* Optional utilities/features controlled by config options */
@@ -3540,35 +3284,114 @@ html[data-theme="dark"] .liquid-glass {
3540
3284
  }
3541
3285
 
3542
3286
 
3543
- /* Inverse surface (dark) using PDS tokens; text/icons inherit currentColor */
3287
+ /*
3288
+ * SURFACE-INVERSE: Local Theme Context Flip
3289
+ *
3290
+ * We can't simply add .surface-inverse to the dark mode selector because that would
3291
+ * also apply the dark color PALETTE (grays, surfaces, etc.), which would override
3292
+ * --color-surface-inverse itself. Instead, we duplicate only the SEMANTIC tokens.
3293
+ *
3294
+ * Light theme .surface-inverse → dark semantic tokens
3295
+ * Dark theme .surface-inverse → light semantic tokens (flip back)
3296
+ */
3297
+
3298
+ /* Surface-inverse visual properties (shared, uses smart surface tokens) */
3544
3299
  .surface-inverse {
3545
3300
  background-color: var(--color-surface-inverse);
3546
- /* Ensure foregrounds inside use the correct smart-surface tokens */
3547
3301
  color: var(--surface-inverse-text);
3548
- --color-text-primary: var(--surface-inverse-text);
3549
- --color-text-secondary: var(--surface-inverse-text-secondary);
3550
- --color-text-muted: var(--surface-inverse-text-muted);
3551
- /* Ensure code/pre and other muted surfaces have contrast on inverse */
3552
- --color-surface-muted: rgba(255, 255, 255, 0.08);
3553
- /* Optional: adjust borders/shadows if utilities/components read these */
3554
- --color-border: var(--surface-inverse-border);
3555
3302
 
3556
3303
  pds-icon {
3557
3304
  color: var(--surface-inverse-icon);
3558
3305
  }
3306
+
3307
+ /* btn-primary stays vibrant in any context */
3308
+ & .btn-primary {
3309
+ background-color: var(--color-primary-500);
3310
+ border-color: var(--color-primary-500);
3311
+ color: var(--color-primary-contrast, #ffffff);
3312
+
3313
+ &:hover {
3314
+ background-color: var(--color-primary-400);
3315
+ border-color: var(--color-primary-400);
3316
+ }
3317
+ }
3559
3318
  }
3560
3319
 
3561
- /* Shadow utilities */
3562
- .shadow-sm {
3563
- box-shadow: var(--shadow-sm);
3564
- }
3565
-
3566
- .shadow-base, .shadow {
3567
- box-shadow: var(--shadow-base);
3568
- }
3569
-
3570
- .shadow-md {
3571
- box-shadow: var(--shadow-md);
3320
+ /* Light-mode inverse: apply dark semantic tokens */
3321
+ html:not([data-theme="dark"]) .surface-inverse {
3322
+ --color-text-primary: var(--color-gray-100);
3323
+ --color-text-secondary: var(--color-gray-300);
3324
+ --color-text-muted: var(--color-gray-400);
3325
+ --color-border: var(--color-gray-700);
3326
+ --color-input-bg: var(--color-gray-800);
3327
+ --color-input-disabled-bg: var(--color-gray-900);
3328
+ --color-input-disabled-text: var(--color-gray-600);
3329
+ --color-code-bg: var(--color-gray-800);
3330
+ --color-surface-muted: rgba(255, 255, 255, 0.08);
3331
+
3332
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
3333
+ & .btn-secondary {
3334
+ background-color: rgba(255, 255, 255, 0.12);
3335
+ color: var(--surface-inverse-text);
3336
+ border-color: rgba(255, 255, 255, 0.25);
3337
+
3338
+ &:hover { background-color: rgba(255, 255, 255, 0.2); }
3339
+ &:active { background-color: rgba(255, 255, 255, 0.28); }
3340
+ }
3341
+
3342
+ & select {
3343
+ background-color: rgba(255, 255, 255, 0.1);
3344
+ color: var(--surface-inverse-text);
3345
+ }
3346
+
3347
+ & a:not([class*="btn"]) {
3348
+ color: var(--color-primary-300, #7dd3fc);
3349
+ }
3350
+ }
3351
+
3352
+ /* Dark-mode inverse: flip back to light semantic tokens */
3353
+ html[data-theme="dark"] .surface-inverse {
3354
+ --color-text-primary: var(--color-gray-900);
3355
+ --color-text-secondary: var(--color-gray-600);
3356
+ --color-text-muted: var(--color-gray-600);
3357
+ --color-border: var(--color-gray-300);
3358
+ --color-input-bg: var(--color-surface-base);
3359
+ --color-input-disabled-bg: var(--color-gray-50);
3360
+ --color-input-disabled-text: var(--color-gray-500);
3361
+ --color-code-bg: var(--color-gray-100);
3362
+ --color-surface-muted: var(--color-gray-100);
3363
+
3364
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
3365
+ & .btn-secondary {
3366
+ background-color: rgba(0, 0, 0, 0.06);
3367
+ color: var(--surface-inverse-text);
3368
+ border-color: rgba(0, 0, 0, 0.15);
3369
+
3370
+ &:hover { background-color: rgba(0, 0, 0, 0.1); }
3371
+ &:active { background-color: rgba(0, 0, 0, 0.15); }
3372
+ }
3373
+
3374
+ & select {
3375
+ background-color: #ffffff;
3376
+ color: var(--surface-inverse-text);
3377
+ }
3378
+
3379
+ & a:not([class*="btn"]) {
3380
+ color: var(--color-primary-600, #0284c7);
3381
+ }
3382
+ }
3383
+
3384
+ /* Shadow utilities */
3385
+ .shadow-sm {
3386
+ box-shadow: var(--shadow-sm);
3387
+ }
3388
+
3389
+ .shadow-base, .shadow {
3390
+ box-shadow: var(--shadow-base);
3391
+ }
3392
+
3393
+ .shadow-md {
3394
+ box-shadow: var(--shadow-md);
3572
3395
  }
3573
3396
 
3574
3397
  .shadow-lg {
@@ -3604,11 +3427,7 @@ html[data-theme="dark"] .liquid-glass {
3604
3427
  }
3605
3428
 
3606
3429
  /* Responsive images with different radius sizes */
3607
- .img-rounded-sm { border-radius: var(--radius-sm); }
3608
- .img-rounded-md { border-radius: var(--radius-md); }
3609
- .img-rounded-lg { border-radius: var(--radius-lg); }
3610
- .img-rounded-xl { border-radius: var(--radius-xl); }
3611
- .img-rounded-full { border-radius: var(--radius-full); }
3430
+ .img-rounded-sm { border-radius: var(--radius-sm); } .img-rounded-md { border-radius: var(--radius-md); } .img-rounded-lg { border-radius: var(--radius-lg); } .img-rounded-xl { border-radius: var(--radius-xl); } .img-rounded-full { border-radius: var(--radius-full); }
3612
3431
 
3613
3432
  /* Inline images */
3614
3433
  .img-inline {
@@ -3640,37 +3459,17 @@ html[data-theme="dark"] .liquid-glass {
3640
3459
 
3641
3460
  /* Small devices (640px and up) */
3642
3461
  @media (min-width: 640px) {
3643
- .sm\\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
3644
- .sm\\:flex-row { flex-direction: row; }
3645
- .sm\\:text-sm { font-size: var(--font-size-sm); }
3646
- .sm\\:p-6 { padding: var(--spacing-6); }
3647
- .sm\\:gap-6 { gap: var(--spacing-6); }
3648
- .sm\\:hidden { display: none; }
3649
- .sm\\:block { display: block; }
3462
+ .sm\\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); } .sm\\:flex-row { flex-direction: row; } .sm\\:text-sm { font-size: var(--font-size-sm); } .sm\\:p-6 { padding: var(--spacing-6); } .sm\\:gap-6 { gap: var(--spacing-6); } .sm\\:hidden { display: none; } .sm\\:block { display: block; }
3650
3463
  }
3651
3464
 
3652
3465
  /* Medium devices (768px and up) */
3653
3466
  @media (min-width: 768px) {
3654
- .md\\:grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
3655
- .md\\:text-lg { font-size: var(--font-size-lg); }
3656
- .md\\:p-8 { padding: var(--spacing-8); }
3657
- .md\\:gap-8 { gap: var(--spacing-8); }
3658
- .md\\:flex-row { flex-direction: row; }
3659
- .md\\:w-1\\/2 { width: 50%; }
3660
- .md\\:w-1\\/3 { width: 33.333333%; }
3661
- .md\\:hidden { display: none; }
3662
- .md\\:block { display: block; }
3467
+ .md\\:grid-cols-3 { grid-template-columns: repeat(3, 1fr); } .md\\:text-lg { font-size: var(--font-size-lg); } .md\\:p-8 { padding: var(--spacing-8); } .md\\:gap-8 { gap: var(--spacing-8); } .md\\:flex-row { flex-direction: row; } .md\\:w-1\\/2 { width: 50%; } .md\\:w-1\\/3 { width: 33.333333%; } .md\\:hidden { display: none; } .md\\:block { display: block; }
3663
3468
  }
3664
3469
 
3665
3470
  /* Large devices (1024px and up) */
3666
3471
  @media (min-width: 1024px) {
3667
- .lg\\:grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
3668
- .lg\\:text-xl { font-size: var(--font-size-xl); }
3669
- .lg\\:p-12 { padding: var(--spacing-12); }
3670
- .lg\\:gap-12 { gap: var(--spacing-12); }
3671
- .lg\\:w-1\\/4 { width: 25%; }
3672
- .lg\\:hidden { display: none; }
3673
- .lg\\:block { display: block; }
3472
+ .lg\\:grid-cols-4 { grid-template-columns: repeat(4, 1fr); } .lg\\:text-xl { font-size: var(--font-size-xl); } .lg\\:p-12 { padding: var(--spacing-12); } .lg\\:gap-12 { gap: var(--spacing-12); } .lg\\:w-1\\/4 { width: 25%; } .lg\\:hidden { display: none; } .lg\\:block { display: block; }
3674
3473
  }
3675
3474
 
3676
3475
  /* Touch device optimizations */
@@ -4855,6 +4654,36 @@ html[data-theme="dark"] {
4855
4654
  height: 0;
4856
4655
  }
4857
4656
 
4657
+ /* Labeled horizontal rule: <hr data-content="OR"> */
4658
+ :where(hr[data-content]) {
4659
+ position: relative;
4660
+ border: none;
4661
+ text-align: center;
4662
+ height: auto;
4663
+ overflow: visible;
4664
+
4665
+ &::before {
4666
+ content: "";
4667
+ position: absolute;
4668
+ left: 0;
4669
+ top: 50%;
4670
+ width: 100%;
4671
+ height: 1px;
4672
+ background: linear-gradient(to right, transparent, var(--color-border), transparent);
4673
+ }
4674
+
4675
+ &::after {
4676
+ content: attr(data-content);
4677
+ position: relative;
4678
+ display: inline-block;
4679
+ padding: 0 var(--spacing-3);
4680
+ background-color: var(--color-surface-base);
4681
+ color: var(--color-text-muted);
4682
+ font-size: var(--font-size-sm);
4683
+ line-height: var(--font-line-height-normal);
4684
+ }
4685
+ }
4686
+
4858
4687
  :where(dl) {
4859
4688
  margin: 0 0 var(--spacing-4) 0;
4860
4689
  }
@@ -4882,6 +4711,11 @@ html[data-theme="dark"] {
4882
4711
  width: 100%;
4883
4712
  }
4884
4713
 
4714
+ /* Headings within header elements have tight spacing for intro content */
4715
+ :where(header) > :where(h1, h2, h3, h4, h5, h6) {
4716
+ margin: 0;
4717
+ }
4718
+
4885
4719
  :where(article), :where(section), :where(aside) {
4886
4720
  display: block;
4887
4721
  margin-bottom: var(--spacing-6);
@@ -4988,7 +4822,7 @@ form {
4988
4822
  }
4989
4823
 
4990
4824
  fieldset {
4991
- margin: 0 0 var(--spacing-2) 0;
4825
+ margin: 0;
4992
4826
  padding: var(--spacing-5);
4993
4827
  width: 100%;
4994
4828
  background-color: color-mix(in oklab, var(--color-surface-subtle) 50%, transparent 50%);
@@ -5063,7 +4897,6 @@ fieldset fieldset fieldset > legend { font-size: var(--font-size-sm); }
5063
4897
 
5064
4898
  label {
5065
4899
  display: block;
5066
- margin-bottom: var(--spacing-3);
5067
4900
  font-weight: var(--font-weight-medium);
5068
4901
  color: var(--color-text-primary);
5069
4902
  font-size: var(--font-size-sm);
@@ -5767,16 +5600,7 @@ a.btn-working {
5767
5600
  border: 1px solid var(--color-border);
5768
5601
  border-radius: var(--radius-md);
5769
5602
  background-color: var(--color-surface-base);
5770
-
5771
- fieldset {
5772
- background-color: transparent;
5773
- margin-bottom: var(--spacing-3);
5774
-
5775
- &:last-of-type {
5776
- margin-bottom: 0;
5777
- }
5778
- }
5779
-
5603
+
5780
5604
  .array-controls {
5781
5605
  padding-top: var(--spacing-3);
5782
5606
  border-top: 1px solid var(--color-border);
@@ -5924,82 +5748,30 @@ a.btn-working {
5924
5748
  vertical-align: middle;
5925
5749
  background-color: var(--color-gray-200);
5926
5750
  color: var(--color-gray-800);
5927
- border-radius: var(--radius-full);
5928
- }
5929
-
5930
- .badge-primary {
5931
- background-color: var(--color-primary-600);
5932
- color: white;
5933
5751
  }
5934
5752
 
5935
- .badge-secondary {
5936
- background-color: var(--color-secondary-600);
5937
- color: white;
5938
- }
5939
-
5940
- .badge-success {
5941
- background-color: var(--color-success-600);
5942
- color: white;
5943
- }
5944
-
5945
- .badge-info {
5946
- background-color: var(--color-info-600);
5947
- color: white;
5948
- }
5949
-
5950
- .badge-warning {
5951
- background-color: var(--color-warning-600);
5952
- color: white;
5953
- }
5954
-
5955
- .badge-danger {
5956
- background-color: var(--color-danger-600);
5957
- color: white;
5958
- }
5753
+ .badge-primary, .badge-secondary, .badge-success, .badge-info, .badge-warning, .badge-danger { color: white; }
5754
+ .badge-primary { background-color: var(--color-primary-600); }
5755
+ .badge-secondary { background-color: var(--color-secondary-600); }
5756
+ .badge-success { background-color: var(--color-success-600); }
5757
+ .badge-info { background-color: var(--color-info-600); }
5758
+ .badge-warning { background-color: var(--color-warning-600); }
5759
+ .badge-danger { background-color: var(--color-danger-600); }
5959
5760
 
5960
5761
  .badge-outline {
5961
5762
  background-color: transparent;
5962
5763
  border: 1px solid currentColor;
5963
-
5964
- &.badge-primary {
5965
- color: var(--color-text-primary);
5966
- }
5967
-
5968
- &.badge-secondary {
5969
- color: var(--color-secondary-600);
5970
- }
5971
-
5972
- &.badge-success {
5973
- color: var(--color-success-600);
5974
- }
5975
-
5976
- &.badge-info {
5977
- color: var(--color-info-600);
5978
- }
5979
-
5980
- &.badge-warning {
5981
- color: var(--color-warning-600);
5982
- }
5983
-
5984
- &.badge-danger {
5985
- color: var(--color-danger-600);
5986
- }
5987
- }
5988
-
5989
- .badge-sm {
5990
- padding: 2px var(--spacing-1);
5991
- font-size: 10px;
5992
- }
5993
-
5994
- .badge-lg {
5995
- padding: var(--spacing-2) var(--spacing-3);
5996
- font-size: var(--font-size-sm);
5764
+ &.badge-primary { color: var(--color-text-primary); }
5765
+ &.badge-secondary { color: var(--color-secondary-600); }
5766
+ &.badge-success { color: var(--color-success-600); }
5767
+ &.badge-info { color: var(--color-info-600); }
5768
+ &.badge-warning { color: var(--color-warning-600); }
5769
+ &.badge-danger { color: var(--color-danger-600); }
5997
5770
  }
5998
5771
 
5999
- .pill {
6000
- padding: var(--spacing-1) var(--spacing-3);
6001
- border-radius: var(--radius-full);
6002
- }
5772
+ .badge-sm { padding: 2px var(--spacing-1); font-size: 10px; }
5773
+ .badge-lg { padding: var(--spacing-2) var(--spacing-3); font-size: var(--font-size-sm); }
5774
+ .pill { padding: var(--spacing-1) var(--spacing-3); border-radius: var(--radius-full); }
6003
5775
 
6004
5776
 
6005
5777
 
@@ -6033,8 +5805,7 @@ dialog {
6033
5805
  overlay 0.2s ease allow-discrete,
6034
5806
  display 0.2s ease allow-discrete;
6035
5807
 
6036
- /* Overflow handling */
6037
- overflow: hidden;
5808
+
6038
5809
  }
6039
5810
 
6040
5811
  /* Open state */
@@ -6136,7 +5907,7 @@ dialog {
6136
5907
  form > article,
6137
5908
  .dialog-body {
6138
5909
  flex: 1;
6139
- padding: var(--spacing-6);
5910
+ padding: var(--spacing-3) var(--spacing-6);
6140
5911
  overflow-y: auto;
6141
5912
  overflow-x: hidden;
6142
5913
  }
@@ -6156,50 +5927,20 @@ dialog {
6156
5927
  }
6157
5928
 
6158
5929
  /* Dialog size modifiers */
6159
- dialog.dialog-sm {
6160
- max-width: min(400px, calc(100vw - var(--spacing-8)));
6161
- }
6162
-
6163
- dialog.dialog-lg {
6164
- max-width: min(800px, calc(100vw - var(--spacing-8)));
6165
- }
6166
-
6167
- dialog.dialog-xl {
6168
- max-width: min(1200px, calc(100vw - var(--spacing-8)));
6169
- }
6170
-
6171
- dialog.dialog-full {
6172
- max-width: calc(100vw - var(--spacing-8));
6173
- max-height: calc(100vh - var(--spacing-8));
6174
- }
5930
+ dialog.dialog-sm { max-width: min(400px, calc(100vw - var(--spacing-8))); }
5931
+ dialog.dialog-lg { max-width: min(800px, calc(100vw - var(--spacing-8))); }
5932
+ dialog.dialog-xl { max-width: min(1200px, calc(100vw - var(--spacing-8))); }
5933
+ dialog.dialog-full { max-width: calc(100vw - var(--spacing-8)); max-height: calc(100vh - var(--spacing-8)); }
6175
5934
 
6176
5935
  /* Mobile responsiveness */
6177
5936
  @media (max-width: 639px) {
6178
- dialog {
6179
- max-width: 100vw;
6180
- max-height: 100vh;
6181
- border-radius: 0;
6182
- top: 50%;
6183
- transform: translateY(-50%);
6184
- margin: 0;
6185
- }
6186
-
6187
- dialog header,
6188
- dialog form > header,
6189
- dialog article,
6190
- dialog form > article,
6191
- dialog footer,
6192
- dialog form > footer {
6193
- padding: var(--spacing-4);
6194
- }
5937
+ dialog { max-width: 100vw; max-height: 100vh; border-radius: 0; top: 50%; transform: translateY(-50%); margin: 0; }
5938
+ dialog header, dialog form > header, dialog article, dialog form > article, dialog footer, dialog form > footer { padding: var(--spacing-4); }
6195
5939
  }
6196
5940
 
6197
5941
  /* Reduced motion support */
6198
5942
  @media (prefers-reduced-motion: reduce) {
6199
- dialog,
6200
- dialog::backdrop {
6201
- transition-duration: 0.01s !important;
6202
- }
5943
+ dialog, dialog::backdrop { transition-duration: 0.01s !important; }
6203
5944
  }
6204
5945
 
6205
5946
 
@@ -6522,30 +6263,15 @@ pds-tabstrip {
6522
6263
  }
6523
6264
 
6524
6265
  @keyframes tabFadeIn {
6525
- from {
6526
- opacity: 0;
6527
- transform: translateY(8px);
6528
- }
6529
- to {
6530
- opacity: 1;
6531
- transform: translateY(0);
6532
- }
6266
+ from { opacity: 0; transform: translateY(8px); }
6267
+ to { opacity: 1; transform: translateY(0); }
6533
6268
  }
6534
6269
 
6535
6270
  /* Mobile responsive */
6536
6271
  @media (max-width: 639px) {
6537
- pds-tabstrip > nav {
6538
- gap: var(--spacing-1);
6539
- }
6540
-
6541
- pds-tabstrip > nav > a {
6542
- padding: var(--spacing-2) var(--spacing-3);
6543
- font-size: var(--font-size-sm);
6544
- }
6545
-
6546
- pds-tabstrip > pds-tabpanel[data-tabpanel] {
6547
- padding: var(--spacing-3) 0;
6548
- }
6272
+ pds-tabstrip > nav { gap: var(--spacing-1); }
6273
+ pds-tabstrip > nav > a { padding: var(--spacing-2) var(--spacing-3); font-size: var(--font-size-sm); }
6274
+ pds-tabstrip > pds-tabpanel[data-tabpanel] { padding: var(--spacing-3) 0; }
6549
6275
  }
6550
6276
 
6551
6277
 
@@ -6659,106 +6385,41 @@ tbody {
6659
6385
  }
6660
6386
 
6661
6387
  /* Custom Scrollbars */
6662
-
6663
- ::-webkit-scrollbar {
6664
- width: 12px;
6665
- height: 12px;
6666
- }
6667
-
6668
- ::-webkit-scrollbar-track {
6669
- background: transparent;
6670
- }
6671
-
6388
+ ::-webkit-scrollbar { width: 12px; height: 12px; }
6389
+ ::-webkit-scrollbar-track { background: transparent; }
6672
6390
  ::-webkit-scrollbar-thumb {
6673
6391
  background: var(--color-secondary-300);
6674
6392
  border-radius: var(--radius-full);
6675
6393
  border: 3px solid transparent;
6676
6394
  background-clip: padding-box;
6677
6395
  transition: background-color var(--transition-fast);
6678
-
6679
- &:hover {
6680
- background: var(--color-secondary-400);
6681
- border: 2px solid transparent;
6682
- background-clip: padding-box;
6683
- }
6684
-
6685
- &:active {
6686
- background: var(--color-secondary-500);
6687
- border: 2px solid transparent;
6688
- background-clip: padding-box;
6689
- }
6690
-
6396
+ &:hover { background: var(--color-secondary-400); border: 2px solid transparent; background-clip: padding-box; }
6397
+ &:active { background: var(--color-secondary-500); border: 2px solid transparent; background-clip: padding-box; }
6691
6398
  @media (prefers-color-scheme: dark) {
6692
6399
  background: var(--color-secondary-600);
6693
-
6694
- &:hover {
6695
- background: var(--color-secondary-500);
6696
- }
6697
-
6698
- &:active {
6699
- background: var(--color-secondary-400);
6700
- }
6400
+ &:hover { background: var(--color-secondary-500); }
6401
+ &:active { background: var(--color-secondary-400); }
6701
6402
  }
6702
6403
  }
6703
6404
 
6704
6405
  * {
6705
6406
  scrollbar-width: thin;
6706
6407
  scrollbar-color: var(--color-secondary-300) transparent;
6707
-
6708
- @media (prefers-color-scheme: dark) {
6709
- scrollbar-color: var(--color-secondary-600) transparent;
6710
- }
6711
- }
6712
-
6713
- /* Hover effect for scrollable containers */
6714
- *:hover {
6715
- scrollbar-color: var(--color-secondary-400) transparent;
6716
- }
6717
-
6718
- @media (prefers-color-scheme: dark) {
6719
- *:hover {
6720
- scrollbar-color: var(--color-secondary-500) transparent;
6721
- }
6408
+ @media (prefers-color-scheme: dark) { scrollbar-color: var(--color-secondary-600) transparent; }
6722
6409
  }
6410
+ *:hover { scrollbar-color: var(--color-secondary-400) transparent; }
6411
+ @media (prefers-color-scheme: dark) { *:hover { scrollbar-color: var(--color-secondary-500) transparent; } }
6723
6412
 
6724
6413
 
6725
6414
 
6726
6415
  /* Alert dark mode adjustments */
6727
- html[data-theme="dark"] .alert-success {
6728
- background-color: var(--color-success-50);
6729
- border-color: var(--color-success-500);
6730
- color: var(--color-success-900);
6731
- }
6732
-
6733
- html[data-theme="dark"] .alert-info {
6734
- background-color: var(--color-info-50);
6735
- border-color: var(--color-info-500);
6736
- color: var(--color-info-900);
6737
- }
6738
-
6739
- html[data-theme="dark"] .alert-warning {
6740
- background-color: var(--color-warning-50);
6741
- border-color: var(--color-warning-500);
6742
- color: var(--color-warning-900);
6743
- }
6744
-
6745
- html[data-theme="dark"] .alert-danger,
6746
- html[data-theme="dark"] .alert-error {
6747
- background-color: var(--color-danger-50);
6748
- border-color: var(--color-danger-500);
6749
- color: var(--color-danger-900);
6750
- }
6751
-
6752
- /* Dim images in dark mode */
6753
- html[data-theme="dark"] img,
6754
- html[data-theme="dark"] video {
6755
- opacity: 0.8;
6756
- transition: opacity var(--transition-normal);
6757
- }
6758
-
6759
- html[data-theme="dark"] img:hover,
6760
- html[data-theme="dark"] video:hover {
6761
- opacity: 1;
6416
+ html[data-theme="dark"] {
6417
+ .alert-success { background-color: var(--color-success-50); border-color: var(--color-success-500); color: var(--color-success-900); }
6418
+ .alert-info { background-color: var(--color-info-50); border-color: var(--color-info-500); color: var(--color-info-900); }
6419
+ .alert-warning { background-color: var(--color-warning-50); border-color: var(--color-warning-500); color: var(--color-warning-900); }
6420
+ .alert-danger, .alert-error { background-color: var(--color-danger-50); border-color: var(--color-danger-500); color: var(--color-danger-900); }
6421
+ img, video { opacity: 0.8; transition: opacity var(--transition-normal); }
6422
+ img:hover, video:hover { opacity: 1; }
6762
6423
  }
6763
6424
 
6764
6425
  }
@@ -6777,102 +6438,28 @@ pds-icon {
6777
6438
  }
6778
6439
 
6779
6440
  /* Icon size utilities */
6780
- .icon-xs,
6781
- pds-icon[size="xs"] {
6782
- width: var(--icon-size-xs);
6783
- height: var(--icon-size-xs);
6784
- }
6785
-
6786
- .icon-sm,
6787
- pds-icon[size="sm"] {
6788
- width: var(--icon-size-sm);
6789
- height: var(--icon-size-sm);
6790
- }
6791
-
6792
- .icon-md,
6793
- pds-icon[size="md"] {
6794
- width: var(--icon-size-md);
6795
- height: var(--icon-size-md);
6796
- }
6797
-
6798
- .icon-lg,
6799
- pds-icon[size="lg"] {
6800
- width: var(--icon-size-lg);
6801
- height: var(--icon-size-lg);
6802
- }
6803
-
6804
- .icon-xl,
6805
- pds-icon[size="xl"] {
6806
- width: var(--icon-size-xl);
6807
- height: var(--icon-size-xl);
6808
- }
6809
-
6810
- .icon-2xl,
6811
- pds-icon[size="2xl"] {
6812
- width: var(--icon-size-2xl);
6813
- height: var(--icon-size-2xl);
6814
- }
6441
+ .icon-xs, pds-icon[size="xs"] { width: var(--icon-size-xs); height: var(--icon-size-xs); }
6442
+ .icon-sm, pds-icon[size="sm"] { width: var(--icon-size-sm); height: var(--icon-size-sm); }
6443
+ .icon-md, pds-icon[size="md"] { width: var(--icon-size-md); height: var(--icon-size-md); }
6444
+ .icon-lg, pds-icon[size="lg"] { width: var(--icon-size-lg); height: var(--icon-size-lg); }
6445
+ .icon-xl, pds-icon[size="xl"] { width: var(--icon-size-xl); height: var(--icon-size-xl); }
6446
+ .icon-2xl, pds-icon[size="2xl"] { width: var(--icon-size-2xl); height: var(--icon-size-2xl); }
6815
6447
 
6816
6448
  /* Icon color utilities */
6817
- .icon-primary,
6818
- pds-icon.primary {
6819
- color: var(--color-primary-600);
6820
- }
6821
-
6822
- .icon-secondary,
6823
- pds-icon.secondary {
6824
- color: var(--color-secondary-600);
6825
- }
6826
-
6827
- .icon-accent,
6828
- pds-icon.accent {
6829
- color: var(--color-accent-600);
6830
- }
6831
-
6832
- .icon-success,
6833
- pds-icon.success {
6834
- color: var(--color-success-600);
6835
- }
6836
-
6837
- .icon-warning,
6838
- pds-icon.warning {
6839
- color: var(--color-warning-600);
6840
- }
6841
-
6842
- .icon-danger,
6843
- pds-icon.danger {
6844
- color: var(--color-danger-600);
6845
- }
6846
-
6847
- .icon-info,
6848
- pds-icon.info {
6849
- color: var(--color-info-600);
6850
- }
6851
-
6852
- .icon-muted,
6853
- pds-icon.muted {
6854
- color: var(--color-text-muted);
6855
- }
6856
-
6857
- .icon-subtle,
6858
- pds-icon.subtle {
6859
- color: var(--color-text-subtle);
6860
- }
6449
+ .icon-primary, pds-icon.primary { color: var(--color-primary-600); }
6450
+ .icon-secondary, pds-icon.secondary { color: var(--color-secondary-600); }
6451
+ .icon-accent, pds-icon.accent { color: var(--color-accent-600); }
6452
+ .icon-success, pds-icon.success { color: var(--color-success-600); }
6453
+ .icon-warning, pds-icon.warning { color: var(--color-warning-600); }
6454
+ .icon-danger, pds-icon.danger { color: var(--color-danger-600); }
6455
+ .icon-info, pds-icon.info { color: var(--color-info-600); }
6456
+ .icon-muted, pds-icon.muted { color: var(--color-text-muted); }
6457
+ .icon-subtle, pds-icon.subtle { color: var(--color-text-subtle); }
6861
6458
 
6862
6459
  /* Icon with text combinations */
6863
- .icon-text {
6864
- display: inline-flex;
6865
- align-items: center;
6866
- gap: var(--spacing-2);
6867
- }
6868
-
6869
- .icon-text-start {
6870
- flex-direction: row;
6871
- }
6872
-
6873
- .icon-text-end {
6874
- flex-direction: row-reverse;
6875
- }
6460
+ .icon-text { display: inline-flex; align-items: center; gap: var(--spacing-2); }
6461
+ .icon-text-start { flex-direction: row; }
6462
+ .icon-text-end { flex-direction: row-reverse; }
6876
6463
 
6877
6464
  /* Button icon utilities */
6878
6465
  button, a {
@@ -6892,46 +6479,19 @@ button, a {
6892
6479
  }
6893
6480
 
6894
6481
  /* Icon in inputs */
6895
- .input-icon {
6482
+ .input-icon, .input-icon-end {
6896
6483
  position: relative;
6897
6484
  display: flex;
6898
6485
  align-items: center;
6899
-
6900
- pds-icon {
6901
- position: absolute;
6902
- left: var(--spacing-3);
6903
- color: var(--color-text-muted);
6904
- pointer-events: none;
6905
- width: var(--icon-size-md);
6906
- height: var(--icon-size-md);
6907
- }
6908
-
6909
- input {
6910
- padding-left: calc(var(--icon-size-md) + var(--spacing-6));
6911
- width: 100%;
6912
- }
6486
+ pds-icon { position: absolute; color: var(--color-text-muted); pointer-events: none; width: var(--icon-size-md); height: var(--icon-size-md); }
6487
+ }
6488
+ .input-icon {
6489
+ pds-icon { left: var(--spacing-3); }
6490
+ input { padding-left: calc(var(--icon-size-md) + var(--spacing-6)); width: 100%; }
6913
6491
  }
6914
-
6915
6492
  .input-icon-end {
6916
- position: relative;
6917
- display: flex;
6918
- align-items: center;
6919
-
6920
- pds-icon {
6921
- position: absolute;
6922
- left: unset;
6923
- right: var(--spacing-3);
6924
- color: var(--color-text-muted);
6925
- pointer-events: none;
6926
- width: var(--icon-size-md);
6927
- height: var(--icon-size-md);
6928
- }
6929
-
6930
- input {
6931
- padding-left: var(--spacing-4);
6932
- padding-right: calc(var(--icon-size-md) + var(--spacing-6));
6933
- width: 100%;
6934
- }
6493
+ pds-icon { left: unset; right: var(--spacing-3); }
6494
+ input { padding-left: var(--spacing-4); padding-right: calc(var(--icon-size-md) + var(--spacing-6)); width: 100%; }
6935
6495
  }
6936
6496
 
6937
6497
 
@@ -6970,44 +6530,45 @@ button, a {
6970
6530
  .grid-auto-xl { grid-template-columns: repeat(auto-fit, minmax(450px, 1fr)); }
6971
6531
 
6972
6532
  /* Gap utilities */
6973
- .gap-0 { gap: 0; }
6974
- .gap-xs { gap: var(--spacing-1); }
6975
- .gap-sm { gap: var(--spacing-2); }
6976
- .gap-md { gap: var(--spacing-4); }
6977
- .gap-lg { gap: var(--spacing-6); }
6978
- .gap-xl { gap: var(--spacing-8); }
6533
+ .gap-0 { gap: 0; } .gap-xs { gap: var(--spacing-1); } .gap-sm { gap: var(--spacing-2); } .gap-md { gap: var(--spacing-4); } .gap-lg { gap: var(--spacing-6); } .gap-xl { gap: var(--spacing-8); }
6979
6534
 
6980
6535
 
6981
6536
  /* Flexbox System */
6982
- .flex {
6983
- display: flex;
6537
+ .flex { display: flex; }
6538
+ .flex-wrap { flex-wrap: wrap; }
6539
+ .flex-col { flex-direction: column; }
6540
+ .flex-row { flex-direction: row; }
6541
+ .grow { flex: 1 1 0%; }
6542
+
6543
+ /* Alignment utilities */
6544
+ .items-start { align-items: flex-start; } .items-center { align-items: center; } .items-end { align-items: flex-end; } .items-stretch { align-items: stretch; } .items-baseline { align-items: baseline; }
6545
+ .justify-start { justify-content: flex-start; } .justify-center { justify-content: center; } .justify-end { justify-content: flex-end; } .justify-between { justify-content: space-between; } .justify-around { justify-content: space-around; } .justify-evenly { justify-content: space-evenly; }
6546
+ .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; }
6547
+
6548
+ /* Text overflow utility */
6549
+ .truncate {
6550
+ overflow: hidden;
6551
+ text-overflow: ellipsis;
6552
+ white-space: nowrap;
6984
6553
  }
6985
6554
 
6986
- .flex-wrap {
6987
- flex-wrap: wrap;
6988
- }
6555
+ /* Max-width utilities */
6556
+ .max-w-sm { max-width: 400px; } .max-w-md { max-width: 600px; } .max-w-lg { max-width: 800px; } .max-w-xl { max-width: 1200px; }
6989
6557
 
6990
- .flex-col {
6558
+ /* Stack utilities - vertical rhythm for stacked elements */
6559
+ [class^="stack-"], [class*=" stack-"] {
6560
+ display: flex;
6991
6561
  flex-direction: column;
6992
6562
  }
6563
+ .stack-xs { gap: var(--spacing-1); }
6564
+ .stack-sm { gap: var(--spacing-2); }
6565
+ .stack-md { gap: var(--spacing-4); }
6566
+ .stack-lg { gap: var(--spacing-6); }
6567
+ .stack-xl { gap: var(--spacing-8); }
6993
6568
 
6994
- .flex-row {
6995
- flex-direction: row;
6996
- }
6997
-
6998
- /* Flex alignment */
6999
- .items-start { align-items: flex-start; }
7000
- .items-center { align-items: center; }
7001
- .items-end { align-items: flex-end; }
7002
- .items-stretch { align-items: stretch; }
7003
- .items-baseline { align-items: baseline; }
7004
-
7005
- .justify-start { justify-content: flex-start; }
7006
- .justify-center { justify-content: center; }
7007
- .justify-end { justify-content: flex-end; }
7008
- .justify-between { justify-content: space-between; }
7009
- .justify-around { justify-content: space-around; }
7010
- .justify-evenly { justify-content: space-evenly; }
6569
+ /* Section spacing - for major content blocks */
6570
+ .section { padding-block: var(--spacing-8); }
6571
+ .section-lg { padding-block: var(--spacing-12); }
7011
6572
 
7012
6573
  /* Responsive helpers */
7013
6574
  @media (max-width: 767px) {
@@ -7038,27 +6599,9 @@ button, a {
7038
6599
  }
7039
6600
 
7040
6601
  /* Backdrop variants */
7041
- .backdrop-light {
7042
- --backdrop-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2));
7043
- --backdrop-brightness: 1.1;
7044
- }
7045
-
7046
- .backdrop-dark {
7047
- --backdrop-bg: linear-gradient(135deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.5));
7048
- --backdrop-brightness: 0.6;
7049
- }
7050
-
7051
- .backdrop-blur-sm {
7052
- --backdrop-blur: 5px;
7053
- }
7054
-
7055
- .backdrop-blur-md {
7056
- --backdrop-blur: 10px;
7057
- }
7058
-
7059
- .backdrop-blur-lg {
7060
- --backdrop-blur: 20px;
7061
- }
6602
+ .backdrop-light { --backdrop-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2)); --backdrop-brightness: 1.1; }
6603
+ .backdrop-dark { --backdrop-bg: linear-gradient(135deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.5)); --backdrop-brightness: 0.6; }
6604
+ .backdrop-blur-sm { --backdrop-blur: 5px; } .backdrop-blur-md { --backdrop-blur: 10px; } .backdrop-blur-lg { --backdrop-blur: 20px; }
7062
6605
 
7063
6606
 
7064
6607
  /* Optional utilities/features controlled by config options */
@@ -7303,22 +6846,101 @@ html[data-theme="dark"] .liquid-glass {
7303
6846
  }
7304
6847
 
7305
6848
 
7306
- /* Inverse surface (dark) using PDS tokens; text/icons inherit currentColor */
6849
+ /*
6850
+ * SURFACE-INVERSE: Local Theme Context Flip
6851
+ *
6852
+ * We can't simply add .surface-inverse to the dark mode selector because that would
6853
+ * also apply the dark color PALETTE (grays, surfaces, etc.), which would override
6854
+ * --color-surface-inverse itself. Instead, we duplicate only the SEMANTIC tokens.
6855
+ *
6856
+ * Light theme .surface-inverse → dark semantic tokens
6857
+ * Dark theme .surface-inverse → light semantic tokens (flip back)
6858
+ */
6859
+
6860
+ /* Surface-inverse visual properties (shared, uses smart surface tokens) */
7307
6861
  .surface-inverse {
7308
6862
  background-color: var(--color-surface-inverse);
7309
- /* Ensure foregrounds inside use the correct smart-surface tokens */
7310
6863
  color: var(--surface-inverse-text);
7311
- --color-text-primary: var(--surface-inverse-text);
7312
- --color-text-secondary: var(--surface-inverse-text-secondary);
7313
- --color-text-muted: var(--surface-inverse-text-muted);
7314
- /* Ensure code/pre and other muted surfaces have contrast on inverse */
7315
- --color-surface-muted: rgba(255, 255, 255, 0.08);
7316
- /* Optional: adjust borders/shadows if utilities/components read these */
7317
- --color-border: var(--surface-inverse-border);
7318
6864
 
7319
6865
  pds-icon {
7320
6866
  color: var(--surface-inverse-icon);
7321
6867
  }
6868
+
6869
+ /* btn-primary stays vibrant in any context */
6870
+ & .btn-primary {
6871
+ background-color: var(--color-primary-500);
6872
+ border-color: var(--color-primary-500);
6873
+ color: var(--color-primary-contrast, #ffffff);
6874
+
6875
+ &:hover {
6876
+ background-color: var(--color-primary-400);
6877
+ border-color: var(--color-primary-400);
6878
+ }
6879
+ }
6880
+ }
6881
+
6882
+ /* Light-mode inverse: apply dark semantic tokens */
6883
+ html:not([data-theme="dark"]) .surface-inverse {
6884
+ --color-text-primary: var(--color-gray-100);
6885
+ --color-text-secondary: var(--color-gray-300);
6886
+ --color-text-muted: var(--color-gray-400);
6887
+ --color-border: var(--color-gray-700);
6888
+ --color-input-bg: var(--color-gray-800);
6889
+ --color-input-disabled-bg: var(--color-gray-900);
6890
+ --color-input-disabled-text: var(--color-gray-600);
6891
+ --color-code-bg: var(--color-gray-800);
6892
+ --color-surface-muted: rgba(255, 255, 255, 0.08);
6893
+
6894
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
6895
+ & .btn-secondary {
6896
+ background-color: rgba(255, 255, 255, 0.12);
6897
+ color: var(--surface-inverse-text);
6898
+ border-color: rgba(255, 255, 255, 0.25);
6899
+
6900
+ &:hover { background-color: rgba(255, 255, 255, 0.2); }
6901
+ &:active { background-color: rgba(255, 255, 255, 0.28); }
6902
+ }
6903
+
6904
+ & select {
6905
+ background-color: rgba(255, 255, 255, 0.1);
6906
+ color: var(--surface-inverse-text);
6907
+ }
6908
+
6909
+ & a:not([class*="btn"]) {
6910
+ color: var(--color-primary-300, #7dd3fc);
6911
+ }
6912
+ }
6913
+
6914
+ /* Dark-mode inverse: flip back to light semantic tokens */
6915
+ html[data-theme="dark"] .surface-inverse {
6916
+ --color-text-primary: var(--color-gray-900);
6917
+ --color-text-secondary: var(--color-gray-600);
6918
+ --color-text-muted: var(--color-gray-600);
6919
+ --color-border: var(--color-gray-300);
6920
+ --color-input-bg: var(--color-surface-base);
6921
+ --color-input-disabled-bg: var(--color-gray-50);
6922
+ --color-input-disabled-text: var(--color-gray-500);
6923
+ --color-code-bg: var(--color-gray-100);
6924
+ --color-surface-muted: var(--color-gray-100);
6925
+
6926
+ & button:not(.btn-primary):not(.btn-outline):not(.btn-danger):not(.btn-success):not(.btn-warning),
6927
+ & .btn-secondary {
6928
+ background-color: rgba(0, 0, 0, 0.06);
6929
+ color: var(--surface-inverse-text);
6930
+ border-color: rgba(0, 0, 0, 0.15);
6931
+
6932
+ &:hover { background-color: rgba(0, 0, 0, 0.1); }
6933
+ &:active { background-color: rgba(0, 0, 0, 0.15); }
6934
+ }
6935
+
6936
+ & select {
6937
+ background-color: #ffffff;
6938
+ color: var(--surface-inverse-text);
6939
+ }
6940
+
6941
+ & a:not([class*="btn"]) {
6942
+ color: var(--color-primary-600, #0284c7);
6943
+ }
7322
6944
  }
7323
6945
 
7324
6946
  /* Shadow utilities */
@@ -7367,11 +6989,7 @@ html[data-theme="dark"] .liquid-glass {
7367
6989
  }
7368
6990
 
7369
6991
  /* Responsive images with different radius sizes */
7370
- .img-rounded-sm { border-radius: var(--radius-sm); }
7371
- .img-rounded-md { border-radius: var(--radius-md); }
7372
- .img-rounded-lg { border-radius: var(--radius-lg); }
7373
- .img-rounded-xl { border-radius: var(--radius-xl); }
7374
- .img-rounded-full { border-radius: var(--radius-full); }
6992
+ .img-rounded-sm { border-radius: var(--radius-sm); } .img-rounded-md { border-radius: var(--radius-md); } .img-rounded-lg { border-radius: var(--radius-lg); } .img-rounded-xl { border-radius: var(--radius-xl); } .img-rounded-full { border-radius: var(--radius-full); }
7375
6993
 
7376
6994
  /* Inline images */
7377
6995
  .img-inline {
@@ -7403,37 +7021,17 @@ html[data-theme="dark"] .liquid-glass {
7403
7021
 
7404
7022
  /* Small devices (640px and up) */
7405
7023
  @media (min-width: 640px) {
7406
- .sm\\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); }
7407
- .sm\\:flex-row { flex-direction: row; }
7408
- .sm\\:text-sm { font-size: var(--font-size-sm); }
7409
- .sm\\:p-6 { padding: var(--spacing-6); }
7410
- .sm\\:gap-6 { gap: var(--spacing-6); }
7411
- .sm\\:hidden { display: none; }
7412
- .sm\\:block { display: block; }
7024
+ .sm\\:grid-cols-2 { grid-template-columns: repeat(2, 1fr); } .sm\\:flex-row { flex-direction: row; } .sm\\:text-sm { font-size: var(--font-size-sm); } .sm\\:p-6 { padding: var(--spacing-6); } .sm\\:gap-6 { gap: var(--spacing-6); } .sm\\:hidden { display: none; } .sm\\:block { display: block; }
7413
7025
  }
7414
7026
 
7415
7027
  /* Medium devices (768px and up) */
7416
7028
  @media (min-width: 768px) {
7417
- .md\\:grid-cols-3 { grid-template-columns: repeat(3, 1fr); }
7418
- .md\\:text-lg { font-size: var(--font-size-lg); }
7419
- .md\\:p-8 { padding: var(--spacing-8); }
7420
- .md\\:gap-8 { gap: var(--spacing-8); }
7421
- .md\\:flex-row { flex-direction: row; }
7422
- .md\\:w-1\\/2 { width: 50%; }
7423
- .md\\:w-1\\/3 { width: 33.333333%; }
7424
- .md\\:hidden { display: none; }
7425
- .md\\:block { display: block; }
7029
+ .md\\:grid-cols-3 { grid-template-columns: repeat(3, 1fr); } .md\\:text-lg { font-size: var(--font-size-lg); } .md\\:p-8 { padding: var(--spacing-8); } .md\\:gap-8 { gap: var(--spacing-8); } .md\\:flex-row { flex-direction: row; } .md\\:w-1\\/2 { width: 50%; } .md\\:w-1\\/3 { width: 33.333333%; } .md\\:hidden { display: none; } .md\\:block { display: block; }
7426
7030
  }
7427
7031
 
7428
7032
  /* Large devices (1024px and up) */
7429
7033
  @media (min-width: 1024px) {
7430
- .lg\\:grid-cols-4 { grid-template-columns: repeat(4, 1fr); }
7431
- .lg\\:text-xl { font-size: var(--font-size-xl); }
7432
- .lg\\:p-12 { padding: var(--spacing-12); }
7433
- .lg\\:gap-12 { gap: var(--spacing-12); }
7434
- .lg\\:w-1\\/4 { width: 25%; }
7435
- .lg\\:hidden { display: none; }
7436
- .lg\\:block { display: block; }
7034
+ .lg\\:grid-cols-4 { grid-template-columns: repeat(4, 1fr); } .lg\\:text-xl { font-size: var(--font-size-xl); } .lg\\:p-12 { padding: var(--spacing-12); } .lg\\:gap-12 { gap: var(--spacing-12); } .lg\\:w-1\\/4 { width: 25%; } .lg\\:hidden { display: none; } .lg\\:block { display: block; }
7437
7035
  }
7438
7036
 
7439
7037
  /* Touch device optimizations */