tina4-nodejs 3.0.0-rc.2

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 (119) hide show
  1. package/BENCHMARK_REPORT.md +96 -0
  2. package/CARBONAH.md +140 -0
  3. package/CLAUDE.md +599 -0
  4. package/COMPARISON.md +194 -0
  5. package/README.md +595 -0
  6. package/package.json +59 -0
  7. package/packages/cli/src/bin.ts +110 -0
  8. package/packages/cli/src/commands/init.ts +194 -0
  9. package/packages/cli/src/commands/migrate.ts +96 -0
  10. package/packages/cli/src/commands/migrateCreate.ts +59 -0
  11. package/packages/cli/src/commands/routes.ts +61 -0
  12. package/packages/cli/src/commands/serve.ts +58 -0
  13. package/packages/cli/src/commands/test.ts +83 -0
  14. package/packages/core/gallery/auth/meta.json +1 -0
  15. package/packages/core/gallery/auth/src/routes/api/gallery/auth/login/post.ts +22 -0
  16. package/packages/core/gallery/auth/src/routes/api/gallery/auth/verify/get.ts +16 -0
  17. package/packages/core/gallery/auth/src/routes/gallery/auth/get.ts +97 -0
  18. package/packages/core/gallery/database/meta.json +1 -0
  19. package/packages/core/gallery/database/src/routes/api/gallery/db/notes/get.ts +13 -0
  20. package/packages/core/gallery/database/src/routes/api/gallery/db/notes/post.ts +17 -0
  21. package/packages/core/gallery/database/src/routes/api/gallery/db/tables/get.ts +23 -0
  22. package/packages/core/gallery/error-overlay/meta.json +1 -0
  23. package/packages/core/gallery/error-overlay/src/routes/api/gallery/crash/get.ts +17 -0
  24. package/packages/core/gallery/orm/meta.json +1 -0
  25. package/packages/core/gallery/orm/src/routes/api/gallery/products/get.ts +12 -0
  26. package/packages/core/gallery/orm/src/routes/api/gallery/products/post.ts +7 -0
  27. package/packages/core/gallery/queue/meta.json +1 -0
  28. package/packages/core/gallery/queue/src/routes/api/gallery/queue/produce/post.ts +16 -0
  29. package/packages/core/gallery/queue/src/routes/api/gallery/queue/status/get.ts +10 -0
  30. package/packages/core/gallery/rest-api/meta.json +1 -0
  31. package/packages/core/gallery/rest-api/src/routes/api/gallery/hello/get.ts +6 -0
  32. package/packages/core/gallery/rest-api/src/routes/api/gallery/hello/post.ts +7 -0
  33. package/packages/core/gallery/templates/meta.json +1 -0
  34. package/packages/core/gallery/templates/src/routes/gallery/page/get.ts +15 -0
  35. package/packages/core/gallery/templates/src/templates/gallery_page.twig +257 -0
  36. package/packages/core/public/css/tina4.css +2463 -0
  37. package/packages/core/public/css/tina4.min.css +1 -0
  38. package/packages/core/public/favicon.ico +0 -0
  39. package/packages/core/public/images/logo.svg +5 -0
  40. package/packages/core/public/images/tina4-logo-icon.webp +0 -0
  41. package/packages/core/public/js/frond.min.js +420 -0
  42. package/packages/core/public/js/tina4-dev-admin.min.js +327 -0
  43. package/packages/core/public/js/tina4.min.js +93 -0
  44. package/packages/core/public/swagger/index.html +90 -0
  45. package/packages/core/public/swagger/oauth2-redirect.html +63 -0
  46. package/packages/core/src/ai.ts +359 -0
  47. package/packages/core/src/api.ts +248 -0
  48. package/packages/core/src/auth.ts +287 -0
  49. package/packages/core/src/cache.ts +121 -0
  50. package/packages/core/src/constants.ts +48 -0
  51. package/packages/core/src/container.ts +90 -0
  52. package/packages/core/src/devAdmin.ts +2024 -0
  53. package/packages/core/src/devMailbox.ts +316 -0
  54. package/packages/core/src/dotenv.ts +172 -0
  55. package/packages/core/src/errorOverlay.test.ts +122 -0
  56. package/packages/core/src/errorOverlay.ts +278 -0
  57. package/packages/core/src/events.ts +112 -0
  58. package/packages/core/src/fakeData.ts +309 -0
  59. package/packages/core/src/graphql.ts +812 -0
  60. package/packages/core/src/health.ts +31 -0
  61. package/packages/core/src/htmlElement.ts +172 -0
  62. package/packages/core/src/i18n.ts +136 -0
  63. package/packages/core/src/index.ts +88 -0
  64. package/packages/core/src/logger.ts +226 -0
  65. package/packages/core/src/messenger.ts +822 -0
  66. package/packages/core/src/middleware.ts +138 -0
  67. package/packages/core/src/queue.ts +481 -0
  68. package/packages/core/src/queueBackends/kafkaBackend.ts +348 -0
  69. package/packages/core/src/queueBackends/rabbitmqBackend.ts +479 -0
  70. package/packages/core/src/rateLimiter.ts +107 -0
  71. package/packages/core/src/request.ts +189 -0
  72. package/packages/core/src/response.ts +146 -0
  73. package/packages/core/src/routeDiscovery.ts +87 -0
  74. package/packages/core/src/router.ts +398 -0
  75. package/packages/core/src/scss.ts +366 -0
  76. package/packages/core/src/server.ts +610 -0
  77. package/packages/core/src/service.ts +380 -0
  78. package/packages/core/src/session.ts +480 -0
  79. package/packages/core/src/sessionHandlers/mongoHandler.ts +286 -0
  80. package/packages/core/src/sessionHandlers/valkeyHandler.ts +184 -0
  81. package/packages/core/src/static.ts +58 -0
  82. package/packages/core/src/testing.ts +233 -0
  83. package/packages/core/src/types.ts +98 -0
  84. package/packages/core/src/watcher.ts +37 -0
  85. package/packages/core/src/websocket.ts +408 -0
  86. package/packages/core/src/wsdl.ts +546 -0
  87. package/packages/core/templates/errors/302.twig +14 -0
  88. package/packages/core/templates/errors/401.twig +9 -0
  89. package/packages/core/templates/errors/403.twig +29 -0
  90. package/packages/core/templates/errors/404.twig +29 -0
  91. package/packages/core/templates/errors/500.twig +38 -0
  92. package/packages/core/templates/errors/502.twig +9 -0
  93. package/packages/core/templates/errors/503.twig +12 -0
  94. package/packages/core/templates/errors/base.twig +37 -0
  95. package/packages/frond/src/engine.ts +1475 -0
  96. package/packages/frond/src/index.ts +2 -0
  97. package/packages/orm/src/adapters/firebird.ts +455 -0
  98. package/packages/orm/src/adapters/mssql.ts +440 -0
  99. package/packages/orm/src/adapters/mysql.ts +355 -0
  100. package/packages/orm/src/adapters/postgres.ts +362 -0
  101. package/packages/orm/src/adapters/sqlite.ts +270 -0
  102. package/packages/orm/src/autoCrud.ts +231 -0
  103. package/packages/orm/src/baseModel.ts +536 -0
  104. package/packages/orm/src/database.ts +321 -0
  105. package/packages/orm/src/fakeData.ts +118 -0
  106. package/packages/orm/src/index.ts +49 -0
  107. package/packages/orm/src/migration.ts +392 -0
  108. package/packages/orm/src/model.ts +56 -0
  109. package/packages/orm/src/query.ts +113 -0
  110. package/packages/orm/src/seeder.ts +120 -0
  111. package/packages/orm/src/sqlTranslation.ts +272 -0
  112. package/packages/orm/src/types.ts +110 -0
  113. package/packages/orm/src/validation.ts +93 -0
  114. package/packages/swagger/src/generator.ts +189 -0
  115. package/packages/swagger/src/index.ts +2 -0
  116. package/packages/swagger/src/ui.ts +48 -0
  117. package/skills/tina4-developer.skill +0 -0
  118. package/skills/tina4-js.skill +0 -0
  119. package/skills/tina4-maintainer.skill +0 -0
