pgo-uiux2 1.0.0

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 (180) hide show
  1. package/.env +1 -0
  2. package/.env.production +1 -0
  3. package/.prettierrc +13 -0
  4. package/.vscode/extensions.json +3 -0
  5. package/BUTTON_GUIDE.md +257 -0
  6. package/README.md +49 -0
  7. package/THEME_REFERENCE.md +310 -0
  8. package/eslint.config.ts +27 -0
  9. package/index.html +13 -0
  10. package/package.json +85 -0
  11. package/public/favicon.ico +0 -0
  12. package/src/App.vue +368 -0
  13. package/src/assets/fonts/Faruma.ttf +0 -0
  14. package/src/components/examples/AppBarExample.vue +101 -0
  15. package/src/components/examples/AvatarExample.vue +47 -0
  16. package/src/components/examples/BannerExample.vue +287 -0
  17. package/src/components/examples/BaseInputExample.vue +25 -0
  18. package/src/components/examples/BreadcrumbExample.vue +53 -0
  19. package/src/components/examples/CardExample.vue +77 -0
  20. package/src/components/examples/ChipExample.vue +225 -0
  21. package/src/components/examples/DatePickerExample.vue +31 -0
  22. package/src/components/examples/DropdownExample.vue +84 -0
  23. package/src/components/examples/EditorExample.vue +200 -0
  24. package/src/components/examples/ExpansionPanelExample.vue +42 -0
  25. package/src/components/examples/FileUploadExample.vue +40 -0
  26. package/src/components/examples/FormExample.vue +121 -0
  27. package/src/components/examples/HugeTest.vue +8 -0
  28. package/src/components/examples/LayoutContainerExample.vue +80 -0
  29. package/src/components/examples/ModalExample.vue +82 -0
  30. package/src/components/examples/NavDrawerExample.vue +170 -0
  31. package/src/components/examples/NumberFieldExample.vue +145 -0
  32. package/src/components/examples/RadioButtonExample.vue +161 -0
  33. package/src/components/examples/SearchExample.vue +322 -0
  34. package/src/components/examples/SelectExample.vue +121 -0
  35. package/src/components/examples/StackedTableViewExample.vue +53 -0
  36. package/src/components/examples/TabExample.vue +336 -0
  37. package/src/components/examples/TableExample.vue +228 -0
  38. package/src/components/examples/TextFieldExample.vue +181 -0
  39. package/src/components/examples/TextareaExample.vue +173 -0
  40. package/src/components/examples/ThemeToggle.vue +50 -0
  41. package/src/components/examples/TimelineExample.vue +66 -0
  42. package/src/components/examples/TipTapEditorExample.vue +20 -0
  43. package/src/components/examples/TooltipExample.vue +53 -0
  44. package/src/components/examples/VueDatePickerShowcase.vue +214 -0
  45. package/src/components/examples/_DatePickerExample.vue +33 -0
  46. package/src/components/examples/__FormExample.vue +77 -0
  47. package/src/components/index.ts +25 -0
  48. package/src/components/pgo/AppBar.vue +347 -0
  49. package/src/components/pgo/Avatar.vue +139 -0
  50. package/src/components/pgo/Banner.vue +300 -0
  51. package/src/components/pgo/Breadcrumb.vue +101 -0
  52. package/src/components/pgo/Button.vue +171 -0
  53. package/src/components/pgo/Card.vue +178 -0
  54. package/src/components/pgo/ConfirmationModel.vue +32 -0
  55. package/src/components/pgo/DataTable.vue +845 -0
  56. package/src/components/pgo/DatePicker/CalendarPanel.vue +43 -0
  57. package/src/components/pgo/DatePicker/__DatePicker.vue +122 -0
  58. package/src/components/pgo/DatePicker/types.ts +11 -0
  59. package/src/components/pgo/DatePicker/useCalendar.ts +39 -0
  60. package/src/components/pgo/DatePicker/useDatePicker.ts +31 -0
  61. package/src/components/pgo/Deprecated/ToastContainer.vue +51 -0
  62. package/src/components/pgo/Deprecated/ToastItem.vue +55 -0
  63. package/src/components/pgo/Dropdown.vue +296 -0
  64. package/src/components/pgo/DropdownItem.vue +40 -0
  65. package/src/components/pgo/Editor.vue +511 -0
  66. package/src/components/pgo/ExpansionPanel.vue +185 -0
  67. package/src/components/pgo/Footer.vue +39 -0
  68. package/src/components/pgo/HeroIcon.vue +124 -0
  69. package/src/components/pgo/InputSearch.vue +194 -0
  70. package/src/components/pgo/LayoutContainer.vue +104 -0
  71. package/src/components/pgo/Main.vue +37 -0
  72. package/src/components/pgo/Modal.vue +273 -0
  73. package/src/components/pgo/NavDrawer.vue +127 -0
  74. package/src/components/pgo/NavDrawerItem.vue +161 -0
  75. package/src/components/pgo/NavigationDrawer.vue +849 -0
  76. package/src/components/pgo/OLDNavDrawer.vue +661 -0
  77. package/src/components/pgo/OldAppBar.vue +223 -0
  78. package/src/components/pgo/PApp.vue +102 -0
  79. package/src/components/pgo/Pagination.vue +242 -0
  80. package/src/components/pgo/Search copy.vue +310 -0
  81. package/src/components/pgo/Search.vue +411 -0
  82. package/src/components/pgo/StackedTableView.vue +167 -0
  83. package/src/components/pgo/Tab.vue +617 -0
  84. package/src/components/pgo/TestInput.vue +395 -0
  85. package/src/components/pgo/Timeline.vue +367 -0
  86. package/src/components/pgo/TimelineItem.vue +80 -0
  87. package/src/components/pgo/TipTapEditor.vue +315 -0
  88. package/src/components/pgo/Tooltip.NOTES.md +12 -0
  89. package/src/components/pgo/Tooltip.PROPS.md +21 -0
  90. package/src/components/pgo/Tooltip.vue +281 -0
  91. package/src/components/pgo/base/Base.vue +444 -0
  92. package/src/components/pgo/buttons/Chip.vue +324 -0
  93. package/src/components/pgo/buttons/ChipGroup.vue +224 -0
  94. package/src/components/pgo/buttons/Radio.vue +424 -0
  95. package/src/components/pgo/filters/FilterSection.vue +188 -0
  96. package/src/components/pgo/filters/Searchbar.vue +216 -0
  97. package/src/components/pgo/forms/DynamicForm.vue +45 -0
  98. package/src/components/pgo/forms/Form.vue +132 -0
  99. package/src/components/pgo/index.ts +15 -0
  100. package/src/components/pgo/inputs/Checkbox.vue +320 -0
  101. package/src/components/pgo/inputs/DatePicker.vue +395 -0
  102. package/src/components/pgo/inputs/FileUpload.vue +326 -0
  103. package/src/components/pgo/inputs/NumberField.vue +243 -0
  104. package/src/components/pgo/inputs/Radio.vue +162 -0
  105. package/src/components/pgo/inputs/RadioGroup.vue +188 -0
  106. package/src/components/pgo/inputs/Select.vue +535 -0
  107. package/src/components/pgo/inputs/TextField.vue +194 -0
  108. package/src/components/pgo/inputs/Textarea.vue +181 -0
  109. package/src/main.js +12 -0
  110. package/src/pgo-components/_index.js +31 -0
  111. package/src/pgo-components/assets/fonts/Faruma.ttf +0 -0
  112. package/src/pgo-components/assets/fonts/logo.png +0 -0
  113. package/src/pgo-components/composables/useTheme.js +10 -0
  114. package/src/pgo-components/directives/tooltip-directive.ts +393 -0
  115. package/src/pgo-components/index.js +96 -0
  116. package/src/pgo-components/lib/componentConfig.js +147 -0
  117. package/src/pgo-components/lib/core/composables/_useCalendar.ts +127 -0
  118. package/src/pgo-components/lib/core/composables/useDefaults.ts +15 -0
  119. package/src/pgo-components/lib/core/composables/useLanguageSelect.js +0 -0
  120. package/src/pgo-components/lib/core/composables/useRtl.ts +12 -0
  121. package/src/pgo-components/lib/core/defaults/createDefaults.ts +5 -0
  122. package/src/pgo-components/lib/core/defaults/defaults.ts +7 -0
  123. package/src/pgo-components/lib/core/rtl/rtl.ts +3 -0
  124. package/src/pgo-components/lib/core/rtl/setRtl.ts +19 -0
  125. package/src/pgo-components/lib/drawerState.ts +3 -0
  126. package/src/pgo-components/lib/i18n/defaultLables.js +71 -0
  127. package/src/pgo-components/lib/i18n/i18nPlugin.js +52 -0
  128. package/src/pgo-components/lib/i18n/useI18n.js +35 -0
  129. package/src/pgo-components/lib/index.ts +38 -0
  130. package/src/pgo-components/pages/Component.vue +7 -0
  131. package/src/pgo-components/pages/ComponentRenderer.vue +85 -0
  132. package/src/pgo-components/pages/Home.vue +130 -0
  133. package/src/pgo-components/pages/ListView.vue +370 -0
  134. package/src/pgo-components/pages/Page1.vue +296 -0
  135. package/src/pgo-components/pages/_Page1.vue +180 -0
  136. package/src/pgo-components/plugins/SnackBar.vue +251 -0
  137. package/src/pgo-components/plugins/SnackBarContainer.vue +53 -0
  138. package/src/pgo-components/plugins/SnackBarPlugin.ts +136 -0
  139. package/src/pgo-components/plugins/theme-plugin.js +114 -0
  140. package/src/pgo-components/plugins/types.ts +46 -0
  141. package/src/pgo-components/plugins/useSnackBar.js +11 -0
  142. package/src/pgo-components/plugins/useSnackBar.ts +21 -0
  143. package/src/pgo-components/plugins/validation-plugin.js +11 -0
  144. package/src/pgo-components/services/Entry.json +813 -0
  145. package/src/pgo-components/services/axios.js +54 -0
  146. package/src/pgo-components/services/data.json +90 -0
  147. package/src/pgo-components/services/person.json +260 -0
  148. package/src/pgo-components/services/toast.ts +44 -0
  149. package/src/pgo-components/styles/global.css +234 -0
  150. package/src/pgo-components/styles/reset.css +96 -0
  151. package/src/pgo-components/styles/tokens.css +18 -0
  152. package/src/pgo-components/styles/utilities/border-radius.css +57 -0
  153. package/src/pgo-components/styles/utilities/borders.css +85 -0
  154. package/src/pgo-components/styles/utilities/colors.css +38 -0
  155. package/src/pgo-components/styles/utilities/cursor.css +19 -0
  156. package/src/pgo-components/styles/utilities/display.css +78 -0
  157. package/src/pgo-components/styles/utilities/elevation.css +33 -0
  158. package/src/pgo-components/styles/utilities/flex.css +403 -0
  159. package/src/pgo-components/styles/utilities/float.css +41 -0
  160. package/src/pgo-components/styles/utilities/hover.css +9 -0
  161. package/src/pgo-components/styles/utilities/index.css +18 -0
  162. package/src/pgo-components/styles/utilities/opacity.css +27 -0
  163. package/src/pgo-components/styles/utilities/overflow.css +26 -0
  164. package/src/pgo-components/styles/utilities/palette.css +515 -0
  165. package/src/pgo-components/styles/utilities/position.css +14 -0
  166. package/src/pgo-components/styles/utilities/sizing.css +70 -0
  167. package/src/pgo-components/styles/utilities/spacing.css +578 -0
  168. package/src/pgo-components/styles/utilities/transitions.css +58 -0
  169. package/src/pgo-components/styles/utilities/typography.css +91 -0
  170. package/src/pgo-components/styles/utilities/z-index.css +11 -0
  171. package/src/pgo-components/tokens/index.js +337 -0
  172. package/src/router/index.js +88 -0
  173. package/src/shims-vue.d.ts +14 -0
  174. package/src/validations/validationRules.js +50 -0
  175. package/tailwind.config.js +73 -0
  176. package/test.php +5 -0
  177. package/tsconfig.json +25 -0
  178. package/ui +31 -0
  179. package/ui.pgo.mv.conf +18 -0
  180. package/vite.config.js +42 -0
