ui-style-kit-css 2.3.0 → 2.4.1

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 (122) hide show
  1. package/CHANGELOG.md +57 -2
  2. package/CONTRIBUTING.md +8 -1
  3. package/README.md +102 -44
  4. package/STYLE-MAP.md +14 -5
  5. package/dist/assets/bauhaus-barlow-OFL.txt +93 -0
  6. package/dist/assets/bauhaus-barlow-semibold.ttf +0 -0
  7. package/dist/assets/bauhaus-barlow.ttf +0 -0
  8. package/dist/assets/bauhaus-condensed-OFL.txt +93 -0
  9. package/dist/assets/bauhaus-condensed-bold.ttf +0 -0
  10. package/dist/assets/bauhaus-condensed-extrabold.ttf +0 -0
  11. package/dist/assets/bento-manrope-OFL.txt +93 -0
  12. package/dist/assets/bento-manrope.ttf +0 -0
  13. package/dist/assets/clay-grain.png +0 -0
  14. package/dist/assets/clay-rounded-OFL.txt +93 -0
  15. package/dist/assets/clay-rounded.ttf +0 -0
  16. package/dist/assets/neo-noir-corner-dark.png +0 -0
  17. package/dist/assets/neo-noir-corner-light.png +0 -0
  18. package/dist/assets/neo-noir-texture-dark.png +0 -0
  19. package/dist/assets/neo-noir-texture-light.png +0 -0
  20. package/dist/assets/organic-display-OFL.txt +93 -0
  21. package/dist/assets/organic-display.ttf +0 -0
  22. package/dist/assets/organic-icons-LICENSE.txt +21 -0
  23. package/dist/assets/organic-sans-OFL.txt +93 -0
  24. package/dist/assets/organic-sans.ttf +0 -0
  25. package/dist/ui-style-kit.css +47898 -15121
  26. package/dist/ui-style-kit.min.css +2 -2
  27. package/dist/ui-style-kit.visual.css +47771 -15122
  28. package/dist/ui-style-kit.visual.min.css +2 -2
  29. package/dist/ui-style-kit.with-bridge.css +47932 -15145
  30. package/dist/ui-style-kit.with-bridge.min.css +2 -2
  31. package/dist/visual/art-deco.css +3247 -295
  32. package/dist/visual/bauhaus.css +2 -4692
  33. package/dist/visual/bento.css +2 -4708
  34. package/dist/visual/brutalism.css +1229 -231
  35. package/dist/visual/clay.css +2 -4786
  36. package/dist/visual/cyberpunk.css +2663 -282
  37. package/dist/visual/data-terminal.css +2064 -276
  38. package/dist/visual/editorial-luxe.css +2315 -259
  39. package/dist/visual/industrial-utility.css +3142 -270
  40. package/dist/visual/maximalist.css +2185 -454
  41. package/dist/visual/minimal-saas.css +1503 -398
  42. package/dist/visual/neo-noir.css +2 -4787
  43. package/dist/visual/neumorphism.css +1690 -402
  44. package/dist/visual/organic-modern.css +2 -4764
  45. package/dist/visual/paper-editorial.css +2977 -292
  46. package/dist/visual/retro-glass.css +2625 -299
  47. package/dist/visual/retrofuturism.css +1885 -397
  48. package/dist/visual/tactile.css +2716 -498
  49. package/dist/visual/technical-blueprint.css +2599 -267
  50. package/dist/visual/y2k.css +1906 -309
  51. package/docs/ART-DECO.md +80 -0
  52. package/docs/BAUHAUS.md +152 -0
  53. package/docs/BENTO.md +121 -0
  54. package/docs/CLAY.md +127 -0
  55. package/docs/COLOR-THEMES.md +63 -0
  56. package/docs/DEMO-SHOWCASE.md +65 -0
  57. package/docs/ECOSYSTEM.md +4 -4
  58. package/docs/EDITORIAL-LUX.md +75 -0
  59. package/docs/INDUSTRIAL-UTILITY.md +131 -0
  60. package/docs/NATIVE-ELEMENTS.md +23 -17
  61. package/docs/NEO-NOIR.md +94 -0
  62. package/docs/ORGANIC-MODERN.md +91 -0
  63. package/docs/PAPER-EDITORIAL.md +63 -0
  64. package/docs/PUBLISHING.md +31 -10
  65. package/docs/RELEASE-2.4.0.md +88 -0
  66. package/docs/RELEASE-2.4.1.md +35 -0
  67. package/docs/RETRO-GLASS.md +105 -0
  68. package/docs/STYLE-GUIDE.md +41 -26
  69. package/docs/TACTILE.md +38 -0
  70. package/docs/TECHNICAL-BLUEPRINT.md +60 -0
  71. package/docs/TOKENS.md +80 -3
  72. package/docs/superpowers/plans/2026-09-04-library-wide-theme-fallback-and-fidelity.md +331 -0
  73. package/docs/superpowers/specs/2026-09-04-library-wide-theme-fallback-and-fidelity-design.md +113 -0
  74. package/manifest.json +624 -28
  75. package/package.json +20 -11
  76. package/styles/art-deco.css +1402 -17
  77. package/styles/assets/bauhaus-barlow-OFL.txt +93 -0
  78. package/styles/assets/bauhaus-barlow-semibold.ttf +0 -0
  79. package/styles/assets/bauhaus-barlow.ttf +0 -0
  80. package/styles/assets/bauhaus-condensed-OFL.txt +93 -0
  81. package/styles/assets/bauhaus-condensed-bold.ttf +0 -0
  82. package/styles/assets/bauhaus-condensed-extrabold.ttf +0 -0
  83. package/styles/assets/bento-manrope-OFL.txt +93 -0
  84. package/styles/assets/bento-manrope.ttf +0 -0
  85. package/styles/assets/clay-grain.png +0 -0
  86. package/styles/assets/clay-rounded-OFL.txt +93 -0
  87. package/styles/assets/clay-rounded.ttf +0 -0
  88. package/styles/assets/neo-noir-corner-dark.png +0 -0
  89. package/styles/assets/neo-noir-corner-light.png +0 -0
  90. package/styles/assets/neo-noir-texture-dark.png +0 -0
  91. package/styles/assets/neo-noir-texture-light.png +0 -0
  92. package/styles/assets/organic-display-OFL.txt +93 -0
  93. package/styles/assets/organic-display.ttf +0 -0
  94. package/styles/assets/organic-icons-LICENSE.txt +21 -0
  95. package/styles/assets/organic-sans-OFL.txt +93 -0
  96. package/styles/assets/organic-sans.ttf +0 -0
  97. package/styles/bauhaus.css +881 -110
  98. package/styles/bento.css +1182 -113
  99. package/styles/brutalism.css +266 -15
  100. package/styles/clay.css +1307 -72
  101. package/styles/compat-layout.css +1 -2
  102. package/styles/components.css +107 -36
  103. package/styles/content-overflow.css +11 -5
  104. package/styles/cyberpunk.css +1856 -51
  105. package/styles/data-terminal.css +1122 -18
  106. package/styles/editorial-luxe.css +581 -17
  107. package/styles/industrial-utility.css +1775 -16
  108. package/styles/interactive-surface-bridge.css +30 -20
  109. package/styles/interactive-surface-theme.css +21 -11
  110. package/styles/maximalist.css +1215 -133
  111. package/styles/minimal-saas.css +465 -93
  112. package/styles/native-elements.css +347 -171
  113. package/styles/neo-noir.css +661 -19
  114. package/styles/neumorphism.css +1021 -149
  115. package/styles/organic-modern.css +693 -23
  116. package/styles/paper-editorial.css +1053 -17
  117. package/styles/retro-glass.css +639 -50
  118. package/styles/retrofuturism.css +948 -60
  119. package/styles/tactile.css +1813 -111
  120. package/styles/technical-blueprint.css +673 -22
  121. package/styles/theme-colors.css +412 -2
  122. package/styles/y2k.css +954 -46
