hmb HF Staff commited on
Commit
deb7f0f
·
verified ·
1 Parent(s): df17621

Upload folder using huggingface_hub

Browse files
Files changed (3) hide show
  1. __pycache__/windows95.cpython-311.pyc +0 -0
  2. run.py +2 -2
  3. windows95.py +1189 -0
__pycache__/windows95.cpython-311.pyc ADDED
Binary file (37.5 kB). View file
 
run.py CHANGED
@@ -1,4 +1,5 @@
1
  import gradio as gr
 
2
 
3
  # Windows 95 Theme Demo
4
  # This demo showcases the nostalgic Windows 95-inspired theme
@@ -138,5 +139,4 @@ with gr.Blocks() as demo:
138
 
139
 
140
  if __name__ == "__main__":
141
- # Custom CSS is now baked into the theme - no need to pass css separately!
142
- demo.launch(theme=gr.themes.Windows95())
 
1
  import gradio as gr
2
+ from windows95 import Windows95, WINDOWS_95_CSS
3
 
4
  # Windows 95 Theme Demo
5
  # This demo showcases the nostalgic Windows 95-inspired theme
 
139
 
140
 
141
  if __name__ == "__main__":
142
+ demo.launch(theme=Windows95(), css=WINDOWS_95_CSS)
 
