@onetype/framework 2.0.53 → 2.0.55

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 (150) hide show
  1. package/addons/float/popup/css/popup.css +2 -2
  2. package/addons/render/directives/front/functions/process.js +3 -1
  3. package/addons/render/directives/front/items/self/160-slot.js +9 -1
  4. package/addons/render/editor/addon.js +13 -0
  5. package/addons/render/editor/functions/block/add.js +57 -0
  6. package/addons/render/editor/functions/block/delete.js +32 -0
  7. package/addons/render/editor/functions/block/find.js +30 -0
  8. package/addons/render/editor/functions/render/block.js +114 -0
  9. package/addons/render/editor/functions/render/blocks.js +31 -0
  10. package/addons/render/editor/items/elements/editor.js +69 -0
  11. package/addons/render/editor/items/self/paragraph.js +21 -0
  12. package/addons/render/editor/styles/editor.css +252 -0
  13. package/addons/render/elements/front/functions/types/colors/badge.js +19 -0
  14. package/addons/render/elements/front/functions/types/colors/status.js +24 -0
  15. package/addons/render/elements/front/functions/types/escape.js +8 -0
  16. package/addons/render/elements/front/functions/types/format/currency.js +16 -0
  17. package/addons/render/elements/front/functions/types/format/date.js +16 -0
  18. package/addons/render/elements/front/functions/types/format/number.js +24 -0
  19. package/addons/render/elements/front/functions/types/format/timeago.js +43 -0
  20. package/addons/render/elements/front/functions/types/render/avatar.js +10 -0
  21. package/addons/render/elements/front/functions/types/render/badge.js +17 -0
  22. package/addons/render/elements/front/functions/types/render/boolean.js +8 -0
  23. package/addons/render/elements/front/functions/types/render/chip.js +6 -0
  24. package/addons/render/elements/front/functions/types/render/currency.js +7 -0
  25. package/addons/render/elements/front/functions/types/render/date.js +6 -0
  26. package/addons/render/elements/front/functions/types/render/description.js +12 -0
  27. package/addons/render/elements/front/functions/types/render/group.js +11 -0
  28. package/addons/render/elements/front/functions/types/render/icon.js +8 -0
  29. package/addons/render/elements/front/functions/types/render/image.js +9 -0
  30. package/addons/render/elements/front/functions/types/render/link.js +8 -0
  31. package/addons/render/elements/front/functions/types/render/media.js +16 -0
  32. package/addons/render/elements/front/functions/types/render/metric.js +13 -0
  33. package/addons/render/elements/front/functions/types/render/number.js +6 -0
  34. package/addons/render/elements/front/functions/types/render/progress.js +13 -0
  35. package/addons/render/elements/front/functions/types/render/status.js +12 -0
  36. package/addons/render/elements/front/functions/types/render/tag.js +6 -0
  37. package/addons/render/elements/front/functions/types/render/tags.js +11 -0
  38. package/addons/render/elements/front/functions/types/render/text.js +8 -0
  39. package/addons/render/elements/front/functions/types/render/timeago.js +6 -0
  40. package/addons/render/elements/front/functions/types/render.js +16 -0
  41. package/addons/render/elements/front/items/directives/element.js +8 -3
  42. package/addons/render/elements/front/items/self/cards/info/info.css +499 -0
  43. package/addons/render/elements/front/items/self/cards/info/info.js +224 -0
  44. package/addons/render/elements/front/items/self/cards/item/item.css +614 -0
  45. package/addons/render/elements/front/items/self/cards/item/item.js +200 -0
  46. package/addons/render/elements/front/items/self/cards/pricing/pricing.css +318 -46
  47. package/addons/render/elements/front/items/self/cards/pricing/pricing.js +81 -30
  48. package/addons/render/elements/front/items/self/cards/profile/profile.css +446 -0
  49. package/addons/render/elements/front/items/self/cards/profile/profile.js +186 -0
  50. package/addons/render/elements/front/items/self/cards/share/share.css +445 -0
  51. package/addons/render/elements/front/items/self/cards/share/share.js +316 -0
  52. package/addons/render/elements/front/items/self/cards/stat/stat.css +356 -0
  53. package/addons/render/elements/front/items/self/cards/stat/stat.js +146 -0
  54. package/addons/render/elements/front/items/self/charts/bar/bar.css +263 -0
  55. package/addons/render/elements/front/items/self/charts/bar/bar.js +156 -0
  56. package/addons/render/elements/front/items/self/charts/donut/donut.css +222 -0
  57. package/addons/render/elements/front/items/self/charts/donut/donut.js +164 -0
  58. package/addons/render/elements/front/items/self/charts/line/line.css +229 -0
  59. package/addons/render/elements/front/items/self/charts/line/line.js +249 -0
  60. package/addons/render/elements/front/items/self/charts/sparkline/sparkline.css +102 -0
  61. package/addons/render/elements/front/items/self/charts/sparkline/sparkline.js +164 -0
  62. package/addons/render/elements/front/items/self/core/builder/builder.css +71 -116
  63. package/addons/render/elements/front/items/self/core/builder/builder.js +212 -127
  64. package/addons/render/elements/front/items/self/core/repeater/repeater.css +338 -71
  65. package/addons/render/elements/front/items/self/core/repeater/repeater.js +191 -44
  66. package/addons/render/elements/front/items/self/data/filters/filters.css +541 -0
  67. package/addons/render/elements/front/items/self/data/filters/filters.js +504 -0
  68. package/addons/render/elements/front/items/self/data/table/table.css +588 -0
  69. package/addons/render/elements/front/items/self/data/table/table.js +589 -0
  70. package/addons/render/elements/front/items/self/form/button/button.css +430 -103
  71. package/addons/render/elements/front/items/self/form/button/button.js +109 -101
  72. package/addons/render/elements/front/items/self/form/checkbox/checkbox.css +356 -39
  73. package/addons/render/elements/front/items/self/form/checkbox/checkbox.js +109 -75
  74. package/addons/render/elements/front/items/self/form/color/color.css +255 -61
  75. package/addons/render/elements/front/items/self/form/color/color.js +135 -41
  76. package/addons/render/elements/front/items/self/form/date/date.css +289 -38
  77. package/addons/render/elements/front/items/self/form/date/date.js +108 -24
  78. package/addons/render/elements/front/items/self/form/editor/editor.css +447 -0
  79. package/addons/render/elements/front/items/self/form/editor/editor.js +794 -0
  80. package/addons/render/elements/front/items/self/form/field/field.css +160 -29
  81. package/addons/render/elements/front/items/self/form/field/field.js +36 -16
  82. package/addons/render/elements/front/items/self/form/input/input.css +272 -32
  83. package/addons/render/elements/front/items/self/form/input/input.js +324 -124
  84. package/addons/render/elements/front/items/self/form/radio/radio.css +310 -45
  85. package/addons/render/elements/front/items/self/form/radio/radio.js +99 -80
  86. package/addons/render/elements/front/items/self/form/rating/rating.css +234 -57
  87. package/addons/render/elements/front/items/self/form/rating/rating.js +216 -86
  88. package/addons/render/elements/front/items/self/form/section/section.css +247 -32
  89. package/addons/render/elements/front/items/self/form/section/section.js +53 -16
  90. package/addons/render/elements/front/items/self/form/select/select.css +362 -64
  91. package/addons/render/elements/front/items/self/form/select/select.js +156 -30
  92. package/addons/render/elements/front/items/self/form/slider/slider.css +331 -123
  93. package/addons/render/elements/front/items/self/form/slider/slider.js +124 -26
  94. package/addons/render/elements/front/items/self/form/tags/tags.css +328 -53
  95. package/addons/render/elements/front/items/self/form/tags/tags.js +155 -28
  96. package/addons/render/elements/front/items/self/form/textarea/textarea.css +128 -27
  97. package/addons/render/elements/front/items/self/form/textarea/textarea.js +172 -113
  98. package/addons/render/elements/front/items/self/form/toggle/toggle.css +239 -39
  99. package/addons/render/elements/front/items/self/form/toggle/toggle.js +32 -17
  100. package/addons/render/elements/front/items/self/form/transfer/transfer.css +377 -0
  101. package/addons/render/elements/front/items/self/form/transfer/transfer.js +453 -0
  102. package/addons/render/elements/front/items/self/form/upload/upload.css +408 -0
  103. package/addons/render/elements/front/items/self/form/upload/upload.js +469 -0
  104. package/addons/render/elements/front/items/self/global/accordion/accordion.css +377 -0
  105. package/addons/render/elements/front/items/self/global/accordion/accordion.js +135 -0
  106. package/addons/render/elements/front/items/self/global/code/code.css +207 -44
  107. package/addons/render/elements/front/items/self/global/code/code.js +327 -19
  108. package/addons/render/elements/front/items/self/global/gallery/gallery.css +521 -0
  109. package/addons/render/elements/front/items/self/global/gallery/gallery.js +291 -0
  110. package/addons/render/elements/front/items/self/global/heading/heading.css +151 -49
  111. package/addons/render/elements/front/items/self/global/heading/heading.js +30 -15
  112. package/addons/render/elements/front/items/self/global/markdown/markdown.css +284 -135
  113. package/addons/render/elements/front/items/self/global/markdown/markdown.js +35 -5
  114. package/addons/render/elements/front/items/self/global/menu/menu.css +311 -56
  115. package/addons/render/elements/front/items/self/global/menu/menu.js +95 -47
  116. package/addons/render/elements/front/items/self/global/notice/notice.css +263 -23
  117. package/addons/render/elements/front/items/self/global/notice/notice.js +51 -11
  118. package/addons/render/elements/front/items/self/global/parameters/parameters.css +276 -33
  119. package/addons/render/elements/front/items/self/global/parameters/parameters.js +86 -16
  120. package/addons/render/elements/front/items/self/global/tags/tags.css +215 -29
  121. package/addons/render/elements/front/items/self/global/tags/tags.js +91 -17
  122. package/addons/render/elements/front/items/self/navigation/dock/dock.css +221 -0
  123. package/addons/render/elements/front/items/self/navigation/dock/dock.js +134 -0
  124. package/addons/render/elements/front/items/self/navigation/footer/footer.css +356 -0
  125. package/addons/render/elements/front/items/self/navigation/footer/footer.js +219 -0
  126. package/addons/render/elements/front/items/self/navigation/navbar/navbar.css +736 -76
  127. package/addons/render/elements/front/items/self/navigation/navbar/navbar.js +437 -29
  128. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.css +327 -196
  129. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.js +115 -62
  130. package/addons/render/elements/front/items/self/navigation/steps/steps.css +345 -0
  131. package/addons/render/elements/front/items/self/navigation/steps/steps.js +113 -0
  132. package/addons/render/elements/front/items/self/navigation/tabs/tabs.css +362 -33
  133. package/addons/render/elements/front/items/self/navigation/tabs/tabs.js +62 -19
  134. package/addons/render/elements/front/items/self/status/code/code.css +83 -12
  135. package/addons/render/elements/front/items/self/status/code/code.js +15 -4
  136. package/addons/render/elements/front/items/self/status/empty/empty.css +95 -15
  137. package/addons/render/elements/front/items/self/status/empty/empty.js +17 -12
  138. package/addons/render/elements/front/items/self/status/error/error.css +99 -14
  139. package/addons/render/elements/front/items/self/status/error/error.js +21 -11
  140. package/addons/render/elements/front/items/self/status/loading/loading.css +85 -14
  141. package/addons/render/elements/front/items/self/status/loading/loading.js +5 -6
  142. package/addons/render/elements/front/styles/types.css +363 -0
  143. package/instructions.txt +28 -0
  144. package/lib/load.js +1 -0
  145. package/lib/styles/reset.css +89 -76
  146. package/package.json +1 -1
  147. package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.css +0 -410
  148. package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.js +0 -191
  149. package/addons/render/elements/front/items/self/global/faq/faq.css +0 -98
  150. package/addons/render/elements/front/items/self/global/faq/faq.js +0 -56