@@ -18,16 +18,16 @@
18
18
  @layer ui-style-kit.tactile {
19
19
  :root {
20
20
  --tactile-font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
21
- --tactile-font-display: Inter, ui-sans-serif, system-ui, sans-serif;
21
+ --tactile-font-display: Georgia, Cambria, "Times New Roman", Times, serif;
22
22
  --tactile-font-body: var(--tactile-font-sans);
23
23
  --tactile-font-heading: var(--tactile-font-display);
24
- --tactile-font-control: var(--tactile-font-display);
24
+ --tactile-font-control: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
25
25
  --tactile-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
26
- --tactile-radius-xs: .25rem;
27
- --tactile-radius-sm: .5rem;
28
- --tactile-radius-md: 0.9rem;
29
- --tactile-radius-lg: 1.4rem;
30
- --tactile-radius-xl: calc(1.4rem + .5rem);
26
+ --tactile-radius-xs: .1rem;
27
+ --tactile-radius-sm: .18rem;
28
+ --tactile-radius-md: .28rem;
29
+ --tactile-radius-lg: .4rem;
30
+ --tactile-radius-xl: .6rem;
31
31
  --tactile-radius-pill: 999px;
32
32
  --tactile-space-1: .25rem;
33
33
  --tactile-space-2: .5rem;
@@ -42,33 +42,108 @@
42
42
 
43
43
  [data-ui="tactile"][data-mode="light"] {
44
44
  color-scheme: light;
45
+ --tactile-fallback-bg-rgb: 248 242 231;
46
+ --tactile-fallback-surface-rgb: 255 255 255;
47
+ --tactile-fallback-surface-strong-rgb: 255 250 241;
48
+ --tactile-fallback-surface-soft-rgb: 234 223 205;
49
+ --tactile-fallback-text-rgb: 43 36 25;
50
+ --tactile-fallback-text-muted-rgb: 107 97 78;
51
+ --tactile-fallback-border-rgb: 215 198 167;
52
+ --tactile-fallback-primary-rgb: 177 60 28;
53
+ --tactile-fallback-primary-hover-rgb: 145 46 20;
54
+ --tactile-fallback-primary-text-rgb: 255 255 255;
55
+ --tactile-fallback-secondary-rgb: 91 104 67;
56
+ --tactile-fallback-secondary-hover-rgb: 71 84 50;
57
+ --tactile-fallback-secondary-text-rgb: 255 255 255;
58
+ --tactile-fallback-accent-rgb: 197 160 82;
59
+ --tactile-fallback-accent-text-rgb: 0 0 0;
60
+ --tactile-fallback-success-rgb: 91 104 67;
61
+ --tactile-fallback-success-text-rgb: 255 255 255;
62
+ --tactile-fallback-warning-rgb: 166 107 0;
63
+ --tactile-fallback-warning-text-rgb: 0 0 0;
64
+ --tactile-fallback-danger-rgb: 174 74 63;
65
+ --tactile-fallback-danger-text-rgb: 255 255 255;
66
+ --tactile-fallback-link-rgb: 112 83 47;
67
+ --tactile-fallback-focus-rgb: 201 151 74;
45
68
  --tactile-panel-alpha: .98;
46
- --tactile-panel-soft-alpha: .78;
47
- --tactile-border-alpha: .58;
48
- --tactile-shadow-alpha: .12;
69
+ --tactile-panel-soft-alpha: .82;
70
+ --tactile-border-alpha: .68;
71
+ --tactile-shadow-alpha: .16;
49
72
  --tactile-focus-alpha: .34;
73
+ --tactile-paper-alpha: .96;
74
+ --tactile-sidebar-alpha: .94;
50
75
  }
51
76
 
52
77
  [data-ui="tactile"][data-mode="dark"] {
53
78
  color-scheme: dark;
79
+ --tactile-fallback-bg-rgb: 18 15 9;
80
+ --tactile-fallback-surface-rgb: 33 27 18;
81
+ --tactile-fallback-surface-strong-rgb: 47 40 27;
82
+ --tactile-fallback-surface-soft-rgb: 25 20 13;
83
+ --tactile-fallback-text-rgb: 248 239 223;
84
+ --tactile-fallback-text-muted-rgb: 199 186 163;
85
+ --tactile-fallback-border-rgb: 91 78 56;
86
+ --tactile-fallback-primary-rgb: 211 83 43;
87
+ --tactile-fallback-primary-hover-rgb: 230 107 63;
88
+ --tactile-fallback-primary-text-rgb: 21 16 6;
89
+ --tactile-fallback-secondary-rgb: 131 145 92;
90
+ --tactile-fallback-secondary-hover-rgb: 155 169 112;
91
+ --tactile-fallback-secondary-text-rgb: 9 20 7;
92
+ --tactile-fallback-accent-rgb: 222 181 91;
93
+ --tactile-fallback-accent-text-rgb: 0 0 0;
94
+ --tactile-fallback-success-rgb: 131 145 92;
95
+ --tactile-fallback-success-text-rgb: 0 0 0;
96
+ --tactile-fallback-warning-rgb: 255 209 102;
97
+ --tactile-fallback-warning-text-rgb: 0 0 0;
98
+ --tactile-fallback-danger-rgb: 255 136 122;
99
+ --tactile-fallback-danger-text-rgb: 0 0 0;
100
+ --tactile-fallback-link-rgb: 240 211 154;
101
+ --tactile-fallback-focus-rgb: 241 196 110;
54
102
  --tactile-panel-alpha: .92;
55
- --tactile-panel-soft-alpha: .64;
56
- --tactile-border-alpha: .52;
103
+ --tactile-panel-soft-alpha: .68;
104
+ --tactile-border-alpha: .62;
57
105
  --tactile-shadow-alpha: .34;
58
106
  --tactile-focus-alpha: .42;
107
+ --tactile-paper-alpha: .88;
108
+ --tactile-sidebar-alpha: .96;
59
109
  }
60
110
 
61
111
  [data-ui="tactile"][data-mode="contrast"] {
62
112
  color-scheme: dark;
113
+ --tactile-fallback-bg-rgb: 0 0 0;
114
+ --tactile-fallback-surface-rgb: 15 11 3;
115
+ --tactile-fallback-surface-strong-rgb: 26 18 5;
116
+ --tactile-fallback-surface-soft-rgb: 0 0 0;
117
+ --tactile-fallback-text-rgb: 255 255 255;
118
+ --tactile-fallback-text-muted-rgb: 255 248 232;
119
+ --tactile-fallback-border-rgb: 255 255 255;
120
+ --tactile-fallback-primary-rgb: 255 209 102;
121
+ --tactile-fallback-primary-hover-rgb: 255 255 255;
122
+ --tactile-fallback-primary-text-rgb: 0 0 0;
123
+ --tactile-fallback-secondary-rgb: 157 255 107;
124
+ --tactile-fallback-secondary-hover-rgb: 255 255 255;
125
+ --tactile-fallback-secondary-text-rgb: 0 0 0;
126
+ --tactile-fallback-accent-rgb: 255 176 0;
127
+ --tactile-fallback-accent-text-rgb: 0 0 0;
128
+ --tactile-fallback-success-rgb: 0 255 117;
129
+ --tactile-fallback-success-text-rgb: 0 0 0;
130
+ --tactile-fallback-warning-rgb: 255 225 0;
131
+ --tactile-fallback-warning-text-rgb: 0 0 0;
132
+ --tactile-fallback-danger-rgb: 255 77 77;
133
+ --tactile-fallback-danger-text-rgb: 0 0 0;
134
+ --tactile-fallback-link-rgb: 255 209 102;
135
+ --tactile-fallback-focus-rgb: 255 255 255;
63
136
  --tactile-panel-alpha: 1;
64
137
  --tactile-panel-soft-alpha: .92;
65
138
  --tactile-border-alpha: 1;
66
139
  --tactile-shadow-alpha: .5;
67
140
  --tactile-focus-alpha: .72;
141
+ --tactile-paper-alpha: 1;
142
+ --tactile-sidebar-alpha: 1;
68
143
  }
69
144
 
145
+ /** Preserves direct aliases for static extraction when a scheme is selected. */
70
146
  [data-ui="tactile"][data-theme][data-mode] {
71
- /* Shared scheme aliases preserve the existing prefixed token API. */
72
147
  --tactile-bg-rgb: var(--usk-bg-rgb);
73
148
  --tactile-surface-rgb: var(--usk-surface-rgb);
74
149
  --tactile-surface-strong-rgb: var(--usk-surface-strong-rgb);
@@ -83,15 +158,43 @@
83
158
  --tactile-secondary-hover-rgb: var(--usk-secondary-hover-rgb);
84
159
  --tactile-secondary-text-rgb: var(--usk-secondary-text-rgb);
85
160
  --tactile-accent-rgb: var(--usk-accent-rgb);
86
- --tactile-success-rgb: var(--usk-success-rgb);
87
- --tactile-warning-rgb: var(--usk-warning-rgb);
88
- --tactile-danger-rgb: var(--usk-danger-rgb);
89
- --tactile-link-rgb: var(--usk-link-rgb);
90
161
  --tactile-accent-text-rgb: var(--usk-accent-text-rgb);
162
+ --tactile-success-rgb: var(--usk-success-rgb);
91
163
  --tactile-success-text-rgb: var(--usk-success-text-rgb);
164
+ --tactile-warning-rgb: var(--usk-warning-rgb);
92
165
  --tactile-warning-text-rgb: var(--usk-warning-text-rgb);
166
+ --tactile-danger-rgb: var(--usk-danger-rgb);
93
167
  --tactile-danger-text-rgb: var(--usk-danger-text-rgb);
168
+ --tactile-link-rgb: var(--usk-link-rgb);
94
169
  --tactile-focus-rgb: var(--usk-focus-rgb);
170
+ }
171
+
172
+ [data-ui="tactile"][data-mode] {
173
+ --usk-native-bg: var(--tactile-bg);
174
+ /* Explicit schemes win; reference colors are used only when no scheme exists. */
175
+ --tactile-bg-rgb: var(--usk-bg-rgb, var(--tactile-fallback-bg-rgb));
176
+ --tactile-surface-rgb: var(--usk-surface-rgb, var(--tactile-fallback-surface-rgb));
177
+ --tactile-surface-strong-rgb: var(--usk-surface-strong-rgb, var(--tactile-fallback-surface-strong-rgb));
178
+ --tactile-surface-soft-rgb: var(--usk-surface-soft-rgb, var(--tactile-fallback-surface-soft-rgb));
179
+ --tactile-text-rgb: var(--usk-text-rgb, var(--tactile-fallback-text-rgb));
180
+ --tactile-text-muted-rgb: var(--usk-text-muted-rgb, var(--tactile-fallback-text-muted-rgb));
181
+ --tactile-border-rgb: var(--usk-border-rgb, var(--tactile-fallback-border-rgb));
182
+ --tactile-primary-rgb: var(--usk-primary-rgb, var(--tactile-fallback-primary-rgb));
183
+ --tactile-primary-hover-rgb: var(--usk-primary-hover-rgb, var(--tactile-fallback-primary-hover-rgb));
184
+ --tactile-primary-text-rgb: var(--usk-primary-text-rgb, var(--tactile-fallback-primary-text-rgb));
185
+ --tactile-secondary-rgb: var(--usk-secondary-rgb, var(--tactile-fallback-secondary-rgb));
186
+ --tactile-secondary-hover-rgb: var(--usk-secondary-hover-rgb, var(--tactile-fallback-secondary-hover-rgb));
187
+ --tactile-secondary-text-rgb: var(--usk-secondary-text-rgb, var(--tactile-fallback-secondary-text-rgb));
188
+ --tactile-accent-rgb: var(--usk-accent-rgb, var(--tactile-fallback-accent-rgb));
189
+ --tactile-accent-text-rgb: var(--usk-accent-text-rgb, var(--tactile-fallback-accent-text-rgb));
190
+ --tactile-success-rgb: var(--usk-success-rgb, var(--tactile-fallback-success-rgb));
191
+ --tactile-success-text-rgb: var(--usk-success-text-rgb, var(--tactile-fallback-success-text-rgb));
192
+ --tactile-warning-rgb: var(--usk-warning-rgb, var(--tactile-fallback-warning-rgb));
193
+ --tactile-warning-text-rgb: var(--usk-warning-text-rgb, var(--tactile-fallback-warning-text-rgb));
194
+ --tactile-danger-rgb: var(--usk-danger-rgb, var(--tactile-fallback-danger-rgb));
195
+ --tactile-danger-text-rgb: var(--usk-danger-text-rgb, var(--tactile-fallback-danger-text-rgb));
196
+ --tactile-link-rgb: var(--usk-link-rgb, var(--tactile-fallback-link-rgb));
197
+ --tactile-focus-rgb: var(--usk-focus-rgb, var(--tactile-fallback-focus-rgb));
95
198
  /* Native fallback selectors inherit visual identity through shared tokens. */
96
199
  --usk-native-surface: var(--tactile-surface);
97
200
  --usk-native-surface-strong: var(--tactile-surface-strong);
@@ -113,15 +216,66 @@
113
216
  --usk-native-font-heading: var(--tactile-font-heading);
114
217
  --usk-native-font-control: var(--tactile-font-control);
115
218
  --usk-native-font-mono: var(--tactile-font-mono);
116
- --usk-native-radius-sm: var(--tactile-radius-sm);
219
+ --usk-native-radius-sm: var(--tactile-radius-xs);
117
220
  --usk-native-radius: var(--tactile-radius-md);
118
221
  --usk-native-radius-lg: var(--tactile-radius-lg);
119
- --usk-native-shadow: var(--tactile-shadow-sm, none);
120
- --usk-native-shadow-md: var(--tactile-shadow-md, var(--usk-native-shadow));
222
+ --usk-native-shadow: var(--tactile-button-shadow);
223
+ --usk-native-shadow-md: var(--tactile-panel-shadow);
121
224
  --usk-native-focus-ring: var(--tactile-focus-ring, 0 0 0 3px rgb(var(--tactile-focus-rgb) / .28));
122
225
  --usk-native-border-width: 1px;
123
226
  --usk-native-field-gap: .5rem;
124
227
  --usk-native-panel-padding: var(--tactile-space-5);
228
+ --usk-native-control-min-block-size: 3rem;
229
+ --usk-native-control-padding-block: .74rem;
230
+ --usk-native-control-padding-inline: .95rem;
231
+ --usk-native-subcontrol-padding-block: .58rem;
232
+ --usk-native-subcontrol-padding-inline: .72rem;
233
+ --usk-native-choice-size: 1.35rem;
234
+ --usk-native-choice-background: var(--tactile-control-bg);
235
+ --usk-native-choice-border: 1px solid var(--tactile-keyline);
236
+ --usk-native-checkbox-radius: .18rem;
237
+ --usk-native-radio-radius: 50%;
238
+ --usk-native-choice-shadow: var(--tactile-inset-shadow);
239
+ --usk-native-choice-checked-background: var(--tactile-action-solid);
240
+ --usk-native-choice-mark-color: var(--tactile-on-primary);
241
+ --usk-native-select-indicator-image: linear-gradient(45deg, transparent 50%, var(--tactile-text) 50%), linear-gradient(135deg, var(--tactile-text) 50%, transparent 50%);
242
+ --usk-native-select-indicator-size: 0.5rem 0.5rem, 0.5rem 0.5rem;
243
+ --usk-native-select-indicator-position: calc(100% - 1rem) 50%, calc(100% - 0.72rem) 50%;
244
+ --usk-native-select-padding-inline-end: 2.25rem;
245
+ --usk-native-range-track-size: .56rem;
246
+ --usk-native-range-track-background: var(--tactile-recessed-track);
247
+ --usk-native-range-track-border: 1px solid var(--tactile-track-rim);
248
+ --usk-native-range-track-radius: .2rem;
249
+ --usk-native-range-track-shadow: var(--tactile-deep-inset-shadow);
250
+ --usk-native-range-progress-background: var(--tactile-action-solid);
251
+ --usk-native-range-thumb-size: 1.55rem;
252
+ --usk-native-range-thumb-background: var(--tactile-thumb-bg);
253
+ --usk-native-range-thumb-border: 1px solid var(--tactile-keyline);
254
+ --usk-native-range-thumb-radius: .22rem;
255
+ --usk-native-range-thumb-shadow: var(--tactile-button-shadow);
256
+ --usk-native-progress-size: .76rem;
257
+ --usk-native-progress-track-background: var(--tactile-recessed-track);
258
+ --usk-native-progress-track-border: 1px solid var(--tactile-track-rim);
259
+ --usk-native-progress-track-radius: .18rem;
260
+ --usk-native-progress-track-shadow: var(--tactile-deep-inset-shadow);
261
+ --usk-native-progress-value-background: var(--tactile-progress-fill);
262
+ --usk-native-progress-value-radius: .12rem;
263
+ --usk-native-progress-value-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .22);
264
+ --usk-native-meter-optimum-background: var(--tactile-success);
265
+ --usk-native-meter-suboptimum-background: var(--tactile-warning);
266
+ --usk-native-meter-critical-background: var(--tactile-danger);
267
+ --usk-native-file-button-background: var(--tactile-action-solid);
268
+ --usk-native-file-button-border: 1px solid var(--tactile-keyline);
269
+ --usk-native-file-button-radius: .22rem;
270
+ --usk-native-file-button-shadow: var(--tactile-button-shadow);
271
+ --usk-native-color-swatch-border: 1px solid var(--tactile-keyline);
272
+ --usk-native-color-swatch-radius: .18rem;
273
+ --usk-native-indicator-opacity: 0.9199999999999999;
274
+ --usk-native-indicator-filter: none;
275
+ --usk-native-scrollbar-size: .85rem;
276
+ --usk-native-scrollbar-track: var(--tactile-recessed-track);
277
+ --usk-native-scrollbar-thumb: var(--tactile-thumb-bg);
278
+ --usk-native-scrollbar-radius: .18rem;
125
279
  --tactile-bg: rgb(var(--tactile-bg-rgb));
126
280
  --tactile-surface: rgb(var(--tactile-surface-rgb) / var(--tactile-panel-alpha));
127
281
  --tactile-surface-strong: rgb(var(--tactile-surface-strong-rgb) / var(--tactile-panel-alpha));
@@ -152,17 +306,40 @@
152
306
  --tactile-link: rgb(var(--tactile-link-rgb));
153
307
  --tactile-focus: rgb(var(--tactile-focus-rgb));
154
308
  --tactile-focus-ring: 0 0 0 3px rgb(var(--tactile-focus-rgb) / var(--tactile-focus-alpha));
309
+ --tactile-paper-wash: rgb(var(--tactile-warning-rgb) / .14);
310
+ --tactile-bevel-highlight: rgb(var(--tactile-surface-strong-rgb) / .82);
311
+ --tactile-bevel-shadow: rgb(var(--tactile-text-rgb) / .24);
155
312
  --tactile-theme-bg-size: auto;
156
- --tactile-theme-bg: radial-gradient(circle at 0% 0%, rgb(var(--tactile-primary-rgb) / .16), transparent 32rem), radial-gradient(circle at 100% 0%, rgb(var(--tactile-accent-rgb) / .12), transparent 30rem), radial-gradient(circle at 50% 100%, rgb(var(--tactile-secondary-rgb) / .10), transparent 34rem), var(--tactile-bg);
157
- --tactile-card-bg: linear-gradient(135deg, rgb(var(--tactile-primary-rgb) / .10), rgb(var(--tactile-accent-rgb) / .055) 42%, rgb(var(--tactile-surface-strong-rgb) / var(--tactile-panel-alpha)) 100%), var(--tactile-surface);
158
- --tactile-control-bg: linear-gradient(180deg, rgb(var(--tactile-surface-strong-rgb) / var(--tactile-panel-alpha)), rgb(var(--tactile-surface-soft-rgb) / var(--tactile-panel-soft-alpha)));
313
+ --tactile-paper-bg: linear-gradient(180deg, var(--tactile-paper-wash), transparent 28rem), linear-gradient(135deg, rgb(var(--tactile-accent-rgb) / .06), transparent 26rem), linear-gradient(180deg, rgb(var(--tactile-surface-strong-rgb) / var(--tactile-paper-alpha)), rgb(var(--tactile-surface-rgb) / var(--tactile-panel-alpha)));
314
+ --tactile-paper-grain: radial-gradient(circle at 12% 18%, rgb(var(--tactile-text-rgb) / .04) 0 1px, transparent 1.4px), radial-gradient(circle at 68% 34%, rgb(var(--tactile-warning-rgb) / .055) 0 1px, transparent 1.5px), linear-gradient(90deg, rgb(var(--tactile-text-rgb) / .018) 1px, transparent 1px), linear-gradient(180deg, rgb(var(--tactile-warning-rgb) / .055), transparent 18rem);
315
+ --tactile-theme-bg: var(--tactile-paper-grain), var(--tactile-paper-bg), var(--tactile-bg);
316
+ --tactile-card-bg: var(--tactile-paper-grain), var(--tactile-paper-bg);
317
+ --tactile-control-bg: linear-gradient(180deg, rgb(var(--tactile-warning-rgb) / .1), transparent), linear-gradient(180deg, rgb(var(--tactile-surface-strong-rgb) / .86), rgb(var(--tactile-surface-soft-rgb) / .7));
318
+ --tactile-field-bg: linear-gradient(180deg, rgb(var(--tactile-warning-rgb) / .075), transparent), linear-gradient(180deg, rgb(var(--tactile-surface-soft-rgb) / .8), rgb(var(--tactile-surface-strong-rgb) / .58));
319
+ --tactile-inset-bg: linear-gradient(180deg, rgb(var(--tactile-warning-rgb) / .08), transparent), linear-gradient(180deg, rgb(var(--tactile-surface-soft-rgb) / .74), rgb(var(--tactile-surface-rgb) / .6));
320
+ --tactile-recessed-track: rgb(var(--tactile-text-rgb) / .82);
321
+ --tactile-track-rim: rgb(var(--tactile-text-rgb) / .72);
322
+ --tactile-thumb-bg: linear-gradient(90deg, rgb(var(--tactile-warning-rgb) / .1), transparent), linear-gradient(90deg, rgb(var(--tactile-surface-strong-rgb) / .98), rgb(var(--tactile-surface-soft-rgb) / .9));
323
+ --tactile-action-solid: var(--tactile-primary);
324
+ --tactile-action-bg: linear-gradient(180deg, var(--tactile-primary), var(--tactile-primary-hover));
325
+ --tactile-action-hover-bg: linear-gradient(180deg, var(--tactile-primary-hover), var(--tactile-primary));
326
+ --tactile-progress-fill: linear-gradient(90deg, var(--tactile-success), var(--tactile-primary));
327
+ --tactile-keyline: rgb(var(--tactile-text-rgb) / max(.46, calc(var(--tactile-border-alpha) * .78)));
328
+ --tactile-panel-shadow: inset 0 2px 0 var(--tactile-bevel-highlight), inset 0 -2px 0 var(--tactile-bevel-shadow), 0 .55rem 1.25rem rgb(var(--tactile-text-rgb) / var(--tactile-shadow-alpha));
329
+ --tactile-button-shadow: inset 0 2px 0 var(--tactile-bevel-highlight), inset 0 -2px 0 var(--tactile-bevel-shadow), 0 .32rem .68rem rgb(var(--tactile-text-rgb) / calc(var(--tactile-shadow-alpha) * .92));
330
+ --tactile-inset-shadow: inset .16rem .16rem .34rem rgb(var(--tactile-text-rgb) / .2), inset -.08rem -.08rem .2rem rgb(var(--tactile-surface-strong-rgb) / .38);
331
+ --tactile-deep-inset-shadow: inset .16rem .16rem .32rem rgb(0 0 0 / .58), inset -.08rem -.08rem .16rem rgb(var(--tactile-surface-strong-rgb) / .14);
332
+ --tactile-sidebar-bg: linear-gradient(180deg, rgb(var(--tactile-text-rgb) / var(--tactile-sidebar-alpha)), rgb(var(--tactile-text-rgb) / calc(var(--tactile-sidebar-alpha) - .06)));
333
+ --tactile-sidebar-fg: rgb(var(--tactile-bg-rgb));
334
+ --tactile-sidebar-muted: rgb(var(--tactile-bg-rgb) / .74);
335
+ --tactile-rail: var(--tactile-primary);
159
336
  --tactile-spinner-track: rgb(var(--tactile-border-rgb) / max(.28, calc(var(--tactile-border-alpha) * .7)));
160
337
  --tactile-spinner-stroke: var(--tactile-primary);
161
338
  --tactile-spinner-accent: var(--tactile-accent);
162
339
  }
163
340
 
164
341
  @supports (color: color-mix(in srgb, black, white)) {
165
- [data-ui="tactile"][data-theme][data-mode] { --tactile-border: color-mix(in srgb, rgb(var(--tactile-border-rgb) / max(var(--tactile-border-alpha), var(--usk-border-min-alpha))), var(--tactile-text) var(--usk-border-text-mix)); }
342
+ [data-ui="tactile"][data-mode] { --tactile-border: color-mix(in srgb, rgb(var(--tactile-border-rgb) / max(var(--tactile-border-alpha), var(--usk-border-min-alpha))), var(--tactile-text) var(--usk-border-text-mix)); }
166
343
  }
167
344
 
168
345
 
@@ -201,7 +378,7 @@
201
378
 
202
379
  [data-ui="tactile"] {
203
380
  min-height: 100vh;
204
- background: radial-gradient(circle at 50% -10%, rgb(255 255 255 / .08), transparent 30rem), var(--tactile-bg);
381
+ background: var(--tactile-paper-grain), var(--tactile-paper-bg), var(--tactile-bg);
205
382
  color: var(--tactile-text);
206
383
  font-family: var(--tactile-font-body);
207
384
  line-height: 1.5;
@@ -214,7 +391,7 @@
214
391
  [data-ui="tactile"] *::before,
215
392
  [data-ui="tactile"] *::after { box-sizing: border-box; }
216
393
 
217
- [data-ui="tactile"][data-theme][data-mode] { background: var(--tactile-theme-bg); background-size: var(--tactile-theme-bg-size); }
394
+ [data-ui="tactile"][data-mode] { background: var(--tactile-theme-bg); background-size: var(--tactile-theme-bg-size); }
218
395
 
219
396
  .tactile-page { min-height: 100vh; padding: clamp(1rem, 4vw, 3rem); }
220
397
  .tactile-container { width: min(100% - 2rem, 1200px); margin-inline: auto; }
@@ -228,13 +405,14 @@
228
405
  Typography
229
406
  ========================================================= */
230
407
 
231
- .tactile-title, .tactile-heading, .tactile-kicker, .tactile-button, .tactile-badge, .tactile-nav-link { font-family: var(--tactile-font-heading); }
232
- .tactile-title { margin: 0; color: var(--tactile-text); font-size: clamp(2rem, 5vw, 3.7rem); line-height: 1.02; letter-spacing: -0.045em; }
233
- .tactile-heading { margin: 0; color: var(--tactile-text); font-size: clamp(1.2rem, 2.5vw, 2rem); line-height: 1.15; letter-spacing: -0.03em; }
234
- .tactile-kicker { margin: 0; color: var(--tactile-primary); font-size: .82rem; font-weight: 850; letter-spacing: .12em; text-transform: uppercase; }
235
- .tactile-subtitle, .tactile-copy { margin: 0; color: var(--tactile-text-muted); line-height: 1.65; }
408
+ .tactile-title, .tactile-heading { font-family: var(--tactile-font-heading); }
409
+ .tactile-kicker, .tactile-button, .tactile-badge, .tactile-nav-link { font-family: var(--tactile-font-control); }
410
+ .tactile-title { margin: 0; color: var(--tactile-text); font-family: var(--tactile-font-display); font-size: clamp(2.2rem, 5vw, 4rem); line-height: .98; letter-spacing: -.03em; }
411
+ .tactile-heading { margin: 0; color: var(--tactile-text); font-size: clamp(1.25rem, 2.5vw, 2.1rem); line-height: 1.08; letter-spacing: -.02em; }
412
+ .tactile-kicker { margin: 0; color: var(--tactile-text); font-size: .78rem; font-weight: 900; letter-spacing: .14em; text-transform: uppercase; }
413
+ .tactile-subtitle, .tactile-copy { margin: 0; color: var(--tactile-text-muted); line-height: 1.58; }
236
414
  .tactile-text-muted { color: var(--tactile-text-muted); }
237
- .tactile-divider { width: 100%; height: 1px; border: 0; background: var(--tactile-border); }
415
+ .tactile-divider { width: 100%; height: 1px; border: 0; background: rgb(var(--tactile-border-rgb) / .62); box-shadow: 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .48); }
238
416
 
239
417
  /* =========================================================
240
418
  Surfaces
@@ -242,19 +420,19 @@
242
420
 
243
421
  .tactile-surface, .tactile-card, .tactile-panel, .tactile-toolbar, .tactile-table-wrap {
244
422
  position: relative;
245
- background: linear-gradient(180deg, rgb(255 255 255 / .18), rgb(255 255 255 / .03)), linear-gradient(135deg, rgb(var(--tactile-primary-rgb) / .07), transparent 46%), var(--tactile-surface);
423
+ background: var(--tactile-card-bg);
246
424
  color: var(--tactile-text);
247
- border: 1px solid var(--tactile-border);
425
+ border: 1px solid var(--tactile-keyline);
248
426
  border-radius: var(--tactile-radius-lg);
249
- box-shadow: 0 18px 36px rgb(0 0 0 / var(--tactile-shadow-alpha)), inset 0 1px 0 rgb(255 255 255 / .25);
427
+ box-shadow: var(--tactile-panel-shadow);
250
428
  transition: transform var(--tactile-transition-base), box-shadow var(--tactile-transition-base), border-color var(--tactile-transition-base), background var(--tactile-transition-base);
251
429
  }
252
430
  .tactile-card, .tactile-panel { padding: var(--tactile-space-6); }
253
431
  .tactile-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--tactile-space-4); padding: var(--tactile-space-4); }
254
- .tactile-surface-sm { border-radius: var(--tactile-radius-md); box-shadow: 0 6px 18px rgb(0 0 0 / calc(var(--tactile-shadow-alpha) * .72)); }
255
- .tactile-surface-lg { border-radius: var(--tactile-radius-xl); box-shadow: 0 22px 60px rgb(0 0 0 / calc(var(--tactile-shadow-alpha) + .08)); }
256
- .tactile-well, .tactile-inset { background: var(--tactile-surface-soft); color: var(--tactile-text); border: 1px solid rgb(var(--tactile-border-rgb) / calc(var(--tactile-border-alpha) * .7)); border-radius: var(--tactile-radius-md); padding: var(--tactile-space-5); box-shadow: inset 0 1px 3px rgb(0 0 0 / .08); }
257
- .tactile-hover-lift:hover { transform: translateY(-2px); box-shadow: 0 22px 60px rgb(0 0 0 / calc(var(--tactile-shadow-alpha) + .12)); }
432
+ .tactile-surface-sm { border-radius: var(--tactile-radius-md); box-shadow: var(--tactile-button-shadow); }
433
+ .tactile-surface-lg { border-radius: var(--tactile-radius-xl); box-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .72), 0 .9rem 2rem rgb(var(--tactile-text-rgb) / calc(var(--tactile-shadow-alpha) + .08)); }
434
+ .tactile-well, .tactile-inset { background: var(--tactile-inset-bg); color: var(--tactile-text); border: 1px solid rgb(var(--tactile-border-rgb) / calc(var(--tactile-border-alpha) * .82)); border-radius: var(--tactile-radius-md); padding: var(--tactile-space-5); box-shadow: var(--tactile-inset-shadow); }
435
+ .tactile-hover-lift:hover { transform: translateY(-1px); box-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .8), 0 .9rem 1.8rem rgb(var(--tactile-text-rgb) / calc(var(--tactile-shadow-alpha) + .08)); }
258
436
 
259
437
  /* =========================================================
260
438
  Buttons
@@ -262,26 +440,26 @@
262
440
 
263
441
  .tactile-button, .tactile-icon-button {
264
442
  appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: var(--tactile-space-2);
265
- min-height: 2.75rem; padding: .75rem 1.1rem; background: var(--tactile-surface); color: var(--tactile-text);
266
- border: 1px solid var(--tactile-border); border-radius: var(--tactile-radius-md); box-shadow: 0 6px 18px rgb(0 0 0 / var(--tactile-shadow-alpha));
443
+ min-height: 3rem; padding: .72rem 1.15rem; background: var(--tactile-control-bg); color: var(--tactile-text);
444
+ border: 1px solid var(--tactile-keyline); border-radius: var(--tactile-radius-md); box-shadow: var(--tactile-button-shadow);
267
445
  font: inherit; font-weight: 800; line-height: 1; text-decoration: none; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none;
268
446
  transition: color var(--tactile-transition-fast), background var(--tactile-transition-fast), border-color var(--tactile-transition-fast), box-shadow var(--tactile-transition-fast), transform var(--tactile-transition-fast);
269
447
  }
270
- .tactile-button:hover, .tactile-icon-button:hover { transform: translateY(-1px); border-color: var(--tactile-primary); }
271
- .tactile-button:active, .tactile-icon-button:active, .tactile-button[aria-pressed="true"], .tactile-icon-button[aria-pressed="true"], .tactile-button.is-active, .tactile-icon-button.is-active { transform: translateY(1px); box-shadow: inset 0 3px 10px rgb(0 0 0 / .18); }
272
- .tactile-button-primary { background: var(--tactile-primary); color: var(--tactile-on-primary); border-color: var(--tactile-primary); }
273
- .tactile-button-primary:hover { background: var(--tactile-primary-hover); border-color: var(--tactile-primary-hover); }
274
- .tactile-button-secondary { background: var(--tactile-secondary); color: var(--tactile-on-secondary); border-color: var(--tactile-secondary); }
275
- .tactile-button-secondary:hover { background: var(--tactile-secondary-hover); border-color: var(--tactile-secondary-hover); }
276
- .tactile-button-danger { background: var(--tactile-danger); color: var(--tactile-on-danger); border-color: var(--tactile-danger); }
277
- .tactile-button-ghost { background: transparent; color: var(--tactile-text); box-shadow: none; }
278
- .tactile-icon-button { width: 2.75rem; padding: 0; border-radius: var(--tactile-radius-pill); }
448
+ .tactile-button:hover, .tactile-icon-button:hover { transform: translateY(-1px); border-color: var(--tactile-primary); box-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .86), inset 0 -2px 0 rgb(var(--tactile-text-rgb) / .22), 0 .42rem .82rem rgb(var(--tactile-text-rgb) / calc(var(--tactile-shadow-alpha) + .06)); }
449
+ .tactile-button:active, .tactile-icon-button:active, .tactile-button[aria-pressed="true"], .tactile-icon-button[aria-pressed="true"], .tactile-button.is-active, .tactile-icon-button.is-active { transform: translateY(1px); box-shadow: var(--tactile-inset-shadow); }
450
+ .tactile-button-primary { background: var(--tactile-action-bg); color: var(--tactile-on-primary); border-color: var(--tactile-primary); box-shadow: var(--tactile-button-shadow); }
451
+ .tactile-button-primary:hover { background: var(--tactile-action-hover-bg); border-color: var(--tactile-primary-hover); }
452
+ .tactile-button-secondary { background: var(--tactile-control-bg); color: var(--usk-primary-ink, var(--tactile-primary)); border-color: rgb(var(--tactile-primary-rgb) / .48); }
453
+ .tactile-button-secondary:hover { background: var(--tactile-field-bg); border-color: var(--tactile-primary); }
454
+ .tactile-button-danger { background: linear-gradient(180deg, var(--tactile-danger), rgb(var(--tactile-danger-rgb) / .82)); color: var(--tactile-on-danger); border-color: var(--tactile-danger); }
455
+ .tactile-button-ghost { background: transparent; color: var(--usk-primary-ink, var(--tactile-primary)); border-color: transparent; box-shadow: none; }
456
+ .tactile-icon-button { width: 3rem; padding: 0; border-radius: var(--tactile-radius-sm); }
279
457
  .tactile-button:disabled, .tactile-icon-button:disabled, .tactile-disabled { opacity: .55; cursor: not-allowed; transform: none; }
280
458
 
281
459
  /* Theme-responsive component defaults */
282
460
  .tactile-card, .tactile-panel { background: var(--tactile-card-bg); }
283
- .tactile-toolbar, .tactile-table-wrap { background: var(--tactile-control-bg); }
284
- .tactile-button:not(.tactile-button-primary):not(.tactile-button-secondary):not(.tactile-button-danger):not(.tactile-button-ghost), .tactile-icon-button { background: var(--tactile-control-bg); }
461
+ .tactile-toolbar, .tactile-table-wrap { background: var(--tactile-card-bg); }
462
+ .tactile-button:not(.tactile-button-primary):not(.tactile-button-secondary):not(.tactile-button-danger):not(.tactile-button-warning):not(.tactile-button-ghost), .tactile-icon-button { background: var(--tactile-control-bg); }
285
463
  .tactile-button, .tactile-icon-button, .tactile-badge, .tactile-nav-link { font-family: var(--tactile-font-control); }
286
464
 
287
465
 
@@ -290,65 +468,65 @@
290
468
  ========================================================= */
291
469
 
292
470
  .tactile-field { display: flex; flex-direction: column; gap: var(--tactile-space-2); }
293
- .tactile-label { color: var(--tactile-text); font-size: .925rem; font-weight: 800; }
471
+ .tactile-label { color: var(--tactile-text); font-size: .78rem; font-weight: 900; letter-spacing: .08em; text-transform: uppercase; }
294
472
  .tactile-input, .tactile-textarea, .tactile-select {
295
- width: 100%; min-height: 2.875rem; padding: .75rem 1rem; background: var(--tactile-surface-soft); color: var(--tactile-text);
296
- border: 1px solid var(--tactile-border); border-radius: var(--tactile-radius-md); font: inherit; outline: none;
473
+ width: 100%; min-height: 3rem; padding: .74rem 1rem; background: var(--tactile-field-bg); color: var(--tactile-text);
474
+ border: 1px solid var(--tactile-keyline); border-radius: var(--tactile-radius-md); box-shadow: var(--tactile-inset-shadow); font: inherit; outline: none;
297
475
  transition: background var(--tactile-transition-fast), border-color var(--tactile-transition-fast), box-shadow var(--tactile-transition-fast);
298
476
  }
299
477
  .tactile-textarea { min-height: 8rem; resize: vertical; }
300
478
  .tactile-input::placeholder, .tactile-textarea::placeholder { color: var(--tactile-text-muted); opacity: .82; }
301
479
  .tactile-input:hover, .tactile-textarea:hover, .tactile-select:hover { border-color: rgb(var(--tactile-primary-rgb) / .58); }
302
- .tactile-input:focus, .tactile-textarea:focus, .tactile-select:focus { border-color: var(--tactile-focus); box-shadow: var(--tactile-focus-ring); }
480
+ .tactile-input:focus, .tactile-textarea:focus, .tactile-select:focus { border-color: var(--tactile-focus); box-shadow: var(--tactile-inset-shadow), var(--tactile-focus-ring); }
303
481
  .tactile-help-text { color: var(--tactile-text-muted); font-size: .875rem; line-height: 1.45; }
304
482
 
305
483
  /* Checkbox / Radio */
306
484
  .tactile-check, .tactile-radio { display: inline-flex; align-items: center; gap: var(--tactile-space-2); color: var(--tactile-text); cursor: pointer; }
307
485
  .tactile-check input, .tactile-radio input { position: absolute; opacity: 0; pointer-events: none; }
308
- .tactile-check-control, .tactile-radio-control { display: inline-grid; place-items: center; width: 1.35rem; height: 1.35rem; background: var(--tactile-surface-soft); border: 1px solid var(--tactile-border); transition: background var(--tactile-transition-fast), box-shadow var(--tactile-transition-fast); }
486
+ .tactile-check-control, .tactile-radio-control { display: inline-grid; place-items: center; width: 1.35rem; height: 1.35rem; background: var(--tactile-field-bg); border: 1px solid var(--tactile-keyline); box-shadow: var(--tactile-inset-shadow); transition: background var(--tactile-transition-fast), box-shadow var(--tactile-transition-fast); }
309
487
  .tactile-check-control { border-radius: var(--tactile-radius-xs); }
310
488
  .tactile-radio-control { border-radius: 50%; }
311
- .tactile-check input:checked + .tactile-check-control, .tactile-radio input:checked + .tactile-radio-control { background: var(--tactile-primary); border-color: var(--tactile-primary); box-shadow: var(--tactile-focus-ring); }
489
+ .tactile-check input:checked + .tactile-check-control, .tactile-radio input:checked + .tactile-radio-control { background: var(--tactile-action-solid); border-color: var(--tactile-primary); box-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .28), var(--tactile-focus-ring); }
312
490
  .tactile-check input:checked + .tactile-check-control::after { content: "✓"; color: var(--tactile-on-primary); font-size: .9rem; font-weight: 900; }
