web-mojo 2.1.46

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 (91) hide show
  1. package/LICENSE +198 -0
  2. package/README.md +510 -0
  3. package/dist/admin.cjs.js +2 -0
  4. package/dist/admin.cjs.js.map +1 -0
  5. package/dist/admin.css +621 -0
  6. package/dist/admin.es.js +7973 -0
  7. package/dist/admin.es.js.map +1 -0
  8. package/dist/auth.cjs.js +2 -0
  9. package/dist/auth.cjs.js.map +1 -0
  10. package/dist/auth.css +804 -0
  11. package/dist/auth.es.js +2168 -0
  12. package/dist/auth.es.js.map +1 -0
  13. package/dist/charts.cjs.js +2 -0
  14. package/dist/charts.cjs.js.map +1 -0
  15. package/dist/charts.css +1002 -0
  16. package/dist/charts.es.js +16 -0
  17. package/dist/charts.es.js.map +1 -0
  18. package/dist/chunks/ContextMenu-BrHqj0fn.js +80 -0
  19. package/dist/chunks/ContextMenu-BrHqj0fn.js.map +1 -0
  20. package/dist/chunks/ContextMenu-gEcpSz56.js +2 -0
  21. package/dist/chunks/ContextMenu-gEcpSz56.js.map +1 -0
  22. package/dist/chunks/DataView-DPryYpEW.js +2 -0
  23. package/dist/chunks/DataView-DPryYpEW.js.map +1 -0
  24. package/dist/chunks/DataView-DjZQrpba.js +843 -0
  25. package/dist/chunks/DataView-DjZQrpba.js.map +1 -0
  26. package/dist/chunks/Dialog-BsRx4eg3.js +2 -0
  27. package/dist/chunks/Dialog-BsRx4eg3.js.map +1 -0
  28. package/dist/chunks/Dialog-DSlctbon.js +1377 -0
  29. package/dist/chunks/Dialog-DSlctbon.js.map +1 -0
  30. package/dist/chunks/FilePreviewView-BmFHzK5K.js +5868 -0
  31. package/dist/chunks/FilePreviewView-BmFHzK5K.js.map +1 -0
  32. package/dist/chunks/FilePreviewView-DcdRl_ta.js +2 -0
  33. package/dist/chunks/FilePreviewView-DcdRl_ta.js.map +1 -0
  34. package/dist/chunks/FormView-CmBuwKGD.js +2 -0
  35. package/dist/chunks/FormView-CmBuwKGD.js.map +1 -0
  36. package/dist/chunks/FormView-DqUBMPJ9.js +5054 -0
  37. package/dist/chunks/FormView-DqUBMPJ9.js.map +1 -0
  38. package/dist/chunks/MetricsChart-CM4CI6eA.js +2095 -0
  39. package/dist/chunks/MetricsChart-CM4CI6eA.js.map +1 -0
  40. package/dist/chunks/MetricsChart-CPidSMaN.js +2 -0
  41. package/dist/chunks/MetricsChart-CPidSMaN.js.map +1 -0
  42. package/dist/chunks/PDFViewer-BNQlnS83.js +2 -0
  43. package/dist/chunks/PDFViewer-BNQlnS83.js.map +1 -0
  44. package/dist/chunks/PDFViewer-Dyo-Oeyd.js +946 -0
  45. package/dist/chunks/PDFViewer-Dyo-Oeyd.js.map +1 -0
  46. package/dist/chunks/Page-B524zSQs.js +351 -0
  47. package/dist/chunks/Page-B524zSQs.js.map +1 -0
  48. package/dist/chunks/Page-BFgj0pAA.js +2 -0
  49. package/dist/chunks/Page-BFgj0pAA.js.map +1 -0
  50. package/dist/chunks/TokenManager-BXNva8Jk.js +287 -0
  51. package/dist/chunks/TokenManager-BXNva8Jk.js.map +1 -0
  52. package/dist/chunks/TokenManager-Bzn4guFm.js +2 -0
  53. package/dist/chunks/TokenManager-Bzn4guFm.js.map +1 -0
  54. package/dist/chunks/TopNav-D3I3_25f.js +371 -0
  55. package/dist/chunks/TopNav-D3I3_25f.js.map +1 -0
  56. package/dist/chunks/TopNav-MDjL4kV0.js +2 -0
  57. package/dist/chunks/TopNav-MDjL4kV0.js.map +1 -0
  58. package/dist/chunks/User-BalfYTEF.js +3 -0
  59. package/dist/chunks/User-BalfYTEF.js.map +1 -0
  60. package/dist/chunks/User-DwIT-CTQ.js +1937 -0
  61. package/dist/chunks/User-DwIT-CTQ.js.map +1 -0
  62. package/dist/chunks/WebApp-B6mgbNn2.js +4767 -0
  63. package/dist/chunks/WebApp-B6mgbNn2.js.map +1 -0
  64. package/dist/chunks/WebApp-DqDowtkl.js +2 -0
  65. package/dist/chunks/WebApp-DqDowtkl.js.map +1 -0
  66. package/dist/chunks/WebSocketClient-D6i85jl2.js +2 -0
  67. package/dist/chunks/WebSocketClient-D6i85jl2.js.map +1 -0
  68. package/dist/chunks/WebSocketClient-Dvl3AYx1.js +297 -0
  69. package/dist/chunks/WebSocketClient-Dvl3AYx1.js.map +1 -0
  70. package/dist/core.css +1181 -0
  71. package/dist/css/web-mojo.css +17 -0
  72. package/dist/css-manifest.json +6 -0
  73. package/dist/docit.cjs.js +2 -0
  74. package/dist/docit.cjs.js.map +1 -0
  75. package/dist/docit.es.js +959 -0
  76. package/dist/docit.es.js.map +1 -0
  77. package/dist/index.cjs.js +2 -0
  78. package/dist/index.cjs.js.map +1 -0
  79. package/dist/index.es.js +2681 -0
  80. package/dist/index.es.js.map +1 -0
  81. package/dist/lightbox.cjs.js +2 -0
  82. package/dist/lightbox.cjs.js.map +1 -0
  83. package/dist/lightbox.css +606 -0
  84. package/dist/lightbox.es.js +3737 -0
  85. package/dist/lightbox.es.js.map +1 -0
  86. package/dist/loader.es.js +115 -0
  87. package/dist/loader.umd.js +85 -0
  88. package/dist/portal.css +2446 -0
  89. package/dist/table.css +639 -0
  90. package/dist/toast.css +181 -0
  91. package/package.json +179 -0