windows95.py ADDED
@@ -0,0 +1,1189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Iterable
4
+
5
+ from gradio.themes.base import Base
6
+ from gradio.themes.utils import colors, fonts, sizes
7
+
8
+ # Custom CSS to style the Gradio footer as a Windows 95 taskbar
9
+ WINDOWS_95_CSS = """
10
+ /* Remove transforms from parent containers that break fixed positioning */
11
+ .gradio-container,
12
+ .gradio-container > *,
13
+ .main,
14
+ .wrap,
15
+ .app,
16
+ gradio-app,
17
+ gradio-app > *,
18
+ body > * {
19
+ transform: none !important;
20
+ filter: none !important;
21
+ perspective: none !important;
22
+ contain: none !important;
23
+ will-change: auto !important;
24
+ }
25
+
26
+ /* Windows 95 Taskbar Footer */
27
+ footer {
28
+ position: fixed !important;
29
+ bottom: 0 !important;
30
+ left: 0 !important;
31
+ right: 0 !important;
32
+ top: auto !important;
33
+ margin: 0 !important;
34
+ padding: 4px 8px !important;
35
+ background: #C0C0C0 !important;
36
+ border-top: 2px solid #FFFFFF !important;
37
+ box-shadow:
38
+ inset 0 1px 0 0 #DFDFDF,
39
+ inset 0 -1px 0 0 #808080,
40
+ 0 -1px 0 0 #404040 !important;
41
+ justify-content: flex-start !important;
42
+ gap: 8px !important;
43
+ z-index: 2147483647 !important;
44
+ font-family: "MS Sans Serif", Tahoma, Arial, sans-serif !important;
45
+ height: auto !important;
46
+ min-height: 32px !important;
47
+ transform: none !important;
48
+ width: 100vw !important;
49
+ max-width: 100vw !important;
50
+ }
51
+
52
+ /* Style footer buttons like Windows 95 taskbar buttons */
53
+ footer button,
54
+ footer a {
55
+ background: #C0C0C0 !important;
56
+ color: #000000 !important;
57
+ border: none !important;
58
+ padding: 4px 12px !important;
59
+ margin: 0 2px !important;
60
+ box-shadow:
61
+ inset -1px -1px 0px 0px #808080,
62
+ inset 1px 1px 0px 0px #FFFFFF,
63
+ inset -2px -2px 0px 0px #404040,
64
+ inset 2px 2px 0px 0px #DFDFDF !important;
65
+ font-family: "MS Sans Serif", Tahoma, Arial, sans-serif !important;
66
+ font-size: 12px !important;
67
+ }
68
+
69
+ footer button:hover,
70
+ footer a:hover {
71
+ color: #000000 !important;
72
+ }
73
+
74
+ footer button:active,
75
+ footer a:active {
76
+ box-shadow:
77
+ inset 1px 1px 0px 0px #808080,
78
+ inset -1px -1px 0px 0px #DFDFDF !important;
79
+ }
80
+
81
+ /* Hide the dividers */
82
+ footer .divider {
83
+ display: none !important;
84
+ }
85
+
86
+ /* Style the images/icons */
87
+ footer img {
88
+ filter: none !important;
89
+ }
90
+
91
+ /* Add padding to main content to account for fixed footer */
92
+ .gradio-container {
93
+ padding-bottom: 50px !important;
94
+ }
95
+
96
+ /* Ensure footer stays fixed even in flex/grid containers */
97
+ .main,
98
+ .wrap,
99
+ .app {
100
+ padding-bottom: 50px !important;
101
+ }
102
+
103
+ /* Start button style for the first button (if desired) */
104
+ footer button:first-of-type,
105
+ footer a:first-of-type {
106
+ font-weight: bold !important;
107
+ }
108
+
109
+ /* System tray style for the last elements - sunken appearance */
110
+ footer button:last-of-type,
111
+ footer .settings {
112
+ margin-left: auto !important;
113
+ box-shadow:
114
+ inset 1px 1px 0px 0px #808080,
115
+ inset -1px -1px 0px 0px #FFFFFF,
116
+ inset 2px 2px 0px 0px #404040,
117
+ inset -2px -2px 0px 0px #DFDFDF !important;
118
+ }
119
+
120
+ /* API docs panel styling - gray background like Windows 95 */
121
+ .api-docs-wrap,
122
+ #api-recorder-container {
123
+ background: #C0C0C0 !important;
124
+ }
125
+
126
+ /* API name badges - navy background needs white text */
127
+ .post,
128
+ h3 .post,
129
+ span.post {
130
+ background: #000080 !important;
131
+ color: #FFFFFF !important;
132
+ border-color: #000080 !important;
133
+ }
134
+
135
+ /* Parameter type badges in API docs - the highlight class */
136
+ .highlight,
137
+ span.highlight,
138
+ .code.highlight {
139
+ background: #000080 !important;
140
+ color: #FFFFFF !important;
141
+ padding: 2px 6px !important;
142
+ }
143
+
144
+ /* Parameter type badges in API docs */
145
+ .type,
146
+ .param-type,
147
+ .parameter-type {
148
+ color: #FFFFFF !important;
149
+ background: #000080 !important;
150
+ padding: 2px 6px !important;
151
+ }
152
+
153
+ /* Required/Optional badges */
154
+ span[class*="required"],
155
+ span[class*="optional"],
156
+ .required,
157
+ .optional {
158
+ color: #FFFFFF !important;
159
+ }
160
+
161
+ /* ===== Windows 95 Copy Button ===== */
162
+ .copy-button,
163
+ button[class*="copy"],
164
+ [class*="copy-button"] {
165
+ background: #C0C0C0 !important;
166
+ color: #000000 !important;
167
+ border: none !important;
168
+ border-radius: 0 !important;
169
+ padding: 4px 12px !important;
170
+ font-family: "MS Sans Serif", Tahoma, Arial, sans-serif !important;
171
+ font-size: 12px !important;
172
+ box-shadow:
173
+ inset -1px -1px 0px 0px #808080,
174
+ inset 1px 1px 0px 0px #FFFFFF,
175
+ inset -2px -2px 0px 0px #404040,
176
+ inset 2px 2px 0px 0px #DFDFDF !important;
177
+ }
178
+
179
+ .copy-button:hover,
180
+ button[class*="copy"]:hover,
181
+ [class*="copy-button"]:hover {
182
+ background: #C0C0C0 !important;
183
+ }
184
+
185
+ .copy-button:active,
186
+ button[class*="copy"]:active,
187
+ [class*="copy-button"]:active {
188
+ box-shadow:
189
+ inset 1px 1px 0px 0px #808080,
190
+ inset -1px -1px 0px 0px #DFDFDF !important;
191
+ }
192
+
193
+ /* Copy button icons */
194
+ .copy-button svg,
195
+ button[class*="copy"] svg {
196
+ color: #000000 !important;
197
+ fill: #000000 !important;
198
+ }
199
+
200
+ /* The "Copy Page" dropdown button - be specific to avoid breaking footer */
201
+ .api-docs-wrap [class*="dropdown"] button,
202
+ .api-docs-wrap .dropdown-toggle,
203
+ .api-docs-wrap button[aria-haspopup="true"] {
204
+ background: #C0C0C0 !important;
205
+ color: #000000 !important;
206
+ border: none !important;
207
+ border-radius: 0 !important;
208
+ box-shadow:
209
+ inset -1px -1px 0px 0px #808080,
210
+ inset 1px 1px 0px 0px #FFFFFF,
211
+ inset -2px -2px 0px 0px #404040,
212
+ inset 2px 2px 0px 0px #DFDFDF !important;
213
+ }
214
+
215
+ /* ===== Windows 95 Dropdown Menus ===== */
216
+ [role="menu"],
217
+ [role="listbox"],
218
+ .dropdown-menu,
219
+ div[class*="dropdown"] > div,
220
+ ul[class*="menu"],
221
+ div[class*="menu"]:not(.overflow-menu) {
222
+ background: #C0C0C0 !important;
223
+ border: none !important;
224
+ border-radius: 0 !important;
225
+ padding: 2px !important;
226
+ box-shadow:
227
+ inset -1px -1px 0px 0px #808080,
228
+ inset 1px 1px 0px 0px #FFFFFF,
229
+ inset -2px -2px 0px 0px #404040,
230
+ inset 2px 2px 0px 0px #DFDFDF,
231
+ 4px 4px 0px 0px rgba(0,0,0,0.3) !important;
232
+ }
233
+
234
+ /* Dropdown menu items */
235
+ [role="menu"] button,
236
+ [role="menu"] a,
237
+ [role="menuitem"],
238
+ .dropdown-menu button,
239
+ .dropdown-menu a,
240
+ div[class*="dropdown"] button,
241
+ div[class*="dropdown"] a {
242
+ background: #C0C0C0 !important;
243
+ color: #000000 !important;
244
+ border: none !important;
245
+ border-radius: 0 !important;
246
+ padding: 4px 24px 4px 8px !important;
247
+ margin: 0 !important;
248
+ box-shadow: none !important;
249
+ text-align: left !important;
250
+ display: block !important;
251
+ width: 100% !important;
252
+ }
253
+
254
+ [role="menu"] button:hover,
255
+ [role="menu"] a:hover,
256
+ [role="menuitem"]:hover,
257
+ .dropdown-menu button:hover,
258
+ .dropdown-menu a:hover,
259
+ div[class*="dropdown"] button:hover,
260
+ div[class*="dropdown"] a:hover {
261
+ background: #000080 !important;
262
+ color: #FFFFFF !important;
263
+ }
264
+
265
+ /* Menu item descriptions/subtitles */
266
+ [role="menu"] span,
267
+ [role="menu"] p,
268
+ .dropdown-menu span,
269
+ .dropdown-menu p {
270
+ color: inherit !important;
271
+ }
272
+
273
+ /* Menu icons */
274
+ [role="menu"] svg,
275
+ .dropdown-menu svg {
276
+ color: inherit !important;
277
+ fill: currentColor !important;
278
+ }
279
+
280
+ /* Any element using color-accent-soft as background needs white text */
281
+ [style*="color-accent-soft"],
282
+ [style*="accent"] {
283
+ color: #FFFFFF !important;
284
+ }
285
+
286
+ /* Code blocks - keep readable with white background */
287
+ pre {
288
+ background: #FFFFFF !important;
289
+ color: #000000 !important;
290
+ box-shadow: inset 1px 1px 0px 0px #808080,
291
+ inset -1px -1px 0px 0px #FFFFFF,
292
+ inset 2px 2px 0px 0px #404040,
293
+ inset -2px -2px 0px 0px #DFDFDF !important;
294
+ }
295
+
296
+ pre code,
297
+ code {
298
+ background: transparent !important;
299
+ color: #000000 !important;
300
+ }
301
+
302
+ /* API name in code snippets - keep the accent color visible */
303
+ pre .api-name,
304
+ code .api-name {
305
+ color: #000080 !important;
306
+ }
307
+
308
+ /* Highlighted text in code - navy background needs white text */
309
+ pre .highlight,
310
+ pre span.highlight,
311
+ code .highlight,
312
+ code span.highlight {
313
+ background: #000080 !important;
314
+ color: #FFFFFF !important;
315
+ }
316
+
317
+ /* String literals in code */
318
+ pre .token.string,
319
+ .token.string {
320
+ color: #008000 !important;
321
+ }
322
+
323
+ /* Syntax highlighting keywords with navy background need white text */
324
+ pre span[style*="background"],
325
+ code span[style*="background"],
326
+ pre .keyword,
327
+ pre .builtin,
328
+ pre .function-name,
329
+ code .keyword,
330
+ code .builtin {
331
+ color: #FFFFFF !important;
332
+ }
333
+
334
+ /* ===== Windows 95 Style Tabs ===== */
335
+ /* Remove gap between tabs and content */
336
+ .tabs {
337
+ gap: 0 !important;
338
+ }
339
+
340
+ /* Tab container - remove the modern underline */
341
+ .tab-container::after {
342
+ display: none !important;
343
+ }
344
+
345
+ .tab-wrapper {
346
+ padding-bottom: 0 !important;
347
+ margin-bottom: -2px !important;
348
+ border-bottom: none !important;
349
+ background: transparent !important;
350
+ z-index: 1 !important;
351
+ position: relative !important;
352
+ }
353
+
354
+ /* Individual tab buttons - raised 3D folder tab style */
355
+ .tab-container button,
356
+ .tabs button[role="tab"] {
357
+ background: #C0C0C0 !important;
358
+ color: #000000 !important;
359
+ border: none !important;
360
+ border-radius: 0 !important;
361
+ padding: 4px 16px !important;
362
+ margin: 0 !important;
363
+ margin-right: -1px !important;
364
+ position: relative !important;
365
+ bottom: -2px !important;
366
+ font-weight: 400 !important;
367
+ /* 3D raised effect for inactive tabs */
368
+ box-shadow:
369
+ inset 1px 1px 0px 0px #FFFFFF,
370
+ inset -1px 0px 0px 0px #808080,
371
+ inset 2px 2px 0px 0px #DFDFDF,
372
+ inset -2px 0px 0px 0px #404040,
373
+ 0px -1px 0px 0px #FFFFFF !important;
374
+ /* Clip the bottom to show connection */
375
+ border-bottom: 2px solid #C0C0C0 !important;
376
+ }
377
+
378
+ /* Inactive tabs - slightly darker/recessed look */
379
+ .tab-container button:not(.selected),
380
+ .tabs button[role="tab"]:not(.selected) {
381
+ background: #C0C0C0 !important;
382
+ border-bottom: 2px solid #808080 !important;
383
+ margin-bottom: 0 !important;
384
+ }
385
+
386
+ /* Hover state for non-selected tabs */
387
+ .tab-container button:hover:not(.selected),
388
+ .tabs button[role="tab"]:hover:not(.selected) {
389
+ background: #C0C0C0 !important;
390
+ }
391
+
392
+ /* Selected tab - connected to content below */
393
+ .tab-container button.selected,
394
+ .tabs button[role="tab"].selected,
395
+ .tabs button[role="tab"][aria-selected="true"] {
396
+ background: #C0C0C0 !important;
397
+ color: #000000 !important;
398
+ border-bottom: 2px solid #C0C0C0 !important;
399
+ z-index: 2 !important;
400
+ /* Full raised 3D effect */
401
+ box-shadow:
402
+ inset 1px 1px 0px 0px #FFFFFF,
403
+ inset -1px 0px 0px 0px #808080,
404
+ inset 2px 2px 0px 0px #DFDFDF,
405
+ inset -2px 0px 0px 0px #404040 !important;
406
+ }
407
+
408
+ /* Remove the modern accent underline from selected tab */
409
+ .tab-container button.selected::after,
410
+ .tabs button[role="tab"].selected::after,
411
+ .tabs button[role="tab"][aria-selected="true"]::after {
412
+ display: none !important;
413
+ }
414
+
415
+ /* Tab content panel */
416
+ .tabs > :not(.tab-wrapper):not(style) {
417
+ background: #C0C0C0 !important;
418
+ border: none !important;
419
+ border-top: 2px solid #808080 !important;
420
+ box-shadow:
421
+ inset -1px -1px 0px 0px #808080,
422
+ inset 1px 0px 0px 0px #FFFFFF,
423
+ inset 0px 1px 0px 0px #FFFFFF,
424
+ -2px -2px 0px 0px #404040,
425
+ 2px 2px 0px 0px #DFDFDF !important;
426
+ padding: 8px !important;
427
+ margin-top: 0 !important;
428
+ }
429
+
430
+ /* Overflow menu button */
431
+ .overflow-menu > button {
432
+ background: #C0C0C0 !important;
433
+ border: none !important;
434
+ border-radius: 0 !important;
435
+ box-shadow:
436
+ inset -1px -1px 0px 0px #808080,
437
+ inset 1px 1px 0px 0px #FFFFFF,
438
+ inset -2px -2px 0px 0px #404040,
439
+ inset 2px 2px 0px 0px #DFDFDF !important;
440
+ }
441
+
442
+ /* Overflow dropdown */
443
+ .overflow-dropdown {
444
+ background: #C0C0C0 !important;
445
+ border: none !important;
446
+ border-radius: 0 !important;
447
+ box-shadow:
448
+ inset -1px -1px 0px 0px #808080,
449
+ inset 1px 1px 0px 0px #FFFFFF,
450
+ inset -2px -2px 0px 0px #404040,
451
+ inset 2px 2px 0px 0px #DFDFDF,
452
+ 2px 2px 4px rgba(0,0,0,0.3) !important;
453
+ }
454
+
455
+ .overflow-dropdown button {
456
+ background: #C0C0C0 !important;
457
+ color: #000000 !important;
458
+ }
459
+
460
+ .overflow-dropdown button:hover {
461
+ background: #000080 !important;
462
+ color: #FFFFFF !important;
463
+ }
464
+
465
+ .overflow-dropdown button.selected {
466
+ background: #000080 !important;
467
+ color: #FFFFFF !important;
468
+ }
469
+
470
+ /* ===== Windows 95 Scrollbars ===== */
471
+ * {
472
+ scrollbar-width: auto;
473
+ scrollbar-color: #C0C0C0 #DFDFDF;
474
+ }
475
+
476
+ *::-webkit-scrollbar {
477
+ width: 16px !important;
478
+ height: 16px !important;
479
+ }
480
+
481
+ *::-webkit-scrollbar-track {
482
+ background: #DFDFDF !important;
483
+ background-image: url("data:image/svg+xml,%3Csvg width='2' height='2' viewBox='0 0 2 2' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h1v1H0zM1 1h1v1H1z' fill='%23C0C0C0'/%3E%3C/svg%3E") !important;
484
+ background-size: 2px 2px !important;
485
+ }
486
+
487
+ *::-webkit-scrollbar-thumb {
488
+ background: #C0C0C0 !important;
489
+ border: none !important;
490
+ box-shadow:
491
+ inset -1px -1px 0px 0px #808080,
492
+ inset 1px 1px 0px 0px #FFFFFF,
493
+ inset -2px -2px 0px 0px #404040,
494
+ inset 2px 2px 0px 0px #DFDFDF !important;
495
+ }
496
+
497
+ *::-webkit-scrollbar-button {
498
+ background: #C0C0C0 !important;
499
+ border: none !important;
500
+ box-shadow:
501
+ inset -1px -1px 0px 0px #808080,
502
+ inset 1px 1px 0px 0px #FFFFFF,
503
+ inset -2px -2px 0px 0px #404040,
504
+ inset 2px 2px 0px 0px #DFDFDF !important;
505
+ display: block !important;
506
+ height: 16px !important;
507
+ width: 16px !important;
508
+ }
509
+
510
+ /* ===== Windows 95 Tooltips ===== */
511
+ [data-tooltip],
512
+ [title],
513
+ .tooltip,
514
+ [role="tooltip"] {
515
+ --tooltip-bg: #FFFFE1 !important;
516
+ --tooltip-color: #000000 !important;
517
+ }
518
+
519
+ /* ===== Windows 95 Selection ===== */
520
+ ::selection {
521
+ background: #000080 !important;
522
+ color: #FFFFFF !important;
523
+ }
524
+
525
+ ::-moz-selection {
526
+ background: #000080 !important;
527
+ color: #FFFFFF !important;
528
+ }
529
+
530
+ /* ===== Windows 95 Focus Ring ===== */
531
+ *:focus {
532
+ outline: 1px dotted #000000 !important;
533
+ outline-offset: -4px !important;
534
+ }
535
+
536
+ button:focus,
537
+ input:focus,
538
+ textarea:focus,
539
+ select:focus {
540
+ outline: 1px dotted #000000 !important;
541
+ outline-offset: 2px !important;
542
+ }
543
+
544
+ /* ===== Windows 95 Disabled State ===== */
545
+ button:disabled,
546
+ input:disabled,
547
+ textarea:disabled,
548
+ select:disabled,
549
+ [disabled] {
550
+ color: #808080 !important;
551
+ text-shadow: 1px 1px 0px #FFFFFF !important;
552
+ cursor: not-allowed !important;
553
+ }
554
+
555
+ /* ===== Windows 95 Progress Bar ===== */
556
+ progress,
557
+ .progress-bar,
558
+ [role="progressbar"] {
559
+ background: #C0C0C0 !important;
560
+ border: none !important;
561
+ box-shadow:
562
+ inset 1px 1px 0px 0px #808080,
563
+ inset -1px -1px 0px 0px #FFFFFF,
564
+ inset 2px 2px 0px 0px #404040,
565
+ inset -2px -2px 0px 0px #DFDFDF !important;
566
+ height: 20px !important;
567
+ border-radius: 0 !important;
568
+ }
569
+
570
+ progress::-webkit-progress-bar {
571
+ background: #C0C0C0 !important;
572
+ border-radius: 0 !important;
573
+ }
574
+
575
+ progress::-webkit-progress-value {
576
+ background: repeating-linear-gradient(
577
+ 90deg,
578
+ #000080 0px,
579
+ #000080 8px,
580
+ #C0C0C0 8px,
581
+ #C0C0C0 10px
582
+ ) !important;
583
+ border-radius: 0 !important;
584
+ }
585
+
586
+ progress::-moz-progress-bar {
587
+ background: repeating-linear-gradient(
588
+ 90deg,
589
+ #000080 0px,
590
+ #000080 8px,
591
+ #C0C0C0 8px,
592
+ #C0C0C0 10px
593
+ ) !important;
594
+ border-radius: 0 !important;
595
+ }
596
+
597
+ /* ===== Windows 95 Accordion/Group Box ===== */
598
+ .accordion,
599
+ details,
600
+ fieldset,
601
+ .group {
602
+ border: none !important;
603
+ box-shadow:
604
+ inset 1px 1px 0px 0px #FFFFFF,
605
+ inset -1px -1px 0px 0px #808080 !important;
606
+ background: #C0C0C0 !important;
607
+ padding: 8px !important;
608
+ margin: 4px 0 !important;
609
+ }
610
+
611
+ /* ===== Windows 95 Dropdown/Select ===== */
612
+ select,
613
+ .dropdown,
614
+ [role="listbox"] {
615
+ background: #FFFFFF !important;
616
+ border: none !important;
617
+ box-shadow:
618
+ inset 1px 1px 0px 0px #808080,
619
+ inset -1px -1px 0px 0px #FFFFFF,
620
+ inset 2px 2px 0px 0px #404040,
621
+ inset -2px -2px 0px 0px #DFDFDF !important;
622
+ border-radius: 0 !important;
623
+ padding: 2px 4px !important;
624
+ }
625
+
626
+ /* ===== Windows 95 Slider/Range ===== */
627
+ input[type="range"] {
628
+ -webkit-appearance: none !important;
629
+ background: transparent !important;
630
+ height: 24px !important;
631
+ }
632
+
633
+ input[type="range"]::-webkit-slider-track {
634
+ background: #C0C0C0 !important;
635
+ height: 4px !important;
636
+ box-shadow:
637
+ inset 1px 1px 0px 0px #808080,
638
+ inset -1px -1px 0px 0px #FFFFFF !important;
639
+ }
640
+
641
+ input[type="range"]::-webkit-slider-thumb {
642
+ -webkit-appearance: none !important;
643
+ width: 12px !important;
644
+ height: 20px !important;
645
+ background: #C0C0C0 !important;
646
+ border: none !important;
647
+ box-shadow:
648
+ inset -1px -1px 0px 0px #808080,
649
+ inset 1px 1px 0px 0px #FFFFFF,
650
+ inset -2px -2px 0px 0px #404040,
651
+ inset 2px 2px 0px 0px #DFDFDF !important;
652
+ cursor: pointer !important;
653
+ margin-top: -8px !important;
654
+ }
655
+
656
+ /* ===== Windows 95 Labels with Icons ===== */
657
+ .label-wrap label::before,
658
+ .block-label span::before {
659
+ /* Could add a small icon here */
660
+ }
661
+
662
+ /* ===== Windows 95 Image/Media containers ===== */
663
+ .image-container,
664
+ .video-container,
665
+ .gallery {
666
+ box-shadow:
667
+ inset 1px 1px 0px 0px #808080,
668
+ inset -1px -1px 0px 0px #FFFFFF,
669
+ inset 2px 2px 0px 0px #404040,
670
+ inset -2px -2px 0px 0px #DFDFDF !important;
671
+ }
672
+
673
+ /* Exclude small icons from bezel effect */
674
+ footer img,
675
+ button img,
676
+ a img,
677
+ svg {
678
+ box-shadow: none !important;
679
+ }
680
+
681
+ /* ===== Windows 95 File Upload ===== */
682
+ .upload-container,
683
+ .file-upload,
684
+ [type="file"] {
685
+ background: #C0C0C0 !important;
686
+ border: 2px dashed #808080 !important;
687
+ border-radius: 0 !important;
688
+ }
689
+
690
+ /* ===== Windows 95 Loading/Hourglass Cursor ===== */
691
+ .pending,
692
+ .loading,
693
+ [aria-busy="true"] {
694
+ cursor: wait !important;
695
+ }
696
+
697
+ /* ===== Windows 95 Markdown/Prose ===== */
698
+ .prose h1,
699
+ .prose h2,
700
+ .prose h3,
701
+ .markdown h1,
702
+ .markdown h2,
703
+ .markdown h3,
704
+ h1, h2, h3 {
705
+ color: #000000 !important;
706
+ font-weight: bold !important;
707
+ border-bottom: none !important;
708
+ }
709
+
710
+ /* ===== Windows 95 Horizontal Rule ===== */
711
+ hr {
712
+ border: none !important;
713
+ height: 2px !important;
714
+ background: linear-gradient(to bottom, #808080 0%, #808080 50%, #FFFFFF 50%, #FFFFFF 100%) !important;
715
+ margin: 8px 0 !important;
716
+ }
717
+
718
+ /* ===== Windows 95 Blockquote ===== */
719
+ blockquote {
720
+ background: #FFFFFF !important;
721
+ border-left: 4px solid #000080 !important;
722
+ padding: 8px !important;
723
+ margin: 8px 0 !important;
724
+ box-shadow:
725
+ inset 1px 1px 0px 0px #808080,
726
+ inset -1px -1px 0px 0px #FFFFFF !important;
727
+ }
728
+
729
+ /* ===== Windows 95 Chatbot Messages ===== */
730
+ .message,
731
+ .chat-message,
732
+ [class*="message"] {
733
+ border-radius: 0 !important;
734
+ }
735
+
736
+ .user-message,
737
+ [class*="user"] {
738
+ background: #FFFFFF !important;
739
+ box-shadow:
740
+ inset -1px -1px 0px 0px #808080,
741
+ inset 1px 1px 0px 0px #DFDFDF !important;
742
+ }
743
+
744
+ .bot-message,
745
+ [class*="bot"],
746
+ [class*="assistant"] {
747
+ background: #FFFFC0 !important;
748
+ box-shadow:
749
+ inset -1px -1px 0px 0px #808080,
750
+ inset 1px 1px 0px 0px #DFDFDF !important;
751
+ }
752
+
753
+ /* ===== Windows 95 Loading Animation ===== */
754
+ @keyframes win95-loading {
755
+ 0% { background-position: 0% 0%; }
756
+ 100% { background-position: 100% 0%; }
757
+ }
758
+
759
+ .loading-indicator,
760
+ .loader {
761
+ background: repeating-linear-gradient(
762
+ 90deg,
763
+ #000080 0px,
764
+ #000080 16px,
765
+ transparent 16px,
766
+ transparent 20px
767
+ ) !important;
768
+ background-size: 200% 100% !important;
769
+ animation: win95-loading 1s linear infinite !important;
770
+ }
771
+ """
772
+
773
+
774
+ class Windows95Gray(colors.Color):
775
+ """Custom color palette matching Windows 95 system colors."""
776
+
777
+ def __init__(self):
778
+ super().__init__(
779
+ c50="#FFFFFF", # Window background / highlight
780
+ c100="#DFDFDF", # Light gray
781
+ c200="#C0C0C0", # Button face / 3D objects (classic silver)
782
+ c300="#A0A0A0", # Disabled text / inactive elements
783
+ c400="#808080", # Button shadow / 3D dark shadow
784
+ c500="#606060", # Dark elements
785
+ c600="#404040", # Darker elements
786
+ c700="#303030", # Very dark
787
+ c800="#202020", # Near black
788
+ c900="#000000", # Window text (black)
789
+ c950="#000000", # Pure black
790
+ name="win95gray",
791
+ )
792
+
793
+
794
+ class Windows95Blue(colors.Color):
795
+ """Windows 95 navy blue for title bars and selections."""
796
+
797
+ def __init__(self):
798
+ super().__init__(
799
+ c50="#E6E6FF", # Lightest blue
800
+ c100="#CCCCFF", # Light blue
801
+ c200="#9999FF", # Medium light blue
802
+ c300="#6666FF", # Medium blue
803
+ c400="#3333CC", # Blue
804
+ c500="#000080", # Navy blue (active title bar)
805
+ c600="#000066", # Dark navy
806
+ c700="#000055", # Darker navy
807
+ c800="#000044", # Very dark navy
808
+ c900="#000033", # Nearly black navy
809
+ c950="#000022", # Darkest navy
810
+ name="win95blue",
811
+ )
812
+
813
+
814
+ class Windows95Teal(colors.Color):
815
+ """Windows 95 teal accent color."""
816
+
817
+ def __init__(self):
818
+ super().__init__(
819
+ c50="#E0FFFF", # Lightest teal
820
+ c100="#B0FFFF", # Light teal
821
+ c200="#80FFFF", # Medium light teal
822
+ c300="#40E0E0", # Medium teal
823
+ c400="#20C0C0", # Teal
824
+ c500="#008080", # Classic teal (desktop default)
825
+ c600="#006666", # Dark teal
826
+ c700="#005555", # Darker teal
827
+ c800="#004444", # Very dark teal
828
+ c900="#003333", # Nearly black teal
829
+ c950="#002222", # Darkest teal
830
+ name="win95teal",
831
+ )
832
+
833
+
834
+ # Windows 95 3D border shadow effects
835
+ WIN95_SHADOW_RAISED = "inset -1px -1px 0px 0px #808080, inset 1px 1px 0px 0px #FFFFFF, inset -2px -2px 0px 0px #404040, inset 2px 2px 0px 0px #DFDFDF"
836
+ WIN95_SHADOW_SUNKEN = "inset 1px 1px 0px 0px #808080, inset -1px -1px 0px 0px #FFFFFF, inset 2px 2px 0px 0px #404040, inset -2px -2px 0px 0px #DFDFDF"
837
+ WIN95_SHADOW_PRESSED = "inset 1px 1px 0px 0px #808080, inset -1px -1px 0px 0px #DFDFDF"
838
+ WIN95_SHADOW_ETCHED = "inset 1px 1px 0px 0px #808080, inset -1px -1px 0px 0px #FFFFFF"
839
+
840
+
841
+ class Windows95(Base):
842
+ """
843
+ A nostalgic theme inspired by Microsoft Windows 95.
844
+
845
+ Features the classic gray interface, 3D beveled buttons,
846
+ sunken input fields, and the iconic system font styling.
847
+ """
848
+
849
+ def __init__(
850
+ self,
851
+ *,
852
+ primary_hue: colors.Color | str = None,
853
+ secondary_hue: colors.Color | str = None,
854
+ neutral_hue: colors.Color | str = None,
855
+ spacing_size: sizes.Size | str = sizes.spacing_md,
856
+ radius_size: sizes.Size | str = sizes.radius_none,
857
+ text_size: sizes.Size | str = sizes.text_md,
858
+ font: fonts.Font | str | Iterable[fonts.Font | str] = (
859
+ "MS Sans Serif",
860
+ "Tahoma",
861
+ "Segoe UI",
862
+ "Arial",
863
+ "sans-serif",
864
+ ),
865
+ font_mono: fonts.Font | str | Iterable[fonts.Font | str] = (
866
+ "Fixedsys",
867
+ "Consolas",
868
+ "Courier New",
869
+ "monospace",
870
+ ),
871
+ ):
872
+ # Use our custom Windows 95 color palettes
873
+ if primary_hue is None:
874
+ primary_hue = Windows95Blue()
875
+ if secondary_hue is None:
876
+ secondary_hue = Windows95Teal()
877
+ if neutral_hue is None:
878
+ neutral_hue = Windows95Gray()
879
+
880
+ super().__init__(
881
+ primary_hue=primary_hue,
882
+ secondary_hue=secondary_hue,
883
+ neutral_hue=neutral_hue,
884
+ spacing_size=spacing_size,
885
+ radius_size=radius_size,
886
+ text_size=text_size,
887
+ font=font,
888
+ font_mono=font_mono,
889
+ custom_css=WINDOWS_95_CSS,
890
+ )
891
+
892
+ self.name = "windows95"
893
+
894
+ super().set(
895
+ # ===== Body / Background =====
896
+ # Classic gray desktop background
897
+ body_background_fill="#008080", # Teal desktop
898
+ body_background_fill_dark="#008080",
899
+ body_text_color="#000000",
900
+ body_text_color_dark="#000000",
901
+ body_text_color_subdued="#808080",
902
+ body_text_color_subdued_dark="#808080",
903
+ body_text_weight="400",
904
+ # ===== Core Element Colors =====
905
+ # Window/panel backgrounds
906
+ background_fill_primary="#C0C0C0", # Silver gray
907
+ background_fill_primary_dark="#C0C0C0",
908
+ background_fill_secondary="#C0C0C0",
909
+ background_fill_secondary_dark="#C0C0C0",
910
+ # Border colors
911
+ border_color_primary="#808080",
912
+ border_color_primary_dark="#808080",
913
+ border_color_accent="#000080", # Navy blue accent
914
+ border_color_accent_dark="#000080",
915
+ # Accent colors (selection, highlights)
916
+ color_accent="#000080", # Navy blue
917
+ color_accent_soft="#000080", # Navy blue for badges/tags
918
+ color_accent_soft_dark="#000080",
919
+ # ===== Links =====
920
+ link_text_color="#0000FF", # Classic blue links
921
+ link_text_color_dark="#0000FF",
922
+ link_text_color_hover="#0000FF",
923
+ link_text_color_hover_dark="#0000FF",
924
+ link_text_color_active="#800080", # Purple when active
925
+ link_text_color_active_dark="#800080",
926
+ link_text_color_visited="#800080", # Purple visited
927
+ link_text_color_visited_dark="#800080",
928
+ # ===== Text Styling =====
929
+ prose_text_size="*text_md",
930
+ prose_text_weight="400",
931
+ prose_header_text_weight="700",
932
+ code_background_fill="#FFFFFF",
933
+ code_background_fill_dark="#FFFFFF",
934
+ # ===== Shadows (3D Beveled Effects) =====
935
+ shadow_drop="none",
936
+ shadow_drop_lg="none",
937
+ shadow_inset=WIN95_SHADOW_SUNKEN,
938
+ shadow_spread="0px",
939
+ shadow_spread_dark="0px",
940
+ # ===== Block/Container Styling =====
941
+ # Main content blocks with raised 3D effect
942
+ block_background_fill="#C0C0C0",
943
+ block_background_fill_dark="#C0C0C0",
944
+ block_border_color="#808080",
945
+ block_border_color_dark="#808080",
946
+ block_border_width="2px",
947
+ block_border_width_dark="2px",
948
+ block_padding="*spacing_md",
949
+ block_radius="0px",
950
+ block_shadow=WIN95_SHADOW_RAISED,
951
+ block_shadow_dark=WIN95_SHADOW_RAISED,
952
+ # Block labels (like window title bars)
953
+ block_label_background_fill="#000080", # Navy title bar
954
+ block_label_background_fill_dark="#000080",
955
+ block_label_text_color="#FFFFFF", # White text on title bar
956
+ block_label_text_color_dark="#FFFFFF",
957
+ block_label_border_color="#000080",
958
+ block_label_border_color_dark="#000080",
959
+ block_label_border_width="0px",
960
+ block_label_border_width_dark="0px",
961
+ block_label_padding="*spacing_xs *spacing_sm",
962
+ block_label_margin="0",
963
+ block_label_radius="0px",
964
+ block_label_text_size="*text_sm",
965
+ block_label_text_weight="700",
966
+ block_label_shadow="none",
967
+ block_label_right_radius="0px",
968
+ # Block titles
969
+ block_title_background_fill="transparent",
970
+ block_title_background_fill_dark="transparent",
971
+ block_title_text_color="#000000",
972
+ block_title_text_color_dark="#000000",
973
+ block_title_border_color="transparent",
974
+ block_title_border_color_dark="transparent",
975
+ block_title_border_width="0px",
976
+ block_title_border_width_dark="0px",
977
+ block_title_padding="*spacing_xs 0",
978
+ block_title_radius="0px",
979
+ block_title_text_size="*text_sm",
980
+ block_title_text_weight="700",
981
+ # Block info
982
+ block_info_text_color="#000000",
983
+ block_info_text_color_dark="#000000",
984
+ block_info_text_size="*text_sm",
985
+ block_info_text_weight="400",
986
+ # ===== Panel Styling =====
987
+ panel_background_fill="#C0C0C0",
988
+ panel_background_fill_dark="#C0C0C0",
989
+ panel_border_color="#808080",
990
+ panel_border_color_dark="#808080",
991
+ panel_border_width="2px",
992
+ panel_border_width_dark="2px",
993
+ # ===== Layout =====
994
+ container_radius="0px",
995
+ form_gap_width="1px",
996
+ layout_gap="*spacing_md",
997
+ section_header_text_size="*text_md",
998
+ section_header_text_weight="700",
999
+ embed_radius="0px",
1000
+ # ===== Input Fields (Sunken 3D Effect) =====
1001
+ input_background_fill="#FFFFFF", # White input fields
1002
+ input_background_fill_dark="#FFFFFF",
1003
+ input_background_fill_focus="#FFFFFF",
1004
+ input_background_fill_focus_dark="#FFFFFF",
1005
+ input_background_fill_hover="#FFFFFF",
1006
+ input_background_fill_hover_dark="#FFFFFF",
1007
+ input_border_color="#808080",
1008
+ input_border_color_dark="#808080",
1009
+ input_border_color_focus="#000080", # Navy when focused
1010
+ input_border_color_focus_dark="#000080",
1011
+ input_border_color_hover="#808080",
1012
+ input_border_color_hover_dark="#808080",
1013
+ input_border_width="2px",
1014
+ input_border_width_dark="2px",
1015
+ input_padding="*spacing_sm",
1016
+ input_radius="0px",
1017
+ input_shadow=WIN95_SHADOW_SUNKEN,
1018
+ input_shadow_dark=WIN95_SHADOW_SUNKEN,
1019
+ input_shadow_focus=WIN95_SHADOW_SUNKEN,
1020
+ input_shadow_focus_dark=WIN95_SHADOW_SUNKEN,
1021
+ input_text_size="*text_md",
1022
+ input_text_weight="400",
1023
+ input_placeholder_color="#808080",
1024
+ input_placeholder_color_dark="#808080",
1025
+ # ===== Buttons (Raised 3D Effect) =====
1026
+ button_border_width="2px",
1027
+ button_border_width_dark="2px",
1028
+ button_transition="none",
1029
+ button_transform_hover="none",
1030
+ button_transform_active="none",
1031
+ # Large buttons
1032
+ button_large_padding="*spacing_sm *spacing_lg",
1033
+ button_large_radius="0px",
1034
+ button_large_text_size="*text_md",
1035
+ button_large_text_weight="400",
1036
+ # Medium buttons
1037
+ button_medium_padding="*spacing_xs *spacing_md",
1038
+ button_medium_radius="0px",
1039
+ button_medium_text_size="*text_md",
1040
+ button_medium_text_weight="400",
1041
+ # Small buttons
1042
+ button_small_padding="*spacing_xs *spacing_sm",
1043
+ button_small_radius="0px",
1044
+ button_small_text_size="*text_sm",
1045
+ button_small_text_weight="400",
1046
+ # Primary button (like OK button)
1047
+ button_primary_background_fill="#C0C0C0",
1048
+ button_primary_background_fill_dark="#C0C0C0",
1049
+ button_primary_background_fill_hover="#C0C0C0",
1050
+ button_primary_background_fill_hover_dark="#C0C0C0",
1051
+ button_primary_border_color="#000000",
1052
+ button_primary_border_color_dark="#000000",
1053
+ button_primary_border_color_hover="#000000",
1054
+ button_primary_border_color_hover_dark="#000000",
1055
+ button_primary_text_color="#000000",
1056
+ button_primary_text_color_dark="#000000",
1057
+ button_primary_text_color_hover="#000000",
1058
+ button_primary_text_color_hover_dark="#000000",
1059
+ button_primary_shadow=WIN95_SHADOW_RAISED,
1060
+ button_primary_shadow_dark=WIN95_SHADOW_RAISED,
1061
+ button_primary_shadow_hover=WIN95_SHADOW_RAISED,
1062
+ button_primary_shadow_hover_dark=WIN95_SHADOW_RAISED,
1063
+ button_primary_shadow_active=WIN95_SHADOW_PRESSED,
1064
+ button_primary_shadow_active_dark=WIN95_SHADOW_PRESSED,
1065
+ # Secondary button
1066
+ button_secondary_background_fill="#C0C0C0",
1067
+ button_secondary_background_fill_dark="#C0C0C0",
1068
+ button_secondary_background_fill_hover="#C0C0C0",
1069
+ button_secondary_background_fill_hover_dark="#C0C0C0",
1070
+ button_secondary_border_color="#808080",
1071
+ button_secondary_border_color_dark="#808080",
1072
+ button_secondary_border_color_hover="#808080",
1073
+ button_secondary_border_color_hover_dark="#808080",
1074
+ button_secondary_text_color="#000000",
1075
+ button_secondary_text_color_dark="#000000",
1076
+ button_secondary_text_color_hover="#000000",
1077
+ button_secondary_text_color_hover_dark="#000000",
1078
+ button_secondary_shadow=WIN95_SHADOW_RAISED,
1079
+ button_secondary_shadow_dark=WIN95_SHADOW_RAISED,
1080
+ button_secondary_shadow_hover=WIN95_SHADOW_RAISED,
1081
+ button_secondary_shadow_hover_dark=WIN95_SHADOW_RAISED,
1082
+ button_secondary_shadow_active=WIN95_SHADOW_PRESSED,
1083
+ button_secondary_shadow_active_dark=WIN95_SHADOW_PRESSED,
1084
+ # Cancel button
1085
+ button_cancel_background_fill="#C0C0C0",
1086
+ button_cancel_background_fill_dark="#C0C0C0",
1087
+ button_cancel_background_fill_hover="#C0C0C0",
1088
+ button_cancel_background_fill_hover_dark="#C0C0C0",
1089
+ button_cancel_border_color="#808080",
1090
+ button_cancel_border_color_dark="#808080",
1091
+ button_cancel_border_color_hover="#808080",
1092
+ button_cancel_border_color_hover_dark="#808080",
1093
+ button_cancel_text_color="#000000",
1094
+ button_cancel_text_color_dark="#000000",
1095
+ button_cancel_text_color_hover="#000000",
1096
+ button_cancel_text_color_hover_dark="#000000",
1097
+ button_cancel_shadow=WIN95_SHADOW_RAISED,
1098
+ button_cancel_shadow_dark=WIN95_SHADOW_RAISED,
1099
+ button_cancel_shadow_hover=WIN95_SHADOW_RAISED,
1100
+ button_cancel_shadow_hover_dark=WIN95_SHADOW_RAISED,
1101
+ button_cancel_shadow_active=WIN95_SHADOW_PRESSED,
1102
+ button_cancel_shadow_active_dark=WIN95_SHADOW_PRESSED,
1103
+ # ===== Checkboxes and Radio Buttons =====
1104
+ checkbox_background_color="#FFFFFF",
1105
+ checkbox_background_color_dark="#FFFFFF",
1106
+ checkbox_background_color_focus="#FFFFFF",
1107
+ checkbox_background_color_focus_dark="#FFFFFF",
1108
+ checkbox_background_color_hover="#FFFFFF",
1109
+ checkbox_background_color_hover_dark="#FFFFFF",
1110
+ checkbox_background_color_selected="#FFFFFF",
1111
+ checkbox_background_color_selected_dark="#FFFFFF",
1112
+ checkbox_border_color="#808080",
1113
+ checkbox_border_color_dark="#808080",
1114
+ checkbox_border_color_focus="#000080",
1115
+ checkbox_border_color_focus_dark="#000080",
1116
+ checkbox_border_color_hover="#808080",
1117
+ checkbox_border_color_hover_dark="#808080",
1118
+ checkbox_border_color_selected="#808080",
1119
+ checkbox_border_color_selected_dark="#808080",
1120
+ checkbox_border_radius="0px",
1121
+ checkbox_border_width="2px",
1122
+ checkbox_border_width_dark="2px",
1123
+ checkbox_shadow=WIN95_SHADOW_SUNKEN,
1124
+ # Checkbox check mark (black check)
1125
+ checkbox_check="url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='black' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\")",
1126
+ # Radio button circle (black dot)
1127
+ radio_circle="url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='black' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='4'/%3e%3c/svg%3e\")",
1128
+ # Checkbox labels (button-like appearance)
1129
+ checkbox_label_background_fill="#C0C0C0",
1130
+ checkbox_label_background_fill_dark="#C0C0C0",
1131
+ checkbox_label_background_fill_hover="#C0C0C0",
1132
+ checkbox_label_background_fill_hover_dark="#C0C0C0",
1133
+ checkbox_label_background_fill_selected="#000080", # Navy when selected
1134
+ checkbox_label_background_fill_selected_dark="#000080",
1135
+ checkbox_label_border_color="#808080",
1136
+ checkbox_label_border_color_dark="#808080",
1137
+ checkbox_label_border_color_hover="#808080",
1138
+ checkbox_label_border_color_hover_dark="#808080",
1139
+ checkbox_label_border_color_selected="#000080",
1140
+ checkbox_label_border_color_selected_dark="#000080",
1141
+ checkbox_label_border_width="2px",
1142
+ checkbox_label_border_width_dark="2px",
1143
+ checkbox_label_padding="*spacing_xs *spacing_sm",
1144
+ checkbox_label_gap="*spacing_sm",
1145
+ checkbox_label_shadow=WIN95_SHADOW_RAISED,
1146
+ checkbox_label_text_size="*text_md",
1147
+ checkbox_label_text_weight="400",
1148
+ checkbox_label_text_color="#000000",
1149
+ checkbox_label_text_color_dark="#000000",
1150
+ checkbox_label_text_color_selected="#FFFFFF", # White on navy
1151
+ checkbox_label_text_color_selected_dark="#FFFFFF",
1152
+ # ===== Tables =====
1153
+ table_border_color="#808080",
1154
+ table_border_color_dark="#808080",
1155
+ table_even_background_fill="#FFFFFF",
1156
+ table_even_background_fill_dark="#FFFFFF",
1157
+ table_odd_background_fill="#C0C0C0",
1158
+ table_odd_background_fill_dark="#C0C0C0",
1159
+ table_radius="0px",
1160
+ table_row_focus="#000080",
1161
+ table_row_focus_dark="#000080",
1162
+ table_text_color="#000000",
1163
+ table_text_color_dark="#000000",
1164
+ # ===== Accordion =====
1165
+ accordion_text_color="#000000",
1166
+ accordion_text_color_dark="#000000",
1167
+ # ===== Slider =====
1168
+ slider_color="#000080", # Navy slider
1169
+ slider_color_dark="#000080",
1170
+ # ===== Loader =====
1171
+ loader_color="#000080", # Navy loading indicator
1172
+ loader_color_dark="#000080",
1173
+ # ===== Chatbot =====
1174
+ chatbot_text_size="*text_md",
1175
+ # ===== Errors =====
1176
+ error_background_fill="#FFFFFF",
1177
+ error_background_fill_dark="#FFFFFF",
1178
+ error_border_color="#FF0000", # Red error border
1179
+ error_border_color_dark="#FF0000",
1180
+ error_border_width="2px",
1181
+ error_border_width_dark="2px",
1182
+ error_text_color="#FF0000", # Red error text
1183
+ error_text_color_dark="#FF0000",
1184
+ error_icon_color="#FF0000",
1185
+ error_icon_color_dark="#FF0000",
1186
+ # ===== Stats =====
1187
+ stat_background_fill="#000080", # Navy stat bars
1188
+ stat_background_fill_dark="#000080",
1189
+ )