313
491
  .tactile-radio input:checked + .tactile-radio-control::after { content: ""; width: .55rem; height: .55rem; background: var(--tactile-on-primary); border-radius: 50%; }
314
492
 
315
493
  /* Switch */
316
494
  .tactile-switch { display: inline-flex; align-items: center; gap: var(--tactile-space-3); color: var(--tactile-text); cursor: pointer; }
317
495
  .tactile-switch input { position: absolute; opacity: 0; pointer-events: none; }
318
- .tactile-switch-track { position: relative; width: 3.5rem; height: 1.9rem; background: var(--tactile-surface-soft); border: 1px solid var(--tactile-border); border-radius: var(--tactile-radius-pill); transition: background var(--tactile-transition-fast), box-shadow var(--tactile-transition-fast); }
319
- .tactile-switch-thumb { position: absolute; top: .22rem; left: .22rem; width: 1.34rem; height: 1.34rem; background: var(--tactile-surface-strong); border: 1px solid var(--tactile-border); border-radius: 50%; box-shadow: 0 4px 12px rgb(0 0 0 / var(--tactile-shadow-alpha)); transition: left var(--tactile-transition-fast), background var(--tactile-transition-fast); }
320
- .tactile-switch input:checked + .tactile-switch-track { background: var(--tactile-primary); border-color: var(--tactile-primary); }
321
- .tactile-switch input:checked + .tactile-switch-track .tactile-switch-thumb { left: calc(100% - 1.34rem - .22rem); background: var(--tactile-on-primary); }
496
+ .tactile-switch-track { position: relative; width: 4.35rem; height: 1.9rem; background: var(--tactile-recessed-track); border: 1px solid var(--tactile-track-rim); border-radius: var(--tactile-radius-sm); box-shadow: var(--tactile-deep-inset-shadow); transition: background var(--tactile-transition-fast), box-shadow var(--tactile-transition-fast); }
497
+ .tactile-switch-thumb { position: absolute; top: .16rem; left: .16rem; width: 1.58rem; height: 1.58rem; background: var(--tactile-thumb-bg); border: 1px solid var(--tactile-keyline); border-radius: var(--tactile-radius-xs); box-shadow: var(--tactile-button-shadow); transition: left var(--tactile-transition-fast), background var(--tactile-transition-fast); }
498
+ .tactile-switch input:checked + .tactile-switch-track { background: linear-gradient(90deg, var(--tactile-recessed-track) 0 50%, var(--tactile-action-solid) 50% 100%); border-color: var(--tactile-primary); }
499
+ .tactile-switch input:checked + .tactile-switch-track .tactile-switch-thumb { left: calc(100% - 1.58rem - .16rem); background: var(--tactile-thumb-bg); }
322
500
 
323
501
  /* =========================================================
324
502
  Badges / Nav / Progress / Alerts / Tables
325
503
  ========================================================= */
326
504
 
327
- .tactile-badge { display: inline-flex; align-items: center; gap: var(--tactile-space-1); min-height: 1.75rem; padding: .35rem .7rem; background: var(--tactile-surface-soft); color: var(--tactile-text); border: 1px solid var(--tactile-border); border-radius: var(--tactile-radius-pill); font-size: .8125rem; font-weight: 850; line-height: 1; }
328
- .tactile-badge-primary { background: var(--tactile-primary); color: var(--tactile-on-primary); border-color: var(--tactile-primary); }
505
+ .tactile-badge { display: inline-flex; align-items: center; gap: var(--tactile-space-1); min-height: 1.65rem; padding: .32rem .68rem; background: var(--tactile-field-bg); color: var(--tactile-text); border: 1px solid var(--tactile-keyline); border-radius: var(--tactile-radius-sm); box-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .58); font-size: .78rem; font-weight: 900; letter-spacing: .04em; line-height: 1; text-transform: uppercase; }
506
+ .tactile-badge-primary { background: var(--tactile-action-solid); color: var(--tactile-on-primary); border-color: var(--tactile-primary); }
329
507
  .tactile-badge-secondary { background: var(--tactile-secondary); color: var(--tactile-on-secondary); border-color: var(--tactile-secondary); }
330
508
  .tactile-badge-success { background: var(--tactile-success); color: var(--tactile-on-success); border-color: var(--tactile-success); }
331
509
  .tactile-badge-warning { background: var(--tactile-warning); color: var(--tactile-on-warning); border-color: var(--tactile-warning); }
332
510
  .tactile-badge-danger { background: var(--tactile-danger); color: var(--tactile-on-danger); border-color: var(--tactile-danger); }
333
511
 
334
- .tactile-nav { display: flex; flex-wrap: wrap; align-items: center; gap: var(--tactile-space-2); padding: var(--tactile-space-2); background: var(--tactile-surface); border: 1px solid var(--tactile-border); border-radius: var(--tactile-radius-xl); box-shadow: 0 10px 30px rgb(0 0 0 / var(--tactile-shadow-alpha)); }
335
- .tactile-nav-link { display: inline-flex; align-items: center; justify-content: center; min-height: 2.5rem; padding: .65rem 1rem; color: var(--tactile-text-muted); border-radius: var(--tactile-radius-pill); text-decoration: none; font-weight: 850; transition: color var(--tactile-transition-fast), background var(--tactile-transition-fast), box-shadow var(--tactile-transition-fast); }
336
- .tactile-nav-link:hover { color: var(--tactile-text); background: var(--tactile-surface-soft); }
337
- .tactile-nav-link[aria-current="page"], .tactile-nav-link.is-active { color: var(--tactile-on-primary); background: var(--tactile-primary); }
512
+ .tactile-nav { display: flex; flex-wrap: wrap; align-items: center; gap: var(--tactile-space-2); padding: var(--tactile-space-2); background: var(--tactile-sidebar-bg); border: 1px solid rgb(var(--tactile-text-rgb) / .88); border-radius: var(--tactile-radius-lg); box-shadow: inset 0 1px 0 rgb(var(--tactile-bg-rgb) / .08), 0 .75rem 1.5rem rgb(var(--tactile-text-rgb) / calc(var(--tactile-shadow-alpha) + .12)); }
513
+ .tactile-nav-link { display: inline-flex; align-items: center; justify-content: center; min-height: 2.75rem; padding: .72rem 1rem; color: var(--tactile-sidebar-muted); border: 1px solid transparent; border-radius: var(--tactile-radius-md); text-decoration: none; font-weight: 850; transition: color var(--tactile-transition-fast), background var(--tactile-transition-fast), box-shadow var(--tactile-transition-fast); }
514
+ .tactile-nav-link:hover { color: var(--tactile-sidebar-fg); background: rgb(var(--tactile-bg-rgb) / .08); border-color: rgb(var(--tactile-bg-rgb) / .18); }
515
+ .tactile-nav-link[aria-current="page"], .tactile-nav-link.is-active { color: var(--tactile-sidebar-fg); background: rgb(var(--tactile-bg-rgb) / .12); border-color: rgb(var(--tactile-bg-rgb) / .22); box-shadow: inset .25rem 0 0 var(--tactile-rail), inset .08rem .08rem .18rem rgb(0 0 0 / .35); }
338
516
 
339
517
  /* Tooltips use compact contrast surfaces that stay readable across theme modes. */
340
518
  .tactile-tooltip, [data-ui="tactile"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) {
341
519
  display: inline-flex; align-items: center; gap: .45rem; max-inline-size: 16rem; padding: .6rem .82rem;
342
- background: linear-gradient(180deg, rgb(255 255 255 / .18), rgb(0 0 0 / .08)), var(--tactile-surface-strong);
343
- color: var(--tactile-text); border: 1px solid var(--tactile-border); border-radius: var(--tactile-radius-lg);
344
- box-shadow: inset 0 1px 0 rgb(255 255 255 / .32), 0 .7rem 1.4rem rgb(0 0 0 / var(--tactile-shadow-alpha)); font-size: .82rem; font-weight: 850; line-height: 1.35;
520
+ background: var(--tactile-sidebar-bg);
521
+ color: var(--tactile-sidebar-fg); border: 1px solid rgb(var(--tactile-bg-rgb) / .18); border-radius: var(--tactile-radius-md);
522
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-bg-rgb) / .08), 0 .7rem 1.4rem rgb(var(--tactile-text-rgb) / var(--tactile-shadow-alpha)); font-size: .82rem; font-weight: 850; line-height: 1.35;
345
523
  }
346
- .tactile-tooltip-arrow { inline-size: .6rem; block-size: .6rem; flex: 0 0 auto; background: var(--tactile-surface-strong); border: 1px solid var(--tactile-border); border-radius: .18rem; transform: rotate(45deg); }
524
+ .tactile-tooltip-arrow { inline-size: .6rem; block-size: .6rem; flex: 0 0 auto; background: rgb(var(--tactile-text-rgb) / .9); border: 1px solid rgb(var(--tactile-bg-rgb) / .18); border-radius: .12rem; transform: rotate(45deg); }
347
525
 