package/dist/auth.css ADDED
@@ -0,0 +1,804 @@
1
+ /**
2
+ * MOJO Authentication System CSS
3
+ * Complete styling for MOJO Framework authentication pages
4
+ *
5
+ * @version 2.0.0
6
+ * @license MIT
7
+ * @repository https://github.com/your-org/mojo-framework
8
+ *
9
+ * Usage in external projects:
10
+ * <link rel="stylesheet" href="node_modules/mojo-framework/src/css/auth.css">
11
+ *
12
+ * Or via CDN:
13
+ * <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mojo-framework/css/auth.css">
14
+ *
15
+ * Or import in CSS:
16
+ * @import url('path/to/mojo/src/css/auth.css');
17
+ */
18
+
19
+ /* ==========================================================================
20
+ CSS Custom Properties - Easy Theming for External Projects
21
+ ========================================================================== */
22
+
23
+ :root {
24
+ /* Primary brand colors - use Bootstrap variables as defaults */
25
+ --mojo-auth-primary: var(--bs-primary, #667eea);
26
+ --mojo-auth-primary-dark: var(--bs-primary-dark, #5a6fd4);
27
+ --mojo-auth-secondary: var(--bs-secondary, #764ba2);
28
+
29
+ /* Status colors - use Bootstrap semantic colors */
30
+ --mojo-auth-success: var(--bs-success);
31
+ --mojo-auth-danger: var(--bs-danger);
32
+ --mojo-auth-warning: var(--bs-warning);
33
+ --mojo-auth-info: var(--bs-info);
34
+
35
+ /* Layout variables - use Bootstrap spacing and borders */
36
+ --mojo-auth-border-radius: var(--bs-border-radius-lg, 1rem);
37
+ --mojo-auth-card-padding: var(--bs-spacer, 2rem);
38
+ --mojo-auth-transition: all 0.2s ease;
39
+ --mojo-auth-box-shadow: var(--bs-box-shadow-lg, 0 8px 32px rgba(0, 0, 0, 0.1));
40
+ --mojo-auth-card-bg: var(--bs-body-bg, rgba(255, 255, 255, 0.98));
41
+ --mojo-auth-text-color: var(--bs-body-color);
42
+ --mojo-auth-border-color: var(--bs-border-color);
43
+ --mojo-auth-background: linear-gradient(
44
+ 135deg,
45
+ var(--mojo-auth-primary) 0%,
46
+ var(--bs-body-bg, #ffffff) 100%
47
+ );
48
+ }
49
+
50
+ /* ==========================================================================
51
+ Auth Page Foundation
52
+ ========================================================================== */
53
+
54
+ .auth-page {
55
+ background: var(--mojo-auth-background);
56
+ min-height: 100vh;
57
+ font-family: var(
58
+ --bs-font-sans-serif,
59
+ -apple-system,
60
+ BlinkMacSystemFont,
61
+ "Segoe UI",
62
+ Roboto,
63
+ "Helvetica Neue",
64
+ Arial,
65
+ sans-serif
66
+ );
67
+
68
+ /* Apply custom properties */
69
+ --auth-primary-color: var(--mojo-auth-primary);
70
+ --auth-primary-dark: var(--mojo-auth-primary-dark);
71
+ --auth-secondary-color: var(--mojo-auth-secondary);
72
+ --auth-success-color: var(--mojo-auth-success);
73
+ --auth-danger-color: var(--mojo-auth-danger);
74
+ --auth-warning-color: var(--mojo-auth-warning);
75
+ --auth-info-color: var(--mojo-auth-info);
76
+ --auth-border-radius: var(--mojo-auth-border-radius);
77
+ --auth-transition: var(--mojo-auth-transition);
78
+ --auth-text-color: var(--mojo-auth-text-color);
79
+ --auth-border-color: var(--mojo-auth-border-color);
80
+ }
81
+
82
+ /* Override any parent background for auth pages */
83
+ /*.auth-page,
84
+ .auth-page * {
85
+ background: transparent !important;
86
+ }*/
87
+
88
+ /* Reset the background for the auth-page root */
89
+ .auth-page {
90
+ background: var(--mojo-auth-background) !important;
91
+ }
92
+
93
+ /* ==========================================================================
94
+ External Project Integration Helpers
95
+ ========================================================================== */
96
+
97
+ /**
98
+ * Full-screen auth container
99
+ * Use this class on your auth page container for full-screen auth experience
100
+ */
101
+ .mojo-auth-container {
102
+ min-height: 100vh;
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: center;
106
+ padding: 2rem 0;
107
+ }
108
+
109
+ /**
110
+ * Auth page wrapper with consistent spacing
111
+ * Use this to wrap your auth page content
112
+ */
113
+ .mojo-auth-wrapper {
114
+ width: 100%;
115
+ max-width: 500px;
116
+ margin: 0 auto;
117
+ padding: 0 1rem;
118
+ }
119
+
120
+ /**
121
+ * Custom logo positioning
122
+ * Add this class to customize logo appearance
123
+ */
124
+ .mojo-auth-logo {
125
+ max-height: 80px;
126
+ max-width: 200px;
127
+ object-fit: contain;
128
+ margin-bottom: 2rem;
129
+ }
130
+
131
+ /**
132
+ * Compact layout for embedded auth
133
+ * Use when embedding auth in existing layouts
134
+ */
135
+ .mojo-auth-compact .auth-page {
136
+ background: transparent;
137
+ min-height: auto;
138
+ padding: 1rem 0;
139
+ }
140
+
141
+ .mojo-auth-compact .auth-page .card {
142
+ margin: 0;
143
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
144
+ }
145
+
146
+ /**
147
+ * No-background variant
148
+ * Use when you want to handle the background yourself
149
+ */
150
+ .mojo-auth-no-bg .auth-page {
151
+ background: transparent;
152
+ min-height: auto;
153
+ }
154
+
155
+ /* ==========================================================================
156
+ Card Container
157
+ ========================================================================== */
158
+
159
+ .auth-page .card {
160
+ backdrop-filter: blur(10px);
161
+ background: var(--mojo-auth-card-bg) !important;
162
+ border: 1px solid rgba(255, 255, 255, 0.2);
163
+ border-radius: var(--auth-border-radius);
164
+ box-shadow: var(--mojo-auth-box-shadow);
165
+ transition:
166
+ transform 0.2s ease,
167
+ box-shadow 0.2s ease;
168
+ }
169
+
170
+ .auth-page .card:hover {
171
+ transform: translateY(-2px);
172
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
173
+ }
174
+
175
+ .auth-page .card-body {
176
+ position: relative;
177
+ padding: var(--mojo-auth-card-padding);
178
+ }
179
+
180
+ /* ==========================================================================
181
+ Form Controls
182
+ ========================================================================== */
183
+
184
+ .auth-page .form-control:focus,
185
+ .auth-page .form-check-input:focus {
186
+ border-color: var(--auth-primary-color);
187
+ box-shadow: 0 0 0 0.25rem rgba(102, 126, 234, 0.25);
188
+ outline: none;
189
+ }
190
+
191
+ .auth-page .form-control {
192
+ border-radius: var(--bs-border-radius, 0.5rem);
193
+ border: 1px solid var(--auth-border-color);
194
+ transition: var(--auth-transition);
195
+ }
196
+
197
+ .auth-page .form-control:hover:not(:focus) {
198
+ border-color: var(--bs-border-color-translucent, #adb5bd);
199
+ }
200
+
201
+ .auth-page .form-control.is-invalid {
202
+ border-color: var(--auth-danger-color);
203
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
204
+ }
205
+
206
+ .auth-page .form-control.is-valid {
207
+ border-color: var(--auth-success-color);
208
+ box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
209
+ }
210
+
211
+ /* Input Groups */
212
+ .auth-page .input-group .form-control:focus {
213
+ z-index: 5;
214
+ }
215
+
216
+ .auth-page .input-group .btn {
217
+ border-left: none;
218
+ }
219
+
220
+ .auth-page .input-group .btn:hover {
221
+ background-color: #f8f9fa;
222
+ border-color: var(--auth-primary-color);
223
+ color: var(--auth-primary-color);
224
+ }
225
+
226
+ /* ==========================================================================
227
+ Buttons
228
+ ========================================================================== */
229
+
230
+ .auth-page .btn-primary {
231
+ background: linear-gradient(
232
+ 135deg,
233
+ var(--auth-primary-color) 0%,
234
+ var(--auth-secondary-color) 100%
235
+ );
236
+ border: none;
237
+ border-radius: var(--bs-border-radius, 0.5rem);
238
+ font-weight: 500;
239
+ transition: var(--auth-transition);
240
+ }
241
+
242
+ .auth-page .btn-primary:hover:not(:disabled) {
243
+ background: linear-gradient(
244
+ 135deg,
245
+ var(--auth-primary-dark) 0%,
246
+ var(--auth-secondary-color) 100%
247
+ );
248
+ transform: translateY(-1px);
249
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
250
+ }
251
+
252
+ .auth-page .btn-primary:active:not(:disabled) {
253
+ transform: translateY(0);
254
+ box-shadow: 0 2px 8px rgba(102, 126, 234, 0.2);
255
+ }
256
+
257
+ .auth-page .btn-outline-primary:hover:not(:disabled),
258
+ .auth-page .btn-outline-secondary:hover:not(:disabled) {
259
+ transform: translateY(-1px);
260
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
261
+ }
262
+
263
+ .auth-page .btn-outline-primary {
264
+ border-color: var(--auth-primary-color);
265
+ color: var(--auth-primary-color);
266
+ }
267
+
268
+ .auth-page .btn-outline-primary:hover:not(:disabled) {
269
+ background-color: var(--auth-primary-color);
270
+ border-color: var(--auth-primary-color);
271
+ color: white;
272
+ }
273
+
274
+ /* Button Loading States */
275
+ .auth-page .btn:disabled {
276
+ opacity: 0.7;
277
+ cursor: not-allowed;
278
+ transform: none !important;
279
+ box-shadow: none !important;
280
+ }
281
+
282
+ .auth-page .spinner-border-sm {
283
+ width: 1rem;
284
+ height: 1rem;
285
+ }
286
+
287
+ /* ==========================================================================
288
+ Form Elements
289
+ ========================================================================== */
290
+
291
+ /* Form Labels */
292
+ .auth-page .form-label {
293
+ font-weight: 500;
294
+ color: var(--auth-text-color);
295
+ margin-bottom: 0.5rem;
296
+ }
297
+
298
+ .auth-page .form-label i {
299
+ color: var(--auth-primary-color);
300
+ }
301
+
302
+ /* Form Check */
303
+ .auth-page .form-check-input:checked {
304
+ background-color: var(--auth-primary-color);
305
+ border-color: var(--auth-primary-color);
306
+ }
307
+
308
+ .auth-page .form-check-input:focus {
309
+ box-shadow: 0 0 0 0.25rem rgba(102, 126, 234, 0.25);
310
+ }
311
+
312
+ .auth-page .form-check-label {
313
+ font-size: 0.9rem;
314
+ color: var(--bs-secondary-color, #6c757d);
315
+ }
316
+
317
+ /* Form Text */
318
+ .auth-page .form-text {
319
+ font-size: 0.875rem;
320
+ color: var(--bs-secondary-color, #6c757d);
321
+ }
322
+
323
+ /* Invalid Feedback */
324
+ .auth-page .invalid-feedback {
325
+ font-size: 0.875rem;
326
+ color: var(--auth-danger-color);
327
+ margin-top: 0.25rem;
328
+ }
329
+
330
+ /* ==========================================================================
331
+ Password Strength Indicator
332
+ ========================================================================== */
333
+
334
+ .auth-page .progress {
335
+ background-color: #e9ecef;
336
+ border-radius: 2px;
337
+ height: 4px;
338
+ overflow: hidden;
339
+ }
340
+
341
+ .auth-page .progress-bar {
342
+ transition: width 0.3s ease;
343
+ }
344
+
345
+ .auth-page .progress-bar.bg-danger {
346
+ background-color: var(--auth-danger-color) !important;
347
+ }
348
+
349
+ .auth-page .progress-bar.bg-warning {
350
+ background-color: var(--auth-warning-color) !important;
351
+ }
352
+
353
+ .auth-page .progress-bar.bg-info {
354
+ background-color: var(--auth-info-color) !important;
355
+ }
356
+
357
+ .auth-page .progress-bar.bg-success {
358
+ background-color: var(--auth-success-color) !important;
359
+ }
360
+
361
+ /* ==========================================================================
362
+ Alerts
363
+ ========================================================================== */
364
+
365
+ .auth-page .alert {
366
+ border-radius: var(--bs-border-radius, 0.5rem);
367
+ border: none;
368
+ box-shadow: var(--bs-box-shadow-sm, 0 2px 4px rgba(0, 0, 0, 0.1));
369
+ }
370
+
371
+ .auth-page .alert-danger {
372
+ background-color: var(--bs-danger-bg-subtle);
373
+ color: var(--bs-danger-text-emphasis);
374
+ border-left: 4px solid var(--auth-danger-color);
375
+ }
376
+
377
+ .auth-page .alert-success {
378
+ background-color: var(--bs-success-bg-subtle);
379
+ color: var(--bs-success-text-emphasis);
380
+ border-left: 4px solid var(--auth-success-color);
381
+ }
382
+
383
+ .auth-page .alert-warning {
384
+ background-color: var(--bs-warning-bg-subtle);
385
+ color: var(--bs-warning-text-emphasis);
386
+ border-left: 4px solid var(--auth-warning-color);
387
+ }
388
+
389
+ .auth-page .alert-info {
390
+ background-color: var(--bs-info-bg-subtle);
391
+ color: var(--bs-info-text-emphasis);
392
+ border-left: 4px solid var(--auth-info-color);
393
+ }
394
+
395
+ .auth-page .alert .bi {
396
+ font-size: 1.1em;
397
+ vertical-align: baseline;
398
+ }
399
+
400
+ /* ==========================================================================
401
+ Links
402
+ ========================================================================== */
403
+
404
+ .auth-page a {
405
+ color: var(--auth-primary-color);
406
+ text-decoration: none;
407
+ transition: color 0.2s ease;
408
+ }
409
+
410
+ .auth-page a:hover {
411
+ color: var(--auth-primary-dark);
412
+ text-decoration: underline;
413
+ }
414
+
415
+ .auth-page a:focus {
416
+ color: var(--auth-primary-dark);
417
+ outline: none;
418
+ box-shadow: 0 0 0 0.25rem rgba(102, 126, 234, 0.25);
419
+ border-radius: 0.25rem;
420
+ }
421
+
422
+ /* ==========================================================================
423
+ Dividers
424
+ ========================================================================== */
425
+
426
+ /* Dividers */
427
+ .auth-page .position-relative hr {
428
+ border-color: var(--auth-border-color);
429
+ opacity: 0.5;
430
+ }
431
+
432
+ .auth-page .position-relative .position-absolute {
433
+ background: var(--bs-body-bg, white);
434
+ padding: 0 1rem;
435
+ color: var(--bs-secondary-color, #6c757d);
436
+ font-size: 0.875rem;
437
+ font-weight: 500;
438
+ }
439
+
440
+ /* ==========================================================================
441
+ Success States
442
+ ========================================================================== */
443
+
444
+ .auth-page .text-success {
445
+ color: var(--auth-success-color) !important;
446
+ }
447
+
448
+ .auth-page .text-danger {
449
+ color: var(--auth-danger-color) !important;
450
+ }
451
+
452
+ .auth-page .text-warning {
453
+ color: var(--auth-warning-color) !important;
454
+ }
455
+
456
+ .auth-page .text-info {
457
+ color: var(--auth-info-color) !important;
458
+ }
459
+
460
+ .auth-page .text-muted {
461
+ color: var(--bs-secondary-color, #6c757d) !important;
462
+ }
463
+
464
+ /* ==========================================================================
465
+ Loading States
466
+ ========================================================================== */
467
+
468
+ .auth-page .spinner-border {
469
+ color: var(--auth-primary-color);
470
+ }
471
+
472
+ .auth-page .spinner-border-primary {
473
+ color: var(--auth-primary-color);
474
+ }
475
+
476
+ /* ==========================================================================
477
+ Framework Integration Helpers
478
+ ========================================================================== */
479
+
480
+ /**
481
+ * Bootstrap integration
482
+ * Ensures compatibility with Bootstrap themes
483
+ */
484
+ .bootstrap-theme .auth-page .btn-primary {
485
+ background: var(--bs-primary, var(--auth-primary-color));
486
+ border-color: var(--bs-primary, var(--auth-primary-color));
487
+ }
488
+
489
+ .bootstrap-theme .auth-page .form-control:focus {
490
+ border-color: var(--bs-primary, var(--auth-primary-color));
491
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb, 102, 126, 234), 0.25);
492
+ }
493
+
494
+ /**
495
+ * Tailwind CSS integration
496
+ * Helper classes for Tailwind projects
497
+ */
498
+ .tailwind-theme .auth-page {
499
+ font-family:
500
+ ui-sans-serif,
501
+ system-ui,
502
+ -apple-system,
503
+ BlinkMacSystemFont,
504
+ "Segoe UI",
505
+ Roboto,
506
+ "Helvetica Neue",
507
+ Arial,
508
+ "Noto Sans",
509
+ sans-serif;
510
+ }
511
+
512
+ /* ==========================================================================
513
+ Dark Theme Support
514
+ ========================================================================== */
515
+
516
+ /**
517
+ * Automatic dark mode detection
518
+ */
519
+ @media (prefers-color-scheme: dark) {
520
+ .mojo-auth-auto .auth-page {
521
+ background: linear-gradient(135deg, #4a5568 0%, #2d3748 100%);
522
+ }
523
+
524
+ .mojo-auth-auto .auth-page .card {
525
+ background: rgba(45, 55, 72, 0.95) !important;
526
+ border-color: rgba(255, 255, 255, 0.1);
527
+ color: white;
528
+ }
529
+
530
+ .mojo-auth-auto .auth-page .form-control {
531
+ background-color: rgba(45, 55, 72, 0.8);
532
+ border-color: rgba(255, 255, 255, 0.2);
533
+ color: white;
534
+ }
535
+
536
+ .mojo-auth-auto .auth-page .form-control::placeholder {
537
+ color: rgba(255, 255, 255, 0.6);
538
+ }
539
+
540
+ .mojo-auth-auto .auth-page .text-muted {
541
+ color: rgba(255, 255, 255, 0.7) !important;
542
+ }
543
+ }
544
+
545
+ /**
546
+ * Manual dark theme
547
+ * Add mojo-auth-dark class to enable
548
+ */
549
+ .mojo-auth-dark .auth-page {
550
+ background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
551
+ }
552
+
553
+ .mojo-auth-dark .auth-page .card {
554
+ background: rgba(26, 32, 44, 0.95) !important;
555
+ border-color: rgba(255, 255, 255, 0.1);
556
+ color: white;
557
+ }
558
+
559
+ .mojo-auth-dark .auth-page .form-control {
560
+ background-color: rgba(26, 32, 44, 0.8);
561
+ border-color: rgba(255, 255, 255, 0.2);
562
+ color: white;
563
+ }
564
+
565
+ .mojo-auth-dark .auth-page .form-control::placeholder {
566
+ color: rgba(255, 255, 255, 0.6);
567
+ }
568
+
569
+ .mojo-auth-dark .auth-page .text-muted {
570
+ color: rgba(255, 255, 255, 0.7) !important;
571
+ }
572
+
573
+ .mojo-auth-dark .auth-page .form-label {
574
+ color: rgba(255, 255, 255, 0.9);
575
+ }
576
+
577
+ .mojo-auth-dark .auth-page .alert-danger {
578
+ background-color: rgba(220, 53, 69, 0.2);
579
+ color: #f8d7da;
580
+ }
581
+
582
+ .mojo-auth-dark .auth-page .alert-success {
583
+ background-color: rgba(25, 135, 84, 0.2);
584
+ color: #d1e7dd;
585
+ }
586
+
587
+ /* ==========================================================================
588
+ Responsive Design
589
+ ========================================================================== */
590
+
591
+ @media (max-width: 768px) {
592
+ .auth-page {
593
+ padding: 1rem 0;
594
+ }
595
+
596
+ .auth-page .card {
597
+ margin: 0 1rem;
598
+ border-radius: 0.75rem;
599
+ }
600
+
601
+ .auth-page .card-body {
602
+ padding: 2rem 1.5rem;
603
+ }
604
+
605
+ .auth-page .btn-lg {
606
+ padding: 0.75rem 1.25rem;
607
+ font-size: 1rem;
608
+ }
609
+
610
+ .auth-page .form-control-lg {
611
+ padding: 0.75rem 1rem;
612
+ font-size: 1rem;
613
+ }
614
+
615
+ .auth-page h2 {
616
+ font-size: 1.5rem;
617
+ }
618
+
619
+ .mojo-auth-wrapper {
620
+ padding: 0 0.5rem;
621
+ }
622
+ }
623
+
624
+ @media (max-width: 480px) {
625
+ .auth-page .card-body {
626
+ padding: 1.5rem 1rem;
627
+ }
628
+
629
+ .auth-page .d-flex.justify-content-between {
630
+ flex-direction: column;
631
+ gap: 0.5rem;
632
+ }
633
+
634
+ .auth-page .form-check {
635
+ text-align: center;
636
+ }
637
+ }
638
+
639
+ /**
640
+ * Mobile full-screen option
641
+ */
642
+ @media (max-width: 575.98px) {
643
+ .mojo-auth-mobile-full .auth-page .card {
644
+ border-radius: 0;
645
+ min-height: 100vh;
646
+ display: flex;
647
+ flex-direction: column;
648
+ justify-content: center;
649
+ }
650
+ }
651
+
652
+ /**
653
+ * Desktop sidebar layout
654
+ */
655
+ @media (min-width: 992px) {
656
+ .mojo-auth-desktop-sidebar .mojo-auth-wrapper {
657
+ max-width: 400px;
658
+ margin-left: auto;
659
+ margin-right: 3rem;
660
+ }
661
+ }
662
+
663
+ /* ==========================================================================
664
+ Animation & Transitions
665
+ ========================================================================== */
666
+
667
+ .auth-page .fade-in {
668
+ animation: mojoAuthFadeIn 0.3s ease-in-out;
669
+ }
670
+
671
+ @keyframes mojoAuthFadeIn {
672
+ from {
673
+ opacity: 0;
674
+ transform: translateY(10px);
675
+ }
676
+ to {
677
+ opacity: 1;
678
+ transform: translateY(0);
679
+ }
680
+ }
681
+
682
+ .auth-page .slide-up {
683
+ animation: mojoAuthSlideUp 0.4s ease-out;
684
+ }
685
+
686
+ @keyframes mojoAuthSlideUp {
687
+ from {
688
+ opacity: 0;
689
+ transform: translateY(20px);
690
+ }
691
+ to {
692
+ opacity: 1;
693
+ transform: translateY(0);
694
+ }
695
+ }
696
+
697
+ /* ==========================================================================
698
+ Accessibility
699
+ ========================================================================== */
700
+
701
+ .auth-page *:focus {
702
+ outline: none;
703
+ }
704
+
705
+ .auth-page .btn:focus,
706
+ .auth-page .form-control:focus,
707
+ .auth-page .form-check-input:focus,
708
+ .auth-page a:focus {
709
+ box-shadow: 0 0 0 0.25rem rgba(102, 126, 234, 0.25);
710
+ }
711
+
712
+ /* Focus-visible support for better keyboard navigation */
713
+ @supports selector(:focus-visible) {
714
+ .auth-page *:focus:not(:focus-visible) {
715
+ box-shadow: none;
716
+ outline: none;
717
+ }
718
+ }
719
+
720
+ /* High contrast mode support */
721
+ @media (prefers-contrast: high) {
722
+ .auth-page .btn-primary {
723
+ background: #000;
724
+ border: 2px solid #000;
725
+ }
726
+
727
+ .auth-page .form-control:focus {
728
+ border-width: 2px;
729
+ }
730
+
731
+ .auth-page .btn {
732
+ border-width: 2px;
733
+ }
734
+ }
735
+
736
+ /* Reduced motion support */
737
+ @media (prefers-reduced-motion: reduce) {
738
+ .auth-page *,
739
+ .auth-page *::before,
740
+ .auth-page *::after {
741
+ animation-duration: 0.01ms !important;
742
+ animation-iteration-count: 1 !important;
743
+ transition-duration: 0.01ms !important;
744
+ }
745
+ }
746
+
747
+ /* ==========================================================================
748
+ Print Styles
749
+ ========================================================================== */
750
+
751
+ @media print {
752
+ .auth-page,
753
+ .mojo-auth-container,
754
+ .mojo-auth-wrapper {
755
+ background: white !important;
756
+ color: black !important;
757
+ }
758
+
759
+ .auth-page .card {
760
+ background: white !important;
761
+ box-shadow: none !important;
762
+ border: 1px solid #000 !important;
763
+ }
764
+
765
+ .auth-page .btn {
766
+ border: 1px solid #000 !important;
767
+ background: white !important;
768
+ color: black !important;
769
+ }
770
+
771
+ .mojo-auth-logo {
772
+ max-height: 60px;
773
+ }
774
+ }
775
+
776
+ /* ==========================================================================
777
+ External Project Customization Examples
778
+
779
+ Copy these examples to your project CSS to customize the auth system:
780
+ ========================================================================== */
781
+
782
+ /*
783
+ Example 1: Custom Brand Colors
784
+ :root {
785
+ --mojo-auth-primary: #ff6b35;
786
+ --mojo-auth-secondary: #004e7c;
787
+ }
788
+
789
+ Example 2: Square Design
790
+ :root {
791
+ --mojo-auth-border-radius: 0.25rem;
792
+ }
793
+
794
+ Example 3: Custom Background
795
+ .auth-page {
796
+ background: url('your-background.jpg') center/cover !important;
797
+ }
798
+
799
+ Example 4: Compact Integration
800
+ .your-app .mojo-auth-compact .auth-page {
801
+ background: transparent;
802
+ min-height: auto;
803
+ }
804
+ */