@@ -2,7 +2,7 @@
2
2
 
3
3
  .e-64e877b
4
4
  {
5
- display: flex;
5
+ display: inline-flex;
6
6
  }
7
7
 
8
8
  /* Holder */
@@ -10,26 +10,25 @@
10
10
  .e-64e877b > .holder
11
11
  {
12
12
  position: relative;
13
- width: inherit;
14
13
  display: inline-flex;
15
14
  align-items: center;
16
15
  justify-content: center;
17
16
  gap: var(--ot-spacing-s);
17
+ padding: 0 var(--ot-spacing-m);
18
18
  border: 1px solid transparent;
19
19
  border-radius: var(--ot-radius-m);
20
- padding: 0 var(--ot-spacing-m);
21
- cursor: pointer;
22
- outline: none;
23
20
  background: transparent;
24
21
  color: var(--ot-text-1);
22
+ font-family: var(--ot-font-primary);
25
23
  font-size: var(--ot-size-m);
26
24
  font-weight: 500;
27
25
  text-decoration: none;
28
26
  white-space: nowrap;
29
- overflow: hidden;
27
+ cursor: pointer;
28
+ outline: none;
30
29
  user-select: none;
31
30
  -webkit-tap-highlight-color: transparent;
32
- transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
31
+ transition: background 0.2s cubic-bezier(0.22, 1, 0.36, 1), border-color 0.2s cubic-bezier(0.22, 1, 0.36, 1), color 0.2s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.2s cubic-bezier(0.22, 1, 0.36, 1), transform 0.2s cubic-bezier(0.22, 1, 0.36, 1);
33
32
  }