348
- .tactile-progress { width: 100%; height: .9rem; overflow: hidden; background: var(--tactile-surface-soft); border: 1px solid var(--tactile-border); border-radius: var(--tactile-radius-pill); }
349
- .tactile-progress-bar { height: 100%; width: var(--tactile-progress-value, 50%); background: linear-gradient(90deg, var(--tactile-primary), var(--tactile-accent)); border-radius: inherit; }
526
+ .tactile-progress { width: 100%; height: .8rem; overflow: hidden; background: var(--tactile-recessed-track); border: 1px solid var(--tactile-track-rim); border-radius: var(--tactile-radius-sm); box-shadow: var(--tactile-deep-inset-shadow); }
527
+ .tactile-progress-bar { height: 100%; width: var(--tactile-progress-value, 50%); background: var(--tactile-progress-fill); border-radius: .12rem; box-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .2); }
350
528
 
351
- .tactile-alert { display: grid; gap: var(--tactile-space-2); padding: var(--tactile-space-4); background: var(--tactile-surface); color: var(--tactile-text); border: 1px solid var(--tactile-border); border-radius: var(--tactile-radius-lg); box-shadow: 0 10px 30px rgb(0 0 0 / var(--tactile-shadow-alpha)); }
529
+ .tactile-alert { display: grid; gap: var(--tactile-space-2); padding: var(--tactile-space-4); background: var(--tactile-card-bg); color: var(--tactile-text); border: 1px solid var(--tactile-keyline); border-inline-start-width: .28rem; border-radius: var(--tactile-radius-lg); box-shadow: var(--tactile-panel-shadow); }
352
530
  .tactile-alert-success { border-left-color: var(--tactile-success); }
353
531
  .tactile-alert-warning { border-left-color: var(--tactile-warning); }
354
532
  .tactile-alert-danger { border-left-color: var(--tactile-danger); }
@@ -357,8 +535,8 @@
357
535
 
358
536
  .tactile-table-wrap { overflow: auto; }
359
537
  .tactile-table { width: 100%; border-collapse: collapse; }
360
- .tactile-table th, .tactile-table td { padding: .95rem 1rem; text-align: left; border-bottom: 1px solid var(--tactile-border); }
361
- .tactile-table th { color: var(--tactile-text); font-size: .82rem; font-weight: 900; text-transform: uppercase; letter-spacing: .08em; background: rgb(var(--tactile-primary-rgb) / .08); }
538
+ .tactile-table th, .tactile-table td { padding: .9rem 1rem; text-align: left; border-bottom: 1px solid rgb(var(--tactile-border-rgb) / .58); }
539
+ .tactile-table th { color: var(--tactile-text); font-size: .78rem; font-weight: 900; text-transform: uppercase; letter-spacing: .08em; background: var(--tactile-field-bg); box-shadow: inset 0 -1px 0 rgb(var(--tactile-text-rgb) / .08); }
362
540
  .tactile-table td { color: var(--tactile-text-muted); }
363
541
  .tactile-table tr:hover td { background: rgb(var(--tactile-primary-rgb) / .045); }
364
542
 
@@ -366,7 +544,7 @@
366
544
  Utilities
367
545
  ========================================================= */
368
546
 
369
- .tactile-text-primary { color: var(--tactile-primary); } .tactile-text-secondary { color: var(--tactile-secondary); } .tactile-text-accent { color: var(--tactile-accent); } .tactile-text-success { color: var(--tactile-success); } .tactile-text-warning { color: var(--tactile-warning); } .tactile-text-danger { color: var(--tactile-danger); }
547
+ .tactile-text-primary { color: var(--usk-primary-ink, var(--tactile-primary)); } .tactile-text-secondary { color: var(--tactile-secondary); } .tactile-text-accent { color: var(--usk-accent-ink, var(--tactile-accent)); } .tactile-text-success { color: var(--tactile-success); } .tactile-text-warning { color: var(--tactile-warning); } .tactile-text-danger { color: var(--tactile-danger); }
370
548
  .tactile-bg-primary { background: var(--tactile-primary); color: var(--tactile-on-primary); } .tactile-bg-secondary { background: var(--tactile-secondary); color: var(--tactile-on-secondary); }
371
549
  .tactile-border { border: 1px solid var(--tactile-border); } .tactile-rounded { border-radius: var(--tactile-radius-md); } .tactile-rounded-lg { border-radius: var(--tactile-radius-lg); } .tactile-rounded-xl { border-radius: var(--tactile-radius-xl); } .tactile-pill { border-radius: var(--tactile-radius-pill); }
372
550
  .tactile-sr-only, .tactile-visually-hidden { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; }
@@ -374,9 +552,9 @@
374
552
  .tactile-skip-link:focus { transform: translateY(0); }
375
553
 
376
554
  /* Tactile-specific physical helpers */
377
- .tactile-bevel { background: linear-gradient(180deg, rgb(255 255 255 / .22), rgb(0 0 0 / .08)), var(--tactile-surface); box-shadow: inset 0 1px 0 rgb(255 255 255 / .32), inset 0 -1px 0 rgb(0 0 0 / .18), 0 16px 34px rgb(0 0 0 / var(--tactile-shadow-alpha)); }
378
- .tactile-pressed { background: var(--tactile-surface-soft); box-shadow: inset 0 4px 14px rgb(0 0 0 / .22), inset 0 -1px 0 rgb(255 255 255 / .12); transform: translateY(1px); }
379
- .tactile-knob { inline-size: 3.25rem; block-size: 3.25rem; border-radius: 50%; background: radial-gradient(circle at 35% 30%, rgb(255 255 255 / .35), transparent 28%), var(--tactile-surface-strong); border: 1px solid var(--tactile-border); box-shadow: inset 0 1px 0 rgb(255 255 255 / .3), 0 12px 24px rgb(0 0 0 / var(--tactile-shadow-alpha)); }
555
+ .tactile-bevel { background: var(--tactile-card-bg); border: 1px solid var(--tactile-keyline); box-shadow: var(--tactile-panel-shadow); }
556
+ .tactile-pressed { background: var(--tactile-inset-bg); box-shadow: var(--tactile-inset-shadow); transform: translateY(1px); }
557
+ .tactile-knob { inline-size: 3.25rem; block-size: 3.25rem; border-radius: 50%; background: radial-gradient(circle at 35% 30%, rgb(var(--tactile-surface-strong-rgb) / .72), transparent 30%), var(--tactile-thumb-bg); border: 1px solid var(--tactile-keyline); box-shadow: var(--tactile-button-shadow); }
380
558
 
381
559
  /* Spinner geometry follows the tactile preset's pressed material controls. */
382
560
  .tactile-spinner, .tactile-loading-spinner, [data-ui="tactile"] :where(.ui-spinner, .loading-spinner, [data-loading-spinner]) {
@@ -387,8 +565,8 @@
387
565
  border-block-start-color: var(--tactile-spinner-stroke);
388
566
  border-inline-end-color: var(--tactile-spinner-accent);
389
567
  border-radius: 50%;
390
- background: linear-gradient(145deg, rgb(var(--tactile-surface-strong-rgb) / .96), rgb(var(--tactile-surface-soft-rgb) / .72));
391
- box-shadow: inset .16rem .16rem .32rem rgb(0 0 0 / .18), inset -.16rem -.16rem .32rem rgb(255 255 255 / .26), 0 .25rem .75rem rgb(0 0 0 / var(--tactile-shadow-alpha));
568
+ background: var(--tactile-thumb-bg);
569
+ box-shadow: var(--tactile-button-shadow);
392
570
  vertical-align: -.2em;
393
571
  animation: tactile-spin .85s cubic-bezier(.2, .8, .2, 1) infinite;
394
572
  }
@@ -419,8 +597,9 @@
419
597
  inline-size: 100%;
420
598
  aspect-ratio: 16 / 9;
421
599
  object-fit: cover;
422
- border: 1px solid rgb(var(--tactile-border-rgb) / .72);
423
- border-radius: var(--tactile-radius-lg);
600
+ border: 1px solid var(--tactile-keyline);
601
+ border-radius: var(--tactile-radius-md);
602
+ box-shadow: var(--tactile-inset-shadow);
424
603
  }
425
604
 
426
605
  .tactile-card-service {
@@ -447,7 +626,7 @@
447
626
  }
448
627
 
449
628
  .tactile-card-accent-edge {
450
- border-inline-start: .35rem solid var(--tactile-primary);
629
+ border-inline-start: .28rem solid var(--tactile-primary);
451
630
  }
452
631
 
453
632
  .tactile-icon-medallion {
@@ -459,8 +638,8 @@
459
638
  padding: .7rem;
460
639
  background: var(--tactile-primary);
461
640
  color: var(--tactile-on-primary);
462
- border: 2px solid rgb(var(--tactile-border-rgb) / .82);
463
- border-radius: 50%;
641
+ border: 1px solid var(--tactile-keyline);
642
+ border-radius: var(--tactile-radius-md);
464
643
  line-height: 1;
465
644
  }
466
645
  .tactile-icon-medallion > :where(svg, img) { inline-size: 100%; block-size: 100%; object-fit: contain; }
@@ -476,7 +655,7 @@
476
655
  .tactile-button.tactile-button-outline-heavy,
477
656
  .tactile-button-outline-heavy {
478
657
  background: transparent;
479
- color: var(--tactile-primary);
658
+ color: var(--usk-primary-ink, var(--tactile-primary));
480
659
  border-style: solid;
481
660
  border-width: 2px;
482
661
  border-color: var(--tactile-primary);
@@ -499,7 +678,7 @@
499
678
  padding: .65rem;
500
679
  background: var(--tactile-surface-strong);
501
680
  color: var(--tactile-text);
502
- border: 2px solid var(--tactile-primary);
681
+ border: 1px solid var(--tactile-primary);
503
682
  border-radius: 50%;
504
683
  text-align: center;
505
684
  font-family: var(--tactile-font-heading);
@@ -512,10 +691,9 @@
512
691
  .tactile-feature-strip {
513
692
  display: grid;
514
693
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
515
- overflow: hidden;
516
694
  background: var(--tactile-card-bg);
517
695
  color: var(--tactile-text);
518
- border: 1px solid var(--tactile-border);
696
+ border: 1px solid var(--tactile-keyline);
519
697
  border-radius: var(--tactile-radius-lg);
520
698
  }
521
699
 
@@ -539,7 +717,7 @@
539
717
  padding: var(--tactile-space-4) var(--tactile-space-5);
540
718
  background: var(--tactile-card-bg);
541
719
  color: var(--tactile-text);
542
- border: 1px solid var(--tactile-border);
720
+ border: 1px solid var(--tactile-keyline);
543
721
  border-radius: var(--tactile-radius-lg);
544
722
  }
545
723
  .tactile-callout-bar > :where(p, div) { min-inline-size: 0; }
@@ -547,7 +725,7 @@
547
725
 
548
726
  .tactile-eyebrow {
549
727
  margin: 0;
550
- color: var(--tactile-primary);
728
+ color: var(--usk-primary-ink, var(--tactile-primary));
551
729
  font-family: var(--tactile-font-heading);
552
730
  font-size: .76rem;
553
731
  font-weight: 900;
@@ -561,9 +739,9 @@
561
739
  overflow: hidden;
562
740
  isolation: isolate;
563
741
  min-block-size: 12rem;
564
- background: var(--tactile-surface-soft);
565
- border: 1px solid var(--tactile-border);
566
- border-radius: var(--tactile-radius-lg);
742
+ background: var(--tactile-inset-bg);
743
+ border: 1px solid var(--tactile-keyline);
744
+ border-radius: var(--tactile-radius-md);
567
745
  }
568
746
  .tactile-media-scrim > :where(img, picture, video) {
569
747
  display: block;
@@ -592,12 +770,13 @@
592
770
  .tactile-feature-item:last-child { border-block-end: 0; }
593
771
  }
594
772
 
595
- .tactile-card-service, .tactile-card-feature, .tactile-feature-strip, .tactile-callout-bar { box-shadow: 0 .75rem 1.6rem rgb(0 0 0 / .22), inset 0 1px 0 rgb(255 255 255 / .28); }
596
- .tactile-icon-medallion, .tactile-badge-seal { background: linear-gradient(145deg, rgb(255 255 255 / .22), rgb(0 0 0 / .08)), var(--tactile-primary); box-shadow: inset 0 1px 0 rgb(255 255 255 / .4), 0 .45rem .85rem rgb(0 0 0 / .22); }
597
- .tactile-button-outline-heavy { box-shadow: inset 0 1px 0 rgb(255 255 255 / .24), 0 .35rem .7rem rgb(0 0 0 / .18); }
773
+ .tactile-card-service, .tactile-card-feature, .tactile-feature-strip, .tactile-callout-bar { box-shadow: var(--tactile-panel-shadow); }
774
+ .tactile-icon-medallion, .tactile-badge-seal { background: var(--tactile-action-bg); box-shadow: var(--tactile-button-shadow); }
775
+ .tactile-button-outline-heavy { box-shadow: var(--tactile-button-shadow); }
598
776
 
599
777
  /* Filled and framed actions share a shallow keycap chamfer and physical depth. */
600
778
  .tactile-button.tactile-button-cut, .tactile-button-cut {
779
+ min-block-size: 2.75rem;
601
780
  min-inline-size: 6rem;
602
781
  max-inline-size: 100%;
603
782
  justify-self: center;
@@ -608,27 +787,266 @@
608
787
  border-width: 2px;
609
788
  border-radius: 0;
610
789
  clip-path: polygon(.28rem 0, calc(100% - .28rem) 0, 100% .28rem, 100% calc(100% - .28rem), calc(100% - .28rem) 100%, .28rem 100%, 0 calc(100% - .28rem), 0 .28rem);
611
- box-shadow: inset 0 2px 0 rgb(var(--tactile-surface-strong-rgb) / .72), 0 .38rem .72rem rgb(var(--tactile-text-rgb) / .2);
790
+ box-shadow: var(--tactile-button-shadow);
612
791
  }
613
792
 
614
793
  /* Marketing and native surfaces use the same bevel highlight and physical depth. */
615
794
  .tactile-card-service, .tactile-media-scrim, .tactile-feature-strip, .tactile-callout-bar, .tactile-well {
616
- background: linear-gradient(145deg, rgb(var(--tactile-surface-strong-rgb) / .78), rgb(var(--tactile-surface-rgb) / .72));
617
- border: 1px solid var(--tactile-border);
795
+ background: var(--tactile-card-bg);
796
+ border: 1px solid var(--tactile-keyline);
618
797
  border-radius: var(--tactile-radius-lg);
619
- box-shadow: inset 0 2px 0 rgb(var(--tactile-surface-strong-rgb) / .78), 0 .65rem 1.25rem rgb(var(--tactile-text-rgb) / .2);
798
+ box-shadow: var(--tactile-panel-shadow);
620
799
  }
621
- [data-ui="tactile"][data-theme][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])) {
622
- border: 1px solid var(--tactile-primary);
800
+ [data-ui="tactile"][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])) {
801
+ background: var(--tactile-control-bg);
802
+ color: var(--tactile-text);
803
+ border: 1px solid var(--tactile-keyline);
623
804
  border-radius: var(--tactile-radius-md);
624
- box-shadow: inset 0 2px 0 rgb(var(--tactile-surface-strong-rgb) / .8), 0 .34rem .68rem rgb(var(--tactile-text-rgb) / .2);
805
+ box-shadow: var(--tactile-button-shadow);
625
806
  }
