vanilla-jui 1.3.8 → 1.3.10

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 (77) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.umd.js +1 -1
  3. package/dist/style.css +1 -1
  4. package/package.json +3 -2
  5. package/src/components/accordion.js +373 -0
  6. package/src/components/components.js +0 -0
  7. package/src/components/drop.js +437 -0
  8. package/src/components/flow.js +1133 -0
  9. package/src/components/form.js +585 -0
  10. package/src/components/icons.js +83 -0
  11. package/src/components/menu.js +422 -0
  12. package/src/components/modal.js +1174 -0
  13. package/src/components/offcanvas.js +332 -0
  14. package/src/components/pagination.js +536 -0
  15. package/src/components/parabola.js +295 -0
  16. package/src/components/sticky.js +271 -0
  17. package/src/components/swiper.js +1123 -0
  18. package/src/components/tabs.js +746 -0
  19. package/src/components/theme.js +353 -0
  20. package/src/components/toast.js +329 -0
  21. package/src/components/toc.js +226 -0
  22. package/src/components/tooltip.js +86 -0
  23. package/src/components/validator.js +586 -0
  24. package/src/core/Component.js +248 -0
  25. package/src/css/accordion.css +72 -0
  26. package/src/css/animation.css +177 -0
  27. package/src/css/avatar.css +62 -0
  28. package/src/css/badge.css +66 -0
  29. package/src/css/breadcrumb.css +106 -0
  30. package/src/css/button.css +296 -0
  31. package/src/css/card.css +151 -0
  32. package/src/css/color.css +1176 -0
  33. package/src/css/color_p3.css +1184 -0
  34. package/src/css/components.css +26 -0
  35. package/src/css/content.css +716 -0
  36. package/src/css/divider.css +9 -0
  37. package/src/css/drop.css +28 -0
  38. package/src/css/flow.css +86 -0
  39. package/src/css/font.css +23 -0
  40. package/src/css/form.css +919 -0
  41. package/src/css/gradient.css +211 -0
  42. package/src/css/icon.css +63 -0
  43. package/src/css/index.css +12 -0
  44. package/src/css/layout.css +782 -0
  45. package/src/css/loading.css +38 -0
  46. package/src/css/menu.css +564 -0
  47. package/src/css/modal.css +111 -0
  48. package/src/css/offcanvas.css +104 -0
  49. package/src/css/pagination.css +25 -0
  50. package/src/css/popup.css +69 -0
  51. package/src/css/skeleton.css +76 -0
  52. package/src/css/status.css +56 -0
  53. package/src/css/swiper.css +160 -0
  54. package/src/css/table.css +52 -0
  55. package/src/css/tabs.css +95 -0
  56. package/src/css/tag.css +98 -0
  57. package/src/css/theme-palette.css +59 -0
  58. package/src/css/tip.css +84 -0
  59. package/src/css/toast.css +154 -0
  60. package/src/css/toast.min.css +1 -0
  61. package/src/css/toc.css +38 -0
  62. package/src/css/tokens.css +1324 -0
  63. package/src/css/toolbar.css +115 -0
  64. package/src/css/tooltip.css +19 -0
  65. package/src/icons/index.js +30 -0
  66. package/src/index.js +45 -0
  67. package/src/locales/index.js +45 -0
  68. package/src/locales/index.min.js +1 -0
  69. package/src/utilities/browser.js +111 -0
  70. package/src/utilities/cache.js +159 -0
  71. package/src/utilities/core.js +502 -0
  72. package/src/utilities/debug.js +103 -0
  73. package/src/utilities/dom.js +313 -0
  74. package/src/utilities/events.js +69 -0
  75. package/src/utilities/http.js +30 -0
  76. package/src/utilities/legacy-dom.js +179 -0
  77. package/src/utilities/storage.js +46 -0
