@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.1.5 → 0.1.7

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 (82) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.esm.js +18 -1
  4. package/dist/index.js +18 -1
  5. package/dist/setupTests.d.ts +124 -0
  6. package/dist/setupTests.esm.js +122 -0
  7. package/dist/setupTests.js +122 -0
  8. package/dist/styles.css +1 -1
  9. package/package.json +1 -1
  10. package/src/index.css +1046 -0
  11. package/src/index.ts +18 -0
  12. package/src/plugins/theme-css-generator.ts +354 -0
  13. package/src/setupTests.ts +124 -0
  14. package/src/stories/README.md +39 -0
  15. package/src/stories/components/ThemeDebugger.tsx +143 -0
  16. package/src/stories/index.ts +29 -0
  17. package/src/stories/storybook-theme-imports.css +51 -0
  18. package/src/styles/base/fonts.css +30 -0
  19. package/src/styles/base/generated-theme-variables.css +573 -0
  20. package/src/styles/base/index.css +7 -0
  21. package/src/styles/base/reset.css +48 -0
  22. package/src/styles/base/theme.css +1068 -0
  23. package/src/styles/base/typography.css +68 -0
  24. package/src/styles/base/variables.css +5 -0
  25. package/src/styles/components/CLAUDE.md +62 -0
  26. package/src/styles/components/base/badge.css +428 -0
  27. package/src/styles/components/base/button.css +774 -0
  28. package/src/styles/components/base/card.css +601 -0
  29. package/src/styles/components/base/checkbox.css +442 -0
  30. package/src/styles/components/base/index.css +9 -0
  31. package/src/styles/components/base/input.css +887 -0
  32. package/src/styles/components/base/label.css +296 -0
  33. package/src/styles/components/data-display/chart.css +353 -0
  34. package/src/styles/components/data-display/data-grid.css +619 -0
  35. package/src/styles/components/data-display/index.css +9 -0
  36. package/src/styles/components/data-display/list.css +560 -0
  37. package/src/styles/components/data-display/table.css +498 -0
  38. package/src/styles/components/data-display/timeline.css +764 -0
  39. package/src/styles/components/data-display/tree.css +881 -0
  40. package/src/styles/components/feedback/alert.css +358 -0
  41. package/src/styles/components/feedback/index.css +7 -0
  42. package/src/styles/components/feedback/progress.css +435 -0
  43. package/src/styles/components/feedback/skeleton.css +337 -0
  44. package/src/styles/components/feedback/toast.css +564 -0
  45. package/src/styles/components/index.css +17 -0
  46. package/src/styles/components/navigation/breadcrumb.css +465 -0
  47. package/src/styles/components/navigation/index.css +9 -0
  48. package/src/styles/components/navigation/menu.css +572 -0
  49. package/src/styles/components/navigation/pagination.css +635 -0
  50. package/src/styles/components/navigation/sidebar.css +807 -0
  51. package/src/styles/components/navigation/stepper.css +519 -0
  52. package/src/styles/components/navigation/tabs.css +404 -0
  53. package/src/styles/components/overlay/backdrop.css +243 -0
  54. package/src/styles/components/overlay/index.css +8 -0
  55. package/src/styles/components/overlay/modal.css +482 -0
  56. package/src/styles/components/overlay/popover.css +607 -0
  57. package/src/styles/components/overlay/portal.css +213 -0
  58. package/src/styles/components/overlay/tooltip.css +488 -0
  59. package/src/styles/generated-theme-variables.css +573 -0
  60. package/src/styles/index.css +5 -0
  61. package/src/styles/layers/index.css +54 -0
  62. package/src/styles/layers/overrides.css +108 -0
  63. package/src/styles/layers/validation.css +159 -0
  64. package/src/styles/layers/validation.js +310 -0
  65. package/src/styles/themes/default.css +450 -0
  66. package/src/styles/themes/enterprise.css +370 -0
  67. package/src/styles/themes/harvey.css +436 -0
  68. package/src/styles/themes/index.css +4 -0
  69. package/src/styles/themes/stan-design.css +572 -0
  70. package/src/styles/utilities/advanced-transition-system.css +467 -0
  71. package/src/styles/utilities/battery-conscious-animations.css +289 -0
  72. package/src/styles/utilities/enterprise-mobile-experience.css +817 -0
  73. package/src/styles/utilities/hardware-acceleration.css +121 -0
  74. package/src/styles/utilities/index.css +20 -0
  75. package/src/styles/utilities/mobile-skeleton-loading.css +596 -0
  76. package/src/styles/utilities/semantic-input-system.css +451 -0
  77. package/src/styles/utilities/touch-friendly-interface.css +247 -0
  78. package/src/styles/utilities/touch-optimization.css +165 -0
  79. package/src/test-utils/index.ts +7 -0
  80. package/src/test-utils/theme-testing.tsx +219 -0
  81. package/src/testing/test-automation.ts +627 -0
  82. package/src/testing/test-utils.tsx +367 -0