626
- [data-ui="tactile"][data-theme][data-mode] :where(dialog) {
807
+ [data-ui="tactile"][data-mode] :where(dialog) {
627
808
  background-color: var(--tactile-surface);
628
- background-image: linear-gradient(145deg, rgb(var(--tactile-surface-strong-rgb) / .84), rgb(var(--tactile-surface-rgb) / .78));
629
- border: 1px solid var(--tactile-border);
809
+ background-image: var(--tactile-card-bg);
810
+ border: 1px solid var(--tactile-keyline);
630
811
  border-radius: var(--tactile-radius-lg);
631
- box-shadow: inset 0 2px 0 rgb(var(--tactile-surface-strong-rgb) / .78), 0 1rem 2rem rgb(var(--tactile-text-rgb) / .24);
812
+ box-shadow: var(--tactile-panel-shadow);
813
+ }
814
+
815
+ /* Reference-aligned material system: paper plates, keylines, and mechanical controls. */
816
+ [data-ui="tactile"][data-mode] {
817
+ --tactile-card-bg: var(--tactile-paper-grain), var(--tactile-paper-bg), var(--tactile-surface);
818
+ --tactile-control-bg: linear-gradient(180deg, var(--tactile-bevel-highlight), transparent .28rem), linear-gradient(180deg, rgb(var(--tactile-surface-strong-rgb) / .94), rgb(var(--tactile-surface-soft-rgb) / .76));
819
+ --tactile-field-bg: linear-gradient(180deg, rgb(var(--tactile-text-rgb) / .055), transparent .2rem), linear-gradient(180deg, rgb(var(--tactile-surface-soft-rgb) / .78), rgb(var(--tactile-surface-strong-rgb) / .62));
820
+ --tactile-inset-bg: linear-gradient(180deg, rgb(var(--tactile-text-rgb) / .07), transparent .28rem), rgb(var(--tactile-surface-soft-rgb) / .72);
821
+ --tactile-keyline: rgb(var(--tactile-text-rgb) / max(.58, calc(var(--tactile-border-alpha) * .86)));
822
+ --tactile-panel-shadow: inset 0 2px 0 var(--tactile-bevel-highlight), inset 0 -3px 0 var(--tactile-bevel-shadow), 0 2px 0 var(--tactile-keyline), 0 .42rem .9rem rgb(var(--tactile-text-rgb) / var(--tactile-shadow-alpha));
823
+ --tactile-button-shadow: inset 0 2px 0 var(--tactile-bevel-highlight), inset 0 -3px 0 var(--tactile-bevel-shadow), 0 2px 0 var(--tactile-keyline), 0 .3rem .58rem rgb(var(--tactile-text-rgb) / calc(var(--tactile-shadow-alpha) * .82));
824
+ --tactile-inset-shadow: inset .18rem .2rem .38rem rgb(var(--tactile-text-rgb) / .25), inset -.08rem -.08rem .16rem rgb(var(--tactile-surface-strong-rgb) / .34);
825
+ --tactile-deep-inset-shadow: inset .2rem .22rem .38rem rgb(0 0 0 / .68), inset -.08rem -.08rem .14rem rgb(var(--tactile-surface-strong-rgb) / .12);
826
+ --tactile-progress-fill: repeating-linear-gradient(90deg, var(--tactile-success) 0 calc(12.5% - .16rem), transparent calc(12.5% - .16rem) 12.5%), var(--tactile-primary);
827
+ --usk-native-panel-padding: 1.2rem;
828
+ --usk-native-control-min-block-size: 3.05rem;
829
+ --usk-native-control-padding-block: .7rem;
830
+ --usk-native-control-padding-inline: .9rem;
831
+ --usk-native-subcontrol-padding-block: .52rem;
832
+ --usk-native-subcontrol-padding-inline: .7rem;
833
+ --usk-native-choice-size: 1.3rem;
834
+ --usk-native-choice-background: var(--tactile-field-bg);
835
+ --usk-native-choice-border: 1px solid var(--tactile-keyline);
836
+ --usk-native-choice-shadow: var(--tactile-inset-shadow);
837
+ --usk-native-checkbox-radius: .08rem;
838
+ --usk-native-select-indicator-size: .42rem .42rem, .42rem .42rem;
839
+ --usk-native-range-track-size: .68rem;
840
+ --usk-native-range-track-border: 2px solid var(--tactile-track-rim);
841
+ --usk-native-range-track-radius: 0;
842
+ --usk-native-range-track-shadow: var(--tactile-deep-inset-shadow);
843
+ --usk-native-range-thumb-size: 1.65rem;
844
+ --usk-native-range-thumb-border: 2px solid var(--tactile-keyline);
845
+ --usk-native-range-thumb-radius: .08rem;
846
+ --usk-native-range-thumb-shadow: var(--tactile-button-shadow);
847
+ --usk-native-progress-size: .85rem;
848
+ --usk-native-progress-track-border: 2px solid var(--tactile-track-rim);
849
+ --usk-native-progress-track-radius: 0;
850
+ --usk-native-progress-track-shadow: var(--tactile-deep-inset-shadow);
851
+ --usk-native-progress-value-background: var(--tactile-progress-fill);
852
+ --usk-native-progress-value-radius: 0;
853
+ --usk-native-progress-value-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .24);
854
+ --usk-native-file-button-border: 2px solid var(--tactile-keyline);
855
+ --usk-native-file-button-radius: .08rem;
856
+ --usk-native-scrollbar-size: 1rem;
857
+ --usk-native-scrollbar-radius: 0;
858
+ }
859
+
860
+ .tactile-title {
861
+ font-family: var(--tactile-font-display);
862
+ font-weight: 750;
863
+ letter-spacing: -.035em;
864
+ }
865
+ .tactile-heading { font-family: var(--tactile-font-heading); font-weight: 750; letter-spacing: -.018em; }
866
+ .tactile-label { font-size: .72rem; font-weight: 900; letter-spacing: .12em; text-transform: uppercase; }
867
+
868
+ .tactile-surface, .tactile-card, .tactile-panel, .tactile-toolbar, .tactile-table-wrap {
869
+ background: var(--tactile-card-bg);
870
+ border: 1px solid var(--tactile-keyline);
871
+ border-radius: .4rem;
872
+ box-shadow: var(--tactile-panel-shadow);
873
+ }
874
+ .tactile-card, .tactile-panel { padding: 1.35rem; }
875
+ .tactile-toolbar { padding: .8rem 1rem; }
876
+ .tactile-well, .tactile-inset {
877
+ padding: 1rem;
878
+ background: var(--tactile-inset-bg);
879
+ border: 1px solid var(--tactile-keyline);
880
+ border-radius: .28rem;
881
+ box-shadow: var(--tactile-inset-shadow);
882
+ }
883
+
884
+ .tactile-button, .tactile-icon-button {
885
+ min-height: 3.05rem;
886
+ padding: .7rem 1.05rem;
887
+ border: 1px solid var(--tactile-keyline);
888
+ border-radius: 0;
889
+ box-shadow: var(--tactile-button-shadow);
890
+ clip-path: polygon(.24rem 0, calc(100% - .24rem) 0, 100% .24rem, 100% calc(100% - .24rem), calc(100% - .24rem) 100%, .24rem 100%, 0 calc(100% - .24rem), 0 .24rem);
891
+ font-weight: 850;
892
+ letter-spacing: .025em;
893
+ }
894
+ .tactile-icon-button { width: 3.05rem; padding: 0; }
895
+ .tactile-button:hover, .tactile-icon-button:hover {
896
+ transform: translateY(-1px);
897
+ box-shadow: inset 0 2px 0 var(--tactile-bevel-highlight), inset 0 -3px 0 var(--tactile-bevel-shadow), 0 3px 0 var(--tactile-keyline), 0 .4rem .72rem rgb(var(--tactile-text-rgb) / var(--tactile-shadow-alpha));
898
+ }
899
+ .tactile-button:active, .tactile-icon-button:active,
900
+ .tactile-button[aria-pressed="true"], .tactile-icon-button[aria-pressed="true"],
901
+ .tactile-button.is-active, .tactile-icon-button.is-active {
902
+ transform: translateY(2px);
903
+ box-shadow: var(--tactile-inset-shadow);
904
+ }
905
+ .tactile-button:disabled, .tactile-icon-button:disabled, .tactile-disabled {
906
+ opacity: .48;
907
+ transform: none;
908
+ box-shadow: inset 0 1px 0 var(--tactile-bevel-highlight), inset 0 -1px 0 var(--tactile-bevel-shadow);
909
+ }
910
+
911
+ .tactile-input, .tactile-textarea, .tactile-select {
912
+ min-height: 3.05rem;
913
+ padding: .7rem .9rem;
914
+ background: var(--tactile-field-bg);
915
+ border: 1px solid var(--tactile-keyline);
916
+ border-radius: .28rem;
917
+ box-shadow: var(--tactile-inset-shadow);
918
+ }
919
+ .tactile-input:focus, .tactile-textarea:focus, .tactile-select:focus {
920
+ border-color: var(--tactile-focus);
921
+ box-shadow: var(--tactile-inset-shadow), var(--tactile-focus-ring);
922
+ }
923
+
924
+ .tactile-badge {
925
+ min-height: 1.6rem;
926
+ padding: .28rem .58rem;
927
+ border: 1px solid var(--tactile-keyline);
928
+ border-radius: var(--tactile-radius-xs);
929
+ box-shadow: inset 0 1px 0 var(--tactile-bevel-highlight), 0 1px 0 var(--tactile-keyline);
930
+ font-size: .7rem;
931
+ font-weight: 900;
932
+ letter-spacing: .08em;
933
+ text-transform: uppercase;
934
+ }
935
+
936
+ .tactile-nav {
937
+ gap: .2rem;
938
+ padding: .4rem;
939
+ background: var(--tactile-sidebar-bg);
940
+ border: 1px solid var(--tactile-keyline);
941
+ border-radius: var(--tactile-radius-md);
942
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-bg-rgb) / .1), inset 0 -2px 0 rgb(0 0 0 / .45), 0 .35rem .8rem rgb(var(--tactile-text-rgb) / var(--tactile-shadow-alpha));
943
+ }
944
+ .tactile-nav-link {
945
+ min-height: 2.55rem;
946
+ padding: .62rem .82rem;
947
+ border-radius: var(--tactile-radius-xs);
948
+ font-size: .75rem;
949
+ font-weight: 900;
950
+ letter-spacing: .08em;
951
+ text-transform: uppercase;
952
+ }
953
+ .tactile-nav-link[aria-current="page"], .tactile-nav-link.is-active {
954
+ color: var(--tactile-sidebar-fg);
955
+ background: rgb(var(--tactile-bg-rgb) / .12);
956
+ border-color: rgb(var(--tactile-bg-rgb) / .22);
957
+ box-shadow: inset .28rem 0 0 var(--tactile-rail), inset .12rem .12rem .22rem rgb(0 0 0 / .46);
958
+ }
959
+
960
+ .tactile-progress {
961
+ height: .85rem;
962
+ padding: .1rem;
963
+ background: var(--tactile-recessed-track);
964
+ border: 2px solid var(--tactile-track-rim);
965
+ border-radius: 0;
966
+ box-shadow: var(--tactile-deep-inset-shadow);
967
+ }
968
+ .tactile-progress-bar {
969
+ background: var(--tactile-progress-fill);
970
+ border-radius: 0;
971
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-surface-strong-rgb) / .24);
972
+ }
973
+
974
+ .tactile-alert {
975
+ padding: 1rem 1.1rem;
976
+ background: var(--tactile-card-bg);
977
+ border: 2px solid var(--tactile-keyline);
978
+ border-inline-start-width: .45rem;
979
+ border-radius: .28rem;
980
+ box-shadow: var(--tactile-panel-shadow);
981
+ }
982
+ .tactile-alert-title { font-size: .76rem; font-weight: 900; letter-spacing: .08em; text-transform: uppercase; }
983
+
984
+ .tactile-table { border-collapse: separate; border-spacing: 0; }
985
+ .tactile-table th, .tactile-table td {
986
+ padding: .72rem .82rem;
987
+ border-inline-end: 1px solid var(--tactile-keyline);
988
+ border-bottom: 1px solid var(--tactile-keyline);
989
+ }
990
+ .tactile-table th {
991
+ color: var(--tactile-sidebar-fg);
992
+ background: var(--tactile-sidebar-bg);
993
+ box-shadow: inset 0 -2px 0 rgb(0 0 0 / .42);
994
+ }
995
+ .tactile-table td { background: var(--tactile-field-bg); box-shadow: inset 0 1px 0 var(--tactile-bevel-highlight); }
996
+
997
+ .tactile-card-service, .tactile-card-feature, .tactile-feature-strip, .tactile-callout-bar {
998
+ padding: 1rem;
999
+ background: var(--tactile-card-bg);
1000
+ border: 1px solid var(--tactile-keyline);
1001
+ border-radius: var(--tactile-radius-lg);
1002
+ box-shadow: var(--tactile-panel-shadow);
1003
+ }
1004
+ .tactile-card-service { text-align: start; }
1005
+ .tactile-feature-item {
1006
+ padding: .85rem 1rem;
1007
+ background: var(--tactile-inset-bg);
1008
+ border-inline-end: 1px solid var(--tactile-keyline);
1009
+ box-shadow: inset 0 1px 0 var(--tactile-bevel-highlight), inset 0 -1px 0 var(--tactile-bevel-shadow);
1010
+ }
1011
+ .tactile-callout-bar {
1012
+ color: var(--tactile-sidebar-fg);
1013
+ background: var(--tactile-sidebar-bg);
1014
+ border-width: 2px;
1015
+ }
1016
+ .tactile-callout-bar > :where(.tactile-button, a, button):last-child { justify-self: end; }
1017
+
1018
+ [data-ui="tactile"][data-mode] :where(fieldset, article, aside, details, dialog) {
1019
+ background-color: var(--tactile-surface);
1020
+ background-image: var(--tactile-card-bg);
1021
+ border: 1px solid var(--tactile-keyline);
1022
+ border-radius: var(--tactile-radius-lg);
1023
+ box-shadow: var(--tactile-panel-shadow);
1024
+ }
1025
+ [data-ui="tactile"][data-mode] :where(legend) {
1026
+ padding: .32rem .58rem;
1027
+ background: var(--tactile-control-bg);
1028
+ border: 1px solid var(--tactile-keyline);
1029
+ border-radius: var(--tactile-radius-xs);
1030
+ box-shadow: var(--tactile-button-shadow);
1031
+ font-size: .7rem;
1032
+ font-weight: 900;
1033
+ letter-spacing: .1em;
1034
+ text-transform: uppercase;
1035
+ }
1036
+ [data-ui="tactile"][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])) {
1037
+ border: 1px solid var(--tactile-keyline);
1038
+ border-radius: 0;
1039
+ box-shadow: var(--tactile-button-shadow);
1040
+ clip-path: polygon(.2rem 0, calc(100% - .2rem) 0, 100% .2rem, 100% calc(100% - .2rem), calc(100% - .2rem) 100%, .2rem 100%, 0 calc(100% - .2rem), 0 .2rem);
1041
+ }
1042
+ [data-ui="tactile"][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])):active {
1043
+ transform: translateY(2px);
1044
+ box-shadow: var(--tactile-inset-shadow);
1045
+ }
1046
+ [data-ui="tactile"][data-mode] :where(dialog) {
1047
+ border: 2px solid var(--tactile-keyline);
1048
+ border-radius: var(--tactile-radius-lg);
1049
+ box-shadow: var(--tactile-panel-shadow);
632
1050
  }
633
1051
 
634
1052
  /* Busy indicators preserve the bevel and pressed-depth cues of tactile controls. */
@@ -652,3 +1070,1287 @@
652
1070
  [data-ui="tactile"] a { color: #000 !important; text-decoration: underline; }
653
1071
  }
654
1072
  }