@@ -0,0 +1,782 @@
1
+ @layer layout {
2
+ ::-webkit-backdrop {
3
+ box-sizing: border-box;
4
+ }
5
+
6
+ *,
7
+ ::after,
8
+ ::backdrop,
9
+ ::before,
10
+ ::file-selector-button {
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ html.light,
15
+ html.theme-light {
16
+ color-scheme: light;
17
+ }
18
+
19
+ html.dark,
20
+ html.theme-dark {
21
+ color-scheme: dark;
22
+ }
23
+
24
+ body {
25
+ -webkit-text-size-adjust: 100%;
26
+ tab-size: 4;
27
+ text-rendering: optimizeLegibility;
28
+ -webkit-font-smoothing: antialiased;
29
+ scroll-behavior: smooth;
30
+ font-family:
31
+ "Source Han Sans CN",
32
+ "Inter",
33
+ "PingFang SC",
34
+ "Helvetica Neue",
35
+ Emoji,
36
+ Arial,
37
+ sans-serif;
38
+ font-feature-settings: normal;
39
+ font-variation-settings: normal;
40
+ color: var(--ui-fg);
41
+ background-color: var(--ui-bg);
42
+
43
+ min-width: var(--screen-xs, 320px);
44
+ min-height: 100vh;
45
+ font-size: var(--font-size-md);
46
+ margin: 0;
47
+ /* text-rendering: optimizeSpeed; */
48
+ }
49
+
50
+ img,
51
+ video {
52
+ max-width: 100%;
53
+ height: auto;
54
+ }
55
+
56
+ img {
57
+ object-fit: cover;
58
+ }
59
+
60
+ /* reset */
61
+ .is-reset:where(a) {
62
+ cursor: pointer;
63
+ text-decoration: none;
64
+ color: inherit;
65
+ outline: none;
66
+ }
67
+
68
+ .is-reset:where(button) {
69
+ -webkit-appearance: none;
70
+ -moz-appearance: none;
71
+ appearance: none;
72
+ cursor: default;
73
+ background-color: transparent;
74
+ border: none;
75
+ font-size: inherit;
76
+ font-family: inherit;
77
+ line-height: inherit;
78
+ letter-spacing: inherit;
79
+ outline: none;
80
+ color: inherit;
81
+ padding: 0;
82
+ margin: 0;
83
+ text-align: initial;
84
+ -webkit-tap-highlight-color: transparent;
85
+ }
86
+
87
+ .is-reset:where(h1, h2, h3, h4, h5, h6) {
88
+ font-size: inherit;
89
+ font-weight: inherit;
90
+ margin: 0;
91
+ }
92
+
93
+ .is-reset:where(ol, ul) {
94
+ list-style: none;
95
+ margin: 0;
96
+ padding: 0;
97
+ }
98
+
99
+ .is-reset:where(p) {
100
+ margin: 0;
101
+ }
102
+
103
+ .is-reset:where(pre) {
104
+ font-family: inherit;
105
+ margin: 0;
106
+ }
107
+
108
+ /* background layout */
109
+ .j-background-grid {
110
+ position: absolute;
111
+ top: 0;
112
+ right: 0;
113
+ bottom: 0;
114
+ left: 0;
115
+ /* z-index: -1; */
116
+ background-image:
117
+ linear-gradient(to right, var(--ui-surface-subtle) 1px, transparent 1px),
118
+ linear-gradient(to bottom, var(--ui-surface-subtle) 1px, transparent 1px);
119
+ background-size: 40px 56px;
120
+ mask-image: radial-gradient(ellipse 25% 10% at 50% 0%, #000 60%, transparent 300%);
121
+ pointer-events: none;
122
+ user-select: none;
123
+ }
124
+
125
+ .dark .j-background-grid {
126
+ background-image:
127
+ linear-gradient(to right, var(--ui-surface-hover) 1px, transparent 1px),
128
+ linear-gradient(to bottom, var(--ui-surface-hover) 1px, transparent 1px);
129
+ }
130
+
131
+ /* 占位图容器 */
132
+ .placeholder-image {
133
+ width: 100%;
134
+ height: 100%;
135
+ background: linear-gradient(135deg, var(--ui-bg-muted) 0%, var(--ui-surface-subtle) 100%);
136
+ display: flex;
137
+ align-items: center;
138
+ justify-content: center;
139
+ color: var(--ui-fg-subtle);
140
+ font-size: var(--font-size-sm);
141
+ }
142
+
143
+ /* ==============================
144
+ * 响应式 Flex 布局系统
145
+ * 列类名 flex-col-* 避免与 Tailwind 冲突
146
+ * 建议:Flex 更适合一维排列(如导航、表单)
147
+ * ============================ */
148
+
149
+ /* 容器:居中 + 最大宽度 */
150
+ .container {
151
+ width: 100%;
152
+ max-width: var(--screen-xl, 1200px);
153
+ margin-inline: auto;
154
+ padding-inline: var(--container-padding-inline, 1rem);
155
+ }
156
+
157
+ .auto-container {
158
+ max-width: 100%;
159
+ overflow: auto;
160
+ overflow-y: hidden;
161
+ padding: 1px;
162
+ }
163
+
164
+ .block-center {
165
+ margin-inline: auto;
166
+ height: fit-content;
167
+ }
168
+
169
+ /* 行容器 */
170
+ .flex-container {
171
+ display: flex;
172
+ flex-wrap: wrap;
173
+ gap: var(--flex-container-gap, 1rem);
174
+ }
175
+
176
+ /* 默认列:弹性填充 */
177
+ .flex-cols {
178
+ flex: 1 1 0%;
179
+ min-width: 0;
180
+ }
181
+
182
+ /* 自适应内容宽度 */
183
+ .flex-col-auto {
184
+ flex: 0 0 auto;
185
+ width: auto;
186
+ }
187
+
188
+ /* 基础列宽(1~12)*/
189
+ .flex-col-1 {
190
+ width: calc((100% - 0 * var(--flex-container-gap, 1rem)) / 1);
191
+ }
192
+
193
+ .flex-col-2 {
194
+ width: calc((100% - 1 * var(--flex-container-gap, 1rem)) / 2);
195
+ }
196
+
197
+ .flex-col-3 {
198
+ width: calc((100% - 2 * var(--flex-container-gap, 1rem)) / 3);
199
+ }
200
+
201
+ .flex-col-4 {
202
+ width: calc((100% - 3 * var(--flex-container-gap, 1rem)) / 4);
203
+ }
204
+
205
+ .flex-col-5 {
206
+ width: calc((100% - 4 * var(--flex-container-gap, 1rem)) / 5);
207
+ }
208
+
209
+ .flex-col-6 {
210
+ width: calc((100% - 5 * var(--flex-container-gap, 1rem)) / 6);
211
+ }
212
+
213
+ .flex-col-7 {
214
+ width: calc((100% - 6 * var(--flex-container-gap, 1rem)) / 7);
215
+ }
216
+
217
+ .flex-col-8 {
218
+ width: calc((100% - 7 * var(--flex-container-gap, 1rem)) / 8);
219
+ }
220
+
221
+ .flex-col-9 {
222
+ width: calc((100% - 8 * var(--flex-container-gap, 1rem)) / 9);
223
+ }
224
+
225
+ .flex-col-10 {
226
+ width: calc((100% - 9 * var(--flex-container-gap, 1rem)) / 10);
227
+ }
228
+
229
+ .flex-col-11 {
230
+ width: calc((100% - 10 * var(--flex-container-gap, 1rem)) / 11);
231
+ }
232
+
233
+ .flex-col-12 {
234
+ width: calc((100% - 11 * var(--flex-container-gap, 1rem)) / 12);
235
+ }
236
+
237
+ /* 关键:禁用 flex-basis 的自动收缩/拉伸,仅用 width 控制 */
238
+ [class*='flex-col-'] {
239
+ flex: 0 0 auto;
240
+ /* 必须设为 auto,否则 width 被忽略 */
241
+ }
242
+
243
+ @media (min-width: 576px) {
244
+ .flex-col-sm-1 {
245
+ width: calc((100% - 0 * var(--flex-container-gap, 1rem)) / 1);
246
+ }
247
+
248
+ .flex-col-sm-2 {
249
+ width: calc((100% - 1 * var(--flex-container-gap, 1rem)) / 2);
250
+ }
251
+
252
+ .flex-col-sm-3 {
253
+ width: calc((100% - 2 * var(--flex-container-gap, 1rem)) / 3);
254
+ }
255
+
256
+ .flex-col-sm-4 {
257
+ width: calc((100% - 3 * var(--flex-container-gap, 1rem)) / 4);
258
+ }
259
+
260
+ .flex-col-sm-5 {
261
+ width: calc((100% - 4 * var(--flex-container-gap, 1rem)) / 5);
262
+ }
263
+
264
+ .flex-col-sm-6 {
265
+ width: calc((100% - 5 * var(--flex-container-gap, 1rem)) / 6);
266
+ }
267
+
268
+ .flex-col-sm-7 {
269
+ width: calc((100% - 6 * var(--flex-container-gap, 1rem)) / 7);
270
+ }
271
+
272
+ .flex-col-sm-8 {
273
+ width: calc((100% - 7 * var(--flex-container-gap, 1rem)) / 8);
274
+ }
275
+
276
+ .flex-col-sm-9 {
277
+ width: calc((100% - 8 * var(--flex-container-gap, 1rem)) / 9);
278
+ }
279
+
280
+ .flex-col-sm-10 {
281
+ width: calc((100% - 9 * var(--flex-container-gap, 1rem)) / 10);
282
+ }
283
+
284
+ .flex-col-sm-11 {
285
+ width: calc((100% - 10 * var(--flex-container-gap, 1rem)) / 11);
286
+ }
287
+
288
+ .flex-col-sm-12 {
289
+ width: calc((100% - 11 * var(--flex-container-gap, 1rem)) / 12);
290
+ }
291
+ }
292
+
293
+ @media (min-width: 768px) {
294
+ .flex-col-md-1 {
295
+ width: calc((100% - 0 * var(--flex-container-gap, 1rem)) / 1);
296
+ }
297
+
298
+ .flex-col-md-2 {
299
+ width: calc((100% - 1 * var(--flex-container-gap, 1rem)) / 2);
300
+ }
301
+
302
+ .flex-col-md-3 {
303
+ width: calc((100% - 2 * var(--flex-container-gap, 1rem)) / 3);
304
+ }
305
+
306
+ .flex-col-md-4 {
307
+ width: calc((100% - 3 * var(--flex-container-gap, 1rem)) / 4);
308
+ }
309
+
310
+ .flex-col-md-5 {
311
+ width: calc((100% - 4 * var(--flex-container-gap, 1rem)) / 5);
312
+ }
313
+
314
+ .flex-col-md-6 {
315
+ width: calc((100% - 5 * var(--flex-container-gap, 1rem)) / 6);
316
+ }
317
+
318
+ .flex-col-md-7 {
319
+ width: calc((100% - 6 * var(--flex-container-gap, 1rem)) / 7);
320
+ }
321
+
322
+ .flex-col-md-8 {
323
+ width: calc((100% - 7 * var(--flex-container-gap, 1rem)) / 8);
324
+ }
325
+
326
+ .flex-col-md-9 {
327
+ width: calc((100% - 8 * var(--flex-container-gap, 1rem)) / 9);
328
+ }
329
+
330
+ .flex-col-md-10 {
331
+ width: calc((100% - 9 * var(--flex-container-gap, 1rem)) / 10);
332
+ }
333
+
334
+ .flex-col-md-11 {
335
+ width: calc((100% - 10 * var(--flex-container-gap, 1rem)) / 11);
336
+ }
337
+
338
+ .flex-col-md-12 {
339
+ width: calc((100% - 11 * var(--flex-container-gap, 1rem)) / 12);
340
+ }
341
+ }
342
+
343
+ @media (min-width: 992px) {
344
+ .flex-col-lg-1 {
345
+ width: calc((100% - 0 * var(--flex-container-gap, 1rem)) / 1);
346
+ }
347
+
348
+ .flex-col-lg-2 {
349
+ width: calc((100% - 1 * var(--flex-container-gap, 1rem)) / 2);
350
+ }
351
+
352
+ .flex-col-lg-3 {
353
+ width: calc((100% - 2 * var(--flex-container-gap, 1rem)) / 3);
354
+ }
355
+
356
+ .flex-col-lg-4 {
357
+ width: calc((100% - 3 * var(--flex-container-gap, 1rem)) / 4);
358
+ }
359
+
360
+ .flex-col-lg-5 {
361
+ width: calc((100% - 4 * var(--flex-container-gap, 1rem)) / 5);
362
+ }
363
+
364
+ .flex-col-lg-6 {
365
+ width: calc((100% - 5 * var(--flex-container-gap, 1rem)) / 6);
366
+ }
367
+
368
+ .flex-col-lg-7 {
369
+ width: calc((100% - 6 * var(--flex-container-gap, 1rem)) / 7);
370
+ }
371
+
372
+ .flex-col-lg-8 {
373
+ width: calc((100% - 7 * var(--flex-container-gap, 1rem)) / 8);
374
+ }
375
+
376
+ .flex-col-lg-9 {
377
+ width: calc((100% - 8 * var(--flex-container-gap, 1rem)) / 9);
378
+ }
379
+
380
+ .flex-col-lg-10 {
381
+ width: calc((100% - 9 * var(--flex-container-gap, 1rem)) / 10);
382
+ }
383
+
384
+ .flex-col-lg-11 {
385
+ width: calc((100% - 10 * var(--flex-container-gap, 1rem)) / 11);
386
+ }
387
+
388
+ .flex-col-lg-12 {
389
+ width: calc((100% - 11 * var(--flex-container-gap, 1rem)) / 12);
390
+ }
391
+ }
392
+
393
+ @media (min-width: 1200px) {
394
+ .flex-col-xl-1 {
395
+ width: calc((100% - 0 * var(--flex-container-gap, 1rem)) / 1);
396
+ }
397
+
398
+ .flex-col-xl-2 {
399
+ width: calc((100% - 1 * var(--flex-container-gap, 1rem)) / 2);
400
+ }
401
+
402
+ .flex-col-xl-3 {
403
+ width: calc((100% - 2 * var(--flex-container-gap, 1rem)) / 3);
404
+ }
405
+
406
+ .flex-col-xl-4 {
407
+ width: calc((100% - 3 * var(--flex-container-gap, 1rem)) / 4);
408
+ }
409
+
410
+ .flex-col-xl-5 {
411
+ width: calc((100% - 4 * var(--flex-container-gap, 1rem)) / 5);
412
+ }
413
+
414
+ .flex-col-xl-6 {
415
+ width: calc((100% - 5 * var(--flex-container-gap, 1rem)) / 6);
416
+ }
417
+
418
+ .flex-col-xl-7 {
419
+ width: calc((100% - 6 * var(--flex-container-gap, 1rem)) / 7);
420
+ }
421
+
422
+ .flex-col-xl-8 {
423
+ width: calc((100% - 7 * var(--flex-container-gap, 1rem)) / 8);
424
+ }
425
+
426
+ .flex-col-xl-9 {
427
+ width: calc((100% - 8 * var(--flex-container-gap, 1rem)) / 9);
428
+ }
429
+
430
+ .flex-col-xl-10 {
431
+ width: calc((100% - 9 * var(--flex-container-gap, 1rem)) / 10);
432
+ }
433
+
434
+ .flex-col-xl-11 {
435
+ width: calc((100% - 10 * var(--flex-container-gap, 1rem)) / 11);
436
+ }
437
+
438
+ .flex-col-xl-12 {
439
+ width: calc((100% - 11 * var(--flex-container-gap, 1rem)) / 12);
440
+ }
441
+ }
442
+
443
+ /* ==============================
444
+ * 响应式 Grid 布局系统
445
+ * 类名前缀 grid- 避免命名冲突
446
+ * 建议:Grid 更适合二维布局(如卡片网格、仪表盘)
447
+ * ============================== */
448
+
449
+ /* Grid 容器:自动 gap + 响应式列 */
450
+ .grid-container {
451
+ display: grid;
452
+ gap: var(--grid-container-gap, calc(var(--space) * 2));
453
+ width: 100%;
454
+ /* 默认:单列(移动端友好) */
455
+ grid-template-columns: 1fr;
456
+ }
457
+
458
+ /* 固定列数:1~12 列 */
459
+ .grid-col-1 {
460
+ grid-template-columns: repeat(1, 1fr);
461
+ }
462
+
463
+ .grid-col-2 {
464
+ grid-template-columns: repeat(2, 1fr);
465
+ }
466
+
467
+ .grid-col-3 {
468
+ grid-template-columns: repeat(3, 1fr);
469
+ }
470
+
471
+ .grid-col-4 {
472
+ grid-template-columns: repeat(4, 1fr);
473
+ }
474
+
475
+ .grid-col-5 {
476
+ grid-template-columns: repeat(5, 1fr);
477
+ }
478
+
479
+ .grid-col-6 {
480
+ grid-template-columns: repeat(6, 1fr);
481
+ }
482
+
483
+ .grid-col-7 {
484
+ grid-template-columns: repeat(7, 1fr);
485
+ }
486
+
487
+ .grid-col-8 {
488
+ grid-template-columns: repeat(8, 1fr);
489
+ }
490
+
491
+ .grid-col-9 {
492
+ grid-template-columns: repeat(9, 1fr);
493
+ }
494
+
495
+ .grid-col-10 {
496
+ grid-template-columns: repeat(10, 1fr);
497
+ }
498
+
499
+ .grid-col-11 {
500
+ grid-template-columns: repeat(11, 1fr);
501
+ }
502
+
503
+ .grid-col-12 {
504
+ grid-template-columns: repeat(12, 1fr);
505
+ }
506
+
507
+ /*
508
+ * 自动填充:最小宽度 + 自适应列数
509
+ * 建议:grid-cols-auto-* 用于自适应卡片布局(如商品列表),非常实用。
510
+ */
511
+ .grid-col-auto-150 {
512
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
513
+ }
514
+
515
+ .grid-col-auto-200 {
516
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
517
+ }
518
+
519
+ .grid-col-auto-250 {
520
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
521
+ }
522
+
523
+ .grid-col-auto-300 {
524
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
525
+ }
526
+
527
+ /* 响应式断点 */
528
+ @media (min-width: 576px) {
529
+ .grid-col-sm-1 {
530
+ grid-template-columns: repeat(1, 1fr);
531
+ }
532
+
533
+ .grid-col-sm-2 {
534
+ grid-template-columns: repeat(2, 1fr);
535
+ }
536
+
537
+ .grid-col-sm-3 {
538
+ grid-template-columns: repeat(3, 1fr);
539
+ }
540
+
541
+ .grid-col-sm-4 {
542
+ grid-template-columns: repeat(4, 1fr);
543
+ }
544
+
545
+ .grid-col-sm-5 {
546
+ grid-template-columns: repeat(5, 1fr);
547
+ }
548
+
549
+ .grid-col-sm-6 {
550
+ grid-template-columns: repeat(6, 1fr);
551
+ }
552
+
553
+ .grid-col-sm-7 {
554
+ grid-template-columns: repeat(7, 1fr);
555
+ }
556
+
557
+ .grid-col-sm-8 {
558
+ grid-template-columns: repeat(8, 1fr);
559
+ }
560
+
561
+ .grid-col-sm-9 {
562
+ grid-template-columns: repeat(9, 1fr);
563
+ }
564
+
565
+ .grid-col-sm-10 {
566
+ grid-template-columns: repeat(10, 1fr);
567
+ }
568
+
569
+ .grid-col-sm-11 {
570
+ grid-template-columns: repeat(11, 1fr);
571
+ }
572
+
573
+ .grid-col-sm-12 {
574
+ grid-template-columns: repeat(12, 1fr);
575
+ }
576
+ }
577
+
578
+ /**
579
+ * 为减少体积,md/lg/xl 断点只保留常用列数(如 1/2/3/4/6/12)
580
+ */
581
+ @media (min-width: 768px) {
582
+ .grid-col-md-1 {
583
+ grid-template-columns: repeat(1, 1fr);
584
+ }
585
+
586
+ .grid-col-md-2 {
587
+ grid-template-columns: repeat(2, 1fr);
588
+ }
589
+
590
+ /* ... 可按需补充 md-3 ~ md-12 */
591
+ .grid-col-md-3 {
592
+ grid-template-columns: repeat(3, 1fr);
593
+ }
594
+
595
+ .grid-col-md-4 {
596
+ grid-template-columns: repeat(4, 1fr);
597
+ }
598
+
599
+ .grid-col-md-6 {
600
+ grid-template-columns: repeat(6, 1fr);
601
+ }
602
+
603
+ .grid-col-md-12 {
604
+ grid-template-columns: repeat(12, 1fr);
605
+ }
606
+ }
607
+
608
+ @media (min-width: 992px) {
609
+ .grid-col-lg-1 {
610
+ grid-template-columns: repeat(1, 1fr);
611
+ }
612
+
613
+ .grid-col-lg-2 {
614
+ grid-template-columns: repeat(2, 1fr);
615
+ }
616
+
617
+ .grid-col-lg-3 {
618
+ grid-template-columns: repeat(3, 1fr);
619
+ }
620
+
621
+ .grid-col-lg-4 {
622
+ grid-template-columns: repeat(4, 1fr);
623
+ }
624
+
625
+ .grid-col-lg-6 {
626
+ grid-template-columns: repeat(6, 1fr);
627
+ }
628
+
629
+ .grid-col-lg-12 {
630
+ grid-template-columns: repeat(12, 1fr);
631
+ }
632
+ }
633
+
634
+ @media (min-width: 1200px) {
635
+ .grid-col-xl-1 {
636
+ grid-template-columns: repeat(1, 1fr);
637
+ }
638
+
639
+ .grid-col-xl-2 {
640
+ grid-template-columns: repeat(2, 1fr);
641
+ }
642
+
643
+ .grid-col-xl-3 {
644
+ grid-template-columns: repeat(3, 1fr);
645
+ }
646
+
647
+ .grid-col-xl-4 {
648
+ grid-template-columns: repeat(4, 1fr);
649
+ }
650
+
651
+ .grid-col-xl-6 {
652
+ grid-template-columns: repeat(6, 1fr);
653
+ }
654
+
655
+ .grid-col-xl-12 {
656
+ grid-template-columns: repeat(12, 1fr);
657
+ }
658
+ }
659
+
660
+ /* iOS Safe Area */
661
+ .ios-safe-x {
662
+ padding-left: env(safe-area-inset-left);
663
+ padding-right: env(safe-area-inset-right);
664
+ }
665
+
666
+ .ios-safe-y {
667
+ padding-top: env(safe-area-inset-top);
668
+ padding-bottom: env(safe-area-inset-bottom);
669
+ }
670
+
671
+ .ios-safe-left {
672
+ padding-left: env(safe-area-inset-left);
673
+ }
674
+
675
+ .ios-safe-right {
676
+ padding-right: env(safe-area-inset-right);
677
+ }
678
+
679
+ .ios-safe-top {
680
+ padding-top: env(safe-area-inset-top);
681
+ }
682
+
683
+ .ios-safe-bottom {
684
+ padding-bottom: env(safe-area-inset-bottom);
685
+ }
686
+
687
+ /* Aspect Ratio */
688
+ .aspect-square {
689
+ aspect-ratio: 1 / 1;
690
+ }
691
+
692
+ .aspect-video {
693
+ aspect-ratio: 16 / 9;
694
+ }
695
+
696
+ .aspect-auto {
697
+ aspect-ratio: auto;
698
+ }
699
+
700
+ /* columns */
701
+ .columns-auto {
702
+ -moz-columns: auto;
703
+ columns: auto;
704
+ }
705
+
706
+ .columns-3xs {
707
+ -moz-columns: var(--columns-3xs);
708
+ columns: var(--columns-3xs);
709
+ }
710
+
711
+ .columns-2xs {
712
+ -moz-columns: var(--columns-2xs);
713
+ columns: var(--columns-2xs);
714
+ }
715
+
716
+ .columns-xs {
717
+ -moz-columns: var(--columns-xs);
718
+ columns: var(--columns-xs);
719
+ }
720
+
721
+ .columns-sm {
722
+ -moz-columns: var(--columns-sm);
723
+ columns: var(--columns-sm);
724
+ }
725
+
726
+ .columns-md {
727
+ -moz-columns: var(--columns-md);
728
+ columns: var(--columns-md);
729
+ }
730
+
731
+ .columns-lg {
732
+ -moz-columns: var(--columns-lg);
733
+ columns: var(--columns-lg);
734
+ }
735
+
736
+ .columns-xl {
737
+ -moz-columns: var(--columns-xl);
738
+ columns: var(--columns-xl);
739
+ }
740
+
741
+ .columns-2xl {
742
+ -moz-columns: var(--columns-2xl);
743
+ columns: var(--columns-2xl);
744
+ }
745
+
746
+ .columns-3xl {
747
+ -moz-columns: var(--columns-3xl);
748
+ columns: var(--columns-3xl);
749
+ }
750
+
751
+ .columns-4xl {
752
+ -moz-columns: var(--columns-4xl);
753
+ columns: var(--columns-4xl);
754
+ }
755
+
756
+ .columns-5xl {
757
+ -moz-columns: var(--columns-5xl);
758
+ columns: var(--columns-5xl);
759
+ }
760
+
761
+ .columns-6xl {
762
+ -moz-columns: var(--columns-6xl);
763
+ columns: var(--columns-6xl);
764
+ }
765
+
766
+ .columns-7xl {
767
+ -moz-columns: var(--columns-7xl);
768
+ columns: var(--columns-7xl);
769
+ }
770
+
771
+ .w-full {
772
+ width: 100%;
773
+ }
774
+
775
+ .w-half {
776
+ width: 50%;
777
+ }
778
+
779
+ .w-screen {
780
+ width: 100vw;
781
+ }
782
+ }