@@ -0,0 +1,70 @@
1
+ /* prettier-ignore */
2
+ @layer utilities {
3
+ /* Height */
4
+ .vts-h-auto { height: auto; }
5
+ .vts-h-screen { height: 100vh; }
6
+ .vts-h-0 { height: 0; }
7
+ .vts-h-10 { height: 10%; }
8
+ .vts-h-20 { height: 20%; }
9
+ .vts-h-25 { height: 25%; }
10
+ .vts-h-30 { height: 30%; }
11
+ .vts-h-33 { height: 33%; }
12
+ .vts-h-50 { height: 50%; }
13
+ .vts-h-60 { height: 60%; }
14
+ .vts-h-66 { height: 66%; }
15
+ .vts-h-75 { height: 75%; }
16
+ .vts-h-80 { height: 80%; }
17
+ .vts-h-90 { height: 90%; }
18
+ .vts-h-100 { height: 100%; }
19
+ .vts-fill-height { height: 100%; }
20
+ .vts-height-screen { height: 100dvh; }
21
+
22
+ /* Max-Height */
23
+ .vts-max-h-100 { max-height: 100%; }
24
+ .vts-max-h-screen { max-height: 100dvh; }
25
+ .vts-max-h-280 { max-height: 280px; }
26
+ .vts-max-h-320 { max-height: 320px; }
27
+ .vts-max-h-512 { max-height: 512px; }
28
+
29
+ /* Width */
30
+ .vts-w-auto { width: auto; }
31
+ .vts-w-screen { width: 100vw; }
32
+ .vts-width-screen { width: 100dvw; }
33
+ .vts-w-0 { width: 0; }
34
+ .vts-w-10 { width: 10%; }
35
+ .vts-w-20 { width: 20%; }
36
+ .vts-w-25 { width: 25%; }
37
+ .vts-w-30 { width: 30%; }
38
+ .vts-w-33 { width: 33%; }
39
+ .vts-w-45 { width: 45%; }
40
+ .vts-w-50 { width: 50%; }
41
+ .vts-w-55 { width: 55%; }
42
+ .vts-w-60 { width: 60%; }
43
+ .vts-w-66 { width: 66%; }
44
+ .vts-w-70 { width: 70%; }
45
+ .vts-w-75 { width: 75%; }
46
+ .vts-w-80 { width: 80%; }
47
+ .vts-w-90 { width: 90%; }
48
+ .vts-w-100 { width: 100%; }
49
+
50
+ /* Max-Width */
51
+ .vts-max-w-100 { max-width: 100%; }
52
+ .vts-max-w-screen { max-width: 100dvw; }
53
+ .vts-max-w-280 { max-width: 280px; }
54
+ .vts-max-w-320 { max-width: 320px; }
55
+ .vts-max-w-384 { max-width: 384px; }
56
+ .vts-max-w-448 { max-width: 448px; }
57
+ .vts-max-w-480 { max-width: 480px; }
58
+ .vts-max-w-512 { max-width: 512px; }
59
+ .vts-max-w-560 { max-width: 560px; }
60
+ .vts-max-w-640 { max-width: 640px; }
61
+ .vts-max-w-768 { max-width: 768px; }
62
+
63
+ /* Min-Width */
64
+ .vts-min-w-0 { min-width: 0; }
65
+ .vts-min-w-100 { min-width: 100%; }
66
+
67
+ /* Min-Height */
68
+ .vts-min-h-0 { min-height: 0; }
69
+ .vts-min-h-100 { min-height: 100%; }
70
+ }
@@ -0,0 +1,578 @@
1
+ /* prettier-ignore */
2
+
3
+ @layer utilities {
4
+ /* =========================
5
+ Gap
6
+ ========================= */
7
+ .vts-ga-0 { gap: 0; }
8
+ .vts-ga-1 { gap: 4px; }
9
+ .vts-ga-2 { gap: 8px; }
10
+ .vts-ga-3 { gap: 12px; }
11
+ .vts-ga-4 { gap: 16px; }
12
+ .vts-ga-5 { gap: 20px; }
13
+ .vts-ga-6 { gap: 24px; }
14
+ .vts-ga-7 { gap: 28px; }
15
+ .vts-ga-8 { gap: 32px; }
16
+ .vts-ga-9 { gap: 36px; }
17
+ .vts-ga-10 { gap: 40px; }
18
+ .vts-ga-11 { gap: 44px; }
19
+ .vts-ga-12 { gap: 48px; }
20
+ .vts-ga-13 { gap: 52px; }
21
+ .vts-ga-14 { gap: 56px; }
22
+ .vts-ga-15 { gap: 60px; }
23
+ .vts-ga-16 { gap: 64px; }
24
+
25
+ /* =========================
26
+ Margin (all sides)
27
+ ========================= */
28
+ .vts-ma-0 { margin: 0; }
29
+ .vts-ma-1 { margin: 4px; }
30
+ .vts-ma-2 { margin: 8px; }
31
+ .vts-ma-3 { margin: 12px; }
32
+ .vts-ma-4 { margin: 16px; }
33
+ .vts-ma-5 { margin: 20px; }
34
+ .vts-ma-6 { margin: 24px; }
35
+ .vts-ma-7 { margin: 28px; }
36
+ .vts-ma-8 { margin: 32px; }
37
+ .vts-ma-9 { margin: 36px; }
38
+ .vts-ma-10 { margin: 40px; }
39
+ .vts-ma-11 { margin: 44px; }
40
+ .vts-ma-12 { margin: 48px; }
41
+ .vts-ma-13 { margin: 52px; }
42
+ .vts-ma-14 { margin: 56px; }
43
+ .vts-ma-15 { margin: 60px; }
44
+ .vts-ma-16 { margin: 64px; }
45
+
46
+ /* =========================
47
+ Margin left (physical)
48
+ ========================= */
49
+ .vts-ml-0 { margin-left: 0; }
50
+ .vts-ml-1 { margin-left: 4px; }
51
+ .vts-ml-2 { margin-left: 8px; }
52
+ .vts-ml-3 { margin-left: 12px; }
53
+ .vts-ml-4 { margin-left: 16px; }
54
+ .vts-ml-5 { margin-left: 20px; }
55
+ .vts-ml-6 { margin-left: 24px; }
56
+ .vts-ml-7 { margin-left: 28px; }
57
+ .vts-ml-8 { margin-left: 32px; }
58
+ .vts-ml-9 { margin-left: 36px; }
59
+ .vts-ml-10 { margin-left: 40px; }
60
+ .vts-ml-11 { margin-left: 44px; }
61
+ .vts-ml-12 { margin-left: 48px; }
62
+ .vts-ml-13 { margin-left: 52px; }
63
+ .vts-ml-14 { margin-left: 56px; }
64
+ .vts-ml-15 { margin-left: 60px; }
65
+ .vts-ml-16 { margin-left: 64px; }
66
+
67
+ /* =========================
68
+ Margin start (logical, RTL-safe)
69
+ ========================= */
70
+ .vts-ms-0 { margin-inline-start: 0; }
71
+ .vts-ms-1 { margin-inline-start: 4px; }
72
+ .vts-ms-2 { margin-inline-start: 8px; }
73
+ .vts-ms-3 { margin-inline-start: 12px; }
74
+ .vts-ms-4 { margin-inline-start: 16px; }
75
+ .vts-ms-5 { margin-inline-start: 20px; }
76
+ .vts-ms-6 { margin-inline-start: 24px; }
77
+ .vts-ms-7 { margin-inline-start: 28px; }
78
+ .vts-ms-8 { margin-inline-start: 32px; }
79
+ .vts-ms-9 { margin-inline-start: 36px; }
80
+ .vts-ms-10 { margin-inline-start: 40px; }
81
+ .vts-ms-11 { margin-inline-start: 44px; }
82
+ .vts-ms-12 { margin-inline-start: 48px; }
83
+ .vts-ms-13 { margin-inline-start: 52px; }
84
+ .vts-ms-14 { margin-inline-start: 56px; }
85
+ .vts-ms-15 { margin-inline-start: 60px; }
86
+ .vts-ms-16 { margin-inline-start: 64px; }
87
+
88
+ /* =========================
89
+ Margin top
90
+ ========================= */
91
+ .vts-mt-0 { margin-top: 0; }
92
+ .vts-mt-1 { margin-top: 4px; }
93
+ .vts-mt-2 { margin-top: 8px; }
94
+ .vts-mt-3 { margin-top: 12px; }
95
+ .vts-mt-4 { margin-top: 16px; }
96
+ .vts-mt-5 { margin-top: 20px; }
97
+ .vts-mt-6 { margin-top: 24px; }
98
+ .vts-mt-7 { margin-top: 28px; }
99
+ .vts-mt-8 { margin-top: 32px; }
100
+ .vts-mt-9 { margin-top: 36px; }
101
+ .vts-mt-10 { margin-top: 40px; }
102
+ .vts-mt-11 { margin-top: 44px; }
103
+ .vts-mt-12 { margin-top: 48px; }
104
+ .vts-mt-13 { margin-top: 52px; }
105
+ .vts-mt-14 { margin-top: 56px; }
106
+ .vts-mt-15 { margin-top: 60px; }
107
+ .vts-mt-16 { margin-top: 64px; }
108
+
109
+ /* =========================
110
+ Margin right (physical)
111
+ ========================= */
112
+ .vts-mr-0 { margin-right: 0; }
113
+ .vts-mr-1 { margin-right: 4px; }
114
+ .vts-mr-2 { margin-right: 8px; }
115
+ .vts-mr-3 { margin-right: 12px; }
116
+ .vts-mr-4 { margin-right: 16px; }
117
+ .vts-mr-5 { margin-right: 20px; }
118
+ .vts-mr-6 { margin-right: 24px; }
119
+ .vts-mr-7 { margin-right: 28px; }
120
+ .vts-mr-8 { margin-right: 32px; }
121
+ .vts-mr-9 { margin-right: 36px; }
122
+ .vts-mr-10 { margin-right: 40px; }
123
+ .vts-mr-11 { margin-right: 44px; }
124
+ .vts-mr-12 { margin-right: 48px; }
125
+ .vts-mr-13 { margin-right: 52px; }
126
+ .vts-mr-14 { margin-right: 56px; }
127
+ .vts-mr-15 { margin-right: 60px; }
128
+ .vts-mr-16 { margin-right: 64px; }
129
+
130
+ /* =========================
131
+ Margin end (logical, RTL-safe)
132
+ ========================= */
133
+ .vts-me-0 { margin-inline-end: 0; }
134
+ .vts-me-1 { margin-inline-end: 4px; }
135
+ .vts-me-2 { margin-inline-end: 8px; }
136
+ .vts-me-3 { margin-inline-end: 12px; }
137
+ .vts-me-4 { margin-inline-end: 16px; }
138
+ .vts-me-5 { margin-inline-end: 20px; }
139
+ .vts-me-6 { margin-inline-end: 24px; }
140
+ .vts-me-7 { margin-inline-end: 28px; }
141
+ .vts-me-8 { margin-inline-end: 32px; }
142
+ .vts-me-9 { margin-inline-end: 36px; }
143
+ .vts-me-10 { margin-inline-end: 40px; }
144
+ .vts-me-11 { margin-inline-end: 44px; }
145
+ .vts-me-12 { margin-inline-end: 48px; }
146
+ .vts-me-13 { margin-inline-end: 52px; }
147
+ .vts-me-14 { margin-inline-end: 56px; }
148
+ .vts-me-15 { margin-inline-end: 60px; }
149
+ .vts-me-16 { margin-inline-end: 64px; }
150
+
151
+ /* =========================
152
+ Margin bottom
153
+ ========================= */
154
+ .vts-mb-0 { margin-bottom: 0; }
155
+ .vts-mb-1 { margin-bottom: 4px; }
156
+ .vts-mb-2 { margin-bottom: 8px; }
157
+ .vts-mb-3 { margin-bottom: 12px; }
158
+ .vts-mb-4 { margin-bottom: 16px; }
159
+ .vts-mb-5 { margin-bottom: 20px; }
160
+ .vts-mb-6 { margin-bottom: 24px; }
161
+ .vts-mb-7 { margin-bottom: 28px; }
162
+ .vts-mb-8 { margin-bottom: 32px; }
163
+ .vts-mb-9 { margin-bottom: 36px; }
164
+ .vts-mb-10 { margin-bottom: 40px; }
165
+ .vts-mb-11 { margin-bottom: 44px; }
166
+ .vts-mb-12 { margin-bottom: 48px; }
167
+ .vts-mb-13 { margin-bottom: 52px; }
168
+ .vts-mb-14 { margin-bottom: 56px; }
169
+ .vts-mb-15 { margin-bottom: 60px; }
170
+ .vts-mb-16 { margin-bottom: 64px; }
171
+
172
+ /* =========================
173
+ Negative margin (all sides)
174
+ ========================= */
175
+ .vts-ma-n1 { margin: -4px; }
176
+ .vts-ma-n2 { margin: -8px; }
177
+ .vts-ma-n3 { margin: -12px; }
178
+ .vts-ma-n4 { margin: -16px; }
179
+ .vts-ma-n5 { margin: -20px; }
180
+ .vts-ma-n6 { margin: -24px; }
181
+ .vts-ma-n7 { margin: -28px; }
182
+ .vts-ma-n8 { margin: -32px; }
183
+ .vts-ma-n9 { margin: -36px; }
184
+ .vts-ma-n10 { margin: -40px; }
185
+ .vts-ma-n11 { margin: -44px; }
186
+ .vts-ma-n12 { margin: -48px; }
187
+ .vts-ma-n13 { margin: -52px; }
188
+ .vts-ma-n14 { margin: -56px; }
189
+ .vts-ma-n15 { margin: -60px; }
190
+ .vts-ma-n16 { margin: -64px; }
191
+
192
+ /* =========================
193
+ Negative margin left (physical)
194
+ ========================= */
195
+ .vts-ml-n1 { margin-left: -4px; }
196
+ .vts-ml-n2 { margin-left: -8px; }
197
+ .vts-ml-n3 { margin-left: -12px; }
198
+ .vts-ml-n4 { margin-left: -16px; }
199
+ .vts-ml-n5 { margin-left: -20px; }
200
+ .vts-ml-n6 { margin-left: -24px; }
201
+ .vts-ml-n7 { margin-left: -28px; }
202
+ .vts-ml-n8 { margin-left: -32px; }
203
+ .vts-ml-n9 { margin-left: -36px; }
204
+ .vts-ml-n10 { margin-left: -40px; }
205
+ .vts-ml-n11 { margin-left: -44px; }
206
+ .vts-ml-n12 { margin-left: -48px; }
207
+ .vts-ml-n13 { margin-left: -52px; }
208
+ .vts-ml-n14 { margin-left: -56px; }
209
+ .vts-ml-n15 { margin-left: -60px; }
210
+ .vts-ml-n16 { margin-left: -64px; }
211
+
212
+ /* =========================
213
+ Negative margin start (logical, RTL-safe)
214
+ ========================= */
215
+ .vts-ms-n1 { margin-inline-start: -4px; }
216
+ .vts-ms-n2 { margin-inline-start: -8px; }
217
+ .vts-ms-n3 { margin-inline-start: -12px; }
218
+ .vts-ms-n4 { margin-inline-start: -16px; }
219
+ .vts-ms-n5 { margin-inline-start: -20px; }
220
+ .vts-ms-n6 { margin-inline-start: -24px; }
221
+ .vts-ms-n7 { margin-inline-start: -28px; }
222
+ .vts-ms-n8 { margin-inline-start: -32px; }
223
+ .vts-ms-n9 { margin-inline-start: -36px; }
224
+ .vts-ms-n10 { margin-inline-start: -40px; }
225
+ .vts-ms-n11 { margin-inline-start: -44px; }
226
+ .vts-ms-n12 { margin-inline-start: -48px; }
227
+ .vts-ms-n13 { margin-inline-start: -52px; }
228
+ .vts-ms-n14 { margin-inline-start: -56px; }
229
+ .vts-ms-n15 { margin-inline-start: -60px; }
230
+ .vts-ms-n16 { margin-inline-start: -64px; }
231
+
232
+ /* =========================
233
+ Negative margin top
234
+ ========================= */
235
+ .vts-mt-n1 { margin-top: -4px; }
236
+ .vts-mt-n2 { margin-top: -8px; }
237
+ .vts-mt-n3 { margin-top: -12px; }
238
+ .vts-mt-n4 { margin-top: -16px; }
239
+ .vts-mt-n5 { margin-top: -20px; }
240
+ .vts-mt-n6 { margin-top: -24px; }
241
+ .vts-mt-n7 { margin-top: -28px; }
242
+ .vts-mt-n8 { margin-top: -32px; }
243
+ .vts-mt-n9 { margin-top: -36px; }
244
+ .vts-mt-n10 { margin-top: -40px; }
245
+ .vts-mt-n11 { margin-top: -44px; }
246
+ .vts-mt-n12 { margin-top: -48px; }
247
+ .vts-mt-n13 { margin-top: -52px; }
248
+ .vts-mt-n14 { margin-top: -56px; }
249
+ .vts-mt-n15 { margin-top: -60px; }
250
+ .vts-mt-n16 { margin-top: -64px; }
251
+
252
+ /* =========================
253
+ Negative margin right (physical)
254
+ ========================= */
255
+ .vts-mr-n1 { margin-right: -4px; }
256
+ .vts-mr-n2 { margin-right: -8px; }
257
+ .vts-mr-n3 { margin-right: -12px; }
258
+ .vts-mr-n4 { margin-right: -16px; }
259
+ .vts-mr-n5 { margin-right: -20px; }
260
+ .vts-mr-n6 { margin-right: -24px; }
261
+ .vts-mr-n7 { margin-right: -28px; }
262
+ .vts-mr-n8 { margin-right: -32px; }
263
+ .vts-mr-n9 { margin-right: -36px; }
264
+ .vts-mr-n10 { margin-right: -40px; }
265
+ .vts-mr-n11 { margin-right: -44px; }
266
+ .vts-mr-n12 { margin-right: -48px; }
267
+ .vts-mr-n13 { margin-right: -52px; }
268
+ .vts-mr-n14 { margin-right: -56px; }
269
+ .vts-mr-n15 { margin-right: -60px; }
270
+ .vts-mr-n16 { margin-right: -64px; }
271
+
272
+ /* =========================
273
+ Negative margin end (logical, RTL-safe)
274
+ ========================= */
275
+ .vts-me-n1 { margin-inline-end: -4px; }
276
+ .vts-me-n2 { margin-inline-end: -8px; }
277
+ .vts-me-n3 { margin-inline-end: -12px; }
278
+ .vts-me-n4 { margin-inline-end: -16px; }
279
+ .vts-me-n5 { margin-inline-end: -20px; }
280
+ .vts-me-n6 { margin-inline-end: -24px; }
281
+ .vts-me-n7 { margin-inline-end: -28px; }
282
+ .vts-me-n8 { margin-inline-end: -32px; }
283
+ .vts-me-n9 { margin-inline-end: -36px; }
284
+ .vts-me-n10 { margin-inline-end: -40px; }
285
+ .vts-me-n11 { margin-inline-end: -44px; }
286
+ .vts-me-n12 { margin-inline-end: -48px; }
287
+ .vts-me-n13 { margin-inline-end: -52px; }
288
+ .vts-me-n14 { margin-inline-end: -56px; }
289
+ .vts-me-n15 { margin-inline-end: -60px; }
290
+ .vts-me-n16 { margin-inline-end: -64px; }
291
+
292
+ /* =========================
293
+ Negative margin bottom
294
+ ========================= */
295
+ .vts-mb-n1 { margin-bottom: -4px; }
296
+ .vts-mb-n2 { margin-bottom: -8px; }
297
+ .vts-mb-n3 { margin-bottom: -12px; }
298
+ .vts-mb-n4 { margin-bottom: -16px; }
299
+ .vts-mb-n5 { margin-bottom: -20px; }
300
+ .vts-mb-n6 { margin-bottom: -24px; }
301
+ .vts-mb-n7 { margin-bottom: -28px; }
302
+ .vts-mb-n8 { margin-bottom: -32px; }
303
+ .vts-mb-n9 { margin-bottom: -36px; }
304
+ .vts-mb-n10 { margin-bottom: -40px; }
305
+ .vts-mb-n11 { margin-bottom: -44px; }
306
+ .vts-mb-n12 { margin-bottom: -48px; }
307
+ .vts-mb-n13 { margin-bottom: -52px; }
308
+ .vts-mb-n14 { margin-bottom: -56px; }
309
+ .vts-mb-n15 { margin-bottom: -60px; }
310
+ .vts-mb-n16 { margin-bottom: -64px; }
311
+
312
+ /* =========================
313
+ Auto margins
314
+ ========================= */
315
+ .vts-ma-auto { margin: auto; }
316
+
317
+ .vts-ml-auto { margin-left: auto; }
318
+ .vts-ms-auto { margin-inline-start: auto; }
319
+
320
+ .vts-mt-auto { margin-top: auto; }
321
+
322
+ .vts-mr-auto { margin-right: auto; }
323
+ .vts-me-auto { margin-inline-end: auto; }
324
+
325
+ .vts-mb-auto { margin-bottom: auto; }
326
+
327
+ /* =========================
328
+ Padding (all sides)
329
+ ========================= */
330
+ .vts-pa-0 { padding: 0; }
331
+ .vts-pa-1 { padding: 4px; }
332
+ .vts-pa-2 { padding: 8px; }
333
+ .vts-pa-3 { padding: 12px; }
334
+ .vts-pa-4 { padding: 16px; }
335
+ .vts-pa-5 { padding: 20px; }
336
+ .vts-pa-6 { padding: 24px; }
337
+ .vts-pa-7 { padding: 28px; }
338
+ .vts-pa-8 { padding: 32px; }
339
+ .vts-pa-9 { padding: 36px; }
340
+ .vts-pa-10 { padding: 40px; }
341
+ .vts-pa-11 { padding: 44px; }
342
+ .vts-pa-12 { padding: 48px; }
343
+ .vts-pa-13 { padding: 52px; }
344
+ .vts-pa-14 { padding: 56px; }
345
+ .vts-pa-15 { padding: 60px; }
346
+ .vts-pa-16 { padding: 64px; }
347
+
348
+ /* =========================
349
+ Padding X (left + right)
350
+ ========================= */
351
+ .vts-px-0 { padding-left: 0; padding-right: 0; }
352
+ .vts-px-1 { padding-left: 4px; padding-right: 4px; }
353
+ .vts-px-2 { padding-left: 8px; padding-right: 8px; }
354
+ .vts-px-3 { padding-left: 12px; padding-right: 12px; }
355
+ .vts-px-4 { padding-left: 16px; padding-right: 16px; }
356
+ .vts-px-5 { padding-left: 20px; padding-right: 20px; }
357
+ .vts-px-6 { padding-left: 24px; padding-right: 24px; }
358
+ .vts-px-7 { padding-left: 28px; padding-right: 28px; }
359
+ .vts-px-8 { padding-left: 32px; padding-right: 32px; }
360
+ .vts-px-9 { padding-left: 36px; padding-right: 36px; }
361
+ .vts-px-10 { padding-left: 40px; padding-right: 40px; }
362
+ .vts-px-11 { padding-left: 44px; padding-right: 44px; }
363
+ .vts-px-12 { padding-left: 48px; padding-right: 48px; }
364
+ .vts-px-13 { padding-left: 52px; padding-right: 52px; }
365
+ .vts-px-14 { padding-left: 56px; padding-right: 56px; }
366
+ .vts-px-15 { padding-left: 60px; padding-right: 60px; }
367
+ .vts-px-16 { padding-left: 64px; padding-right: 64px; }
368
+
369
+ /* =========================
370
+ Padding Y (top + bottom)
371
+ ========================= */
372
+ .vts-py-0 { padding-top: 0; padding-bottom: 0; }
373
+ .vts-py-1 { padding-top: 4px; padding-bottom: 4px; }
374
+ .vts-py-2 { padding-top: 8px; padding-bottom: 8px; }
375
+ .vts-py-3 { padding-top: 12px; padding-bottom: 12px; }
376
+ .vts-py-4 { padding-top: 16px; padding-bottom: 16px; }
377
+ .vts-py-5 { padding-top: 20px; padding-bottom: 20px; }
378
+ .vts-py-6 { padding-top: 24px; padding-bottom: 24px; }
379
+ .vts-py-7 { padding-top: 28px; padding-bottom: 28px; }
380
+ .vts-py-8 { padding-top: 32px; padding-bottom: 32px; }
381
+ .vts-py-9 { padding-top: 36px; padding-bottom: 36px; }
382
+ .vts-py-10 { padding-top: 40px; padding-bottom: 40px; }
383
+ .vts-py-11 { padding-top: 44px; padding-bottom: 44px; }
384
+ .vts-py-12 { padding-top: 48px; padding-bottom: 48px; }
385
+ .vts-py-13 { padding-top: 52px; padding-bottom: 52px; }
386
+ .vts-py-14 { padding-top: 56px; padding-bottom: 56px; }
387
+ .vts-py-15 { padding-top: 60px; padding-bottom: 60px; }
388
+ .vts-py-16 { padding-top: 64px; padding-bottom: 64px; }
389
+
390
+ /* =========================
391
+ Padding left (physical)
392
+ ========================= */
393
+ .vts-pl-0 { padding-left: 0; }
394
+ .vts-pl-1 { padding-left: 4px; }
395
+ .vts-pl-2 { padding-left: 8px; }
396
+ .vts-pl-3 { padding-left: 12px; }
397
+ .vts-pl-4 { padding-left: 16px; }
398
+ .vts-pl-5 { padding-left: 20px; }
399
+ .vts-pl-6 { padding-left: 24px; }
400
+ .vts-pl-7 { padding-left: 28px; }
401
+ .vts-pl-8 { padding-left: 32px; }
402
+ .vts-pl-9 { padding-left: 36px; }
403
+ .vts-pl-10 { padding-left: 40px; }
404
+ .vts-pl-11 { padding-left: 44px; }
405
+ .vts-pl-12 { padding-left: 48px; }
406
+ .vts-pl-13 { padding-left: 52px; }
407
+ .vts-pl-14 { padding-left: 56px; }
408
+ .vts-pl-15 { padding-left: 60px; }
409
+ .vts-pl-16 { padding-left: 64px; }
410
+
411
+ /* =========================
412
+ Padding start (logical, RTL-safe)
413
+ ========================= */
414
+ .vts-ps-0 { padding-inline-start: 0; }
415
+ .vts-ps-1 { padding-inline-start: 4px; }
416
+ .vts-ps-2 { padding-inline-start: 8px; }
417
+ .vts-ps-3 { padding-inline-start: 12px; }
418
+ .vts-ps-4 { padding-inline-start: 16px; }
419
+ .vts-ps-5 { padding-inline-start: 20px; }
420
+ .vts-ps-6 { padding-inline-start: 24px; }
421
+ .vts-ps-7 { padding-inline-start: 28px; }
422
+ .vts-ps-8 { padding-inline-start: 32px; }
423
+ .vts-ps-9 { padding-inline-start: 36px; }
424
+ .vts-ps-10 { padding-inline-start: 40px; }
425
+ .vts-ps-11 { padding-inline-start: 44px; }
426
+ .vts-ps-12 { padding-inline-start: 48px; }
427
+ .vts-ps-13 { padding-inline-start: 52px; }
428
+ .vts-ps-14 { padding-inline-start: 56px; }
429
+ .vts-ps-15 { padding-inline-start: 60px; }
430
+ .vts-ps-16 { padding-inline-start: 64px; }
431
+
432
+ /* =========================
433
+ Padding top
434
+ ========================= */
435
+ .vts-pt-0 { padding-top: 0; }
436
+ .vts-pt-1 { padding-top: 4px; }
437
+ .vts-pt-2 { padding-top: 8px; }
438
+ .vts-pt-3 { padding-top: 12px; }
439
+ .vts-pt-4 { padding-top: 16px; }
440
+ .vts-pt-5 { padding-top: 20px; }
441
+ .vts-pt-6 { padding-top: 24px; }
442
+ .vts-pt-7 { padding-top: 28px; }
443
+ .vts-pt-8 { padding-top: 32px; }
444
+ .vts-pt-9 { padding-top: 36px; }
445
+ .vts-pt-10 { padding-top: 40px; }
446
+ .vts-pt-11 { padding-top: 44px; }
447
+ .vts-pt-12 { padding-top: 48px; }
448
+ .vts-pt-13 { padding-top: 52px; }
449
+ .vts-pt-14 { padding-top: 56px; }
450
+ .vts-pt-15 { padding-top: 60px; }
451
+ .vts-pt-16 { padding-top: 64px; }
452
+
453
+ /* =========================
454
+ Padding right (physical)
455
+ ========================= */
456
+ .vts-pr-0 { padding-right: 0; }
457
+ .vts-pr-1 { padding-right: 4px; }
458
+ .vts-pr-2 { padding-right: 8px; }
459
+ .vts-pr-3 { padding-right: 12px; }
460
+ .vts-pr-4 { padding-right: 16px; }
461
+ .vts-pr-5 { padding-right: 20px; }
462
+ .vts-pr-6 { padding-right: 24px; }
463
+ .vts-pr-7 { padding-right: 28px; }
464
+ .vts-pr-8 { padding-right: 32px; }
465
+ .vts-pr-9 { padding-right: 36px; }
466
+ .vts-pr-10 { padding-right: 40px; }
467
+ .vts-pr-11 { padding-right: 44px; }
468
+ .vts-pr-12 { padding-right: 48px; }
469
+ .vts-pr-13 { padding-right: 52px; }
470
+ .vts-pr-14 { padding-right: 56px; }
471
+ .vts-pr-15 { padding-right: 60px; }
472
+ .vts-pr-16 { padding-right: 64px; }
473
+
474
+ /* =========================
475
+ Padding end (logical, RTL-safe)
476
+ ========================= */
477
+ .vts-pe-0 { padding-inline-end: 0; }
478
+ .vts-pe-1 { padding-inline-end: 4px; }
479
+ .vts-pe-2 { padding-inline-end: 8px; }
480
+ .vts-pe-3 { padding-inline-end: 12px; }
481
+ .vts-pe-4 { padding-inline-end: 16px; }
482
+ .vts-pe-5 { padding-inline-end: 20px; }
483
+ .vts-pe-6 { padding-inline-end: 24px; }
484
+ .vts-pe-7 { padding-inline-end: 28px; }
485
+ .vts-pe-8 { padding-inline-end: 32px; }
486
+ .vts-pe-9 { padding-inline-end: 36px; }
487
+ .vts-pe-10 { padding-inline-end: 40px; }
488
+ .vts-pe-11 { padding-inline-end: 44px; }
489
+ .vts-pe-12 { padding-inline-end: 48px; }
490
+ .vts-pe-13 { padding-inline-end: 52px; }
491
+ .vts-pe-14 { padding-inline-end: 56px; }
492
+ .vts-pe-15 { padding-inline-end: 60px; }
493
+ .vts-pe-16 { padding-inline-end: 64px; }
494
+
495
+ /* =========================
496
+ Padding bottom
497
+ ========================= */
498
+ .vts-pb-0 { padding-bottom: 0; }
499
+ .vts-pb-1 { padding-bottom: 4px; }
500
+ .vts-pb-2 { padding-bottom: 8px; }
501
+ .vts-pb-3 { padding-bottom: 12px; }
502
+ .vts-pb-4 { padding-bottom: 16px; }
503
+ .vts-pb-5 { padding-bottom: 20px; }
504
+ .vts-pb-6 { padding-bottom: 24px; }
505
+ .vts-pb-7 { padding-bottom: 28px; }
506
+ .vts-pb-8 { padding-bottom: 32px; }
507
+ .vts-pb-9 { padding-bottom: 36px; }
508
+ .vts-pb-10 { padding-bottom: 40px; }
509
+ .vts-pb-11 { padding-bottom: 44px; }
510
+ .vts-pb-12 { padding-bottom: 48px; }
511
+ .vts-pb-13 { padding-bottom: 52px; }
512
+ .vts-pb-14 { padding-bottom: 56px; }
513
+ .vts-pb-15 { padding-bottom: 60px; }
514
+ .vts-pb-16 { padding-bottom: 64px; }
515
+
516
+ /* =========================
517
+ Margin X (left + right)
518
+ ========================= */
519
+ .vts-mx-0 { margin-left: 0; margin-right: 0; }
520
+ .vts-mx-1 { margin-left: 4px; margin-right: 4px; }
521
+ .vts-mx-2 { margin-left: 8px; margin-right: 8px; }
522
+ .vts-mx-3 { margin-left: 12px; margin-right: 12px; }
523
+ .vts-mx-4 { margin-left: 16px; margin-right: 16px; }
524
+ .vts-mx-5 { margin-left: 20px; margin-right: 20px; }
525
+ .vts-mx-6 { margin-left: 24px; margin-right: 24px; }
526
+ .vts-mx-7 { margin-left: 28px; margin-right: 28px; }
527
+ .vts-mx-8 { margin-left: 32px; margin-right: 32px; }
528
+ .vts-mx-9 { margin-left: 36px; margin-right: 36px; }
529
+ .vts-mx-10 { margin-left: 40px; margin-right: 40px; }
530
+ .vts-mx-11 { margin-left: 44px; margin-right: 44px; }
531
+ .vts-mx-12 { margin-left: 48px; margin-right: 48px; }
532
+ .vts-mx-13 { margin-left: 52px; margin-right: 52px; }
533
+ .vts-mx-14 { margin-left: 56px; margin-right: 56px; }
534
+ .vts-mx-15 { margin-left: 60px; margin-right: 60px; }
535
+ .vts-mx-16 { margin-left: 64px; margin-right: 64px; }
536
+
537
+ /* =========================
538
+ Margin Y (top + bottom)
539
+ ========================= */
540
+ .vts-my-0 { margin-top: 0; margin-bottom: 0; }
541
+ .vts-my-1 { margin-top: 4px; margin-bottom: 4px; }
542
+ .vts-my-2 { margin-top: 8px; margin-bottom: 8px; }
543
+ .vts-my-3 { margin-top: 12px; margin-bottom: 12px; }
544
+ .vts-my-4 { margin-top: 16px; margin-bottom: 16px; }
545
+ .vts-my-5 { margin-top: 20px; margin-bottom: 20px; }
546
+ .vts-my-6 { margin-top: 24px; margin-bottom: 24px; }
547
+ .vts-my-7 { margin-top: 28px; margin-bottom: 28px; }
548
+ .vts-my-8 { margin-top: 32px; margin-bottom: 32px; }
549
+ .vts-my-9 { margin-top: 36px; margin-bottom: 36px; }
550
+ .vts-my-10 { margin-top: 40px; margin-bottom: 40px; }
551
+ .vts-my-11 { margin-top: 44px; margin-bottom: 44px; }
552
+ .vts-my-12 { margin-top: 48px; margin-bottom: 48px; }
553
+ .vts-my-13 { margin-top: 52px; margin-bottom: 52px; }
554
+ .vts-my-14 { margin-top: 56px; margin-bottom: 56px; }
555
+ .vts-my-15 { margin-top: 60px; margin-bottom: 60px; }
556
+ .vts-my-16 { margin-top: 64px; margin-bottom: 64px; }
557
+
558
+ /* =========================
559
+ Space between children (vertical)
560
+ ========================= */
561
+ .vts-space-y-0 > * + * { margin-top: 0; }
562
+ .vts-space-y-1 > * + * { margin-top: 4px; }
563
+ .vts-space-y-2 > * + * { margin-top: 8px; }
564
+ .vts-space-y-3 > * + * { margin-top: 12px; }
565
+ .vts-space-y-4 > * + * { margin-top: 16px; }
566
+ .vts-space-y-5 > * + * { margin-top: 20px; }
567
+ .vts-space-y-6 > * + * { margin-top: 24px; }
568
+ .vts-space-y-7 > * + * { margin-top: 28px; }
569
+ .vts-space-y-8 > * + * { margin-top: 32px; }
570
+ .vts-space-y-9 > * + * { margin-top: 36px; }
571
+ .vts-space-y-10 > * + * { margin-top: 40px; }
572
+ .vts-space-y-11 > * + * { margin-top: 44px; }
573
+ .vts-space-y-12 > * + * { margin-top: 48px; }
574
+ .vts-space-y-13 > * + * { margin-top: 52px; }
575
+ .vts-space-y-14 > * + * { margin-top: 56px; }
576
+ .vts-space-y-15 > * + * { margin-top: 60px; }
577
+ .vts-space-y-16 > * + * { margin-top: 64px; }
578
+ }
@@ -0,0 +1,58 @@
1
+ /* Transition utilities: token-driven with safe fallbacks */
2
+
3
+ /* Base transition helper */
4
+ .vts-transition {
5
+ transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter;
6
+ transition-duration: var(--vts-motion-duration-2, 200ms);
7
+ transition-timing-function: var(--vts-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));
8
+ }
9
+
10
+ /* Property scopes */
11
+ .vts-transition-none { transition: none; }
12
+ .vts-transition-all { transition-property: all; }
13
+ .vts-transition-colors { transition-property: color, background-color, border-color, fill, stroke; }
14
+ .vts-transition-opacity { transition-property: opacity; }
15
+ .vts-transition-transform { transition-property: transform; }
16
+ .vts-transition-shadow { transition-property: box-shadow; }
17
+ /* Size-focused transitions to avoid jank */
18
+ .vts-transition-size { transition-property: height, max-height; }
19
+ .vts-transition-size-opacity { transition-property: height, max-height, opacity; }
20
+
21
+ /* Will-change hints for smoother animations */
22
+ .vts-will-change-size { will-change: height, max-height; }
23
+ .vts-will-change-size-opacity { will-change: height, max-height, opacity; }
24
+
25
+ /* Durations */
26
+ .vts-duration-1 { transition-duration: var(--vts-motion-duration-1, 100ms); }
27
+ .vts-duration-2 { transition-duration: var(--vts-motion-duration-2, 200ms); }
28
+ .vts-duration-3 { transition-duration: var(--vts-motion-duration-3, 250ms); }
29
+ .vts-duration-4 { transition-duration: var(--vts-motion-duration-4, 300ms); }
30
+ .vts-duration-5 { transition-duration: var(--vts-motion-duration-5, 400ms); }
31
+
32
+ /* Delays */
33
+ .vts-delay-1 { transition-delay: var(--vts-motion-delay-1, 75ms); }
34
+ .vts-delay-2 { transition-delay: var(--vts-motion-delay-2, 150ms); }
35
+ .vts-delay-3 { transition-delay: var(--vts-motion-delay-3, 300ms); }
36
+
37
+ /* Easing curves */
38
+ .vts-ease-standard { transition-timing-function: var(--vts-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)); }
39
+ .vts-ease-in { transition-timing-function: var(--vts-motion-easing-in, cubic-bezier(0.4, 0, 1, 1)); }
40
+ .vts-ease-out { transition-timing-function: var(--vts-motion-easing-out, cubic-bezier(0, 0, 0.2, 1)); }
41
+ .vts-ease-in-out { transition-timing-function: var(--vts-motion-easing-in-out, cubic-bezier(0.4, 0, 0.2, 1)); }
42
+
43
+ /* Reduced motion: dramatically shorten motion without removing semantics */
44
+ @media (prefers-reduced-motion: reduce) {
45
+ .vts-transition,
46
+ .vts-transition-all,
47
+ .vts-transition-colors,
48
+ .vts-transition-opacity,
49
+ .vts-transition-transform,
50
+ .vts-transition-shadow,
51
+ [class^="vts-duration-"],
52
+ [class*=" vts-duration-"] {
53
+ transition-duration: 1ms !important;
54
+ transition-delay: 0ms !important;
55
+ animation-duration: 1ms !important;
56
+ animation-delay: 0ms !important;
57
+ }
58
+ }