1073
+
1074
+ @layer ui-style-kit.tactile {
1075
+ /* Keeps semantic field states above preset-specific material paint. */
1076
+ .tactile-input[aria-invalid="true"], .tactile-textarea[aria-invalid="true"], .tactile-select[aria-invalid="true"] { border-color: var(--tactile-danger); box-shadow: 0 0 0 2px rgb(var(--tactile-danger-rgb) / .18); }
1077
+ .tactile-input[readonly], .tactile-textarea[readonly] { border-style: dashed; filter: saturate(.72); opacity: .78; }
1078
+ }
1079
+
1080
+ @layer ui-style-kit.tactile {
1081
+ /**
1082
+ * Reasserts the paper-plate and mechanical-control hierarchy after busy indicators.
1083
+ * Chamfered keycaps, hard keylines, and dark troughs remain legible in every theme.
1084
+ */
1085
+ .tactile-title { margin-block: .75rem; font-family: var(--tactile-font-display); font-weight: 750; letter-spacing: max(.022em, .5px); }
1086
+ .tactile-label { font-size: .72rem; font-weight: 900; letter-spacing: .12em; text-transform: uppercase; }
1087
+ .tactile-button, .tactile-icon-button {
1088
+ min-height: 3.05rem;
1089
+ padding: .7rem 1.05rem;
1090
+ background: var(--tactile-control-bg);
1091
+ border: 1px solid var(--tactile-keyline);
1092
+ border-radius: 0;
1093
+ box-shadow: var(--tactile-button-shadow);
1094
+ clip-path: polygon(.24rem 0, calc(100% - .24rem) 0, 100% .24rem, 100% calc(100% - .24rem), calc(100% - .24rem) 100%, .24rem 100%, 0 calc(100% - .24rem), 0 .24rem);
1095
+ font-weight: 850;
1096
+ }
1097
+ .tactile-icon-button { padding: 0; }
1098
+ .tactile-button-primary { background: var(--tactile-action-bg); box-shadow: var(--tactile-button-shadow); }
1099
+ .tactile-button-secondary { background: var(--tactile-control-bg); box-shadow: var(--tactile-button-shadow); }
1100
+ .tactile-button-danger { background: var(--tactile-danger); box-shadow: var(--tactile-button-shadow); }
1101
+ .tactile-button:active, .tactile-icon-button:active,
1102
+ .tactile-button[aria-pressed="true"], .tactile-icon-button[aria-pressed="true"] {
1103
+ transform: translateY(2px);
1104
+ box-shadow: var(--tactile-inset-shadow);
1105
+ }
1106
+ .tactile-input, .tactile-textarea, .tactile-select {
1107
+ min-height: 3.05rem;
1108
+ padding: .7rem .9rem;
1109
+ background: var(--tactile-field-bg);
1110
+ border: 1px solid var(--tactile-keyline);
1111
+ border-radius: .28rem;
1112
+ box-shadow: var(--tactile-inset-shadow);
1113
+ }
1114
+ .tactile-surface, .tactile-card, .tactile-panel, .tactile-toolbar, .tactile-table-wrap {
1115
+ background: var(--tactile-card-bg);
1116
+ border: 1px solid var(--tactile-keyline);
1117
+ border-radius: .4rem;
1118
+ box-shadow: var(--tactile-panel-shadow);
1119
+ }
1120
+ .tactile-card, .tactile-panel { padding: 1rem; }
1121
+ .tactile-well, .tactile-inset {
1122
+ background: var(--tactile-inset-bg);
1123
+ border: 1px solid var(--tactile-keyline);
1124
+ border-radius: .28rem;
1125
+ box-shadow: var(--tactile-inset-shadow);
1126
+ }
1127
+ .tactile-badge { min-height: 1.6rem; padding: .28rem .58rem; border-radius: var(--tactile-radius-xs); }
1128
+ .tactile-alert {
1129
+ background: var(--tactile-card-bg);
1130
+ border: 2px solid var(--tactile-keyline);
1131
+ border-inline-start-width: .45rem;
1132
+ border-radius: .28rem;
1133
+ box-shadow: var(--tactile-panel-shadow);
1134
+ }
1135
+ .tactile-progress { height: .85rem; background: var(--tactile-recessed-track); border: 2px solid var(--tactile-track-rim); box-shadow: var(--tactile-deep-inset-shadow); }
1136
+ .tactile-progress-bar { background: var(--tactile-progress-fill); border-radius: 0; }
1137
+ .tactile-table-wrap { background: var(--tactile-card-bg); border-radius: .4rem; box-shadow: var(--tactile-panel-shadow); }
1138
+ .tactile-table th { padding: .72rem .82rem; background: var(--tactile-sidebar-bg); font-weight: 900; }
1139
+ .tactile-table td { padding: .72rem .82rem; background: var(--tactile-field-bg); }
1140
+ .tactile-nav { background: var(--tactile-sidebar-bg); border: 1px solid var(--tactile-keyline); border-radius: .35rem; box-shadow: var(--tactile-panel-shadow); }
1141
+ .tactile-nav-link { min-height: 2.55rem; padding: .62rem .82rem; border-radius: .12rem; }
1142
+ .tactile-tooltip, [data-ui="tactile"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) { border: 1px solid var(--tactile-keyline); border-radius: .2rem; box-shadow: var(--tactile-panel-shadow); }
1143
+ .tactile-card-service, .tactile-card-feature, .tactile-feature-strip, .tactile-callout-bar {
1144
+ padding: 1rem;
1145
+ background: var(--tactile-card-bg);
1146
+ border: 1px solid var(--tactile-keyline);
1147
+ border-radius: .4rem;
1148
+ box-shadow: var(--tactile-panel-shadow);
1149
+ }
1150
+ .tactile-feature-item { padding: .85rem 1rem; background: var(--tactile-inset-bg); }
1151
+ [data-ui="tactile"][data-mode] :where(fieldset, article, aside, details, dialog) {
1152
+ background: var(--tactile-card-bg);
1153
+ border: 1px solid var(--tactile-keyline);
1154
+ border-radius: .4rem;
1155
+ box-shadow: var(--tactile-panel-shadow);
1156
+ }
1157
+ }
1158
+
1159
+ @layer ui-style-kit.tactile {
1160
+ /* Restores semantic action paint after identity-specific geometry. */
1161
+ .tactile-button-primary { background: var(--tactile-primary); color: var(--tactile-on-primary); border-color: var(--tactile-primary); }
1162
+ .tactile-button-secondary { background: var(--tactile-secondary); color: var(--tactile-on-secondary); border-color: var(--tactile-secondary); }
1163
+ .tactile-button-danger { background: var(--tactile-danger); color: var(--tactile-on-danger); border-color: var(--tactile-danger); }
1164
+ .tactile-button-ghost { background: transparent; color: var(--usk-primary-ink, var(--tactile-primary)); border-color: transparent; }
1165
+ }
1166
+
1167
+ @layer ui-style-kit.tactile {
1168
+ /* Shared annotation fidelity: readable display rhythm and appropriately scaled text icons. */
1169
+ .tactile-feature-item > .tactile-icon-medallion { font-size: 1.5rem; line-height: 1; }
1170
+ .tactile-callout-bar > .tactile-icon-medallion { min-inline-size: 4.5rem; min-block-size: 4.5rem; font-size: 2rem; font-weight: 800; line-height: 1; }
1171
+ }
1172
+
1173
+ @layer ui-style-kit.tactile {
1174
+ /**
1175
+ * Defines the compact type, restrained geometry, and material constants from
1176
+ * the retained Workspace Configuration reference without changing public selectors.
1177
+ */
1178
+ :root {
1179
+ --tactile-font-sans: "Segoe UI", Tahoma, Arial, sans-serif;
1180
+ --tactile-font-display: Georgia, Cambria, "Times New Roman", Times, serif;
1181
+ --tactile-font-body: var(--tactile-font-sans);
1182
+ --tactile-font-heading: var(--tactile-font-display);
1183
+ --tactile-font-control: "Arial Narrow", "Aptos Narrow", "Segoe UI", Tahoma, Arial, sans-serif;
1184
+ --tactile-radius-xs: .12rem;
1185
+ --tactile-radius-sm: .18rem;
1186
+ --tactile-radius-md: .24rem;
1187
+ --tactile-radius-lg: .38rem;
1188
+ --tactile-radius-xl: .5rem;
1189
+ }
1190
+
1191
+ /**
1192
+ * Locks the light reference palette to warm paper, umber ink, aged brass,
1193
+ * oxidized olive, and fired-copper indicators.
1194
+ */
1195
+ [data-ui="tactile"][data-mode="light"] {
1196
+ --tactile-paper-rgb: 246 240 224;
1197
+ --tactile-paper-deep-rgb: 229 218 194;
1198
+ --tactile-paper-highlight-rgb: 255 252 241;
1199
+ --tactile-ink-rgb: 45 40 34;
1200
+ --tactile-muted-ink-rgb: 96 86 73;
1201
+ --tactile-keyline-rgb: 158 135 99;
1202
+ --tactile-material-shadow-rgb: 74 61 43;
1203
+ --tactile-track-rgb: 37 33 31;
1204
+ --tactile-sidebar-rgb: 45 41 36;
1205
+ --tactile-sidebar-text-rgb: 236 221 190;
1206
+ --tactile-copper-rgb: 177 60 28;
1207
+ --tactile-olive-rgb: 91 104 67;
1208
+ --tactile-brass-rgb: 197 160 82;
1209
+ }
1210
+
1211
+ /**
1212
+ * Carries the same physical materials into dark mode with warm charcoal paper,
1213
+ * readable parchment ink, and brighter hardware accents.
1214
+ */
1215
+ [data-ui="tactile"][data-mode="dark"] {
1216
+ --tactile-paper-rgb: 57 51 44;
1217
+ --tactile-paper-deep-rgb: 42 38 34;
1218
+ --tactile-paper-highlight-rgb: 84 75 63;
1219
+ --tactile-ink-rgb: 241 232 214;
1220
+ --tactile-muted-ink-rgb: 198 184 158;
1221
+ --tactile-keyline-rgb: 151 128 91;
1222
+ --tactile-material-shadow-rgb: 0 0 0;
1223
+ --tactile-track-rgb: 25 23 21;
1224
+ --tactile-sidebar-rgb: 27 25 23;
1225
+ --tactile-sidebar-text-rgb: 236 218 184;
1226
+ --tactile-copper-rgb: 211 83 43;
1227
+ --tactile-olive-rgb: 131 145 92;
1228
+ --tactile-brass-rgb: 222 181 91;
1229
+ }
1230
+
1231
+ /**
1232
+ * Preserves the reference geometry in contrast mode while reducing the
1233
+ * material system to explicit black, white, and high-chroma state hardware.
1234
+ */
1235
+ [data-ui="tactile"][data-mode="contrast"] {
1236
+ --tactile-paper-rgb: 0 0 0;
1237
+ --tactile-paper-deep-rgb: 0 0 0;
1238
+ --tactile-paper-highlight-rgb: 255 255 255;
1239
+ --tactile-ink-rgb: 255 255 255;
1240
+ --tactile-muted-ink-rgb: 255 255 255;
1241
+ --tactile-keyline-rgb: 255 255 255;
1242
+ --tactile-material-shadow-rgb: 0 0 0;
1243
+ --tactile-track-rgb: 0 0 0;
1244
+ --tactile-sidebar-rgb: 0 0 0;
1245
+ --tactile-sidebar-text-rgb: 255 255 255;
1246
+ --tactile-copper-rgb: 255 110 48;
1247
+ --tactile-olive-rgb: 196 232 112;
1248
+ --tactile-brass-rgb: 255 214 102;
1249
+ }
1250
+
1251
+ /**
1252
+ * Repaints the retained physical materials with the selected library scheme.
1253
+ * The mode palettes above therefore remain standalone defaults, while an
1254
+ * explicit data-theme keeps the complete color-token contract authoritative.
1255
+ */
1256
+ [data-ui="tactile"][data-theme][data-mode] {
1257
+ --tactile-paper-rgb: var(--usk-bg-rgb);
1258
+ --tactile-paper-deep-rgb: var(--usk-surface-soft-rgb);
1259
+ --tactile-paper-highlight-rgb: var(--usk-surface-strong-rgb);
1260
+ --tactile-ink-rgb: var(--usk-text-rgb);
1261
+ --tactile-muted-ink-rgb: var(--usk-text-muted-rgb);
1262
+ --tactile-keyline-rgb: var(--usk-border-rgb);
1263
+ --tactile-material-shadow-rgb: var(--usk-text-rgb);
1264
+ --tactile-track-rgb: var(--usk-text-rgb);
1265
+ --tactile-sidebar-rgb: var(--usk-text-rgb);
1266
+ --tactile-sidebar-text-rgb: var(--usk-bg-rgb);
1267
+ --tactile-copper-rgb: var(--usk-primary-rgb);
1268
+ --tactile-olive-rgb: var(--usk-success-rgb);
1269
+ --tactile-brass-rgb: var(--usk-accent-rgb);
1270
+ }
1271
+
1272
+ /**
1273
+ * Maps the fixed Tactile materials onto theme-aware action colors and every
1274
+ * shared native-control token consumed by the package.
1275
+ */
1276
+ [data-ui="tactile"][data-mode] {
1277
+ --tactile-paper: rgb(var(--tactile-paper-rgb));
1278
+ --tactile-paper-deep: rgb(var(--tactile-paper-deep-rgb));
1279
+ --tactile-paper-highlight: rgb(var(--tactile-paper-highlight-rgb));
1280
+ --tactile-ink: rgb(var(--tactile-ink-rgb));
1281
+ --tactile-muted-ink: rgb(var(--tactile-muted-ink-rgb));
1282
+ --tactile-copper: rgb(var(--tactile-copper-rgb));
1283
+ --tactile-olive: rgb(var(--tactile-olive-rgb));
1284
+ --tactile-brass: rgb(var(--tactile-brass-rgb));
1285
+ --tactile-bg: var(--tactile-paper);
1286
+ --tactile-surface: var(--tactile-paper);
1287
+ --tactile-surface-strong: var(--tactile-paper-highlight);
1288
+ --tactile-surface-soft: var(--tactile-paper-deep);
1289
+ --tactile-text: var(--tactile-ink);
1290
+ --tactile-text-muted: var(--tactile-muted-ink);
1291
+ --tactile-fg: var(--tactile-ink);
1292
+ --tactile-surface-fg: var(--tactile-ink);
1293
+ --tactile-muted: var(--tactile-muted-ink);
1294
+ --tactile-control-fg: var(--tactile-ink);
1295
+ --tactile-border: rgb(var(--tactile-keyline-rgb) / .72);
1296
+ --tactile-keyline: rgb(var(--tactile-keyline-rgb) / .78);
1297
+ --tactile-bevel-highlight: rgb(var(--tactile-paper-highlight-rgb) / .88);
1298
+ --tactile-bevel-shadow: rgb(var(--tactile-material-shadow-rgb) / .24);
1299
+ --tactile-paper-wash: rgb(var(--tactile-brass-rgb) / .06);
1300
+ --tactile-paper-grain: radial-gradient(circle at 16% 22%, rgb(var(--tactile-ink-rgb) / .025) 0 1px, transparent 1.2px), radial-gradient(circle at 72% 64%, rgb(var(--tactile-brass-rgb) / .04) 0 1px, transparent 1.3px), repeating-linear-gradient(96deg, transparent 0 2.4rem, rgb(var(--tactile-ink-rgb) / .012) 2.45rem 2.5rem);
1301
+ --tactile-paper-bg: linear-gradient(180deg, rgb(var(--tactile-paper-highlight-rgb) / .34), transparent 11rem), linear-gradient(102deg, rgb(var(--tactile-brass-rgb) / .035), transparent 32rem), var(--tactile-paper);
1302
+ --tactile-theme-bg: var(--tactile-paper-grain), var(--tactile-paper-bg);
1303
+ --tactile-card-bg: var(--tactile-paper-grain), var(--tactile-paper-bg);
1304
+ --tactile-control-bg: linear-gradient(180deg, var(--tactile-paper-highlight) 0, var(--tactile-paper) 48%, var(--tactile-paper-deep) 100%);
1305
+ --tactile-field-bg: linear-gradient(180deg, rgb(var(--tactile-material-shadow-rgb) / .075), transparent .24rem), linear-gradient(180deg, var(--tactile-paper) 0, rgb(var(--tactile-paper-highlight-rgb) / .7) 100%);
1306
+ --tactile-inset-bg: linear-gradient(180deg, rgb(var(--tactile-material-shadow-rgb) / .1), transparent .28rem), var(--tactile-paper);
1307
+ --tactile-recessed-track: rgb(var(--tactile-track-rgb));
1308
+ --tactile-track-rim: rgb(var(--tactile-keyline-rgb) / .9);
1309
+ --tactile-progress-track: linear-gradient(180deg, var(--tactile-paper-deep), var(--tactile-paper-highlight));
1310
+ --tactile-thumb-bg: linear-gradient(90deg, var(--tactile-paper-deep), var(--tactile-paper-highlight) 42%, var(--tactile-paper) 58%, var(--tactile-paper-deep));
1311
+ --tactile-select-endcap: linear-gradient(90deg, transparent calc(100% - 2.25rem), rgb(var(--tactile-keyline-rgb) / .56) calc(100% - 2.25rem), rgb(var(--tactile-keyline-rgb) / .56) calc(100% - 2.2rem), transparent calc(100% - 2.2rem)), linear-gradient(135deg, transparent 50%, var(--tactile-ink) 50%), linear-gradient(45deg, var(--tactile-ink) 50%, transparent 50%), linear-gradient(45deg, transparent 50%, var(--tactile-ink) 50%), linear-gradient(135deg, var(--tactile-ink) 50%, transparent 50%), var(--tactile-field-bg);
1312
+ --tactile-sidebar-bg: linear-gradient(90deg, rgb(var(--tactile-sidebar-rgb) / .98), rgb(var(--tactile-sidebar-rgb)));
1313
+ --tactile-sidebar-fg: rgb(var(--tactile-sidebar-text-rgb));
1314
+ --tactile-sidebar-muted: rgb(var(--tactile-sidebar-text-rgb) / .78);
1315
+ --tactile-rail: var(--tactile-copper);
1316
+ --tactile-panel-shadow: inset 0 1px 0 var(--tactile-bevel-highlight), inset 0 -1px 0 rgb(var(--tactile-material-shadow-rgb) / .18), 0 1px 2px rgb(var(--tactile-material-shadow-rgb) / .2), 0 .28rem .62rem rgb(var(--tactile-material-shadow-rgb) / .09);
1317
+ --tactile-button-shadow: inset 0 1px 0 var(--tactile-bevel-highlight), inset 0 -2px 0 rgb(var(--tactile-material-shadow-rgb) / .22), 0 1px 2px rgb(var(--tactile-material-shadow-rgb) / .22);
1318
+ --tactile-inset-shadow: inset .1rem .12rem .22rem rgb(var(--tactile-material-shadow-rgb) / .2), inset -.04rem -.04rem .12rem rgb(var(--tactile-paper-highlight-rgb) / .34);
1319
+ --tactile-deep-inset-shadow: inset .12rem .14rem .2rem rgb(0 0 0 / .72), inset 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .12);
1320
+ --tactile-progress-fill: repeating-linear-gradient(90deg, var(--tactile-olive) 0 calc(14.285% - 1px), rgb(var(--tactile-keyline-rgb) / .84) calc(14.285% - 1px) 14.285%);
1321
+ --usk-native-surface: var(--tactile-paper);
1322
+ --usk-native-surface-strong: var(--tactile-paper-highlight);
1323
+ --usk-native-surface-soft: var(--tactile-paper-deep);
1324
+ --usk-native-card-bg: var(--tactile-card-bg);
1325
+ --usk-native-control-bg: var(--tactile-field-bg);
1326
+ --usk-native-text: var(--tactile-ink);
1327
+ --usk-native-text-muted: var(--tactile-muted-ink);
1328
+ --usk-native-border: var(--tactile-keyline);
1329
+ --usk-native-font-body: var(--tactile-font-body);
1330
+ --usk-native-font-heading: var(--tactile-font-heading);
1331
+ --usk-native-font-control: var(--tactile-font-control);
1332
+ --usk-native-shadow: var(--tactile-button-shadow);
1333
+ --usk-native-shadow-md: var(--tactile-panel-shadow);
1334
+ --usk-native-control-min-block-size: 2.75rem;
1335
+ --usk-native-control-padding-block: .55rem;
1336
+ --usk-native-control-padding-inline: .78rem;
1337
+ --usk-native-subcontrol-padding-block: .45rem;
1338
+ --usk-native-subcontrol-padding-inline: .66rem;
1339
+ --usk-native-panel-padding: 1rem;
1340
+ --usk-native-choice-size: 1.05rem;
1341
+ --usk-native-choice-background: var(--tactile-field-bg);
1342
+ --usk-native-choice-border: 1px solid var(--tactile-keyline);
1343
+ --usk-native-choice-shadow: var(--tactile-inset-shadow);
1344
+ --usk-native-choice-checked-background: var(--tactile-copper);
1345
+ --usk-native-choice-mark-color: var(--tactile-paper-highlight);
1346
+ --usk-native-checkbox-radius: .08rem;
1347
+ --usk-native-select-indicator-size: .36rem .36rem, .36rem .36rem;
1348
+ --usk-native-select-indicator-position: calc(100% - 1.05rem) calc(50% - .22rem), calc(100% - 1.05rem) calc(50% + .22rem);
1349
+ --usk-native-select-padding-inline-end: 2.6rem;
1350
+ --usk-native-range-track-size: .55rem;
1351
+ --usk-native-range-track-background: var(--tactile-recessed-track);
1352
+ --usk-native-range-track-border: 1px solid var(--tactile-track-rim);
1353
+ --usk-native-range-track-radius: .16rem;
1354
+ --usk-native-range-track-shadow: var(--tactile-deep-inset-shadow);
1355
+ --usk-native-range-thumb-size: 1.35rem;
1356
+ --usk-native-range-thumb-background: var(--tactile-thumb-bg);
1357
+ --usk-native-range-thumb-border: 1px solid var(--tactile-keyline);
1358
+ --usk-native-range-thumb-radius: .16rem;
1359
+ --usk-native-range-thumb-shadow: var(--tactile-button-shadow);
1360
+ --usk-native-progress-size: .68rem;
1361
+ --usk-native-progress-track-background: var(--tactile-progress-track);
1362
+ --usk-native-progress-track-border: 1px solid var(--tactile-keyline);
1363
+ --usk-native-progress-track-radius: .14rem;
1364
+ --usk-native-progress-track-shadow: var(--tactile-inset-shadow);
1365
+ --usk-native-progress-value-background: var(--tactile-progress-fill);
1366
+ --usk-native-progress-value-radius: .08rem;
1367
+ --usk-native-progress-value-shadow: inset 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .3);
1368
+ --usk-native-meter-optimum-background: var(--tactile-olive);
1369
+ --usk-native-meter-suboptimum-background: var(--tactile-brass);
1370
+ --usk-native-meter-critical-background: var(--tactile-copper);
1371
+ --usk-native-file-button-background: var(--tactile-control-bg);
1372
+ --usk-native-file-button-border: 1px solid var(--tactile-keyline);
1373
+ --usk-native-file-button-radius: .2rem;
1374
+ --usk-native-file-button-shadow: var(--tactile-button-shadow);
1375
+ --usk-native-color-swatch-border: 1px solid var(--tactile-keyline);
1376
+ --usk-native-color-swatch-radius: .12rem;
1377
+ --usk-native-scrollbar-track: var(--tactile-paper-deep);
1378
+ --usk-native-scrollbar-thumb: var(--tactile-thumb-bg);
1379
+ --usk-native-scrollbar-radius: .14rem;
1380
+ }
1381
+
1382
+ /**
1383
+ * Establishes the restrained paper page and the reference's compact text rhythm.
1384
+ */
1385
+ [data-ui="tactile"] {
1386
+ background: var(--tactile-theme-bg);
1387
+ color: var(--tactile-ink);
1388
+ font-family: var(--tactile-font-body);
1389
+ font-size: .875rem;
1390
+ line-height: 1.42;
1391
+ }
1392
+
1393
+ .tactile-title {
1394
+ margin-block: .75rem;
1395
+ font-family: var(--tactile-font-display);
1396
+ font-size: clamp(2rem, 4.2vw, 3.05rem);
1397
+ font-weight: 700;
1398
+ line-height: 1.02;
1399
+ letter-spacing: max(.022em, .5px);
1400
+ }
1401
+
1402
+ .tactile-heading {
1403
+ font-family: var(--tactile-font-heading);
1404
+ font-size: clamp(1.25rem, 2vw, 1.7rem);
1405
+ font-weight: 700;
1406
+ line-height: 1.08;
1407
+ letter-spacing: -.015em;
1408
+ }
1409
+
1410
+ .tactile-kicker,
1411
+ .tactile-eyebrow {
1412
+ font-family: var(--tactile-font-control);
1413
+ font-size: .7rem;
1414
+ font-weight: 700;
1415
+ letter-spacing: .075em;
1416
+ text-transform: uppercase;
1417
+ }
1418
+
1419
+ .tactile-label {
1420
+ color: var(--tactile-ink);
1421
+ font-family: var(--tactile-font-control);
1422
+ font-size: .74rem;
1423
+ font-weight: 650;
1424
+ letter-spacing: .01em;
1425
+ text-transform: none;
1426
+ }
1427
+
1428
+ .tactile-subtitle,
1429
+ .tactile-copy,
1430
+ .tactile-help-text,
1431
+ .tactile-alert-body {
1432
+ color: var(--tactile-muted-ink);
1433
+ }
1434
+
1435
+ .tactile-divider {
1436
+ background: rgb(var(--tactile-keyline-rgb) / .44);
1437
+ box-shadow: 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .58);
1438
+ }
1439
+
1440
+ /**
1441
+ * Gives every framed component the thin umber rule, shallow radius, and
1442
+ * low-profile paper elevation visible in the reference panels.
1443
+ */
1444
+ .tactile-surface,
1445
+ .tactile-card,
1446
+ .tactile-panel,
1447
+ .tactile-toolbar,
1448
+ .tactile-table-wrap {
1449
+ background: var(--tactile-card-bg);
1450
+ border: 1px solid var(--tactile-keyline);
1451
+ border-radius: .38rem;
1452
+ box-shadow: var(--tactile-panel-shadow);
1453
+ }
1454
+
1455
+ .tactile-card,
1456
+ .tactile-panel {
1457
+ padding: 1rem;
1458
+ }
1459
+
1460
+ .tactile-toolbar {
1461
+ padding: .72rem .82rem;
1462
+ }
1463
+
1464
+ .tactile-well,
1465
+ .tactile-inset {
1466
+ padding: .82rem;
1467
+ background: var(--tactile-inset-bg);
1468
+ border: 1px solid rgb(var(--tactile-keyline-rgb) / .64);
1469
+ border-radius: .28rem;
1470
+ box-shadow: var(--tactile-inset-shadow);
1471
+ }
1472
+
1473
+ /**
1474
+ * Recreates the shallow raised keycaps and the one-pixel pressed travel used
1475
+ * by neutral, semantic, icon, destructive, and disabled actions.
1476
+ */
1477
+ .tactile-button,
1478
+ .tactile-icon-button {
1479
+ min-height: 2.75rem;
1480
+ padding: .55rem .9rem;
1481
+ background: var(--tactile-control-bg);
1482
+ color: var(--tactile-ink);
1483
+ border: 1px solid var(--tactile-keyline);
1484
+ border-radius: .24rem;
1485
+ box-shadow: var(--tactile-button-shadow);
1486
+ clip-path: none;
1487
+ font-family: var(--tactile-font-control);
1488
+ font-size: .84rem;
1489
+ font-weight: 600;
1490
+ line-height: 1.2;
1491
+ letter-spacing: .005em;
1492
+ text-transform: none;
1493
+ }
1494
+
1495
+ .tactile-icon-button {
1496
+ width: 2.75rem;
1497
+ padding: 0;
1498
+ }
1499
+
1500
+ .tactile-button:hover,
1501
+ .tactile-icon-button:hover {
1502
+ transform: translateY(-1px);
1503
+ border-color: rgb(var(--tactile-keyline-rgb) / .96);
1504
+ box-shadow: inset 0 1px 0 var(--tactile-bevel-highlight), inset 0 -2px 0 rgb(var(--tactile-material-shadow-rgb) / .26), 0 2px 3px rgb(var(--tactile-material-shadow-rgb) / .2);
1505
+ }
1506
+
1507
+ .tactile-button:active,
1508
+ .tactile-icon-button:active,
1509
+ .tactile-button[aria-pressed="true"],
1510
+ .tactile-icon-button[aria-pressed="true"],
1511
+ .tactile-button.is-active,
1512
+ .tactile-icon-button.is-active {
1513
+ transform: translateY(1px);
1514
+ box-shadow: var(--tactile-inset-shadow);
1515
+ }
1516
+
1517
+ .tactile-button-primary {
1518
+ background: linear-gradient(180deg, var(--tactile-primary-hover), var(--tactile-primary) 48%, rgb(var(--tactile-primary-rgb) / .84));
1519
+ color: var(--tactile-on-primary);
1520
+ border-color: var(--tactile-primary);
1521
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / .42), inset 0 -2px 0 rgb(0 0 0 / .25), 0 1px 2px rgb(var(--tactile-material-shadow-rgb) / .3);
1522
+ }
1523
+
1524
+ .tactile-button-secondary {
1525
+ background: var(--tactile-control-bg);
1526
+ color: var(--tactile-ink);
1527
+ border-color: var(--tactile-keyline);
1528
+ }
1529
+
1530
+ .tactile-button-danger {
1531
+ background: linear-gradient(180deg, rgb(var(--tactile-danger-rgb) / .88), var(--tactile-danger) 52%, rgb(var(--tactile-danger-rgb) / .76));
1532
+ color: var(--tactile-on-danger);
1533
+ border-color: var(--tactile-danger);
1534
+ }
1535
+
1536
+ /** Enhances supported browsers with the reference's light-to-dark enamel ramp. */
1537
+ @supports (color: color-mix(in srgb, black, white)) {
1538
+ .tactile-button-primary {
1539
+ background: linear-gradient(180deg, color-mix(in srgb, var(--tactile-primary), white 16%), var(--tactile-primary) 48%, color-mix(in srgb, var(--tactile-primary), black 18%));
1540
+ border-color: color-mix(in srgb, var(--tactile-primary), black 34%);
1541
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / .42), inset 0 -2px 0 rgb(0 0 0 / .25), 0 1px 2px rgb(var(--tactile-material-shadow-rgb) / .3);
1542
+ }
1543
+
1544
+ .tactile-button-danger {
1545
+ background: linear-gradient(180deg, color-mix(in srgb, var(--tactile-danger), white 12%), var(--tactile-danger) 52%, color-mix(in srgb, var(--tactile-danger), black 18%));
1546
+ border-color: color-mix(in srgb, var(--tactile-danger), black 30%);
1547
+ }
1548
+ }
1549
+
1550
+ .tactile-button-ghost {
1551
+ background: transparent;
1552
+ color: var(--usk-primary-ink, var(--tactile-primary));
1553
+ border-color: transparent;
1554
+ box-shadow: none;
1555
+ }
1556
+
1557
+ .tactile-button:disabled,
1558
+ .tactile-icon-button:disabled,
1559
+ .tactile-disabled {
1560
+ opacity: .46;
1561
+ transform: none;
1562
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .38), inset 0 -1px 0 rgb(var(--tactile-material-shadow-rgb) / .12);
1563
+ }
1564
+
1565
+ /**
1566
+ * Applies the recessed paper field, mechanical selector end-cap, and compact
1567
+ * type treatment to text, textarea, select, and file-entry families.
1568
+ */
1569
+ .tactile-input,
1570
+ .tactile-textarea,
1571
+ .tactile-select {
1572
+ min-height: 2.75rem;
1573
+ padding: .55rem .72rem;
1574
+ background: var(--tactile-field-bg);
1575
+ color: var(--tactile-ink);
1576
+ border: 1px solid var(--tactile-keyline);
1577
+ border-radius: .24rem;
1578
+ box-shadow: var(--tactile-inset-shadow);
1579
+ font-family: var(--tactile-font-control);
1580
+ font-size: .84rem;
1581
+ font-weight: 500;
1582
+ }
1583
+
1584
+ .tactile-select {
1585
+ appearance: none;
1586
+ padding-inline-end: 2.75rem;
1587
+ background-image: var(--tactile-select-endcap);
1588
+ background-repeat: no-repeat;
1589
+ background-position: 0 0, calc(100% - 1.18rem) calc(50% - .36rem), calc(100% - .9rem) calc(50% - .36rem), calc(100% - 1.18rem) calc(50% + .34rem), calc(100% - .9rem) calc(50% + .34rem), 0 0;
1590
+ background-size: 100% 100%, .28rem .28rem, .28rem .28rem, .28rem .28rem, .28rem .28rem, 100% 100%;
1591
+ }
1592
+
1593
+ .tactile-input::placeholder,
1594
+ .tactile-textarea::placeholder {
1595
+ color: var(--tactile-muted-ink);
1596
+ opacity: .72;
1597
+ }
1598
+
1599
+ /**
1600
+ * Matches the small fired-copper checks and radios while retaining the native
1601
+ * focus ring and full-label pointer target.
1602
+ */
1603
+ .tactile-check-control,
1604
+ .tactile-radio-control {
1605
+ width: 1.05rem;
1606
+ height: 1.05rem;
1607
+ background: var(--tactile-field-bg);
1608
+ border: 1px solid var(--tactile-keyline);
1609
+ box-shadow: var(--tactile-inset-shadow);
1610
+ }
1611
+
1612
+ .tactile-check input:checked + .tactile-check-control,
1613
+ .tactile-radio input:checked + .tactile-radio-control {
1614
+ background: var(--tactile-copper);
1615
+ border-color: rgb(var(--tactile-copper-rgb) / .96);
1616
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / .3), var(--tactile-focus-ring);
1617
+ }
1618
+
1619
+ .tactile-radio input:checked + .tactile-radio-control {
1620
+ background: var(--tactile-field-bg);
1621
+ }
1622
+
1623
+ .tactile-radio input:checked + .tactile-radio-control::after {
1624
+ width: .52rem;
1625
+ height: .52rem;
1626
+ background: var(--tactile-copper);
1627
+ }
1628
+
1629
+ .tactile-switch-track {
1630
+ width: 4.1rem;
1631
+ height: 1.75rem;
1632
+ background: var(--tactile-recessed-track);
1633
+ border: 1px solid var(--tactile-track-rim);
1634
+ border-radius: .2rem;
1635
+ box-shadow: var(--tactile-deep-inset-shadow);
1636
+ }
1637
+
1638
+ .tactile-switch-thumb {
1639
+ top: .14rem;
1640
+ left: .14rem;
1641
+ width: 1.42rem;
1642
+ height: 1.42rem;
1643
+ background: var(--tactile-thumb-bg);
1644
+ border: 1px solid var(--tactile-keyline);
1645
+ border-radius: .16rem;
1646
+ box-shadow: var(--tactile-button-shadow);
1647
+ }
1648
+
1649
+ .tactile-switch input:checked + .tactile-switch-track {
1650
+ background: linear-gradient(90deg, var(--tactile-recessed-track) 0 50%, var(--tactile-olive) 50% 100%);
1651
+ border-color: var(--tactile-keyline);
1652
+ }
1653
+
1654
+ .tactile-switch input:checked + .tactile-switch-track .tactile-switch-thumb {
1655
+ left: calc(100% - 1.42rem - .14rem);
1656
+ }
1657
+
1658
+ /**
1659
+ * Recreates the charcoal navigation plate with brass line work, sentence-case
1660
+ * labels, and the narrow fired-copper selection rail.
1661
+ */
1662
+ .tactile-nav {
1663
+ gap: .2rem;
1664
+ padding: .35rem;
1665
+ background: var(--tactile-sidebar-bg);
1666
+ border: 1px solid rgb(var(--tactile-keyline-rgb) / .72);
1667
+ border-radius: .28rem;
1668
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-sidebar-text-rgb) / .1), inset 0 -1px 0 rgb(0 0 0 / .52), 0 2px 5px rgb(0 0 0 / .18);
1669
+ }
1670
+
1671
+ .tactile-nav-link {
1672
+ min-height: 2.65rem;
1673
+ padding: .58rem .76rem;
1674
+ color: var(--tactile-sidebar-muted);
1675
+ border-radius: .18rem;
1676
+ font-family: var(--tactile-font-control);
1677
+ font-size: .84rem;
1678
+ font-weight: 500;
1679
+ letter-spacing: .01em;
1680
+ text-transform: none;
1681
+ }
1682
+
1683
+ .tactile-nav-link:hover {
1684
+ color: var(--tactile-sidebar-fg);
1685
+ background: rgb(var(--tactile-sidebar-text-rgb) / .055);
1686
+ border-color: rgb(var(--tactile-sidebar-text-rgb) / .14);
1687
+ }
1688
+
1689
+ .tactile-nav-link[aria-current="page"],
1690
+ .tactile-nav-link.is-active {
1691
+ color: var(--tactile-brass);
1692
+ background: rgb(var(--tactile-sidebar-text-rgb) / .06);
1693
+ border-color: rgb(var(--tactile-sidebar-text-rgb) / .18);
1694
+ box-shadow: inset .18rem 0 0 var(--tactile-copper), inset .08rem .08rem .18rem rgb(0 0 0 / .38);
1695
+ }
1696
+
1697
+ /**
1698
+ * Separates slider troughs from the paper-backed segmented progress gauge and
1699
+ * applies the olive fill used by readiness and completion indicators.
1700
+ */
1701
+ .tactile-progress {
1702
+ height: .68rem;
1703
+ padding: .08rem;
1704
+ background: var(--tactile-progress-track);
1705
+ border: 1px solid var(--tactile-keyline);
1706
+ border-radius: .14rem;
1707
+ box-shadow: var(--tactile-inset-shadow);
1708
+ }
1709
+
1710
+ .tactile-progress-bar {
1711
+ background: var(--tactile-progress-fill);
1712
+ border-radius: .06rem;
1713
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .26);
1714
+ }
1715
+
1716
+ .tactile-badge {
1717
+ min-height: 1.45rem;
1718
+ padding: .22rem .48rem;
1719
+ border: 1px solid var(--tactile-keyline);
1720
+ border-radius: .12rem;
1721
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .34);
1722
+ font-size: .68rem;
1723
+ font-weight: 700;
1724
+ letter-spacing: .045em;
1725
+ }
1726
+
1727
+ .tactile-alert {
1728
+ padding: .82rem .9rem;
1729
+ background: var(--tactile-card-bg);
1730
+ border: 1px solid var(--tactile-keyline);
1731
+ border-inline-start-width: .28rem;
1732
+ border-radius: .3rem;
1733
+ box-shadow: var(--tactile-panel-shadow);
1734
+ }
1735
+
1736
+ .tactile-alert-title {
1737
+ font-size: .72rem;
1738
+ font-weight: 700;
1739
+ letter-spacing: .045em;
1740
+ }
1741
+
1742
+ .tactile-table th,
1743
+ .tactile-table td {
1744
+ padding: .62rem .72rem;
1745
+ border-color: rgb(var(--tactile-keyline-rgb) / .52);
1746
+ }
1747
+
1748
+ .tactile-table th {
1749
+ color: var(--tactile-sidebar-fg);
1750
+ background: var(--tactile-sidebar-bg);
1751
+ font-family: var(--tactile-font-control);
1752
+ font-size: .7rem;
1753
+ font-weight: 700;
1754
+ letter-spacing: .055em;
1755
+ }
1756
+
1757
+ .tactile-table td {
1758
+ color: var(--tactile-ink);
1759
+ background: var(--tactile-field-bg);
1760
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .28);
1761
+ }
1762
+
1763
+ .tactile-tooltip,
1764
+ [data-ui="tactile"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) {
1765
+ background: var(--tactile-sidebar-bg);
1766
+ color: var(--tactile-sidebar-fg);
1767
+ border: 1px solid rgb(var(--tactile-keyline-rgb) / .72);
1768
+ border-radius: .2rem;
1769
+ box-shadow: 0 .28rem .6rem rgb(0 0 0 / .24);
1770
+ font-family: var(--tactile-font-control);
1771
+ font-size: .75rem;
1772
+ }
1773
+
1774
+ /**
1775
+ * Extends the same border, paper, and hardware treatment through the marketing
1776
+ * primitives and native framed content used by direct stylesheet consumers.
1777
+ */
1778
+ .tactile-card-service,
1779
+ .tactile-card-feature,
1780
+ .tactile-feature-strip,
1781
+ .tactile-callout-bar {
1782
+ padding: .9rem;
1783
+ background: var(--tactile-card-bg);
1784
+ border: 1px solid var(--tactile-keyline);
1785
+ border-radius: .38rem;
1786
+ box-shadow: var(--tactile-panel-shadow);
1787
+ }
1788
+
1789
+ .tactile-feature-item {
1790
+ padding: .72rem .82rem;
1791
+ background: var(--tactile-inset-bg);
1792
+ border-color: rgb(var(--tactile-keyline-rgb) / .54);
1793
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .3);
1794
+ }
1795
+
1796
+ .tactile-icon-medallion,
1797
+ .tactile-badge-seal {
1798
+ background: var(--tactile-sidebar-bg);
1799
+ color: var(--tactile-brass);
1800
+ border-color: rgb(var(--tactile-keyline-rgb) / .82);
1801
+ box-shadow: var(--tactile-button-shadow);
1802
+ }
1803
+
1804
+ /** Pairs the seal's small text with its dark material instead of the page's ink colors. */
1805
+ .tactile-badge-seal {
1806
+ color: var(--tactile-sidebar-fg);
1807
+ }
1808
+
1809
+ /** Native strong/small defaults must not repaint the two lines inside the trust seal. */
1810
+ .tactile-badge-seal > :where(strong, small) {
1811
+ color: inherit;
1812
+ }
1813
+
1814
+ .tactile-callout-bar {
1815
+ color: var(--tactile-sidebar-fg);
1816
+ background: var(--tactile-sidebar-bg);
1817
+ }
1818
+
1819
+ [data-ui="tactile"][data-mode] :where(fieldset, article, aside, details, dialog) {
1820
+ background-color: var(--tactile-paper);
1821
+ background-image: var(--tactile-card-bg);
1822
+ color: var(--tactile-ink);
1823
+ border: 1px solid var(--tactile-keyline);
1824
+ border-radius: .38rem;
1825
+ box-shadow: var(--tactile-panel-shadow);
1826
+ }
1827
+
1828
+ [data-ui="tactile"][data-mode] :where(legend) {
1829
+ padding: .26rem .5rem;
1830
+ background: var(--tactile-control-bg);
1831
+ color: var(--tactile-ink);
1832
+ border: 1px solid var(--tactile-keyline);
1833
+ border-radius: .16rem;
1834
+ box-shadow: var(--tactile-button-shadow);
1835
+ font-family: var(--tactile-font-control);
1836
+ font-size: .68rem;
1837
+ font-weight: 700;
1838
+ letter-spacing: .055em;
1839
+ }
1840
+
1841
+ [data-ui="tactile"][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])) {
1842
+ min-height: 2.75rem;
1843
+ padding: .55rem .9rem;
1844
+ background: var(--tactile-control-bg);
1845
+ color: var(--tactile-ink);
1846
+ border: 1px solid var(--tactile-keyline);
1847
+ border-radius: .24rem;
1848
+ box-shadow: var(--tactile-button-shadow);
1849
+ clip-path: none;
1850
+ font-family: var(--tactile-font-control);
1851
+ font-size: .84rem;
1852
+ font-weight: 600;
1853
+ }
1854
+
1855
+ [data-ui="tactile"][data-mode] :where(input:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]), textarea, select) {
1856
+ min-height: 2.75rem;
1857
+ background-color: var(--tactile-paper);
1858
+ background-image: var(--tactile-field-bg);
1859
+ color: var(--tactile-ink);
1860
+ border: 1px solid var(--tactile-keyline);
1861
+ border-radius: .24rem;
1862
+ box-shadow: var(--tactile-inset-shadow);
1863
+ font-family: var(--tactile-font-control);
1864
+ font-size: .84rem;
1865
+ font-weight: 500;
1866
+ }
1867
+
1868
+ /**
1869
+ * Gives unclassed selectors the same divided, double-arrow hardware end cap as
1870
+ * the prefixed selector so direct stylesheet consumers retain the reference cue.
1871
+ */
1872
+ [data-ui="tactile"][data-mode] :where(select) {
1873
+ appearance: none;
1874
+ padding-inline-end: 2.75rem;
1875
+ background-image: var(--tactile-select-endcap);
1876
+ background-repeat: no-repeat;
1877
+ background-position: 0 0, calc(100% - 1.18rem) calc(50% - .36rem), calc(100% - .9rem) calc(50% - .36rem), calc(100% - 1.18rem) calc(50% + .34rem), calc(100% - .9rem) calc(50% + .34rem), 0 0;
1878
+ background-size: 100% 100%, .28rem .28rem, .28rem .28rem, .28rem .28rem, .28rem .28rem, 100% 100%;
1879
+ }
1880
+
1881
+ [data-ui="tactile"][data-mode] :where(input[type="checkbox"], input[type="radio"]) {
1882
+ accent-color: var(--tactile-copper);
1883
+ }
1884
+
1885
+ [data-ui="tactile"][data-mode] :where(input[type="file"])::file-selector-button {
1886
+ background: var(--tactile-control-bg);
1887
+ color: var(--tactile-ink);
1888
+ border: 1px solid var(--tactile-keyline);
1889
+ border-radius: .2rem;
1890
+ box-shadow: var(--tactile-button-shadow);
1891
+ font-family: var(--tactile-font-control);
1892
+ font-weight: 600;
1893
+ }
1894
+
1895
+ /**
1896
+ * Reasserts state affordances after the late native-control material layer.
1897
+ * Keeping these selectors last prevents the tactile paper fill from masking
1898
+ * focus, validation, and read-only cues on prefixed form controls.
1899
+ */
1900
+ .tactile-input:focus-visible,
1901
+ .tactile-textarea:focus-visible,
1902
+ .tactile-select:focus-visible {
1903
+ border-color: var(--tactile-focus);
1904
+ box-shadow: var(--tactile-inset-shadow), var(--tactile-focus-ring);
1905
+ outline: 2px solid var(--tactile-focus);
1906
+ outline-offset: 2px;
1907
+ }
1908
+
1909
+ .tactile-input[aria-invalid="true"],
1910
+ .tactile-textarea[aria-invalid="true"],
1911
+ .tactile-select[aria-invalid="true"],
1912
+ [data-ui="tactile"][data-mode] :where(input[aria-invalid="true"], textarea[aria-invalid="true"], select[aria-invalid="true"]) {
1913
+ border-color: var(--tactile-danger);
1914
+ box-shadow: var(--tactile-inset-shadow), 0 0 0 2px rgb(var(--tactile-danger-rgb) / .24);
1915
+ }
1916
+
1917
+ .tactile-input[readonly],
1918
+ .tactile-textarea[readonly],
1919
+ [data-ui="tactile"][data-mode] :where(input[readonly]:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]), textarea[readonly]) {
1920
+ border-style: dashed;
1921
+ filter: saturate(.72);
1922
+ opacity: .78;
1923
+ }
1924
+ }
1925
+
1926
+ @layer ui-style-kit.tactile {
1927
+ /**
1928
+ * Reconstructs the retained workspace composition as reusable Tactile layout
1929
+ * elements. These selectors consume material variables exclusively so theme
1930
+ * schemes repaint the composition without changing its measured geometry.
1931
+ */
1932
+ .tactile-workspace-shell {
1933
+ overflow: hidden;
1934
+ background: var(--tactile-card-bg);
1935
+ color: var(--tactile-ink);
1936
+ border: 1px solid var(--tactile-keyline);
1937
+ border-radius: .38rem;
1938
+ box-shadow: var(--tactile-panel-shadow);
1939
+ }
1940
+
1941
+ .tactile-workspace-shell,
1942
+ .tactile-workspace-shell *,
1943
+ .tactile-workspace-shell *::before,
1944
+ .tactile-workspace-shell *::after {
1945
+ box-sizing: border-box;
1946
+ }
1947
+
1948
+ .tactile-workspace-shell > .tactile-workspace-sidebar {
1949
+ display: flex;
1950
+ flex-direction: column;
1951
+ min-width: 0;
1952
+ padding: 1.35rem 1rem 1rem;
1953
+ background: var(--tactile-sidebar-bg);
1954
+ color: var(--tactile-sidebar-fg);
1955
+ border: 0;
1956
+ border-inline-end: 1px solid rgb(var(--tactile-keyline-rgb) / .82);
1957
+ border-radius: 0;
1958
+ box-shadow: inset -1px 0 0 rgb(0 0 0 / .34), inset 0 1px 0 rgb(var(--tactile-sidebar-text-rgb) / .08);
1959
+ }
1960
+
1961
+ .tactile-workspace-brand {
1962
+ display: grid;
1963
+ align-items: center;
1964
+ gap: .7rem;
1965
+ color: var(--tactile-sidebar-fg);
1966
+ text-decoration: none;
1967
+ }
1968
+
1969
+ .tactile-workspace-brand-mark {
1970
+ display: grid;
1971
+ place-items: center;
1972
+ width: 2.3rem;
1973
+ height: 2.3rem;
1974
+ background: linear-gradient(180deg, rgb(var(--tactile-copper-rgb) / .92), var(--tactile-copper));
1975
+ color: var(--tactile-paper-highlight);
1976
+ border: 1px solid rgb(var(--tactile-brass-rgb) / .72);
1977
+ border-radius: .16rem;
1978
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / .25), 0 1px 2px rgb(0 0 0 / .42);
1979
+ font-family: var(--tactile-font-display);
1980
+ font-size: 1.25rem;
1981
+ font-weight: 700;
1982
+ }
1983
+
1984
+ .tactile-workspace-brand :where(strong, small) {
1985
+ display: block;
1986
+ }
1987
+
1988
+ .tactile-workspace-brand strong {
1989
+ color: var(--tactile-sidebar-fg);
1990
+ font-family: var(--tactile-font-display);
1991
+ font-size: 1.18rem;
1992
+ line-height: 1.05;
1993
+ }
1994
+
1995
+ .tactile-workspace-brand small {
1996
+ margin-top: .18rem;
1997
+ color: var(--tactile-sidebar-muted);
1998
+ font-family: var(--tactile-font-control);
1999
+ font-size: .64rem;
2000
+ font-weight: 700;
2001
+ letter-spacing: .12em;
2002
+ text-transform: uppercase;
2003
+ }
2004
+
2005
+ .tactile-workspace-menu {
2006
+ display: grid;
2007
+ gap: .3rem;
2008
+ margin-top: 2.4rem;
2009
+ }
2010
+
2011
+ .tactile-workspace-link {
2012
+ display: grid;
2013
+ align-items: center;
2014
+ gap: .68rem;
2015
+ min-height: 2.65rem;
2016
+ padding: .62rem .7rem;
2017
+ color: var(--tactile-sidebar-muted);
2018
+ border: 1px solid transparent;
2019
+ border-radius: .14rem;
2020
+ font-family: var(--tactile-font-control);
2021
+ font-size: .78rem;
2022
+ font-weight: 600;
2023
+ text-decoration: none;
2024
+ }
2025
+
2026
+ .tactile-workspace-link small {
2027
+ color: inherit;
2028
+ font-size: .6rem;
2029
+ letter-spacing: .08em;
2030
+ }
2031
+
2032
+ .tactile-workspace-link:hover {
2033
+ color: var(--tactile-sidebar-fg);
2034
+ background: rgb(var(--tactile-sidebar-text-rgb) / .055);
2035
+ border-color: rgb(var(--tactile-sidebar-text-rgb) / .16);
2036
+ }
2037
+
2038
+ .tactile-workspace-link.is-active,
2039
+ .tactile-workspace-link[aria-current="page"] {
2040
+ color: var(--tactile-brass);
2041
+ background: rgb(var(--tactile-sidebar-text-rgb) / .06);
2042
+ border-color: rgb(var(--tactile-sidebar-text-rgb) / .14);
2043
+ box-shadow: inset .2rem 0 0 var(--tactile-copper), inset .08rem .08rem .2rem rgb(0 0 0 / .4);
2044
+ }
2045
+
2046
+ .tactile-workspace-icon {
2047
+ display: inline-grid;
2048
+ place-items: center;
2049
+ width: 1.05rem;
2050
+ height: 1.05rem;
2051
+ }
2052
+
2053
+ .tactile-workspace-icon svg {
2054
+ display: block;
2055
+ width: 100%;
2056
+ height: 100%;
2057
+ stroke-width: 1.7;
2058
+ }
2059
+
2060
+ .tactile-workspace-sidebar-note {
2061
+ margin-top: auto;
2062
+ padding: .82rem;
2063
+ background: rgb(0 0 0 / .16);
2064
+ border: 1px solid rgb(var(--tactile-sidebar-text-rgb) / .13);
2065
+ border-radius: .18rem;
2066
+ box-shadow: inset .08rem .1rem .18rem rgb(0 0 0 / .34);
2067
+ }
2068
+
2069
+ .tactile-workspace-sidebar-note p {
2070
+ margin: .52rem 0 0;
2071
+ color: var(--tactile-sidebar-muted);
2072
+ font-size: .7rem;
2073
+ line-height: 1.4;
2074
+ }
2075
+
2076
+ .tactile-workspace-main {
2077
+ background: var(--tactile-card-bg);
2078
+ }
2079
+
2080
+ .tactile-workspace-header {
2081
+ display: flex;
2082
+ align-items: start;
2083
+ justify-content: space-between;
2084
+ gap: 1rem;
2085
+ padding: 1.5rem 1.6rem 1.3rem;
2086
+ border-bottom: 1px solid rgb(var(--tactile-keyline-rgb) / .55);
2087
+ box-shadow: 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .62);
2088
+ }
2089
+
2090
+ .tactile-workspace-header :where(p, h2) {
2091
+ margin: 0;
2092
+ }
2093
+
2094
+ .tactile-workspace-title {
2095
+ margin-top: .26rem;
2096
+ font-family: var(--tactile-font-display);
2097
+ font-size: clamp(2.15rem, 4vw, 2.8rem);
2098
+ font-weight: 700;
2099
+ line-height: 1.02;
2100
+ letter-spacing: -.035em;
2101
+ }
2102
+
2103
+ .tactile-workspace-header .tactile-copy {
2104
+ max-width: 40rem;
2105
+ margin-top: .55rem;
2106
+ font-size: .8rem;
2107
+ }
2108
+
2109
+ .tactile-workspace-body {
2110
+ display: grid;
2111
+ align-items: start;
2112
+ gap: 1rem;
2113
+ padding: 1.25rem 1.6rem 1.5rem;
2114
+ }
2115
+
2116
+ .tactile-workspace-settings {
2117
+ overflow: hidden;
2118
+ background: var(--tactile-card-bg);
2119
+ border: 1px solid var(--tactile-keyline);
2120
+ border-radius: .28rem;
2121
+ box-shadow: var(--tactile-panel-shadow);
2122
+ }
2123
+
2124
+ .tactile-workspace-row {
2125
+ display: grid;
2126
+ gap: 1.25rem;
2127
+ padding: 1.15rem 1.2rem;
2128
+ border-bottom: 1px solid rgb(var(--tactile-keyline-rgb) / .46);
2129
+ box-shadow: inset 0 1px 0 rgb(var(--tactile-paper-highlight-rgb) / .46);
2130
+ }
2131
+
2132
+ .tactile-workspace-row:last-child {
2133
+ border-bottom: 0;
2134
+ }
2135
+
2136
+ .tactile-workspace-row :where(h3, p) {
2137
+ margin: 0;
2138
+ }
2139
+
2140
+ .tactile-workspace-row h3 {
2141
+ font-family: var(--tactile-font-display);
2142
+ font-size: 1rem;
2143
+ line-height: 1.15;
2144
+ }
2145
+
2146
+ .tactile-workspace-row > div:first-child p {
2147
+ margin-top: .3rem;
2148
+ color: var(--tactile-muted-ink);
2149
+ font-size: .68rem;
2150
+ }
2151
+
2152
+ .tactile-workspace-fields,
2153
+ .tactile-workspace-switches {
2154
+ display: grid;
2155
+ gap: .8rem;
2156
+ }
2157
+
2158
+ .tactile-workspace-switches .tactile-switch {
2159
+ width: 100%;
2160
+ justify-content: flex-start;
2161
+ padding: .7rem .74rem;
2162
+ background: var(--tactile-inset-bg);
2163
+ border: 1px solid rgb(var(--tactile-keyline-rgb) / .52);
2164
+ border-radius: .2rem;
2165
+ box-shadow: var(--tactile-inset-shadow);
2166
+ }
2167
+
2168
+ .tactile-workspace-switches .tactile-switch > span:last-child {
2169
+ display: grid;
2170
+ gap: .08rem;
2171
+ }
2172
+
2173
+ .tactile-workspace-switches small,
2174
+ .tactile-workspace-security small {
2175
+ color: var(--tactile-muted-ink);
2176
+ font-size: .66rem;
2177
+ }
2178
+
2179
+ .tactile-workspace-security {
2180
+ display: flex;
2181
+ align-items: center;
2182
+ justify-content: space-between;
2183
+ gap: .8rem;
2184
+ }
2185
+
2186
+ .tactile-workspace-security > div {
2187
+ display: grid;
2188
+ gap: .35rem;
2189
+ }
2190
+
2191
+ .tactile-workspace-readiness {
2192
+ padding: 1rem;
2193
+ background: var(--tactile-card-bg);
2194
+ color: var(--tactile-ink);
2195
+ border: 1px solid var(--tactile-keyline);
2196
+ border-radius: .28rem;
2197
+ box-shadow: var(--tactile-panel-shadow);
2198
+ }
2199
+
2200
+ .tactile-workspace-gauge {
2201
+ position: relative;
2202
+ display: grid;
2203
+ place-items: center;
2204
+ width: min(100%, 11rem);
2205
+ aspect-ratio: 1;
2206
+ margin: 1rem auto .55rem;
2207
+ overflow: hidden;
2208
+ background: radial-gradient(circle, var(--tactile-paper-highlight) 0 52%, transparent 52.5%), repeating-conic-gradient(from 218deg, var(--tactile-keyline) 0 1deg, transparent 1deg 11deg), var(--tactile-paper-deep);
2209
+ border: .42rem solid var(--tactile-paper);
2210
+ border-radius: 999px;
2211
+ box-shadow: inset 0 0 0 1px var(--tactile-keyline), inset .18rem .2rem .42rem rgb(var(--tactile-material-shadow-rgb) / .18), 0 1px 2px rgb(var(--tactile-material-shadow-rgb) / .22);
2212
+ }
2213
+
2214
+ .tactile-workspace-gauge::after {
2215
+ content: "";
2216
+ position: absolute;
2217
+ left: 50%;
2218
+ bottom: 48%;
2219
+ width: .16rem;
2220
+ height: 35%;
2221
+ background: var(--tactile-copper);
2222
+ border-radius: .08rem;
2223
+ box-shadow: 0 0 0 1px rgb(var(--tactile-material-shadow-rgb) / .26);
2224
+ transform: translateX(-50%) rotate(44deg);
2225
+ transform-origin: 50% 100%;
2226
+ }
2227
+
2228
+ .tactile-workspace-gauge > span {
2229
+ position: relative;
2230
+ z-index: 1;
2231
+ display: grid;
2232
+ place-items: center;
2233
+ width: 4.8rem;
2234
+ height: 4.8rem;
2235
+ background: var(--tactile-control-bg);
2236
+ border: 1px solid var(--tactile-keyline);
2237
+ border-radius: 999px;
2238
+ box-shadow: var(--tactile-button-shadow);
2239
+ }
2240
+
2241
+ .tactile-workspace-gauge :where(strong, small) {
2242
+ display: block;
2243
+ text-align: center;
2244
+ }
2245
+
2246
+ .tactile-workspace-gauge strong {
2247
+ align-self: end;
2248
+ font-family: var(--tactile-font-display);
2249
+ font-size: 1.65rem;
2250
+ line-height: 1;
2251
+ }
2252
+
2253
+ .tactile-workspace-gauge small {
2254
+ align-self: start;
2255
+ color: var(--tactile-muted-ink);
2256
+ font-family: var(--tactile-font-control);
2257
+ font-size: .6rem;
2258
+ font-weight: 700;
2259
+ letter-spacing: .08em;
2260
+ text-transform: uppercase;
2261
+ }
2262
+
2263
+ .tactile-workspace-gauge-key {
2264
+ display: flex;
2265
+ justify-content: space-between;
2266
+ color: var(--tactile-muted-ink);
2267
+ font-family: var(--tactile-font-control);
2268
+ font-size: .6rem;
2269
+ font-weight: 700;
2270
+ letter-spacing: .06em;
2271
+ text-transform: uppercase;
2272
+ }
2273
+
2274
+ .tactile-workspace-readiness .tactile-alert {
2275
+ margin-top: 1rem;
2276
+ }
2277
+
2278
+ .tactile-workspace-shelf {
2279
+ position: sticky;
2280
+ bottom: 0;
2281
+ z-index: 2;
2282
+ display: grid;
2283
+ align-items: center;
2284
+ gap: 1.25rem;
2285
+ padding: .9rem 1.6rem;
2286
+ background: var(--tactile-control-bg);
2287
+ border-top: 1px solid var(--tactile-keyline);
2288
+ box-shadow: inset 0 1px 0 var(--tactile-bevel-highlight), 0 -.2rem .55rem rgb(var(--tactile-material-shadow-rgb) / .12);
2289
+ }
2290
+
2291
+ .tactile-workspace-progress {
2292
+ display: grid;
2293
+ align-items: center;
2294
+ gap: .8rem;
2295
+ }
2296
+
2297
+ .tactile-workspace-progress > span {
2298
+ display: grid;
2299
+ gap: .08rem;
2300
+ }
2301
+
2302
+ .tactile-workspace-progress small {
2303
+ color: var(--tactile-muted-ink);
2304
+ font-size: .65rem;
2305
+ }
2306
+
2307
+ .tactile-workspace-progress .tactile-progress {
2308
+ width: 100%;
2309
+ }
2310
+
2311
+ @media (max-width: 52rem) {
2312
+ .tactile-workspace-shell > .tactile-workspace-sidebar {
2313
+ border-inline-end: 0;
2314
+ border-bottom: 1px solid rgb(var(--tactile-keyline-rgb) / .82);
2315
+ }
2316
+
2317
+ .tactile-workspace-menu {
2318
+ margin-top: 1rem;
2319
+ overflow-x: auto;
2320
+ }
2321
+
2322
+ .tactile-workspace-sidebar-note {
2323
+ display: none;
2324
+ }
2325
+
2326
+ }
2327
+
2328
+ @media (max-width: 38rem) {
2329
+ .tactile-workspace-header,
2330
+ .tactile-workspace-security {
2331
+ align-items: stretch;
2332
+ flex-direction: column;
2333
+ }
2334
+
2335
+ .tactile-workspace-header,
2336
+ .tactile-workspace-body,
2337
+ .tactile-workspace-shelf {
2338
+ padding-inline: 1rem;
2339
+ }
2340
+
2341
+ .tactile-workspace-row { gap: .8rem; }
2342
+
2343
+ .tactile-workspace-shelf .tactile-cluster,
2344
+ .tactile-workspace-shelf .tactile-button {
2345
+ width: 100%;
2346
+ }
2347
+ }
2348
+ /** Warning actions inherit preset geometry and use the paired semantic warning colors. */
2349
+ [data-ui="tactile"][data-mode] .tactile-button.tactile-button-warning {
2350
+ background: var(--tactile-warning);
2351
+ color: var(--tactile-on-warning);
2352
+ border-color: var(--tactile-warning);
2353
+ text-shadow: none;
2354
+ }
2355
+
2356
+ }