34
33
 
35
34
  /* Content */
@@ -47,13 +46,11 @@
47
46
  line-height: 1;
48
47
  }
49
48
 
50
- /* Icons */
51
-
52
49
  .e-64e877b > .holder > .content > i
53
50
  {
54
51
  font-size: 18px;
55
52
  color: inherit;
56
- transition: transform 0.15s ease;
53
+ transition: transform 0.2s cubic-bezier(0.22, 1, 0.36, 1);
57
54
  }
58
55
 
59
56
  .e-64e877b > .holder > .content > .left
@@ -66,7 +63,7 @@
66
63
  margin-left: -2px;
67
64
  }
68
65
 
69
- /* Hover */
66
+ /* Interactions */
70
67
 
71
68
  .e-64e877b > .holder:hover
72
69
  {
@@ -78,20 +75,15 @@
78
75
  transform: translateX(2px);
79
76
  }
80
77
 
81
- /* Active */
82
-
83
78
  .e-64e877b > .holder:active
84
79
  {
85
- transform: translateY(0) scale(0.98);
80
+ transform: translateY(0) scale(0.97);
86
81
  transition-duration: 0.1s;
87
82
  }
88
83
 
89
- /* Focus */
90
-
91
84
  .e-64e877b > .holder:focus-visible
92
85
  {
93
- outline: none;
94
- box-shadow: 0 0 0 2px var(--ot-bg-1), 0 0 0 4px var(--ot-brand);
86
+ box-shadow: 0 0 0 3px var(--ot-brand-opacity);
95
87
  }
96
88
 
97
89
  /* Disabled */
@@ -112,8 +104,6 @@
112
104
  pointer-events: none;
113
105
  }
114
106
 
115
- /* Spinner */
116
-
117
107
  .e-64e877b > .holder > .spinner