package/src/index.css ADDED
@@ -0,0 +1,1046 @@
1
+ /* Import organized design system */
2
+ @import './styles/index.css';
3
+
4
+ /* Existing CSS styles are included inline below */
5
+
6
+ /* Tailwind CSS */
7
+ @tailwind base;
8
+ @tailwind components;
9
+ @tailwind utilities;
10
+
11
+ /* Advanced Border Radius System */
12
+ :root {
13
+ --radius: 0.5rem;
14
+ --radius-sm: calc(var(--radius) - 4px);
15
+ --radius-md: calc(var(--radius) - 2px);
16
+ --radius-lg: var(--radius);
17
+ --radius-xl: calc(var(--radius) + 2px);
18
+ --radius-2xl: calc(var(--radius) + 4px);
19
+ }
20
+
21
+ /* Advanced Shadow System */
22
+ :root {
23
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
24
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
25
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
26
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
27
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 10px 10px -5px rgb(0 0 0 / 0.04);
28
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
29
+ }
30
+
31
+ /* Coach Stan Professional Theme */
32
+ /* Professional Poker Coaching Color System */
33
+ :root {
34
+ /* Light Mode Colors */
35
+ --primary: #2563eb;
36
+ --primary-hover: #1d4ed8;
37
+ --page-bg: #ffffff;
38
+ --surface-bg: #f3f4f6;
39
+ --border-color: #e5e7eb;
40
+ --input-bg: #ffffff;
41
+ --input-border: #d1d5db;
42
+ --text-primary: #111827;
43
+ --text-secondary: #4b5563;
44
+ --text-on-light: #111827;
45
+ --text-on-dark: #f8fafc;
46
+ --text-inverse: #f8fafc;
47
+ --focus-border: #2563eb;
48
+ --hover-bg: #f8fafc;
49
+ --button-hover: #1d4ed8;
50
+ --active-bg: rgba(37, 99, 235, 0.1);
51
+ --active-border: #2563eb;
52
+
53
+ /* Semantic Colors */
54
+ --success: #059669;
55
+ --warning: #F59E0B;
56
+ --error: #EF4444;
57
+ --info: #2563eb;
58
+
59
+ /* Font Family Variables */
60
+ --font-sans: 'Clash Display', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
61
+ --font-display: 'Clash Display', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
62
+ --font-body: 'Clash Display', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
63
+ }
64
+
65
+ .dark {
66
+ /* Dark Mode Colors */
67
+ --primary: #3b82f6;
68
+ --primary-hover: #2563eb;
69
+ --page-bg: #0f172a;
70
+ --surface-bg: #1e293b;
71
+ --border-color: #334155;
72
+ --input-bg: #334155;
73
+ --input-border: #475569;
74
+ --text-primary: #f8fafc;
75
+ --text-secondary: #cbd5e1;
76
+ --text-on-light: #111827;
77
+ --text-on-dark: #f8fafc;
78
+ --text-inverse: #f8fafc;
79
+ --focus-border: #3b82f6;
80
+ --hover-bg: #475569;
81
+ --button-hover: #2563eb;
82
+ --active-bg: rgba(59, 130, 246, 0.1);
83
+ --active-border: #3b82f6;
84
+ }
85
+
86
+ /* Base styles using custom properties */
87
+ .coach-stan-bg {
88
+ background-color: var(--page-bg);
89
+ }
90
+
91
+ .coach-stan-surface {
92
+ background-color: var(--surface-bg);
93
+ }
94
+
95
+ .coach-stan-primary {
96
+ background-color: var(--primary);
97
+ }
98
+
99
+ .coach-stan-primary:hover {
100
+ background-color: var(--primary-hover);
101
+ }
102
+
103
+ .coach-stan-border {
104
+ border-color: var(--border-color);
105
+ }
106
+
107
+ .coach-stan-text-primary {
108
+ color: var(--text-primary);
109
+ }
110
+
111
+ .coach-stan-text-secondary {
112
+ color: var(--text-secondary);
113
+ }
114
+
115
+ .coach-stan-text-on-light {
116
+ color: var(--text-on-light);
117
+ }
118
+
119
+ .coach-stan-text-on-dark {
120
+ color: var(--text-on-dark);
121
+ }
122
+
123
+ .coach-stan-text-inverse {
124
+ color: var(--text-inverse);
125
+ }
126
+
127
+ .coach-stan-active {
128
+ background-color: var(--active-bg) !important;
129
+ color: var(--primary) !important;
130
+ border-right: 2px solid var(--active-border) !important;
131
+ }
132
+
133
+ .coach-stan-input {
134
+ background-color: var(--input-bg);
135
+ border-color: var(--input-border);
136
+ color: var(--text-primary);
137
+ }
138
+
139
+ .coach-stan-input:focus {
140
+ border-color: var(--focus-border);
141
+ }
142
+
143
+ .coach-stan-input::-moz-placeholder {
144
+ color: var(--text-secondary);
145
+ }
146
+
147
+ .coach-stan-input::placeholder {
148
+ color: var(--text-secondary);
149
+ }
150
+
151
+ /* Theme toggle specific styles */
152
+ .theme-toggle {
153
+ position: relative;
154
+ overflow: hidden;
155
+ }
156
+
157
+ .theme-toggle::before {
158
+ content: '';
159
+ position: absolute;
160
+ top: 0;
161
+ left: 0;
162
+ right: 0;
163
+ bottom: 0;
164
+ background: linear-gradient(45deg, var(--primary), var(--primary-hover));
165
+ opacity: 0;
166
+ transition: opacity 0.3s ease;
167
+ }
168
+
169
+ .theme-toggle:hover::before {
170
+ opacity: 0.1;
171
+ }
172
+
173
+ /* Dark mode specific enhancements */
174
+ .dark .coach-stan-surface {
175
+ background-color: var(--surface-bg);
176
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
177
+ }
178
+
179
+ .dark .coach-stan-border {
180
+ border-color: var(--border-color);
181
+ }
182
+
183
+ .dark .coach-stan-hover-bg {
184
+ background-color: var(--hover-bg);
185
+ }
186
+
187
+ /* Animation Enhancements */
188
+ /* Improved transition smoothness with hardware acceleration */
189
+ .coach-stan-smooth-transition {
190
+ transform: translateZ(0);
191
+ backface-visibility: hidden;
192
+ perspective: 1000px;
193
+ will-change: transform, opacity;
194
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
195
+ }
196
+
197
+ /* Mobile navigation staggered animations */
198
+ .coach-stan-stagger-item {
199
+ animation: slideInFromLeft 200ms ease-out forwards;
200
+ opacity: 0;
201
+ transform: translateX(-20px);
202
+ }
203
+
204
+ /* Ensure active items override animation states */
205
+ .coach-stan-stagger-item.coach-stan-active {
206
+ opacity: 1 !important;
207
+ transform: translateX(0) !important;
208
+ }
209
+
210
+ @keyframes slideInFromLeft {
211
+ to {
212
+ opacity: 1;
213
+ transform: translateX(0);
214
+ }
215
+ }
216
+
217
+ /* Reduced motion support for accessibility */
218
+ @media (prefers-reduced-motion: reduce) {
219
+ .coach-stan-stagger-item {
220
+ animation: none;
221
+ opacity: 1;
222
+ transform: translateX(0);
223
+ }
224
+
225
+ /* Simplified sheet animations */
226
+ [data-radix-dialog-content] {
227
+ animation: none !important;
228
+ transform: none !important;
229
+ transition: opacity 0.1s ease-out !important;
230
+ }
231
+ }
232
+
233
+ /* Enhanced focus indicators for better accessibility */
234
+ .coach-stan-focus-enhanced:focus-visible {
235
+ outline: 2px solid var(--primary);
236
+ outline-offset: 2px;
237
+ border-radius: 4px;
238
+ }
239
+
240
+ /* Smooth hamburger menu icon transitions */
241
+ .coach-stan-hamburger-transition {
242
+ transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
243
+ }
244
+
245
+ .coach-stan-hamburger-transition:hover {
246
+ transform: scale(1.05);
247
+ }
248
+
249
+ /* Mobile Form Enhancements */
250
+ /* Ensure adequate spacing for touch targets */
251
+ .coach-stan-form-field {
252
+ margin-bottom: 1.5rem;
253
+ }
254
+
255
+ .coach-stan-form-field:last-child {
256
+ margin-bottom: 0;
257
+ }
258
+
259
+ /* Mobile-optimized form layouts */
260
+ @media (max-width: 768px) {
261
+ .coach-stan-form-grid {
262
+ display: grid;
263
+ grid-template-columns: 1fr;
264
+ gap: 1.5rem;
265
+ }
266
+
267
+ .coach-stan-form-row {
268
+ display: flex;
269
+ flex-direction: column;
270
+ gap: 1rem;
271
+ }
272
+
273
+ .coach-stan-form-button {
274
+ min-height: 48px;
275
+ touch-action: manipulation;
276
+ -webkit-tap-highlight-color: transparent;
277
+ }
278
+
279
+ /* Ensure checkboxes and radio buttons have adequate touch areas */
280
+ .coach-stan-checkbox-container,
281
+ .coach-stan-radio-container {
282
+ min-height: 44px;
283
+ display: flex;
284
+ align-items: center;
285
+ padding: 0.5rem;
286
+ margin: -0.5rem;
287
+ border-radius: 0.375rem;
288
+ cursor: pointer;
289
+ }
290
+
291
+ .coach-stan-checkbox-container:hover,
292
+ .coach-stan-radio-container:hover {
293
+ background-color: var(--hover-bg);
294
+ }
295
+ }
296
+
297
+ /* Desktop form optimizations */
298
+ @media (min-width: 768px) {
299
+ .coach-stan-form-grid {
300
+ display: grid;
301
+ grid-template-columns: repeat(2, 1fr);
302
+ gap: 2rem;
303
+ }
304
+
305
+ .coach-stan-form-row {
306
+ display: flex;
307
+ gap: 1.5rem;
308
+ }
309
+ }
310
+
311
+ /* Touch-friendly focus states */
312
+ .coach-stan-touch-target {
313
+ min-height: 44px;
314
+ min-width: 44px;
315
+ touch-action: manipulation;
316
+ -webkit-tap-highlight-color: transparent;
317
+ }
318
+
319
+ /* Enhanced input focus for mobile */
320
+ @media (max-width: 768px) {
321
+ input:focus,
322
+ textarea:focus,
323
+ select:focus {
324
+ transform: scale(1.02);
325
+ transition: transform 0.15s ease-out;
326
+ }
327
+ }
328
+
329
+ /* Mobile Validation Enhancements */
330
+ /* Mobile-friendly form validation messages */
331
+ .coach-stan-form-message {
332
+ border-radius: 0.5rem;
333
+ margin-top: 0.5rem;
334
+ }
335
+
336
+ .coach-stan-mobile-form-item {
337
+ position: relative;
338
+ margin-bottom: 2rem;
339
+ }
340
+
341
+ @media (max-width: 768px) {
342
+ .coach-stan-mobile-validation {
343
+ position: sticky;
344
+ top: 10px;
345
+ z-index: 10;
346
+ backdrop-filter: blur(8px);
347
+ background-color: rgba(255, 255, 255, 0.9);
348
+ border: 1px solid var(--border-color);
349
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
350
+ animation: slideInFromTop 200ms ease-out;
351
+ }
352
+
353
+ /* Error positioning adjustments for mobile */
354
+ .coach-stan-mobile-form-item[data-error="true"] {
355
+ scroll-margin-top: 80px; /* Account for sticky headers */
356
+ scroll-margin-bottom: 40px;
357
+ }
358
+
359
+ .dark .coach-stan-mobile-validation {
360
+ background-color: rgba(30, 41, 59, 0.9);
361
+ border-color: var(--border-color);
362
+ }
363
+
364
+ /* Success state styling */
365
+ .coach-stan-mobile-validation[role="alert"] {
366
+ margin-bottom: 0.75rem;
367
+ }
368
+
369
+ /* Enhanced form field spacing for mobile */
370
+ .coach-stan-mobile-form-item {
371
+ margin-bottom: 2.5rem;
372
+ padding: 0.5rem;
373
+ border-radius: 0.75rem;
374
+ transition: background-color 0.15s ease-out;
375
+ }
376
+
377
+ .coach-stan-mobile-form-item:focus-within {
378
+ background-color: var(--hover-bg);
379
+ }
380
+
381
+ /* Mobile form success animation */
382
+ .coach-stan-form-success {
383
+ animation: successPulse 0.6s ease-out;
384
+ }
385
+
386
+ /* Mobile form error shake animation */
387
+ .coach-stan-form-error {
388
+ animation: errorShake 0.5s ease-out;
389
+ }
390
+ }
391
+
392
+ /* Success and error animations */
393
+ @keyframes slideInFromTop {
394
+ from {
395
+ opacity: 0;
396
+ transform: translateY(-10px);
397
+ }
398
+ to {
399
+ opacity: 1;
400
+ transform: translateY(0);
401
+ }
402
+ }
403
+
404
+ @keyframes successPulse {
405
+ 0% { transform: scale(1); }
406
+ 50% { transform: scale(1.02); }
407
+ 100% { transform: scale(1); }
408
+ }
409
+
410
+ @keyframes errorShake {
411
+ 0%, 100% { transform: translateX(0); }
412
+ 25% { transform: translateX(-4px); }
413
+ 75% { transform: translateX(4px); }
414
+ }
415
+
416
+ /* Mobile keyboard and gesture support */
417
+ .coach-stan-keyboard-visible {
418
+ /* Prevent viewport jumping when keyboard appears */
419
+ position: fixed;
420
+ width: 100%;
421
+ }
422
+
423
+ .coach-stan-mobile-input {
424
+ /* Disable zoom on focus for iOS */
425
+ font-size: 16px;
426
+
427
+ /* Better touch targets */
428
+ min-height: 44px;
429
+ padding: 12px 16px;
430
+
431
+ /* Disable appearance for better control */
432
+ -webkit-appearance: none;
433
+ -moz-appearance: none;
434
+ appearance: none;
435
+
436
+ /* Better focus handling */
437
+ outline: none;
438
+ transition: border-color 0.15s ease-out, box-shadow 0.15s ease-out;
439
+ }
440
+
441
+ .coach-stan-mobile-input:focus {
442
+ border-color: var(--primary);
443
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
444
+ }
445
+
446
+ /* Gesture feedback */
447
+ .coach-stan-gesture-feedback {
448
+ position: fixed;
449
+ top: 50%;
450
+ left: 50%;
451
+ transform: translate(-50%, -50%);
452
+ background: rgba(0, 0, 0, 0.8);
453
+ color: white;
454
+ padding: 8px 16px;
455
+ border-radius: 8px;
456
+ font-size: 14px;
457
+ z-index: 1000;
458
+ pointer-events: none;
459
+ opacity: 0;
460
+ animation: gestureFlash 0.6s ease-out;
461
+ }
462
+
463
+ @keyframes gestureFlash {
464
+ 0% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
465
+ 50% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
466
+ 100% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
467
+ }
468
+
469
+ /* Mobile form field spacing with gesture support */
470
+ .coach-stan-mobile-form-field {
471
+ position: relative;
472
+ margin-bottom: 24px;
473
+ padding: 8px;
474
+ border-radius: 8px;
475
+ transition: background-color 0.15s ease-out;
476
+ }
477
+
478
+ .coach-stan-mobile-form-field:focus-within {
479
+ background-color: var(--hover-bg);
480
+ }
481
+
482
+ .coach-stan-mobile-form-field[data-gesture-target="true"] {
483
+ cursor: pointer;
484
+ touch-action: pan-y; /* Allow vertical scroll but enable horizontal gestures */
485
+ }
486
+
487
+ /* Gesture indicators */
488
+ .coach-stan-gesture-hint {
489
+ position: absolute;
490
+ bottom: -20px;
491
+ left: 50%;
492
+ transform: translateX(-50%);
493
+ font-size: 12px;
494
+ color: var(--text-secondary);
495
+ opacity: 0;
496
+ transition: opacity 0.2s ease-out;
497
+ }
498
+
499
+ .coach-stan-mobile-form:focus-within .coach-stan-gesture-hint {
500
+ opacity: 1;
501
+ }
502
+
503
+ /* Auto-focus management */
504
+ .coach-stan-auto-focus-container {
505
+ scroll-margin-top: 100px;
506
+ scroll-margin-bottom: 100px;
507
+ }
508
+
509
+ /* Tablet-specific optimizations */
510
+ @media (min-width: 768px) and (max-width: 1024px) {
511
+ /* Tablet breakpoint styles */
512
+ .coach-stan-tablet-layout {
513
+ padding: 16px;
514
+ max-width: 100%;
515
+ }
516
+
517
+ .coach-stan-tablet-layout.orientation-portrait {
518
+ padding: 20px 16px;
519
+ }
520
+
521
+ .coach-stan-tablet-layout.orientation-landscape {
522
+ padding: 12px 24px;
523
+ }
524
+
525
+ /* Tablet grid optimizations */
526
+ .coach-stan-tablet-grid {
527
+ width: 100%;
528
+ transition: grid-template-columns 0.3s ease;
529
+ }
530
+
531
+ /* Tablet sidebar */
532
+ .coach-stan-tablet-sidebar {
533
+ background: var(--card);
534
+ border-right: 1px solid var(--border);
535
+ transition: width 0.3s ease, transform 0.3s ease;
536
+ position: relative;
537
+ }
538
+
539
+ .coach-stan-tablet-sidebar.collapsed {
540
+ width: 60px !important;
541
+ overflow: hidden;
542
+ }
543
+
544
+ .coach-stan-tablet-sidebar .sidebar-toggle {
545
+ position: absolute;
546
+ top: 12px;
547
+ right: 12px;
548
+ background: var(--primary);
549
+ color: var(--primary-foreground);
550
+ border: none;
551
+ border-radius: 4px;
552
+ width: 32px;
553
+ height: 32px;
554
+ display: flex;
555
+ align-items: center;
556
+ justify-content: center;
557
+ cursor: pointer;
558
+ z-index: 10;
559
+ transition: all 0.2s ease;
560
+ }
561
+
562
+ .coach-stan-tablet-sidebar .sidebar-toggle:hover {
563
+ background: var(--primary-hover);
564
+ transform: scale(1.05);
565
+ }
566
+
567
+ .coach-stan-tablet-sidebar .sidebar-content.collapsed {
568
+ opacity: 0;
569
+ pointer-events: none;
570
+ }
571
+
572
+ /* Tablet stack layouts */
573
+ .coach-stan-tablet-stack {
574
+ width: 100%;
575
+ transition: flex-direction 0.3s ease;
576
+ }
577
+
578
+ .coach-stan-tablet-stack.stack-vertical {
579
+ align-items: stretch;
580
+ }
581
+
582
+ .coach-stan-tablet-stack.stack-horizontal {
583
+ align-items: flex-start;
584
+ }
585
+ }
586
+
587
+ /* Portrait tablet optimizations */
588
+ @media (min-width: 768px) and (max-width: 1024px) and (orientation: portrait) {
589
+ .coach-stan-tablet-layout {
590
+ /* More vertical padding for portrait */
591
+ padding: 24px 16px;
592
+ }
593
+
594
+ /* Stack elements vertically in portrait */
595
+ .tablet-optimized .tablet-auto-stack {
596
+ flex-direction: column;
597
+ }
598
+
599
+ /* Larger touch targets for portrait */
600
+ .tablet-optimized button,
601
+ .tablet-optimized .touch-target {
602
+ min-height: 48px;
603
+ min-width: 48px;
604
+ }
605
+
606
+ /* Better form layouts for portrait tablets */
607
+ .tablet-optimized .form-grid {
608
+ grid-template-columns: 1fr;
609
+ gap: 20px;
610
+ }
611
+ }
612
+
613
+ /* Landscape tablet optimizations */
614
+ @media (min-width: 768px) and (max-width: 1024px) and (orientation: landscape) {
615
+ .coach-stan-tablet-layout {
616
+ /* More horizontal padding for landscape */
617
+ padding: 16px 32px;
618
+ }
619
+
620
+ /* Use horizontal layouts in landscape */
621
+ .tablet-optimized .tablet-auto-stack {
622
+ flex-direction: row;
623
+ gap: 24px;
624
+ }
625
+
626
+ /* Multi-column forms in landscape */
627
+ .tablet-optimized .form-grid {
628
+ grid-template-columns: 1fr 1fr;
629
+ gap: 24px;
630
+ }
631
+
632
+ /* Sidebar behavior in landscape */
633
+ .coach-stan-tablet-sidebar {
634
+ position: static;
635
+ width: 280px !important;
636
+ }
637
+
638
+ .coach-stan-tablet-sidebar.collapsed {
639
+ width: 80px !important;
640
+ }
641
+ }
642
+
643
+ /* Touch-optimized interactions for tablets */
644
+ .tablet-device {
645
+ /* Larger touch targets */
646
+ --touch-target-size: 44px;
647
+ }
648
+
649
+ .tablet-device button,
650
+ .tablet-device .clickable,
651
+ .tablet-device .touch-target {
652
+ min-height: var(--touch-target-size);
653
+ min-width: var(--touch-target-size);
654
+ touch-action: manipulation; /* Disable double-tap zoom */
655
+ }
656
+
657
+ .tablet-device input,
658
+ .tablet-device textarea,
659
+ .tablet-device select {
660
+ min-height: 44px;
661
+ font-size: 16px; /* Prevent zoom on focus in iOS */
662
+ }
663
+
664
+ /* Hover states for tablet with pointer support */
665
+ @media (hover: hover) and (pointer: fine) {
666
+ .tablet-device .hover-enabled:hover {
667
+ transform: translateY(-1px);
668
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
669
+ }
670
+ }
671
+
672
+ /* Enhanced focus indicators for tablet navigation */
673
+ .tablet-device *:focus-visible {
674
+ outline: 2px solid var(--primary);
675
+ outline-offset: 2px;
676
+ border-radius: 4px;
677
+ }
678
+
679
+ /* Tablet-specific scrolling optimizations */
680
+ .tablet-device .scroll-container {
681
+ -webkit-overflow-scrolling: touch;
682
+ scroll-behavior: smooth;
683
+ }
684
+
685
+ /* Mobile performance optimizations */
686
+ @keyframes wave {
687
+ 0% {
688
+ transform: translateX(-100%);
689
+ }
690
+ 50% {
691
+ transform: translateX(100%);
692
+ }
693
+ 100% {
694
+ transform: translateX(100%);
695
+ }
696
+ }
697
+
698
+ .animate-wave {
699
+ position: relative;
700
+ overflow: hidden;
701
+ }
702
+
703
+ .animate-wave::before {
704
+ content: '';
705
+ position: absolute;
706
+ top: 0;
707
+ left: 0;
708
+ width: 100%;
709
+ height: 100%;
710
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
711
+ animation: wave 1.6s linear infinite;
712
+ }
713
+
714
+ .dark .animate-wave::before {
715
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
716
+ }
717
+
718
+ /* Mobile lazy loading optimizations */
719
+ .mobile-lazy-loading {
720
+ will-change: transform, opacity;
721
+ transform: translateZ(0); /* Force GPU acceleration */
722
+ }
723
+
724
+ .mobile-lazy-loaded {
725
+ animation: fadeInUp 0.3s ease-out;
726
+ }
727
+
728
+ @keyframes fadeInUp {
729
+ from {
730
+ opacity: 0;
731
+ transform: translateY(20px);
732
+ }
733
+ to {
734
+ opacity: 1;
735
+ transform: translateY(0);
736
+ }
737
+ }
738
+
739
+ /* Advanced Mobile Animation System */
740
+ /* Base animation classes with GPU acceleration */
741
+ .coach-stan-animation-base {
742
+ will-change: transform, opacity;
743
+ backface-visibility: hidden;
744
+ transform-style: preserve-3d;
745
+ -webkit-font-smoothing: antialiased;
746
+ -moz-osx-font-smoothing: grayscale;
747
+ }
748
+
749
+ /* Device-Specific Animation Classes */
750
+ /* Mobile animations (max-width: 768px) */
751
+ @media (max-width: 768px) {
752
+ .coach-stan-mobile-animation {
753
+ animation-duration: 0.25s !important;
754
+ animation-timing-function: ease-out !important;
755
+ transform: translateZ(0); /* Force hardware acceleration */
756
+ }
757
+
758
+ .coach-stan-mobile-animation.reduced-motion {
759
+ animation: none !important;
760
+ transition: opacity 0.1s ease !important;
761
+ }
762
+
763
+ /* Performance-optimized mobile transitions */
764
+ .coach-stan-mobile-transition {
765
+ transition-duration: 0.2s !important;
766
+ transition-timing-function: ease-out !important;
767
+ transition-property: transform, opacity !important;
768
+ }
769
+
770
+ /* Mobile-specific entrance animations */
771
+ .coach-stan-mobile-fade-in {
772
+ animation: mobileFadeIn 0.2s ease-out forwards;
773
+ }
774
+
775
+ .coach-stan-mobile-slide-in {
776
+ animation: mobileSlideIn 0.25s ease-out forwards;
777
+ }
778
+
779
+ /* Battery-conscious animations */
780
+ .coach-stan-battery-save {
781
+ animation-duration: 0.15s !important;
782
+ animation-iteration-count: 1 !important;
783
+ animation-fill-mode: forwards !important;
784
+ }
785
+ }
786
+
787
+ /* Tablet animations (768px to 1024px) */
788
+ @media (min-width: 768px) and (max-width: 1024px) {
789
+ .coach-stan-tablet-animation {
790
+ animation-duration: 0.35s !important;
791
+ animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;
792
+ transform: translateZ(0); /* Hardware acceleration */
793
+ }
794
+
795
+ .coach-stan-tablet-transition {
796
+ transition-duration: 0.3s !important;
797
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important;
798
+ }
799
+
800
+ /* Tablet-optimized bounce */
801
+ .coach-stan-tablet-bounce {
802
+ animation: tabletBounce 0.5s ease-out forwards;
803
+ }
804
+ }
805
+
806
+ /* Desktop animations (min-width: 1024px) */
807
+ @media (min-width: 1024px) {
808
+ .coach-stan-desktop-animation {
809
+ animation-duration: 0.4s !important;
810
+ animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
811
+ }
812
+
813
+ .coach-stan-desktop-transition {
814
+ transition-duration: 0.35s !important;
815
+ transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
816
+ }
817
+
818
+ /* Desktop enhanced animations */
819
+ .coach-stan-desktop-complex {
820
+ animation-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55) !important;
821
+ }
822
+ }
823
+
824
+ /* Performance-based animation controls */
825
+ .coach-stan-performance-throttle {
826
+ animation-duration: 0.15s !important;
827
+ transition-duration: 0.15s !important;
828
+ }
829
+
830
+ .coach-stan-low-performance {
831
+ animation: none !important;
832
+ transition: opacity 0.1s linear !important;
833
+ will-change: auto !important;
834
+ }
835
+
836
+ /* Animation keyframes for mobile-optimized animations */
837
+ @keyframes mobileFadeIn {
838
+ from {
839
+ opacity: 0;
840
+ transform: translateY(8px) translateZ(0);
841
+ }
842
+ to {
843
+ opacity: 1;
844
+ transform: translateY(0) translateZ(0);
845
+ }
846
+ }
847
+
848
+ @keyframes mobileSlideIn {
849
+ from {
850
+ opacity: 0;
851
+ transform: translateX(-15px) translateZ(0);
852
+ }
853
+ to {
854
+ opacity: 1;
855
+ transform: translateX(0) translateZ(0);
856
+ }
857
+ }
858
+
859
+ @keyframes tabletBounce {
860
+ 0% {
861
+ transform: scale(1) translateZ(0);
862
+ }
863
+ 30% {
864
+ transform: scale(1.05) translateZ(0);
865
+ }
866
+ 60% {
867
+ transform: scale(0.98) translateZ(0);
868
+ }
869
+ 100% {
870
+ transform: scale(1) translateZ(0);
871
+ }
872
+ }
873
+
874
+ /* Animation utility classes */
875
+ .coach-stan-animate-on-scroll {
876
+ opacity: 0;
877
+ transform: translateY(20px) translateZ(0);
878
+ transition: opacity 0.4s ease-out, transform 0.4s ease-out;
879
+ }
880
+
881
+ .coach-stan-animate-on-scroll.visible {
882
+ opacity: 1;
883
+ transform: translateY(0) translateZ(0);
884
+ }
885
+
886
+ /* Staggered animation delays */
887
+ .coach-stan-stagger-delay-1 { animation-delay: 0.1s !important; }
888
+ .coach-stan-stagger-delay-2 { animation-delay: 0.2s !important; }
889
+ .coach-stan-stagger-delay-3 { animation-delay: 0.3s !important; }
890
+ .coach-stan-stagger-delay-4 { animation-delay: 0.4s !important; }
891
+ .coach-stan-stagger-delay-5 { animation-delay: 0.5s !important; }
892
+
893
+ /* Reduced Motion Support */
894
+ @media (prefers-reduced-motion: reduce) {
895
+ .coach-stan-reduced-motion,
896
+ .coach-stan-mobile-animation,
897
+ .coach-stan-tablet-animation,
898
+ .coach-stan-desktop-animation,
899
+ .animate-pulse,
900
+ .animate-wave,
901
+ .mobile-lazy-loaded {
902
+ animation: none !important;
903
+ transition: opacity 0.1s ease !important;
904
+ transform: none !important;
905
+ }
906
+
907
+ .coach-stan-animation-base {
908
+ will-change: auto !important;
909
+ }
910
+ }
911
+
912
+ /* High contrast mode adjustments */
913
+ @media (prefers-contrast: high) {
914
+ .coach-stan-animation-base {
915
+ animation-timing-function: linear !important;
916
+ transition-timing-function: linear !important;
917
+ }
918
+ }
919
+
920
+ /* Print media - disable all animations */
921
+ @media print {
922
+ .coach-stan-mobile-animation,
923
+ .coach-stan-tablet-animation,
924
+ .coach-stan-desktop-animation,
925
+ .coach-stan-animation-base {
926
+ animation: none !important;
927
+ transition: none !important;
928
+ transform: none !important;
929
+ opacity: 1 !important;
930
+ }
931
+ }
932
+
933
+ /* Mobile image optimization */
934
+ .mobile-image-container {
935
+ position: relative;
936
+ overflow: hidden;
937
+ background: var(--muted);
938
+ }
939
+
940
+ .mobile-image-loading {
941
+ background: linear-gradient(90deg, var(--muted) 25%, var(--muted-foreground/10) 50%, var(--muted) 75%);
942
+ background-size: 200% 100%;
943
+ animation: shimmer 1.5s infinite;
944
+ }
945
+
946
+ @keyframes shimmer {
947
+ 0% {
948
+ background-position: -200% 0;
949
+ }
950
+ 100% {
951
+ background-position: 200% 0;
952
+ }
953
+ }
954
+
955
+ /* GPU acceleration for mobile performance */
956
+ .mobile-optimized {
957
+ transform: translateZ(0);
958
+ backface-visibility: hidden;
959
+ perspective: 1000px;
960
+ }
961
+
962
+ .mobile-optimized * {
963
+ -webkit-font-smoothing: antialiased;
964
+ -moz-osx-font-smoothing: grayscale;
965
+ }
966
+
967
+ /* Memory-efficient scrolling for mobile */
968
+ .mobile-scroll-container {
969
+ -webkit-overflow-scrolling: touch;
970
+ scroll-behavior: smooth;
971
+ will-change: scroll-position;
972
+ }
973
+
974
+ /* Touch optimization */
975
+ .mobile-touch-optimized {
976
+ touch-action: manipulation;
977
+ -webkit-tap-highlight-color: transparent;
978
+ -webkit-touch-callout: none;
979
+ -webkit-user-select: none;
980
+ -moz-user-select: none;
981
+ user-select: none;
982
+ }
983
+
984
+ /* Color definitions for validation states */
985
+ :root {
986
+ --cs-success: #059669;
987
+ --cs-warning: #F59E0B;
988
+ --cs-error: #EF4444;
989
+ --cs-primary: #3B82F6;
990
+ --cs-info: #2563eb;
991
+ }
992
+
993
+ .dark {
994
+ --cs-success: #10b981;
995
+ --cs-warning: #fbbf24;
996
+ --cs-error: #f87171;
997
+ --cs-info: #60a5fa;
998
+ }
999
+
1000
+ .text-cs-success {
1001
+ color: var(--cs-success);
1002
+ }
1003
+
1004
+ .text-cs-warning {
1005
+ color: var(--cs-warning);
1006
+ }
1007
+
1008
+ .text-cs-error {
1009
+ color: var(--cs-error);
1010
+ }
1011
+
1012
+ .text-cs-info {
1013
+ color: var(--cs-info);
1014
+ }
1015
+
1016
+ /* Clash Display Variable Font Declarations */
1017
+ @font-face {
1018
+ font-family: 'Clash Display';
1019
+ src: url('/fonts/clash-display/ClashDisplay-Variable.woff2') format('woff2-variations');
1020
+ font-weight: 200 700;
1021
+ font-style: normal;
1022
+ font-display: swap;
1023
+ }
1024
+
1025
+ /* Fallback for browsers that don't support variable fonts */
1026
+ @supports not (font-variation-settings: normal) {
1027
+ @font-face {
1028
+ font-family: 'Clash Display';
1029
+ src: url('/fonts/clash-display/ClashDisplay-Variable.woff2') format('woff2');
1030
+ font-weight: 400;
1031
+ font-style: normal;
1032
+ font-display: swap;
1033
+ }
1034
+ }
1035
+
1036
+ /* Fallback for older browsers that don't support WOFF2 */
1037
+ @supports not (font-display: swap) {
1038
+ @font-face {
1039
+ font-family: 'Clash Display';
1040
+ src: url('/fonts/clash-display/ClashDisplay-Variable.woff') format('woff');
1041
+ font-weight: 200 700;
1042
+ font-style: normal;
1043
+ }
1044
+ }
1045
+
1046
+