@@ -0,0 +1,2463 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html {
8
+ line-height: 1.5;
9
+ -webkit-text-size-adjust: 100%;
10
+ -moz-tab-size: 4;
11
+ tab-size: 4;
12
+ scroll-behavior: smooth;
13
+ }
14
+
15
+ body {
16
+ margin: 0;
17
+ font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
18
+ font-size: 1rem;
19
+ font-weight: 400;
20
+ line-height: 1.5;
21
+ color: #212529;
22
+ background-color: #fff;
23
+ -webkit-font-smoothing: antialiased;
24
+ -moz-osx-font-smoothing: grayscale;
25
+ }
26
+
27
+ h1, h2, h3, h4, h5, h6 {
28
+ margin-top: 0;
29
+ margin-bottom: 0.5rem;
30
+ font-weight: 500;
31
+ line-height: 1.25;
32
+ }
33
+
34
+ p {
35
+ margin-top: 0;
36
+ margin-bottom: 1rem;
37
+ }
38
+
39
+ ol, ul {
40
+ padding-left: 2rem;
41
+ margin-top: 0;
42
+ margin-bottom: 1rem;
43
+ }
44
+
45
+ a {
46
+ color: #4a90d9;
47
+ text-decoration: none;
48
+ }
49
+
50
+ a:hover {
51
+ color: #256ab1;
52
+ text-decoration: underline;
53
+ }
54
+
55
+ img, svg {
56
+ max-width: 100%;
57
+ height: auto;
58
+ vertical-align: middle;
59
+ }
60
+
61
+ table {
62
+ border-collapse: collapse;
63
+ caption-side: bottom;
64
+ }
65
+
66
+ button, input, optgroup, select, textarea {
67
+ margin: 0;
68
+ font-family: inherit;
69
+ font-size: inherit;
70
+ line-height: inherit;
71
+ }
72
+
73
+ button, select {
74
+ text-transform: none;
75
+ }
76
+
77
+ button, [type="button"], [type="reset"], [type="submit"] {
78
+ -webkit-appearance: button;
79
+ cursor: pointer;
80
+ }
81
+
82
+ hr {
83
+ margin: 1rem 0;
84
+ color: inherit;
85
+ border: 0;
86
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
87
+ opacity: 0.25;
88
+ }
89
+
90
+ pre, code, kbd, samp {
91
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
92
+ font-size: 1em;
93
+ }
94
+
95
+ pre {
96
+ margin-top: 0;
97
+ margin-bottom: 1rem;
98
+ overflow: auto;
99
+ }
100
+
101
+ [hidden] {
102
+ display: none !important;
103
+ }
104
+
105
+ h1 {
106
+ font-size: 2.25rem;
107
+ }
108
+
109
+ h2 {
110
+ font-size: 1.875rem;
111
+ }
112
+
113
+ h3 {
114
+ font-size: 1.5rem;
115
+ }
116
+
117
+ h4 {
118
+ font-size: 1.25rem;
119
+ }
120
+
121
+ h5 {
122
+ font-size: 1.125rem;
123
+ }
124
+
125
+ h6 {
126
+ font-size: 1rem;
127
+ }
128
+
129
+ small, .small {
130
+ font-size: 0.875em;
131
+ }
132
+
133
+ mark, .mark {
134
+ padding: 0.2em;
135
+ background-color: rgba(255, 193, 7, 0.3);
136
+ }
137
+
138
+ blockquote {
139
+ margin: 0 0 1rem;
140
+ padding: 0.5rem 1rem;
141
+ border-left: 0.25rem solid rgba(0, 0, 0, 0.1);
142
+ font-size: 1.125rem;
143
+ }
144
+
145
+ code {
146
+ font-size: 0.875em;
147
+ color: #dc3545;
148
+ word-wrap: break-word;
149
+ }
150
+
151
+ pre {
152
+ display: block;
153
+ padding: 1rem;
154
+ font-size: 0.875em;
155
+ color: #212529;
156
+ background-color: #f8f9fa;
157
+ border-radius: 0.25rem;
158
+ }
159
+
160
+ .list-unstyled {
161
+ padding-left: 0;
162
+ list-style: none;
163
+ }
164
+
165
+ .list-inline {
166
+ padding-left: 0;
167
+ list-style: none;
168
+ }
169
+
170
+ .list-inline-item {
171
+ display: inline-block;
172
+ }
173
+
174
+ .list-inline-item:not(:last-child) {
175
+ margin-right: 0.5rem;
176
+ }
177
+
178
+ .container,
179
+ .container-fluid {
180
+ width: 100%;
181
+ padding-right: calc($grid-gutter / 2);
182
+ padding-left: calc($grid-gutter / 2);
183
+ margin-right: auto;
184
+ margin-left: auto;
185
+ }
186
+
187
+ @media (min-width: 576px) {
188
+ .container {
189
+ max-width: 540px;
190
+ }
191
+ }
192
+
193
+ @media (min-width: 768px) {
194
+ .container {
195
+ max-width: 720px;
196
+ }
197
+ }
198
+
199
+ @media (min-width: 992px) {
200
+ .container {
201
+ max-width: 960px;
202
+ }
203
+ }
204
+
205
+ @media (min-width: 1200px) {
206
+ .container {
207
+ max-width: 1140px;
208
+ }
209
+ }
210
+
211
+ @media (min-width: 1400px) {
212
+ .container {
213
+ max-width: 1320px;
214
+ }
215
+ }
216
+
217
+ .row {
218
+ display: flex;
219
+ flex-wrap: wrap;
220
+ margin-right: calc($grid-gutter / -2);
221
+ margin-left: calc($grid-gutter / -2);
222
+ }
223
+
224
+ .row > * {
225
+ flex-shrink: 0;
226
+ width: 100%;
227
+ max-width: 100%;
228
+ padding-right: calc($grid-gutter / 2);
229
+ padding-left: calc($grid-gutter / 2);
230
+ }
231
+
232
+ .col {
233
+ flex: 1 0 0%;
234
+ }
235
+
236
+ .col-1 {
237
+ flex: 0 0 auto;
238
+ width: 8.33333%;
239
+ }
240
+
241
+ .col-2 {
242
+ flex: 0 0 auto;
243
+ width: 16.66667%;
244
+ }
245
+
246
+ .col-3 {
247
+ flex: 0 0 auto;
248
+ width: 25%;
249
+ }
250
+
251
+ .col-4 {
252
+ flex: 0 0 auto;
253
+ width: 33.33333%;
254
+ }
255
+
256
+ .col-5 {
257
+ flex: 0 0 auto;
258
+ width: 41.66667%;
259
+ }
260
+
261
+ .col-6 {
262
+ flex: 0 0 auto;
263
+ width: 50%;
264
+ }
265
+
266
+ .col-7 {
267
+ flex: 0 0 auto;
268
+ width: 58.33333%;
269
+ }
270
+
271
+ .col-8 {
272
+ flex: 0 0 auto;
273
+ width: 66.66667%;
274
+ }
275
+
276
+ .col-9 {
277
+ flex: 0 0 auto;
278
+ width: 75%;
279
+ }
280
+
281
+ .col-10 {
282
+ flex: 0 0 auto;
283
+ width: 83.33333%;
284
+ }
285
+
286
+ .col-11 {
287
+ flex: 0 0 auto;
288
+ width: 91.66667%;
289
+ }
290
+
291
+ .col-12 {
292
+ flex: 0 0 auto;
293
+ width: 100%;
294
+ }
295
+
296
+ .offset-1 {
297
+ margin-left: 8.33333%;
298
+ }
299
+
300
+ .offset-2 {
301
+ margin-left: 16.66667%;
302
+ }
303
+
304
+ .offset-3 {
305
+ margin-left: 25%;
306
+ }
307
+
308
+ .offset-4 {
309
+ margin-left: 33.33333%;
310
+ }
311
+
312
+ .offset-0 {
313
+ margin-left: 0;
314
+ }
315
+
316
+ @media (min-width: 576px) {
317
+ .col-sm {
318
+ flex: 1 0 0%;
319
+ }
320
+ .col-sm-1 {
321
+ flex: 0 0 auto;
322
+ width: 8.33333%;
323
+ }
324
+ .col-sm-2 {
325
+ flex: 0 0 auto;
326
+ width: 16.66667%;
327
+ }
328
+ .col-sm-3 {
329
+ flex: 0 0 auto;
330
+ width: 25%;
331
+ }
332
+ .col-sm-4 {
333
+ flex: 0 0 auto;
334
+ width: 33.33333%;
335
+ }
336
+ .col-sm-5 {
337
+ flex: 0 0 auto;
338
+ width: 41.66667%;
339
+ }
340
+ .col-sm-6 {
341
+ flex: 0 0 auto;
342
+ width: 50%;
343
+ }
344
+ .col-sm-7 {
345
+ flex: 0 0 auto;
346
+ width: 58.33333%;
347
+ }
348
+ .col-sm-8 {
349
+ flex: 0 0 auto;
350
+ width: 66.66667%;
351
+ }
352
+ .col-sm-9 {
353
+ flex: 0 0 auto;
354
+ width: 75%;
355
+ }
356
+ .col-sm-10 {
357
+ flex: 0 0 auto;
358
+ width: 83.33333%;
359
+ }
360
+ .col-sm-11 {
361
+ flex: 0 0 auto;
362
+ width: 91.66667%;
363
+ }
364
+ .col-sm-12 {
365
+ flex: 0 0 auto;
366
+ width: 100%;
367
+ }
368
+ .offset-sm-0 {
369
+ margin-left: 0;
370
+ }
371
+ }
372
+
373
+ @media (min-width: 768px) {
374
+ .col-md {
375
+ flex: 1 0 0%;
376
+ }
377
+ .col-md-1 {
378
+ flex: 0 0 auto;
379
+ width: 8.33333%;
380
+ }
381
+ .col-md-2 {
382
+ flex: 0 0 auto;
383
+ width: 16.66667%;
384
+ }
385
+ .col-md-3 {
386
+ flex: 0 0 auto;
387
+ width: 25%;
388
+ }
389
+ .col-md-4 {
390
+ flex: 0 0 auto;
391
+ width: 33.33333%;
392
+ }
393
+ .col-md-5 {
394
+ flex: 0 0 auto;
395
+ width: 41.66667%;
396
+ }
397
+ .col-md-6 {
398
+ flex: 0 0 auto;
399
+ width: 50%;
400
+ }
401
+ .col-md-7 {
402
+ flex: 0 0 auto;
403
+ width: 58.33333%;
404
+ }
405
+ .col-md-8 {
406
+ flex: 0 0 auto;
407
+ width: 66.66667%;
408
+ }
409
+ .col-md-9 {
410
+ flex: 0 0 auto;
411
+ width: 75%;
412
+ }
413
+ .col-md-10 {
414
+ flex: 0 0 auto;
415
+ width: 83.33333%;
416
+ }
417
+ .col-md-11 {
418
+ flex: 0 0 auto;
419
+ width: 91.66667%;
420
+ }
421
+ .col-md-12 {
422
+ flex: 0 0 auto;
423
+ width: 100%;
424
+ }
425
+ .offset-md-0 {
426
+ margin-left: 0;
427
+ }
428
+ }
429
+
430
+ @media (min-width: 992px) {
431
+ .col-lg {
432
+ flex: 1 0 0%;
433
+ }
434
+ .col-lg-1 {
435
+ flex: 0 0 auto;
436
+ width: 8.33333%;
437
+ }
438
+ .col-lg-2 {
439
+ flex: 0 0 auto;
440
+ width: 16.66667%;
441
+ }
442
+ .col-lg-3 {
443
+ flex: 0 0 auto;
444
+ width: 25%;
445
+ }
446
+ .col-lg-4 {
447
+ flex: 0 0 auto;
448
+ width: 33.33333%;
449
+ }
450
+ .col-lg-5 {
451
+ flex: 0 0 auto;
452
+ width: 41.66667%;
453
+ }
454
+ .col-lg-6 {
455
+ flex: 0 0 auto;
456
+ width: 50%;
457
+ }
458
+ .col-lg-7 {
459
+ flex: 0 0 auto;
460
+ width: 58.33333%;
461
+ }
462
+ .col-lg-8 {
463
+ flex: 0 0 auto;
464
+ width: 66.66667%;
465
+ }
466
+ .col-lg-9 {
467
+ flex: 0 0 auto;
468
+ width: 75%;
469
+ }
470
+ .col-lg-10 {
471
+ flex: 0 0 auto;
472
+ width: 83.33333%;
473
+ }
474
+ .col-lg-11 {
475
+ flex: 0 0 auto;
476
+ width: 91.66667%;
477
+ }
478
+ .col-lg-12 {
479
+ flex: 0 0 auto;
480
+ width: 100%;
481
+ }
482
+ .offset-lg-0 {
483
+ margin-left: 0;
484
+ }
485
+ }
486
+
487
+ @media (min-width: 1200px) {
488
+ .col-xl {
489
+ flex: 1 0 0%;
490
+ }
491
+ .col-xl-1 {
492
+ flex: 0 0 auto;
493
+ width: 8.33333%;
494
+ }
495
+ .col-xl-2 {
496
+ flex: 0 0 auto;
497
+ width: 16.66667%;
498
+ }
499
+ .col-xl-3 {
500
+ flex: 0 0 auto;
501
+ width: 25%;
502
+ }
503
+ .col-xl-4 {
504
+ flex: 0 0 auto;
505
+ width: 33.33333%;
506
+ }
507
+ .col-xl-5 {
508
+ flex: 0 0 auto;
509
+ width: 41.66667%;
510
+ }
511
+ .col-xl-6 {
512
+ flex: 0 0 auto;
513
+ width: 50%;
514
+ }
515
+ .col-xl-7 {
516
+ flex: 0 0 auto;
517
+ width: 58.33333%;
518
+ }
519
+ .col-xl-8 {
520
+ flex: 0 0 auto;
521
+ width: 66.66667%;
522
+ }
523
+ .col-xl-9 {
524
+ flex: 0 0 auto;
525
+ width: 75%;
526
+ }
527
+ .col-xl-10 {
528
+ flex: 0 0 auto;
529
+ width: 83.33333%;
530
+ }
531
+ .col-xl-11 {
532
+ flex: 0 0 auto;
533
+ width: 91.66667%;
534
+ }
535
+ .col-xl-12 {
536
+ flex: 0 0 auto;
537
+ width: 100%;
538
+ }
539
+ .offset-xl-0 {
540
+ margin-left: 0;
541
+ }
542
+ }
543
+
544
+ .justify-start {
545
+ justify-content: flex-start;
546
+ }
547
+
548
+ .justify-center {
549
+ justify-content: center;
550
+ }
551
+
552
+ .justify-end {
553
+ justify-content: flex-end;
554
+ }
555
+
556
+ .justify-between {
557
+ justify-content: space-between;
558
+ }
559
+
560
+ .justify-around {
561
+ justify-content: space-around;
562
+ }
563
+
564
+ .align-start {
565
+ align-items: flex-start;
566
+ }
567
+
568
+ .align-center {
569
+ align-items: center;
570
+ }
571
+
572
+ .align-end {
573
+ align-items: flex-end;
574
+ }
575
+
576
+ .btn {
577
+ display: inline-block;
578
+ font-weight: 400;
579
+ line-height: 1.5;
580
+ color: #212529;
581
+ text-align: center;
582
+ vertical-align: middle;
583
+ cursor: pointer;
584
+ user-select: none;
585
+ background-color: transparent;
586
+ border: 1px solid transparent;
587
+ padding: 0.375rem 0.75rem;
588
+ font-size: 1rem;
589
+ border-radius: 0.25rem;
590
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
591
+ text-decoration: none;
592
+ }
593
+
594
+ .btn:disabled, .btn.disabled {
595
+ pointer-events: none;
596
+ opacity: 0.65;
597
+ }
598
+
599
+ .btn-primary {
600
+ color: #fff;
601
+ background-color: #4a90d9;
602
+ border-color: #4a90d9;
603
+ }
604
+
605
+ .btn-primary:hover {
606
+ background-color: #2b7bcf;
607
+ border-color: #2a76c6;
608
+ }
609
+
610
+ .btn-secondary {
611
+ color: #fff;
612
+ background-color: #6c757d;
613
+ border-color: #6c757d;
614
+ }
615
+
616
+ .btn-secondary:hover {
617
+ background-color: #596167;
618
+ border-color: #545b62;
619
+ }
620
+
621
+ .btn-success {
622
+ color: #fff;
623
+ background-color: #28a745;
624
+ border-color: #28a745;
625
+ }
626
+
627
+ .btn-success:hover {
628
+ background-color: #208637;
629
+ border-color: #1e7e34;
630
+ }
631
+
632
+ .btn-danger {
633
+ color: #fff;
634
+ background-color: #dc3545;
635
+ border-color: #dc3545;
636
+ }
637
+
638
+ .btn-danger:hover {
639
+ background-color: #c62232;
640
+ border-color: #bd2130;
641
+ }
642
+
643
+ .btn-warning {
644
+ color: #212529;
645
+ background-color: #ffc107;
646
+ border-color: #ffc107;
647
+ }
648
+
649
+ .btn-warning:hover {
650
+ background-color: #dda600;
651
+ border-color: #d39e00;
652
+ }
653
+
654
+ .btn-info {
655
+ color: #fff;
656
+ background-color: #17a2b8;
657
+ border-color: #17a2b8;
658
+ }
659
+
660
+ .btn-info:hover {
661
+ background-color: #128294;
662
+ border-color: #117a8b;
663
+ }
664
+
665
+ .btn-light {
666
+ color: #212529;
667
+ background-color: #f8f9fa;
668
+ border-color: #f8f9fa;
669
+ }
670
+
671
+ .btn-light:hover {
672
+ background-color: #e0e5e9;
673
+ border-color: #dae0e5;
674
+ }
675
+
676
+ .btn-dark {
677
+ color: #fff;
678
+ background-color: #212529;
679
+ border-color: #212529;
680
+ }
681
+
682
+ .btn-dark:hover {
683
+ background-color: #0f1112;
684
+ border-color: #0a0c0d;
685
+ }
686
+
687
+ .btn-outline-primary {
688
+ color: #4a90d9;
689
+ border-color: #4a90d9;
690
+ background-color: transparent;
691
+ }
692
+
693
+ .btn-outline-primary:hover {
694
+ color: #fff;
695
+ background-color: #4a90d9;
696
+ }
697
+
698
+ .btn-outline-secondary {
699
+ color: #6c757d;
700
+ border-color: #6c757d;
701
+ background-color: transparent;
702
+ }
703
+
704
+ .btn-outline-secondary:hover {
705
+ color: #fff;
706
+ background-color: #6c757d;
707
+ }
708
+
709
+ .btn-outline-success {
710
+ color: #28a745;
711
+ border-color: #28a745;
712
+ background-color: transparent;
713
+ }
714
+
715
+ .btn-outline-success:hover {
716
+ color: #fff;
717
+ background-color: #28a745;
718
+ }
719
+
720
+ .btn-outline-danger {
721
+ color: #dc3545;
722
+ border-color: #dc3545;
723
+ background-color: transparent;
724
+ }
725
+
726
+ .btn-outline-danger:hover {
727
+ color: #fff;
728
+ background-color: #dc3545;
729
+ }
730
+
731
+ .btn-outline-warning {
732
+ color: #ffc107;
733
+ border-color: #ffc107;
734
+ background-color: transparent;
735
+ }
736
+
737
+ .btn-outline-warning:hover {
738
+ color: #212529;
739
+ background-color: #ffc107;
740
+ }
741
+
742
+ .btn-outline-info {
743
+ color: #17a2b8;
744
+ border-color: #17a2b8;
745
+ background-color: transparent;
746
+ }
747
+
748
+ .btn-outline-info:hover {
749
+ color: #fff;
750
+ background-color: #17a2b8;
751
+ }
752
+
753
+ .btn-outline-light {
754
+ color: #f8f9fa;
755
+ border-color: #f8f9fa;
756
+ background-color: transparent;
757
+ }
758
+
759
+ .btn-outline-light:hover {
760
+ color: #212529;
761
+ background-color: #f8f9fa;
762
+ }
763
+
764
+ .btn-outline-dark {
765
+ color: #212529;
766
+ border-color: #212529;
767
+ background-color: transparent;
768
+ }
769
+
770
+ .btn-outline-dark:hover {
771
+ color: #fff;
772
+ background-color: #212529;
773
+ }
774
+
775
+ .btn-sm {
776
+ padding: 0.25rem 0.5rem;
777
+ font-size: 0.875rem;
778
+ border-radius: 0.25rem;
779
+ }
780
+
781
+ .btn-lg {
782
+ padding: 0.5rem 1rem;
783
+ font-size: 1.125rem;
784
+ border-radius: 0.5rem;
785
+ }
786
+
787
+ .btn-block {
788
+ display: block;
789
+ width: 100%;
790
+ }
791
+
792
+ .form-group {
793
+ margin-bottom: 1rem;
794
+ }
795
+
796
+ .form-label {
797
+ display: inline-block;
798
+ margin-bottom: 0.5rem;
799
+ font-weight: 700;
800
+ }
801
+
802
+ .form-control {
803
+ display: block;
804
+ width: 100%;
805
+ padding: 0.375rem 0.75rem;
806
+ font-size: 1rem;
807
+ font-weight: 400;
808
+ line-height: 1.5;
809
+ color: #212529;
810
+ background-color: #fff;
811
+ background-clip: padding-box;
812
+ border: 1px solid #ced4da;
813
+ border-radius: 0.25rem;
814
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
815
+ appearance: none;
816
+ }
817
+
818
+ .form-control:focus {
819
+ color: #212529;
820
+ background-color: #fff;
821
+ border-color: #b3d1ef;
822
+ outline: 0;
823
+ box-shadow: 0 0 0 0.2rem rgba(74, 144, 217, 0.25);
824
+ }
825
+
826
+ .form-control::placeholder {
827
+ color: #6c757d;
828
+ opacity: 1;
829
+ }
830
+
831
+ .form-control:disabled {
832
+ background-color: #f8f9fa;
833
+ opacity: 1;
834
+ }
835
+
836
+ textarea.form-control {
837
+ min-height: calc(1.5em + 0.75rem + 2px);
838
+ }
839
+
840
+ .form-select {
841
+ display: block;
842
+ width: 100%;
843
+ padding: 0.375rem 2.25rem 0.375rem 0.75rem;
844
+ font-size: 1rem;
845
+ font-weight: 400;
846
+ line-height: 1.5;
847
+ color: #212529;
848
+ background-color: #fff;
849
+ border: 1px solid #ced4da;
850
+ border-radius: 0.25rem;
851
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
852
+ appearance: none;
853
+ }
854
+
855
+ .form-select:focus {
856
+ border-color: #b3d1ef;
857
+ outline: 0;
858
+ box-shadow: 0 0 0 0.2rem rgba(74, 144, 217, 0.25);
859
+ }
860
+
861
+ .form-check {
862
+ display: block;
863
+ min-height: 1.5rem;
864
+ padding-left: 1.5em;
865
+ margin-bottom: 0.125rem;
866
+ }
867
+
868
+ .form-check-input {
869
+ float: left;
870
+ width: 1em;
871
+ height: 1em;
872
+ margin-left: -1.5em;
873
+ margin-top: 0.25em;
874
+ appearance: none;
875
+ background-color: #fff;
876
+ border: 1px solid rgba(0, 0, 0, 0.25);
877
+ }
878
+
879
+ .form-check-input[type="checkbox"] {
880
+ border-radius: 0.25em;
881
+ }
882
+
883
+ .form-check-input[type="radio"] {
884
+ border-radius: 50%;
885
+ }
886
+
887
+ .form-check-input:checked {
888
+ background-color: #4a90d9;
889
+ border-color: #4a90d9;
890
+ }
891
+
892
+ .form-check-input:focus {
893
+ border-color: #b3d1ef;
894
+ outline: 0;
895
+ box-shadow: 0 0 0 0.2rem rgba(74, 144, 217, 0.25);
896
+ }
897
+
898
+ .form-check-label {
899
+ cursor: pointer;
900
+ }
901
+
902
+ .is-valid {
903
+ border-color: #28a745 !important;
904
+ }
905
+
906
+ .is-valid:focus {
907
+ box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25) !important;
908
+ }
909
+
910
+ .is-invalid {
911
+ border-color: #dc3545 !important;
912
+ }
913
+
914
+ .is-invalid:focus {
915
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25) !important;
916
+ }
917
+
918
+ .valid-feedback,
919
+ .invalid-feedback {
920
+ display: none;
921
+ width: 100%;
922
+ margin-top: 0.25rem;
923
+ font-size: 0.875em;
924
+ }
925
+
926
+ .valid-feedback {
927
+ color: #28a745;
928
+ }
929
+
930
+ .invalid-feedback {
931
+ color: #dc3545;
932
+ }
933
+
934
+ .is-valid ~ .valid-feedback,
935
+ .is-invalid ~ .invalid-feedback {
936
+ display: block;
937
+ }
938
+
939
+ .input-group {
940
+ position: relative;
941
+ display: flex;
942
+ flex-wrap: wrap;
943
+ align-items: stretch;
944
+ width: 100%;
945
+ }
946
+
947
+ .input-group > .form-control,
948
+ .input-group > .form-select {
949
+ position: relative;
950
+ flex: 1 1 auto;
951
+ width: 1%;
952
+ min-width: 0;
953
+ }
954
+
955
+ .input-group-text {
956
+ display: flex;
957
+ align-items: center;
958
+ padding: 0.375rem 0.75rem;
959
+ font-size: 1rem;
960
+ line-height: 1.5;
961
+ color: #212529;
962
+ text-align: center;
963
+ white-space: nowrap;
964
+ background-color: #f8f9fa;
965
+ border: 1px solid #ced4da;
966
+ border-radius: 0.25rem;
967
+ }
968
+
969
+ .card {
970
+ position: relative;
971
+ display: flex;
972
+ flex-direction: column;
973
+ min-width: 0;
974
+ word-wrap: break-word;
975
+ background-color: #fff;
976
+ background-clip: border-box;
977
+ border: 1px solid rgba(0, 0, 0, 0.125);
978
+ border-radius: 0.5rem;
979
+ }
980
+
981
+ .card-header {
982
+ padding: 0.75rem 1rem;
983
+ margin-bottom: 0;
984
+ background-color: rgba(0, 0, 0, 0.03);
985
+ border-bottom: 1px solid rgba(0, 0, 0, 0.125);
986
+ }
987
+
988
+ .card-header:first-child {
989
+ border-radius: calc($border-radius-lg - 1px) calc($border-radius-lg - 1px) 0 0;
990
+ }
991
+
992
+ .card-body {
993
+ flex: 1 1 auto;
994
+ padding: 1rem;
995
+ }
996
+
997
+ .card-footer {
998
+ padding: 0.75rem 1rem;
999
+ background-color: rgba(0, 0, 0, 0.03);
1000
+ border-top: 1px solid rgba(0, 0, 0, 0.125);
1001
+ }
1002
+
1003
+ .card-footer:last-child {
1004
+ border-radius: 0 0 calc($border-radius-lg - 1px) calc($border-radius-lg - 1px);
1005
+ }
1006
+
1007
+ .card-title {
1008
+ margin-bottom: 0.5rem;
1009
+ font-weight: 700;
1010
+ }
1011
+
1012
+ .card-text:last-child {
1013
+ margin-bottom: 0;
1014
+ }
1015
+
1016
+ .card-img-top {
1017
+ width: 100%;
1018
+ border-top-left-radius: calc($border-radius-lg - 1px);
1019
+ border-top-right-radius: calc($border-radius-lg - 1px);
1020
+ }
1021
+
1022
+ .nav {
1023
+ display: flex;
1024
+ flex-wrap: wrap;
1025
+ padding-left: 0;
1026
+ margin-bottom: 0;
1027
+ list-style: none;
1028
+ }
1029
+
1030
+ .nav-link {
1031
+ display: block;
1032
+ padding: 0.5rem 1rem;
1033
+ color: #4a90d9;
1034
+ text-decoration: none;
1035
+ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out;
1036
+ }
1037
+
1038
+ .nav-link:hover, .nav-link:focus {
1039
+ color: #256ab1;
1040
+ }
1041
+
1042
+ .nav-link.disabled {
1043
+ color: #6c757d;
1044
+ pointer-events: none;
1045
+ cursor: default;
1046
+ }
1047
+
1048
+ .nav-link.active {
1049
+ color: #4a90d9;
1050
+ font-weight: 700;
1051
+ }
1052
+
1053
+ .navbar {
1054
+ position: relative;
1055
+ display: flex;
1056
+ flex-wrap: wrap;
1057
+ align-items: center;
1058
+ justify-content: space-between;
1059
+ padding: 0.5rem 1rem;
1060
+ }
1061
+
1062
+ .navbar-brand {
1063
+ padding-top: 0.3125rem;
1064
+ padding-bottom: 0.3125rem;
1065
+ margin-right: 1rem;
1066
+ font-size: 1.25rem;
1067
+ font-weight: 700;
1068
+ color: inherit;
1069
+ text-decoration: none;
1070
+ white-space: nowrap;
1071
+ }
1072
+
1073
+ .navbar-brand:hover {
1074
+ color: inherit;
1075
+ opacity: 0.8;
1076
+ }
1077
+
1078
+ .navbar-nav {
1079
+ display: flex;
1080
+ flex-direction: column;
1081
+ padding-left: 0;
1082
+ margin-bottom: 0;
1083
+ list-style: none;
1084
+ }
1085
+
1086
+ .navbar-nav .nav-link {
1087
+ padding-right: 0.5rem;
1088
+ padding-left: 0.5rem;
1089
+ }
1090
+
1091
+ .navbar-toggler {
1092
+ padding: 0.25rem 0.75rem;
1093
+ font-size: 1.125rem;
1094
+ line-height: 1;
1095
+ background-color: transparent;
1096
+ border: 1px solid rgba(0, 0, 0, 0.1);
1097
+ border-radius: 0.25rem;
1098
+ cursor: pointer;
1099
+ }
1100
+
1101
+ .navbar-toggler:focus {
1102
+ outline: 0;
1103
+ box-shadow: 0 0 0 0.2rem rgba(74, 144, 217, 0.25);
1104
+ }
1105
+
1106
+ .navbar-collapse {
1107
+ flex-basis: 100%;
1108
+ flex-grow: 1;
1109
+ align-items: center;
1110
+ display: none;
1111
+ }
1112
+
1113
+ .navbar-collapse.show {
1114
+ display: flex;
1115
+ }
1116
+
1117
+ @media (min-width: 576px) {
1118
+ .navbar-expand-sm .navbar-nav {
1119
+ flex-direction: row;
1120
+ }
1121
+ .navbar-expand-sm .navbar-collapse {
1122
+ display: flex;
1123
+ flex-basis: auto;
1124
+ }
1125
+ .navbar-expand-sm .navbar-toggler {
1126
+ display: none;
1127
+ }
1128
+ }
1129
+
1130
+ @media (min-width: 768px) {
1131
+ .navbar-expand-md .navbar-nav {
1132
+ flex-direction: row;
1133
+ }
1134
+ .navbar-expand-md .navbar-collapse {
1135
+ display: flex;
1136
+ flex-basis: auto;
1137
+ }
1138
+ .navbar-expand-md .navbar-toggler {
1139
+ display: none;
1140
+ }
1141
+ }
1142
+
1143
+ @media (min-width: 992px) {
1144
+ .navbar-expand-lg .navbar-nav {
1145
+ flex-direction: row;
1146
+ }
1147
+ .navbar-expand-lg .navbar-collapse {
1148
+ display: flex;
1149
+ flex-basis: auto;
1150
+ }
1151
+ .navbar-expand-lg .navbar-toggler {
1152
+ display: none;
1153
+ }
1154
+ }
1155
+
1156
+ @media (min-width: 1200px) {
1157
+ .navbar-expand-xl .navbar-nav {
1158
+ flex-direction: row;
1159
+ }
1160
+ .navbar-expand-xl .navbar-collapse {
1161
+ display: flex;
1162
+ flex-basis: auto;
1163
+ }
1164
+ .navbar-expand-xl .navbar-toggler {
1165
+ display: none;
1166
+ }
1167
+ }
1168
+
1169
+ @media (min-width: 1400px) {
1170
+ .navbar-expand-xxl .navbar-nav {
1171
+ flex-direction: row;
1172
+ }
1173
+ .navbar-expand-xxl .navbar-collapse {
1174
+ display: flex;
1175
+ flex-basis: auto;
1176
+ }
1177
+ .navbar-expand-xxl .navbar-toggler {
1178
+ display: none;
1179
+ }
1180
+ }
1181
+
1182
+ @media (min-width: 992px) {
1183
+ .navbar-nav {
1184
+ flex-direction: row;
1185
+ }
1186
+ .navbar-collapse {
1187
+ display: flex;
1188
+ flex-basis: auto;
1189
+ }
1190
+ .navbar-toggler {
1191
+ display: none;
1192
+ }
1193
+ }
1194
+
1195
+ .navbar-dark {
1196
+ color: #fff;
1197
+ background-color: #212529;
1198
+ }
1199
+
1200
+ .navbar-dark .navbar-brand {
1201
+ color: #fff;
1202
+ }
1203
+
1204
+ .navbar-dark .nav-link {
1205
+ color: rgba(255, 255, 255, 0.75);
1206
+ }
1207
+
1208
+ .navbar-dark .nav-link:hover, .navbar-dark .nav-link.active {
1209
+ color: #fff;
1210
+ }
1211
+
1212
+ .navbar-light {
1213
+ background-color: #f8f9fa;
1214
+ }
1215
+
1216
+ .navbar-light .nav-link {
1217
+ color: rgba(0, 0, 0, 0.55);
1218
+ }
1219
+
1220
+ .navbar-light .nav-link:hover, .navbar-light .nav-link.active {
1221
+ color: rgba(0, 0, 0, 0.9);
1222
+ }
1223
+
1224
+ .breadcrumb {
1225
+ display: flex;
1226
+ flex-wrap: wrap;
1227
+ padding: 0.5rem 1rem;
1228
+ margin-bottom: 1rem;
1229
+ list-style: none;
1230
+ background-color: #f8f9fa;
1231
+ border-radius: 0.25rem;
1232
+ }
1233
+
1234
+ .breadcrumb-item + .breadcrumb-item::before {
1235
+ display: inline-block;
1236
+ padding-right: 0.5rem;
1237
+ padding-left: 0.5rem;
1238
+ color: #6c757d;
1239
+ content: "/";
1240
+ }
1241
+
1242
+ .breadcrumb-item.active {
1243
+ color: #6c757d;
1244
+ }
1245
+
1246
+ .modal {
1247
+ position: fixed;
1248
+ top: 0;
1249
+ left: 0;
1250
+ z-index: 1050;
1251
+ display: none;
1252
+ width: 100%;
1253
+ height: 100%;
1254
+ overflow-x: hidden;
1255
+ overflow-y: auto;
1256
+ outline: 0;
1257
+ }
1258
+
1259
+ .modal.show {
1260
+ display: block;
1261
+ }
1262
+
1263
+ .modal-dialog {
1264
+ position: relative;
1265
+ width: auto;
1266
+ margin: 1.75rem auto;
1267
+ max-width: 500px;
1268
+ }
1269
+
1270
+ .modal-sm {
1271
+ max-width: 300px;
1272
+ }
1273
+
1274
+ .modal-lg {
1275
+ max-width: 800px;
1276
+ }
1277
+
1278
+ .modal-content {
1279
+ position: relative;
1280
+ display: flex;
1281
+ flex-direction: column;
1282
+ width: 100%;
1283
+ pointer-events: auto;
1284
+ background-color: #fff;
1285
+ background-clip: padding-box;
1286
+ border: 1px solid rgba(0, 0, 0, 0.2);
1287
+ border-radius: 0.5rem;
1288
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
1289
+ outline: 0;
1290
+ }
1291
+
1292
+ .modal-header {
1293
+ display: flex;
1294
+ flex-shrink: 0;
1295
+ align-items: center;
1296
+ justify-content: space-between;
1297
+ padding: 1rem;
1298
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
1299
+ }
1300
+
1301
+ .modal-title {
1302
+ margin-bottom: 0;
1303
+ font-weight: 700;
1304
+ }
1305
+
1306
+ .modal-body {
1307
+ position: relative;
1308
+ flex: 1 1 auto;
1309
+ padding: 1rem;
1310
+ }
1311
+
1312
+ .modal-footer {
1313
+ display: flex;
1314
+ flex-shrink: 0;
1315
+ flex-wrap: wrap;
1316
+ align-items: center;
1317
+ justify-content: flex-end;
1318
+ padding: 0.75rem;
1319
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
1320
+ gap: 0.5rem;
1321
+ }
1322
+
1323
+ .modal-backdrop {
1324
+ position: fixed;
1325
+ top: 0;
1326
+ left: 0;
1327
+ z-index: 1040;
1328
+ width: 100vw;
1329
+ height: 100vh;
1330
+ background-color: rgba(0, 0, 0, 0.5);
1331
+ display: none;
1332
+ }
1333
+
1334
+ .modal-backdrop.show {
1335
+ display: block;
1336
+ }
1337
+
1338
+ .alert {
1339
+ position: relative;
1340
+ padding: 0.75rem 1rem;
1341
+ margin-bottom: 1rem;
1342
+ border: 1px solid transparent;
1343
+ border-radius: 0.25rem;
1344
+ }
1345
+
1346
+ .alert-primary {
1347
+ color: #1c5187;
1348
+ background-color: #deeaf8;
1349
+ border-color: #b3d1ef;
1350
+ }
1351
+
1352
+ .alert-secondary {
1353
+ color: #313539;
1354
+ background-color: #caced1;
1355
+ border-color: #afb5ba;
1356
+ }
1357
+
1358
+ .alert-success {
1359
+ color: #0f401b;
1360
+ background-color: #9be7ac;
1361
+ border-color: #71dd8a;
1362
+ }
1363
+
1364
+ .alert-danger {
1365
+ color: #7c151f;
1366
+ background-color: #f6cdd1;
1367
+ border-color: #efa2a9;
1368
+ }
1369
+
1370
+ .alert-warning {
1371
+ color: #876500;
1372
+ background-color: #ffeeba;
1373
+ border-color: #ffe187;
1374
+ }
1375
+
1376
+ .alert-info {
1377
+ color: #093e47;
1378
+ background-color: #90e4f1;
1379
+ border-color: #63d9ec;
1380
+ }
1381
+
1382
+ .alert-light {
1383
+ color: #aeb9c5;
1384
+ background-color: white;
1385
+ border-color: white;
1386
+ }
1387
+
1388
+ .alert-dark {
1389
+ color: black;
1390
+ background-color: #717e8c;
1391
+ border-color: #5a6570;
1392
+ }
1393
+
1394
+ .alert-dismissible {
1395
+ padding-right: 3rem;
1396
+ }
1397
+
1398
+ .alert-dismissible .btn-close {
1399
+ position: absolute;
1400
+ top: 0;
1401
+ right: 0;
1402
+ padding: 0.9375rem 1rem;
1403
+ background: transparent;
1404
+ border: 0;
1405
+ cursor: pointer;
1406
+ color: inherit;
1407
+ opacity: 0.5;
1408
+ }
1409
+
1410
+ .alert-dismissible .btn-close:hover {
1411
+ opacity: 0.75;
1412
+ }
1413
+
1414
+ .table {
1415
+ width: 100%;
1416
+ margin-bottom: 1rem;
1417
+ vertical-align: top;
1418
+ border-color: rgba(0, 0, 0, 0.1);
1419
+ }
1420
+
1421
+ .table > :not(caption) > * > * {
1422
+ padding: 0.5rem;
1423
+ border-bottom-width: 1px;
1424
+ border-bottom-style: solid;
1425
+ border-bottom-color: inherit;
1426
+ }
1427
+
1428
+ .table > thead {
1429
+ vertical-align: bottom;
1430
+ border-bottom: 2px solid currentColor;
1431
+ }
1432
+
1433
+ .table > tbody > tr:last-child > * {
1434
+ border-bottom-color: transparent;
1435
+ }
1436
+
1437
+ .table-sm > :not(caption) > * > * {
1438
+ padding: 0.25rem;
1439
+ }
1440
+
1441
+ .table-bordered {
1442
+ border: 1px solid rgba(0, 0, 0, 0.1);
1443
+ }
1444
+
1445
+ .table-bordered > :not(caption) > * > * {
1446
+ border-width: 1px;
1447
+ border-style: solid;
1448
+ border-color: inherit;
1449
+ }
1450
+
1451
+ .table-striped > tbody > tr:nth-of-type(odd) > * {
1452
+ background-color: rgba(0, 0, 0, 0.02);
1453
+ }
1454
+
1455
+ .table-hover > tbody > tr:hover > * {
1456
+ background-color: rgba(0, 0, 0, 0.04);
1457
+ }
1458
+
1459
+ .table-responsive {
1460
+ overflow-x: auto;
1461
+ -webkit-overflow-scrolling: touch;
1462
+ }
1463
+
1464
+ .badge {
1465
+ display: inline-block;
1466
+ padding: 0.25em 0.65em;
1467
+ font-size: 0.75em;
1468
+ font-weight: 700;
1469
+ line-height: 1;
1470
+ color: #fff;
1471
+ text-align: center;
1472
+ white-space: nowrap;
1473
+ vertical-align: baseline;
1474
+ border-radius: 50rem;
1475
+ }
1476
+
1477
+ .badge-primary {
1478
+ color: #fff;
1479
+ background-color: #4a90d9;
1480
+ }
1481
+
1482
+ .badge-secondary {
1483
+ color: #fff;
1484
+ background-color: #6c757d;
1485
+ }
1486
+
1487
+ .badge-success {
1488
+ color: #fff;
1489
+ background-color: #28a745;
1490
+ }
1491
+
1492
+ .badge-danger {
1493
+ color: #fff;
1494
+ background-color: #dc3545;
1495
+ }
1496
+
1497
+ .badge-warning {
1498
+ color: #212529;
1499
+ background-color: #ffc107;
1500
+ }
1501
+
1502
+ .badge-info {
1503
+ color: #fff;
1504
+ background-color: #17a2b8;
1505
+ }
1506
+
1507
+ .badge-light {
1508
+ color: #212529;
1509
+ background-color: #f8f9fa;
1510
+ }
1511
+
1512
+ .badge-dark {
1513
+ color: #fff;
1514
+ background-color: #212529;
1515
+ }
1516
+
1517
+ .pagination {
1518
+ display: flex;
1519
+ flex-wrap: wrap;
1520
+ padding-left: 0;
1521
+ list-style: none;
1522
+ gap: 0.25rem;
1523
+ }
1524
+
1525
+ .page-item.disabled .page-link {
1526
+ color: #6c757d;
1527
+ pointer-events: none;
1528
+ background-color: #fff;
1529
+ border-color: rgba(0, 0, 0, 0.1);
1530
+ }
1531
+
1532
+ .page-item.active .page-link {
1533
+ color: #fff;
1534
+ background-color: #4a90d9;
1535
+ border-color: #4a90d9;
1536
+ }
1537
+
1538
+ .page-link {
1539
+ display: block;
1540
+ padding: 0.375rem 0.75rem;
1541
+ color: #4a90d9;
1542
+ background-color: #fff;
1543
+ border: 1px solid rgba(0, 0, 0, 0.15);
1544
+ border-radius: 0.25rem;
1545
+ text-decoration: none;
1546
+ line-height: 1.25;
1547
+ transition: color 0.15s, background-color 0.15s, border-color 0.15s;
1548
+ }
1549
+
1550
+ .page-link:hover {
1551
+ color: #2a76c6;
1552
+ background-color: rgba(74, 144, 217, 0.08);
1553
+ border-color: rgba(0, 0, 0, 0.2);
1554
+ }
1555
+
1556
+ .page-link:focus {
1557
+ outline: 0;
1558
+ box-shadow: 0 0 0 0.2rem rgba(74, 144, 217, 0.25);
1559
+ }
1560
+
1561
+ .crud-img-preview {
1562
+ max-height: 200px;
1563
+ max-width: 100%;
1564
+ border-radius: 0.25rem;
1565
+ object-fit: cover;
1566
+ }
1567
+
1568
+ .crud-img-preview-sm {
1569
+ max-height: 180px;
1570
+ max-width: 100%;
1571
+ border-radius: 0.25rem;
1572
+ object-fit: cover;
1573
+ }
1574
+
1575
+ .d-none {
1576
+ display: none !important;
1577
+ }
1578
+
1579
+ .d-block {
1580
+ display: block !important;
1581
+ }
1582
+
1583
+ .d-flex {
1584
+ display: flex !important;
1585
+ }
1586
+
1587
+ .d-inline {
1588
+ display: inline !important;
1589
+ }
1590
+
1591
+ .d-inline-block {
1592
+ display: inline-block !important;
1593
+ }
1594
+
1595
+ .d-grid {
1596
+ display: grid !important;
1597
+ }
1598
+
1599
+ @media (min-width: 576px) {
1600
+ .d-sm-none {
1601
+ display: none !important;
1602
+ }
1603
+ .d-sm-block {
1604
+ display: block !important;
1605
+ }
1606
+ .d-sm-flex {
1607
+ display: flex !important;
1608
+ }
1609
+ .d-sm-inline {
1610
+ display: inline !important;
1611
+ }
1612
+ .d-sm-inline-block {
1613
+ display: inline-block !important;
1614
+ }
1615
+ }
1616
+
1617
+ @media (min-width: 768px) {
1618
+ .d-md-none {
1619
+ display: none !important;
1620
+ }
1621
+ .d-md-block {
1622
+ display: block !important;
1623
+ }
1624
+ .d-md-flex {
1625
+ display: flex !important;
1626
+ }
1627
+ .d-md-inline {
1628
+ display: inline !important;
1629
+ }
1630
+ .d-md-inline-block {
1631
+ display: inline-block !important;
1632
+ }
1633
+ }
1634
+
1635
+ @media (min-width: 992px) {
1636
+ .d-lg-none {
1637
+ display: none !important;
1638
+ }
1639
+ .d-lg-block {
1640
+ display: block !important;
1641
+ }
1642
+ .d-lg-flex {
1643
+ display: flex !important;
1644
+ }
1645
+ .d-lg-inline {
1646
+ display: inline !important;
1647
+ }
1648
+ .d-lg-inline-block {
1649
+ display: inline-block !important;
1650
+ }
1651
+ }
1652
+
1653
+ .flex-row {
1654
+ flex-direction: row !important;
1655
+ }
1656
+
1657
+ .flex-column {
1658
+ flex-direction: column !important;
1659
+ }
1660
+
1661
+ .flex-wrap {
1662
+ flex-wrap: wrap !important;
1663
+ }
1664
+
1665
+ .flex-nowrap {
1666
+ flex-wrap: nowrap !important;
1667
+ }
1668
+
1669
+ .flex-grow-0 {
1670
+ flex-grow: 0 !important;
1671
+ }
1672
+
1673
+ .flex-grow-1 {
1674
+ flex-grow: 1 !important;
1675
+ }
1676
+
1677
+ .justify-content-start {
1678
+ justify-content: flex-start !important;
1679
+ }
1680
+
1681
+ .justify-content-end {
1682
+ justify-content: flex-end !important;
1683
+ }
1684
+
1685
+ .justify-content-center {
1686
+ justify-content: center !important;
1687
+ }
1688
+
1689
+ .justify-content-between {
1690
+ justify-content: space-between !important;
1691
+ }
1692
+
1693
+ .justify-content-around {
1694
+ justify-content: space-around !important;
1695
+ }
1696
+
1697
+ .align-items-start {
1698
+ align-items: flex-start !important;
1699
+ }
1700
+
1701
+ .align-items-end {
1702
+ align-items: flex-end !important;
1703
+ }
1704
+
1705
+ .align-items-center {
1706
+ align-items: center !important;
1707
+ }
1708
+
1709
+ .gap-0 {
1710
+ gap: 0 !important;
1711
+ }
1712
+
1713
+ .gap-1 {
1714
+ gap: 0.25rem !important;
1715
+ }
1716
+
1717
+ .gap-2 {
1718
+ gap: 0.5rem !important;
1719
+ }
1720
+
1721
+ .gap-3 {
1722
+ gap: 1rem !important;
1723
+ }
1724
+
1725
+ .gap-4 {
1726
+ gap: 1.5rem !important;
1727
+ }
1728
+
1729
+ .gap-5 {
1730
+ gap: 3rem !important;
1731
+ }
1732
+
1733
+ .m-0 {
1734
+ margin: 0 !important;
1735
+ }
1736
+
1737
+ .m-1 {
1738
+ margin: 0.25rem !important;
1739
+ }
1740
+
1741
+ .m-2 {
1742
+ margin: 0.5rem !important;
1743
+ }
1744
+
1745
+ .m-3 {
1746
+ margin: 1rem !important;
1747
+ }
1748
+
1749
+ .m-4 {
1750
+ margin: 1.5rem !important;
1751
+ }
1752
+
1753
+ .m-5 {
1754
+ margin: 3rem !important;
1755
+ }
1756
+
1757
+ .mt-0 {
1758
+ margin-top: 0 !important;
1759
+ }
1760
+
1761
+ .mt-1 {
1762
+ margin-top: 0.25rem !important;
1763
+ }
1764
+
1765
+ .mt-2 {
1766
+ margin-top: 0.5rem !important;
1767
+ }
1768
+
1769
+ .mt-3 {
1770
+ margin-top: 1rem !important;
1771
+ }
1772
+
1773
+ .mt-4 {
1774
+ margin-top: 1.5rem !important;
1775
+ }
1776
+
1777
+ .mt-5 {
1778
+ margin-top: 3rem !important;
1779
+ }
1780
+
1781
+ .mb-0 {
1782
+ margin-bottom: 0 !important;
1783
+ }
1784
+
1785
+ .mb-1 {
1786
+ margin-bottom: 0.25rem !important;
1787
+ }
1788
+
1789
+ .mb-2 {
1790
+ margin-bottom: 0.5rem !important;
1791
+ }
1792
+
1793
+ .mb-3 {
1794
+ margin-bottom: 1rem !important;
1795
+ }
1796
+
1797
+ .mb-4 {
1798
+ margin-bottom: 1.5rem !important;
1799
+ }
1800
+
1801
+ .mb-5 {
1802
+ margin-bottom: 3rem !important;
1803
+ }
1804
+
1805
+ .ms-0 {
1806
+ margin-left: 0 !important;
1807
+ }
1808
+
1809
+ .ms-1 {
1810
+ margin-left: 0.25rem !important;
1811
+ }
1812
+
1813
+ .ms-2 {
1814
+ margin-left: 0.5rem !important;
1815
+ }
1816
+
1817
+ .ms-3 {
1818
+ margin-left: 1rem !important;
1819
+ }
1820
+
1821
+ .ms-4 {
1822
+ margin-left: 1.5rem !important;
1823
+ }
1824
+
1825
+ .ms-5 {
1826
+ margin-left: 3rem !important;
1827
+ }
1828
+
1829
+ .me-0 {
1830
+ margin-right: 0 !important;
1831
+ }
1832
+
1833
+ .me-1 {
1834
+ margin-right: 0.25rem !important;
1835
+ }
1836
+
1837
+ .me-2 {
1838
+ margin-right: 0.5rem !important;
1839
+ }
1840
+
1841
+ .me-3 {
1842
+ margin-right: 1rem !important;
1843
+ }
1844
+
1845
+ .me-4 {
1846
+ margin-right: 1.5rem !important;
1847
+ }
1848
+
1849
+ .me-5 {
1850
+ margin-right: 3rem !important;
1851
+ }
1852
+
1853
+ .my-0 {
1854
+ margin-top: 0 !important;
1855
+ margin-bottom: 0 !important;
1856
+ }
1857
+
1858
+ .mx-0 {
1859
+ margin-left: 0 !important;
1860
+ margin-right: 0 !important;
1861
+ }
1862
+
1863
+ .my-1 {
1864
+ margin-top: 0.25rem !important;
1865
+ margin-bottom: 0.25rem !important;
1866
+ }
1867
+
1868
+ .mx-1 {
1869
+ margin-left: 0.25rem !important;
1870
+ margin-right: 0.25rem !important;
1871
+ }
1872
+
1873
+ .my-2 {
1874
+ margin-top: 0.5rem !important;
1875
+ margin-bottom: 0.5rem !important;
1876
+ }
1877
+
1878
+ .mx-2 {
1879
+ margin-left: 0.5rem !important;
1880
+ margin-right: 0.5rem !important;
1881
+ }
1882
+
1883
+ .my-3 {
1884
+ margin-top: 1rem !important;
1885
+ margin-bottom: 1rem !important;
1886
+ }
1887
+
1888
+ .mx-3 {
1889
+ margin-left: 1rem !important;
1890
+ margin-right: 1rem !important;
1891
+ }
1892
+
1893
+ .my-4 {
1894
+ margin-top: 1.5rem !important;
1895
+ margin-bottom: 1.5rem !important;
1896
+ }
1897
+
1898
+ .mx-4 {
1899
+ margin-left: 1.5rem !important;
1900
+ margin-right: 1.5rem !important;
1901
+ }
1902
+
1903
+ .my-5 {
1904
+ margin-top: 3rem !important;
1905
+ margin-bottom: 3rem !important;
1906
+ }
1907
+
1908
+ .mx-5 {
1909
+ margin-left: 3rem !important;
1910
+ margin-right: 3rem !important;
1911
+ }
1912
+
1913
+ .p-0 {
1914
+ padding: 0 !important;
1915
+ }
1916
+
1917
+ .p-1 {
1918
+ padding: 0.25rem !important;
1919
+ }
1920
+
1921
+ .p-2 {
1922
+ padding: 0.5rem !important;
1923
+ }
1924
+
1925
+ .p-3 {
1926
+ padding: 1rem !important;
1927
+ }
1928
+
1929
+ .p-4 {
1930
+ padding: 1.5rem !important;
1931
+ }
1932
+
1933
+ .p-5 {
1934
+ padding: 3rem !important;
1935
+ }
1936
+
1937
+ .pt-0 {
1938
+ padding-top: 0 !important;
1939
+ }
1940
+
1941
+ .pt-1 {
1942
+ padding-top: 0.25rem !important;
1943
+ }
1944
+
1945
+ .pt-2 {
1946
+ padding-top: 0.5rem !important;
1947
+ }
1948
+
1949
+ .pt-3 {
1950
+ padding-top: 1rem !important;
1951
+ }
1952
+
1953
+ .pt-4 {
1954
+ padding-top: 1.5rem !important;
1955
+ }
1956
+
1957
+ .pt-5 {
1958
+ padding-top: 3rem !important;
1959
+ }
1960
+
1961
+ .pb-0 {
1962
+ padding-bottom: 0 !important;
1963
+ }
1964
+
1965
+ .pb-1 {
1966
+ padding-bottom: 0.25rem !important;
1967
+ }
1968
+
1969
+ .pb-2 {
1970
+ padding-bottom: 0.5rem !important;
1971
+ }
1972
+
1973
+ .pb-3 {
1974
+ padding-bottom: 1rem !important;
1975
+ }
1976
+
1977
+ .pb-4 {
1978
+ padding-bottom: 1.5rem !important;
1979
+ }
1980
+
1981
+ .pb-5 {
1982
+ padding-bottom: 3rem !important;
1983
+ }
1984
+
1985
+ .ps-0 {
1986
+ padding-left: 0 !important;
1987
+ }
1988
+
1989
+ .ps-1 {
1990
+ padding-left: 0.25rem !important;
1991
+ }
1992
+
1993
+ .ps-2 {
1994
+ padding-left: 0.5rem !important;
1995
+ }
1996
+
1997
+ .ps-3 {
1998
+ padding-left: 1rem !important;
1999
+ }
2000
+
2001
+ .ps-4 {
2002
+ padding-left: 1.5rem !important;
2003
+ }
2004
+
2005
+ .ps-5 {
2006
+ padding-left: 3rem !important;
2007
+ }
2008
+
2009
+ .pe-0 {
2010
+ padding-right: 0 !important;
2011
+ }
2012
+
2013
+ .pe-1 {
2014
+ padding-right: 0.25rem !important;
2015
+ }
2016
+
2017
+ .pe-2 {
2018
+ padding-right: 0.5rem !important;
2019
+ }
2020
+
2021
+ .pe-3 {
2022
+ padding-right: 1rem !important;
2023
+ }
2024
+
2025
+ .pe-4 {
2026
+ padding-right: 1.5rem !important;
2027
+ }
2028
+
2029
+ .pe-5 {
2030
+ padding-right: 3rem !important;
2031
+ }
2032
+
2033
+ .py-0 {
2034
+ padding-top: 0 !important;
2035
+ padding-bottom: 0 !important;
2036
+ }
2037
+
2038
+ .px-0 {
2039
+ padding-left: 0 !important;
2040
+ padding-right: 0 !important;
2041
+ }
2042
+
2043
+ .py-1 {
2044
+ padding-top: 0.25rem !important;
2045
+ padding-bottom: 0.25rem !important;
2046
+ }
2047
+
2048
+ .px-1 {
2049
+ padding-left: 0.25rem !important;
2050
+ padding-right: 0.25rem !important;
2051
+ }
2052
+
2053
+ .py-2 {
2054
+ padding-top: 0.5rem !important;
2055
+ padding-bottom: 0.5rem !important;
2056
+ }
2057
+
2058
+ .px-2 {
2059
+ padding-left: 0.5rem !important;
2060
+ padding-right: 0.5rem !important;
2061
+ }
2062
+
2063
+ .py-3 {
2064
+ padding-top: 1rem !important;
2065
+ padding-bottom: 1rem !important;
2066
+ }
2067
+
2068
+ .px-3 {
2069
+ padding-left: 1rem !important;
2070
+ padding-right: 1rem !important;
2071
+ }
2072
+
2073
+ .py-4 {
2074
+ padding-top: 1.5rem !important;
2075
+ padding-bottom: 1.5rem !important;
2076
+ }
2077
+
2078
+ .px-4 {
2079
+ padding-left: 1.5rem !important;
2080
+ padding-right: 1.5rem !important;
2081
+ }
2082
+
2083
+ .py-5 {
2084
+ padding-top: 3rem !important;
2085
+ padding-bottom: 3rem !important;
2086
+ }
2087
+
2088
+ .px-5 {
2089
+ padding-left: 3rem !important;
2090
+ padding-right: 3rem !important;
2091
+ }
2092
+
2093
+ .mx-auto {
2094
+ margin-left: auto !important;
2095
+ margin-right: auto !important;
2096
+ }
2097
+
2098
+ .text-start {
2099
+ text-align: left !important;
2100
+ }
2101
+
2102
+ .text-center {
2103
+ text-align: center !important;
2104
+ }
2105
+
2106
+ .text-end {
2107
+ text-align: right !important;
2108
+ }
2109
+
2110
+ .text-uppercase {
2111
+ text-transform: uppercase !important;
2112
+ }
2113
+
2114
+ .text-capitalize {
2115
+ text-transform: capitalize !important;
2116
+ }
2117
+
2118
+ .text-nowrap {
2119
+ white-space: nowrap !important;
2120
+ }
2121
+
2122
+ .text-truncate {
2123
+ overflow: hidden;
2124
+ text-overflow: ellipsis;
2125
+ white-space: nowrap;
2126
+ }
2127
+
2128
+ .fw-bold {
2129
+ font-weight: 700 !important;
2130
+ }
2131
+
2132
+ .fw-normal {
2133
+ font-weight: 400 !important;
2134
+ }
2135
+
2136
+ .fw-light {
2137
+ font-weight: 300 !important;
2138
+ }
2139
+
2140
+ .fs-1 {
2141
+ font-size: 2.25rem !important;
2142
+ }
2143
+
2144
+ .fs-2 {
2145
+ font-size: 1.875rem !important;
2146
+ }
2147
+
2148
+ .fs-3 {
2149
+ font-size: 1.5rem !important;
2150
+ }
2151
+
2152
+ .fs-4 {
2153
+ font-size: 1.25rem !important;
2154
+ }
2155
+
2156
+ .fs-5 {
2157
+ font-size: 1rem !important;
2158
+ }
2159
+
2160
+ .fs-6 {
2161
+ font-size: 0.875rem !important;
2162
+ }
2163
+
2164
+ .text-primary {
2165
+ color: #4a90d9 !important;
2166
+ }
2167
+
2168
+ .text-secondary {
2169
+ color: #6c757d !important;
2170
+ }
2171
+
2172
+ .text-success {
2173
+ color: #28a745 !important;
2174
+ }
2175
+
2176
+ .text-danger {
2177
+ color: #dc3545 !important;
2178
+ }
2179
+
2180
+ .text-warning {
2181
+ color: #ffc107 !important;
2182
+ }
2183
+
2184
+ .text-info {
2185
+ color: #17a2b8 !important;
2186
+ }
2187
+
2188
+ .text-light {
2189
+ color: #f8f9fa !important;
2190
+ }
2191
+
2192
+ .text-dark {
2193
+ color: #212529 !important;
2194
+ }
2195
+
2196
+ .text-muted {
2197
+ color: #6c757d !important;
2198
+ }
2199
+
2200
+ .text-white {
2201
+ color: #fff !important;
2202
+ }
2203
+
2204
+ .bg-primary {
2205
+ background-color: #4a90d9 !important;
2206
+ }
2207
+
2208
+ .bg-secondary {
2209
+ background-color: #6c757d !important;
2210
+ }
2211
+
2212
+ .bg-success {
2213
+ background-color: #28a745 !important;
2214
+ }
2215
+
2216
+ .bg-danger {
2217
+ background-color: #dc3545 !important;
2218
+ }
2219
+
2220
+ .bg-warning {
2221
+ background-color: #ffc107 !important;
2222
+ }
2223
+
2224
+ .bg-info {
2225
+ background-color: #17a2b8 !important;
2226
+ }
2227
+
2228
+ .bg-light {
2229
+ background-color: #f8f9fa !important;
2230
+ }
2231
+
2232
+ .bg-dark {
2233
+ background-color: #212529 !important;
2234
+ }
2235
+
2236
+ .bg-white {
2237
+ background-color: #fff !important;
2238
+ }
2239
+
2240
+ .border {
2241
+ border: 1px solid rgba(0, 0, 0, 0.1) !important;
2242
+ }
2243
+
2244
+ .border-0 {
2245
+ border: 0 !important;
2246
+ }
2247
+
2248
+ .rounded {
2249
+ border-radius: 0.25rem !important;
2250
+ }
2251
+
2252
+ .rounded-0 {
2253
+ border-radius: 0 !important;
2254
+ }
2255
+
2256
+ .rounded-circle {
2257
+ border-radius: 50% !important;
2258
+ }
2259
+
2260
+ .rounded-pill {
2261
+ border-radius: 50rem !important;
2262
+ }
2263
+
2264
+ .w-25 {
2265
+ width: 25% !important;
2266
+ }
2267
+
2268
+ .h-25 {
2269
+ height: 25% !important;
2270
+ }
2271
+
2272
+ .w-50 {
2273
+ width: 50% !important;
2274
+ }
2275
+
2276
+ .h-50 {
2277
+ height: 50% !important;
2278
+ }
2279
+
2280
+ .w-75 {
2281
+ width: 75% !important;
2282
+ }
2283
+
2284
+ .h-75 {
2285
+ height: 75% !important;
2286
+ }
2287
+
2288
+ .w-100 {
2289
+ width: 100% !important;
2290
+ }
2291
+
2292
+ .h-100 {
2293
+ height: 100% !important;
2294
+ }
2295
+
2296
+ .mw-100 {
2297
+ max-width: 100% !important;
2298
+ }
2299
+
2300
+ .mh-100 {
2301
+ max-height: 100% !important;
2302
+ }
2303
+
2304
+ .position-relative {
2305
+ position: relative !important;
2306
+ }
2307
+
2308
+ .position-absolute {
2309
+ position: absolute !important;
2310
+ }
2311
+
2312
+ .position-fixed {
2313
+ position: fixed !important;
2314
+ }
2315
+
2316
+ .position-sticky {
2317
+ position: sticky !important;
2318
+ }
2319
+
2320
+ .position-static {
2321
+ position: static !important;
2322
+ }
2323
+
2324
+ .visible {
2325
+ visibility: visible !important;
2326
+ }
2327
+
2328
+ .invisible {
2329
+ visibility: hidden !important;
2330
+ }
2331
+
2332
+ .overflow-hidden {
2333
+ overflow: hidden !important;
2334
+ }
2335
+
2336
+ .overflow-auto {
2337
+ overflow: auto !important;
2338
+ }
2339
+
2340
+ .shadow {
2341
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
2342
+ }
2343
+
2344
+ .shadow-sm {
2345
+ box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
2346
+ }
2347
+
2348
+ .shadow-lg {
2349
+ box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
2350
+ }
2351
+
2352
+ .shadow-none {
2353
+ box-shadow: none !important;
2354
+ }
2355
+
2356
+ .collapse {
2357
+ display: none;
2358
+ }
2359
+
2360
+ .collapse.show {
2361
+ display: block;
2362
+ }
2363
+
2364
+ .fade {
2365
+ opacity: 0;
2366
+ transition: opacity 0.15s linear;
2367
+ }
2368
+
2369
+ .fade.show {
2370
+ opacity: 1;
2371
+ }
2372
+
2373
+ .clearfix::after {
2374
+ display: block;
2375
+ clear: both;
2376
+ content: "";
2377
+ }
2378
+
2379
+ .cursor-pointer {
2380
+ cursor: pointer !important;
2381
+ }
2382
+
2383
+ .btn-close {
2384
+ box-sizing: content-box;
2385
+ width: 1em;
2386
+ height: 1em;
2387
+ padding: 0.25em;
2388
+ color: #000;
2389
+ background: transparent;
2390
+ border: 0;
2391
+ opacity: 0.5;
2392
+ cursor: pointer;
2393
+ font-size: 1.25rem;
2394
+ line-height: 1;
2395
+ }
2396
+
2397
+ .btn-close:hover {
2398
+ opacity: 0.75;
2399
+ }
2400
+
2401
+ .btn-close:focus {
2402
+ opacity: 1;
2403
+ outline: 0;
2404
+ box-shadow: 0 0 0 0.2rem rgba(74, 144, 217, 0.25);
2405
+ }
2406
+
2407
+ .img-fluid {
2408
+ max-width: 100%;
2409
+ height: auto;
2410
+ }
2411
+
2412
+ .img-thumbnail {
2413
+ padding: 0.25rem;
2414
+ background-color: #fff;
2415
+ border: 1px solid rgba(0, 0, 0, 0.1);
2416
+ border-radius: 0.25rem;
2417
+ max-width: 100%;
2418
+ height: auto;
2419
+ }
2420
+
2421
+ .border-top {
2422
+ border-top: 1px solid rgba(0, 0, 0, 0.1) !important;
2423
+ }
2424
+
2425
+ .border-bottom {
2426
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1) !important;
2427
+ }
2428
+
2429
+ .align-middle {
2430
+ vertical-align: middle !important;
2431
+ }
2432
+
2433
+ .align-top {
2434
+ vertical-align: top !important;
2435
+ }
2436
+
2437
+ .align-bottom {
2438
+ vertical-align: bottom !important;
2439
+ }
2440
+
2441
+ .float-start {
2442
+ float: left !important;
2443
+ }
2444
+
2445
+ .float-end {
2446
+ float: right !important;
2447
+ }
2448
+
2449
+ .float-none {
2450
+ float: none !important;
2451
+ }
2452
+
2453
+ .visually-hidden {
2454
+ position: absolute !important;
2455
+ width: 1px !important;
2456
+ height: 1px !important;
2457
+ padding: 0 !important;
2458
+ margin: -1px !important;
2459
+ overflow: hidden !important;
2460
+ clip: rect(0, 0, 0, 0) !important;
2461
+ white-space: nowrap !important;
2462
+ border: 0 !important;
2463
+ }