118
108
  {
119
109
  display: inline-flex;
@@ -133,127 +123,464 @@
133
123
  to { transform: rotate(360deg); }
134
124
  }
135
125
 
136
- /* Full width */
126
+ /* Modifiers */
137
127
 
138
- .e-64e877b > .holder.full { width: 100%; }
128
+ .e-64e877b:has(> .holder.full)
129
+ {
130
+ display: flex;
131
+ width: 100%;
132
+ }
139
133
 
140
- /* Rounded */
134
+ .e-64e877b > .holder.full
135
+ {
136
+ width: 100%;
137
+ }
141
138
 
142
- .e-64e877b > .holder.rounded { border-radius: 100px; }
139
+ .e-64e877b > .holder.rounded
140
+ {
141
+ border-radius: 100px;
142
+ }
143
143
 
144
- /* Icon only */
144
+ .e-64e877b > .holder.icon-only
145
+ {
146
+ padding: 0;
147
+ aspect-ratio: 1;
148
+ gap: 0;
149
+ }
145
150
 
146
- .e-64e877b > .holder.icon-only { padding: 0; aspect-ratio: 1; }
147
- .e-64e877b > .holder.icon-only > .content > i { margin: 0; }
151
+ .e-64e877b > .holder.icon-only > .content > i
152
+ {
153
+ margin: 0;
154
+ }
148
155
 
149
- /* ---- Solid color variants ---- */
156
+ /* ===== SOLID COLOR VARIANTS ===== */
150
157
 
151
- .e-64e877b > .holder.dark { background: #000; border-color: #000; color: #fff; }
152
- .e-64e877b > .holder.dark:hover { background: #1a1a1a; border-color: #1a1a1a; }
153
- .e-64e877b > .holder.dark:focus-visible { box-shadow: 0 0 0 2px var(--ot-bg-1), 0 0 0 4px #000; }
158
+ .e-64e877b > .holder.brand
159
+ {
160
+ background: var(--ot-brand);
161
+ border-color: var(--ot-brand);
162
+ color: white;
163
+ }
164
+ .e-64e877b > .holder.brand:hover
165
+ {
166
+ background: var(--ot-brand-hover);
167
+ border-color: var(--ot-brand-hover);
168
+ }
169
+ .e-64e877b > .holder.brand:focus-visible
170
+ {
171
+ box-shadow: 0 0 0 3px var(--ot-brand-opacity);
172
+ }
154
173
 
155
- body.dark .e-64e877b > .holder.dark { background: #fff; border-color: #fff; color: #000; }
156
- body.dark .e-64e877b > .holder.dark:hover { background: #e5e5e5; border-color: #e5e5e5; }
157
- body.dark .e-64e877b > .holder.dark:focus-visible { box-shadow: 0 0 0 2px var(--ot-bg-1), 0 0 0 4px #fff; }
174
+ .e-64e877b > .holder.blue
175
+ {
176
+ background: var(--ot-blue);
177
+ border-color: var(--ot-blue);
178
+ color: white;
179
+ }
180
+ .e-64e877b > .holder.blue:hover
181
+ {
182
+ background: var(--ot-blue-hover);
183
+ border-color: var(--ot-blue-hover);
184
+ }
185
+ .e-64e877b > .holder.blue:focus-visible
186
+ {
187
+ box-shadow: 0 0 0 3px var(--ot-blue-opacity);
188
+ }
158
189
 
159
- .e-64e877b > .holder.brand { background: var(--ot-brand); border-color: var(--ot-brand); color: white; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 2px 8px var(--ot-brand-opacity); }
160
- .e-64e877b > .holder.brand:hover { background: var(--ot-brand-hover); border-color: var(--ot-brand-hover); box-shadow: 0 4px 12px var(--ot-brand-opacity), 0 2px 4px rgba(0, 0, 0, 0.1); }
161
- .e-64e877b > .holder.brand:focus-visible { box-shadow: 0 0 0 2px var(--ot-bg-1), 0 0 0 4px var(--ot-brand); }
190
+ .e-64e877b > .holder.red
191
+ {
192
+ background: var(--ot-red);
193
+ border-color: var(--ot-red);
194
+ color: white;
195
+ }
196
+ .e-64e877b > .holder.red:hover
197
+ {
198
+ background: var(--ot-red-hover);
199
+ border-color: var(--ot-red-hover);
200
+ }
201
+ .e-64e877b > .holder.red:focus-visible
202
+ {
203
+ box-shadow: 0 0 0 3px var(--ot-red-opacity);
204
+ }
162
205
 
163
- .e-64e877b > .holder.blue { background: var(--ot-blue); border-color: var(--ot-blue); color: white; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 2px 8px var(--ot-blue-opacity); }
164
- .e-64e877b > .holder.blue:hover { background: var(--ot-blue-hover); border-color: var(--ot-blue-hover); box-shadow: 0 4px 12px var(--ot-blue-opacity), 0 2px 4px rgba(0, 0, 0, 0.1); }
165
- .e-64e877b > .holder.blue:focus-visible { box-shadow: 0 0 0 2px var(--ot-bg-1), 0 0 0 4px var(--ot-blue); }
206
+ .e-64e877b > .holder.orange
207
+ {
208
+ background: var(--ot-orange);
209
+ border-color: var(--ot-orange);
210
+ color: white;
211
+ }
212
+ .e-64e877b > .holder.orange:hover
213
+ {
214
+ background: var(--ot-orange-hover);
215
+ border-color: var(--ot-orange-hover);
216
+ }
217
+ .e-64e877b > .holder.orange:focus-visible
218
+ {
219
+ box-shadow: 0 0 0 3px var(--ot-orange-opacity);
220
+ }
166
221
 
167
- .e-64e877b > .holder.red { background: var(--ot-red); border-color: var(--ot-red); color: white; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 2px 8px var(--ot-red-opacity); }
168
- .e-64e877b > .holder.red:hover { background: var(--ot-red-hover); border-color: var(--ot-red-hover); box-shadow: 0 4px 12px var(--ot-red-opacity), 0 2px 4px rgba(0, 0, 0, 0.1); }
169
- .e-64e877b > .holder.red:focus-visible { box-shadow: 0 0 0 2px var(--ot-bg-1), 0 0 0 4px var(--ot-red); }
222
+ .e-64e877b > .holder.green
223
+ {
224
+ background: var(--ot-green);
225
+ border-color: var(--ot-green);
226
+ color: white;
227
+ }
228
+ .e-64e877b > .holder.green:hover
229
+ {
230
+ background: var(--ot-green-hover);
231
+ border-color: var(--ot-green-hover);
232
+ }
233
+ .e-64e877b > .holder.green:focus-visible
234
+ {
235
+ box-shadow: 0 0 0 3px var(--ot-green-opacity);
236
+ }
170
237
 
171
- .e-64e877b > .holder.orange { background: var(--ot-orange); border-color: var(--ot-orange); color: white; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 2px 8px var(--ot-orange-opacity); }
172
- .e-64e877b > .holder.orange:hover { background: var(--ot-orange-hover); border-color: var(--ot-orange-hover); box-shadow: 0 4px 12px var(--ot-orange-opacity), 0 2px 4px rgba(0, 0, 0, 0.1); }
173
- .e-64e877b > .holder.orange:focus-visible { box-shadow: 0 0 0 2px var(--ot-bg-1), 0 0 0 4px var(--ot-orange); }
238
+ /* Dark inverts text-1 on bg-1 */
174
239
 
175
- .e-64e877b > .holder.green { background: var(--ot-green); border-color: var(--ot-green); color: white; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 2px 8px var(--ot-green-opacity); }
176
- .e-64e877b > .holder.green:hover { background: var(--ot-green-hover); border-color: var(--ot-green-hover); box-shadow: 0 4px 12px var(--ot-green-opacity), 0 2px 4px rgba(0, 0, 0, 0.1); }
177
- .e-64e877b > .holder.green:focus-visible { box-shadow: 0 0 0 2px var(--ot-bg-1), 0 0 0 4px var(--ot-green); }
240
+ .e-64e877b > .holder.dark
241
+ {
242
+ background: var(--ot-text-1);
243
+ border-color: var(--ot-text-1);
244
+ color: var(--ot-bg-1);
245
+ }
246
+ .e-64e877b > .holder.dark:hover
247
+ {
248
+ background: var(--ot-text-2);
249
+ border-color: var(--ot-text-2);
250
+ }
251
+ .e-64e877b > .holder.dark:focus-visible
252
+ {
253
+ box-shadow: 0 0 0 3px var(--ot-bg-3);
254
+ }
178
255
 
179
- /* ---- Soft variants ---- */
256
+ /* ===== SOFT COLOR VARIANTS ===== */
180
257
 
181
- .e-64e877b > .holder.soft-brand { background: var(--ot-brand-opacity); border-color: transparent; color: var(--ot-brand); }
182
- .e-64e877b > .holder.soft-brand:hover { background: var(--ot-brand); color: white; }
258
+ .e-64e877b > .holder.soft-brand
259
+ {
260
+ background: var(--ot-brand-opacity);
261
+ border-color: transparent;
262
+ color: var(--ot-brand);
263
+ }
264
+ .e-64e877b > .holder.soft-brand:hover
265
+ {
266
+ background: var(--ot-brand);
267
+ color: white;
268
+ }
183
269
 
184
- .e-64e877b > .holder.soft-blue { background: var(--ot-blue-opacity); border-color: transparent; color: var(--ot-blue); }
185
- .e-64e877b > .holder.soft-blue:hover { background: var(--ot-blue); color: white; }
270
+ .e-64e877b > .holder.soft-blue
271
+ {
272
+ background: var(--ot-blue-opacity);
273
+ border-color: transparent;
274
+ color: var(--ot-blue);
275
+ }
276
+ .e-64e877b > .holder.soft-blue:hover
277
+ {
278
+ background: var(--ot-blue);
279
+ color: white;
280
+ }
186
281
 
187
- .e-64e877b > .holder.soft-red { background: var(--ot-red-opacity); border-color: transparent; color: var(--ot-red); }
188
- .e-64e877b > .holder.soft-red:hover { background: var(--ot-red); color: white; }
282
+ .e-64e877b > .holder.soft-red
283
+ {
284
+ background: var(--ot-red-opacity);
285
+ border-color: transparent;
286
+ color: var(--ot-red);
287
+ }
288
+ .e-64e877b > .holder.soft-red:hover
289
+ {
290
+ background: var(--ot-red);
291
+ color: white;
292
+ }
189
293
 
190
- .e-64e877b > .holder.soft-orange { background: var(--ot-orange-opacity); border-color: transparent; color: var(--ot-orange); }
191
- .e-64e877b > .holder.soft-orange:hover { background: var(--ot-orange); color: white; }
294
+ .e-64e877b > .holder.soft-orange
295
+ {
296
+ background: var(--ot-orange-opacity);
297
+ border-color: transparent;
298
+ color: var(--ot-orange);
299
+ }
300
+ .e-64e877b > .holder.soft-orange:hover
301
+ {
302
+ background: var(--ot-orange);
303
+ color: white;
304
+ }
192
305
 
193
- .e-64e877b > .holder.soft-green { background: var(--ot-green-opacity); border-color: transparent; color: var(--ot-green); }
194
- .e-64e877b > .holder.soft-green:hover { background: var(--ot-green); color: white; }
306
+ .e-64e877b > .holder.soft-green
307
+ {
308
+ background: var(--ot-green-opacity);
309
+ border-color: transparent;
310
+ color: var(--ot-green);
311
+ }
312
+ .e-64e877b > .holder.soft-green:hover
313
+ {
314
+ background: var(--ot-green);
315
+ color: white;
316
+ }
195
317
 
196
- /* ---- Outline variants ---- */
318
+ /* ===== OUTLINE COLOR VARIANTS ===== */
197
319
 
198
- .e-64e877b > .holder.outline-brand { background: transparent; border-color: var(--ot-brand); color: var(--ot-brand); }
199
- .e-64e877b > .holder.outline-brand:hover { background: var(--ot-brand-opacity); }
320
+ .e-64e877b > .holder.outline-brand
321
+ {
322
+ background: transparent;
323
+ border-color: var(--ot-brand);
324
+ color: var(--ot-brand);
325
+ }
326
+ .e-64e877b > .holder.outline-brand:hover
327
+ {
328
+ background: var(--ot-brand-opacity);
329
+ }
200
330
 
201
- .e-64e877b > .holder.outline-blue { background: transparent; border-color: var(--ot-blue); color: var(--ot-blue); }
202
- .e-64e877b > .holder.outline-blue:hover { background: var(--ot-blue-opacity); }
331
+ .e-64e877b > .holder.outline-blue
332
+ {
333
+ background: transparent;
334
+ border-color: var(--ot-blue);
335
+ color: var(--ot-blue);
336
+ }
337
+ .e-64e877b > .holder.outline-blue:hover
338
+ {
339
+ background: var(--ot-blue-opacity);
340
+ }
203
341
 
204
- .e-64e877b > .holder.outline-red { background: transparent; border-color: var(--ot-red); color: var(--ot-red); }
205
- .e-64e877b > .holder.outline-red:hover { background: var(--ot-red-opacity); }
342
+ .e-64e877b > .holder.outline-red
343
+ {
344
+ background: transparent;
345
+ border-color: var(--ot-red);
346
+ color: var(--ot-red);
347
+ }
348
+ .e-64e877b > .holder.outline-red:hover
349
+ {
350
+ background: var(--ot-red-opacity);
351
+ }
206
352
 
207
- .e-64e877b > .holder.outline-orange { background: transparent; border-color: var(--ot-orange); color: var(--ot-orange); }
208
- .e-64e877b > .holder.outline-orange:hover { background: var(--ot-orange-opacity); }
353
+ .e-64e877b > .holder.outline-orange
354
+ {
355
+ background: transparent;
356
+ border-color: var(--ot-orange);
357
+ color: var(--ot-orange);
358
+ }
359
+ .e-64e877b > .holder.outline-orange:hover
360
+ {
361
+ background: var(--ot-orange-opacity);
362
+ }
209
363
 
210
- .e-64e877b > .holder.outline-green { background: transparent; border-color: var(--ot-green); color: var(--ot-green); }
211
- .e-64e877b > .holder.outline-green:hover { background: var(--ot-green-opacity); }
364
+ .e-64e877b > .holder.outline-green
365
+ {
366
+ background: transparent;
367
+ border-color: var(--ot-green);
368
+ color: var(--ot-green);
369
+ }
370
+ .e-64e877b > .holder.outline-green:hover
371
+ {
372
+ background: var(--ot-green-opacity);
373
+ }
374
+
375
+ /* ===== BACKGROUND VARIANTS ===== */
376
+
377
+ .e-64e877b > .holder.bg-1
378
+ {
379
+ background: var(--ot-bg-1);
380
+ border-color: var(--ot-bg-1-border);
381
+ color: var(--ot-text-1);
382
+ }
383
+ .e-64e877b > .holder.bg-1:hover
384
+ {
385
+ background: var(--ot-bg-1-hover);
386
+ }
387
+
388
+ .e-64e877b > .holder.bg-2
389
+ {
390
+ background: var(--ot-bg-2);
391
+ border-color: var(--ot-bg-2-border);
392
+ color: var(--ot-text-1);
393
+ }
394
+ .e-64e877b > .holder.bg-2:hover
395
+ {
396
+ background: var(--ot-bg-2-hover);
397
+ }
212
398
 
213
- /* ---- Background variants ---- */
399
+ .e-64e877b > .holder.bg-3
400
+ {
401
+ background: var(--ot-bg-3);
402
+ border-color: var(--ot-bg-3-border);
403
+ color: var(--ot-text-1);
404
+ }
405
+ .e-64e877b > .holder.bg-3:hover
406
+ {
407
+ background: var(--ot-bg-3-hover);
408
+ }
214
409
 
215
- .e-64e877b > .holder.bg-1 { background: var(--ot-bg-1); border-color: var(--ot-bg-1-border); color: var(--ot-text-1); }
216
- .e-64e877b > .holder.bg-1:hover { background: var(--ot-bg-1-hover); border-color: var(--ot-bg-2-border); }
410
+ .e-64e877b > .holder.bg-4
411
+ {
412
+ background: var(--ot-bg-4);
413
+ border-color: var(--ot-bg-4-border);
414
+ color: var(--ot-text-1);
415
+ }
416
+ .e-64e877b > .holder.bg-4:hover
417
+ {
418
+ background: var(--ot-bg-4-hover);
419
+ }
217
420
 
218
- .e-64e877b > .holder.bg-2 { background: var(--ot-bg-2); border-color: var(--ot-bg-2-border); color: var(--ot-text-1); }
219
- .e-64e877b > .holder.bg-2:hover { background: var(--ot-bg-2-hover); border-color: var(--ot-bg-3-border); }
421
+ /* ===== SPECIAL VARIANTS ===== */
220
422
 
221
- .e-64e877b > .holder.bg-3 { background: var(--ot-bg-3); border-color: var(--ot-bg-3-border); color: var(--ot-text-1); }
222
- .e-64e877b > .holder.bg-3:hover { background: var(--ot-bg-3-hover); border-color: var(--ot-bg-4-border); }
423
+ .e-64e877b > .holder.ghost
424
+ {
425
+ background: transparent;
426
+ border-color: transparent;
427
+ color: var(--ot-text-2);
428
+ }
429
+ .e-64e877b > .holder.ghost:hover
430
+ {
431
+ background: var(--ot-bg-2);
432
+ color: var(--ot-text-1);
433
+ }
434
+
435
+ .e-64e877b > .holder.border
436
+ {
437
+ background: transparent;
438
+ border-color: var(--ot-bg-2-border);
439
+ color: var(--ot-text-1);
440
+ }
441
+ .e-64e877b > .holder.border:hover
442
+ {
443
+ background: var(--ot-bg-2);
444
+ }
445
+
446
+ .e-64e877b > .holder.transparent
447
+ {
448
+ background: transparent;
449
+ border-color: transparent;
450
+ color: var(--ot-text-1);
451
+ }
452
+ .e-64e877b > .holder.transparent:hover
453
+ {
454
+ background: var(--ot-bg-2-opacity);
455
+ }
456
+
457
+ .e-64e877b > .holder.glass
458
+ {
459
+ background: var(--ot-bg-1-opacity);
460
+ border-color: var(--ot-bg-2-border);
461
+ color: var(--ot-text-1);
462
+ backdrop-filter: blur(12px);
463
+ -webkit-backdrop-filter: blur(12px);
464
+ }
465
+ .e-64e877b > .holder.glass:hover
466
+ {
467
+ background: var(--ot-bg-2-opacity);
468
+ }
223
469
 
224
- .e-64e877b > .holder.bg-4 { background: var(--ot-bg-4); border-color: var(--ot-bg-4-border); color: var(--ot-text-1); }
225
- .e-64e877b > .holder.bg-4:hover { background: var(--ot-bg-4-hover); }
470
+ /* Link minimalist text-only button */
226
471
 
227
- /* ---- Special variants ---- */
472
+ .e-64e877b > .holder.link
473
+ {
474
+ padding: 0;
475
+ height: auto;
476
+ background: transparent;
477
+ border-color: transparent;
478
+ color: var(--ot-brand);
479
+ font-weight: 500;
480
+ }
481
+ .e-64e877b > .holder.link:hover
482
+ {
483
+ background: transparent;
484
+ color: var(--ot-brand-hover);
485
+ transform: none;
486
+ }
487
+ .e-64e877b > .holder.link:hover > .content > .text
488
+ {
489
+ text-decoration: underline;
490
+ text-underline-offset: 3px;
491
+ }
492
+ .e-64e877b > .holder.link:active
493
+ {
494
+ transform: none;
495
+ }
228
496
 
229
- .e-64e877b > .holder.ghost { background: transparent; border-color: transparent; color: var(--ot-text-2); }
230
- .e-64e877b > .holder.ghost:hover { background: var(--ot-bg-2); color: var(--ot-text-1); }
497
+ /* ===== SIZE VARIANTS ===== */
231
498
 
232
- .e-64e877b > .holder.border { background: transparent; border-color: var(--ot-bg-1-border); color: var(--ot-text-1); }
233
- .e-64e877b > .holder.border:hover { background: var(--ot-bg-2); border-color: var(--ot-bg-3-border); }
499
+ .e-64e877b > .holder.size-s
500
+ {
501
+ height: var(--ot-height-s);
502
+ padding: 0 var(--ot-spacing-s);
503
+ font-size: var(--ot-size-s);
504
+ gap: var(--ot-spacing-x);
505
+ }
506
+ .e-64e877b > .holder.size-s > .content
507
+ {
508
+ gap: var(--ot-spacing-x);
509
+ }
510
+ .e-64e877b > .holder.size-s > .content > i,
511
+ .e-64e877b > .holder.size-s > .spinner > i
512
+ {
513
+ font-size: 14px;
514
+ }
234
515
 
235
- .e-64e877b > .holder.transparent { background: transparent; border-color: transparent; color: var(--ot-text-1); }
236
- .e-64e877b > .holder.transparent:hover { background: var(--ot-bg-2-opacity); }
516
+ .e-64e877b > .holder.size-m
517
+ {
518
+ height: var(--ot-height-m);
519
+ padding: 0 var(--ot-spacing-m);
520
+ font-size: var(--ot-size-m);
521
+ gap: var(--ot-spacing-s);
522
+ }
523
+ .e-64e877b > .holder.size-m > .content
524
+ {
525
+ gap: var(--ot-spacing-s);
526
+ }
527
+ .e-64e877b > .holder.size-m > .content > i,
528
+ .e-64e877b > .holder.size-m > .spinner > i
529
+ {
530
+ font-size: 18px;
531
+ }
237
532
 
238
- .e-64e877b > .holder.glass { background: var(--ot-bg-1-opacity); border-color: var(--ot-bg-2-border); color: var(--ot-text-1); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
239
- .e-64e877b > .holder.glass:hover { background: var(--ot-bg-2-opacity); border-color: var(--ot-bg-3-border); }
533
+ .e-64e877b > .holder.size-l
534
+ {
535
+ height: var(--ot-height-l);
536
+ padding: 0 var(--ot-spacing-l);
537
+ font-size: var(--ot-size-m);
538
+ gap: var(--ot-spacing-s);
539
+ }
540
+ .e-64e877b > .holder.size-l > .content
541
+ {
542
+ gap: var(--ot-spacing-s);
543
+ }
544
+ .e-64e877b > .holder.size-l > .content > i,
545
+ .e-64e877b > .holder.size-l > .spinner > i
546
+ {
547
+ font-size: 20px;
548
+ }
240
549
 
241
- /* ---- Size variants ---- */
550
+ /* Icon-only sizes */
242
551
 
243
- .e-64e877b > .holder.size-s { height: var(--ot-height-s); padding: 0 var(--ot-spacing-s); font-size: var(--ot-size-s); gap: var(--ot-spacing-x); }
244
- .e-64e877b > .holder.size-s > .content { gap: var(--ot-spacing-x); }
245
- .e-64e877b > .holder.size-s > .content > i, .e-64e877b > .holder.size-s > .spinner > i { font-size: 14px; }
552
+ .e-64e877b > .holder.icon-only.size-s
553
+ {
554
+ width: var(--ot-height-s);
555
+ padding: 0;
556
+ }
246
557
 
247
- .e-64e877b > .holder.size-m { height: var(--ot-height-m); padding: 0 var(--ot-spacing-m); font-size: var(--ot-size-m); gap: var(--ot-spacing-s); }
248
- .e-64e877b > .holder.size-m > .content { gap: var(--ot-spacing-s); }
249
- .e-64e877b > .holder.size-m > .content > i, .e-64e877b > .holder.size-m > .spinner > i { font-size: 18px; }
558
+ .e-64e877b > .holder.icon-only.size-m
559
+ {
560
+ width: var(--ot-height-m);
561
+ padding: 0;
562
+ }
250
563
 
251
- .e-64e877b > .holder.size-l { height: var(--ot-height-l); padding: 0 var(--ot-spacing-l); font-size: var(--ot-size-l); gap: var(--ot-spacing-m); }
252
- .e-64e877b > .holder.size-l > .content { gap: var(--ot-spacing-m); }
253
- .e-64e877b > .holder.size-l > .content > i, .e-64e877b > .holder.size-l > .spinner > i { font-size: 22px; }
564
+ .e-64e877b > .holder.icon-only.size-l
565
+ {
566
+ width: var(--ot-height-l);
567
+ padding: 0;
568
+ }
254
569
 
255
- /* Icon-only size */
570
+ /* Link size overrides (no height constraint) */
256
571
 
257
- .e-64e877b > .holder.icon-only.size-s { width: var(--ot-height-s); padding: 0; }
258
- .e-64e877b > .holder.icon-only.size-m { width: var(--ot-height-m); padding: 0; }
259
- .e-64e877b > .holder.icon-only.size-l { width: var(--ot-height-l); padding: 0; }
572
+ .e-64e877b > .holder.link.size-s
573
+ {
574
+ height: auto;
575
+ padding: 0;
576
+ }
577
+ .e-64e877b > .holder.link.size-m
578
+ {
579
+ height: auto;
580
+ padding: 0;
581
+ }
582
+ .e-64e877b > .holder.link.size-l
583
+ {
584
+ height: auto;
585
+ padding: 0;
586
+ }