maz-ui 5.0.0 → 5.1.0-beta.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 (186) hide show
  1. package/dist/assets/{MazDropzone.DJ8au25t.css → MazDropzone.BW2grpTi.css} +1 -1
  2. package/dist/chunks/{MazDrawer.DANxKYxJ.js → MazDrawer.CC8zomfx.js} +2 -2
  3. package/dist/chunks/{MazDropzone.POH3pmfi.js → MazDropzone.Dez5j0WP.js} +2 -2
  4. package/dist/components/MazDrawer.js +1 -1
  5. package/dist/components/MazDropzone.js +1 -1
  6. package/dist/components/MazDropzone.vue.d.ts +2 -2
  7. package/dist/components/MazInputPrice.vue.d.ts +1 -1
  8. package/dist/components/index.js +2 -2
  9. package/docs/README.md +207 -0
  10. package/docs/agents/agents-md.md +52 -0
  11. package/docs/agents/claude-rule.md +52 -0
  12. package/docs/components/maz-accordion.md +76 -0
  13. package/docs/components/maz-alert.md +241 -0
  14. package/docs/components/maz-animated-counter.md +87 -0
  15. package/docs/components/maz-animated-element.md +46 -0
  16. package/docs/components/maz-animated-text.md +53 -0
  17. package/docs/components/maz-avatar.md +193 -0
  18. package/docs/components/maz-backdrop.md +178 -0
  19. package/docs/components/maz-badge.md +167 -0
  20. package/docs/components/maz-bottom-sheet.md +257 -0
  21. package/docs/components/maz-btn-group.md +316 -0
  22. package/docs/components/maz-btn.md +423 -0
  23. package/docs/components/maz-card-spotlight.md +84 -0
  24. package/docs/components/maz-card.md +321 -0
  25. package/docs/components/maz-carousel.md +153 -0
  26. package/docs/components/maz-chart.md +206 -0
  27. package/docs/components/maz-checkbox.md +138 -0
  28. package/docs/components/maz-checklist.md +251 -0
  29. package/docs/components/maz-circular-progress-bar.md +109 -0
  30. package/docs/components/maz-code-highlight.md +155 -0
  31. package/docs/components/maz-container.md +241 -0
  32. package/docs/components/maz-date-picker.md +791 -0
  33. package/docs/components/maz-dialog-confirm.md +215 -0
  34. package/docs/components/maz-dialog.md +143 -0
  35. package/docs/components/maz-drawer.md +106 -0
  36. package/docs/components/maz-dropdown.md +419 -0
  37. package/docs/components/maz-dropzone.md +387 -0
  38. package/docs/components/maz-expand-animation.md +82 -0
  39. package/docs/components/maz-fullscreen-loader.md +58 -0
  40. package/docs/components/maz-gallery.md +79 -0
  41. package/docs/components/maz-icon.md +203 -0
  42. package/docs/components/maz-input-code.md +73 -0
  43. package/docs/components/maz-input-number.md +79 -0
  44. package/docs/components/maz-input-phone-number.md +536 -0
  45. package/docs/components/maz-input-price.md +68 -0
  46. package/docs/components/maz-input-tags.md +112 -0
  47. package/docs/components/maz-input.md +334 -0
  48. package/docs/components/maz-lazy-img.md +113 -0
  49. package/docs/components/maz-link.md +146 -0
  50. package/docs/components/maz-loading-bar.md +38 -0
  51. package/docs/components/maz-markdown-editor.md +320 -0
  52. package/docs/components/maz-pagination.md +82 -0
  53. package/docs/components/maz-popover.md +794 -0
  54. package/docs/components/maz-pull-to-refresh.md +222 -0
  55. package/docs/components/maz-radio-buttons.md +313 -0
  56. package/docs/components/maz-radio.md +119 -0
  57. package/docs/components/maz-read-more.md +209 -0
  58. package/docs/components/maz-reading-progress-bar.md +96 -0
  59. package/docs/components/maz-select-country.md +513 -0
  60. package/docs/components/maz-select.md +318 -0
  61. package/docs/components/maz-sidebar-content.md +25 -0
  62. package/docs/components/maz-sidebar-footer.md +25 -0
  63. package/docs/components/maz-sidebar-group.md +27 -0
  64. package/docs/components/maz-sidebar-header.md +25 -0
  65. package/docs/components/maz-sidebar-menu-button.md +41 -0
  66. package/docs/components/maz-sidebar-menu-item.md +25 -0
  67. package/docs/components/maz-sidebar-menu-sub.md +32 -0
  68. package/docs/components/maz-sidebar-menu.md +25 -0
  69. package/docs/components/maz-sidebar-separator.md +21 -0
  70. package/docs/components/maz-sidebar-trigger.md +25 -0
  71. package/docs/components/maz-sidebar.md +507 -0
  72. package/docs/components/maz-skeleton.md +226 -0
  73. package/docs/components/maz-slider.md +165 -0
  74. package/docs/components/maz-spinner.md +84 -0
  75. package/docs/components/maz-stepper.md +301 -0
  76. package/docs/components/maz-switch.md +86 -0
  77. package/docs/components/maz-table-cell.md +27 -0
  78. package/docs/components/maz-table-row.md +28 -0
  79. package/docs/components/maz-table-title.md +27 -0
  80. package/docs/components/maz-table-virtualizer.md +31 -0
  81. package/docs/components/maz-table.md +426 -0
  82. package/docs/components/maz-tabs-bar.md +43 -0
  83. package/docs/components/maz-tabs-content-item.md +27 -0
  84. package/docs/components/maz-tabs-content.md +27 -0
  85. package/docs/components/maz-tabs.md +308 -0
  86. package/docs/components/maz-textarea.md +255 -0
  87. package/docs/components/maz-ticker.md +427 -0
  88. package/docs/components/maz-timeline.md +304 -0
  89. package/docs/components/maz-ui-provider.md +26 -0
  90. package/docs/components/maz-window-mockup.md +182 -0
  91. package/docs/composables/use-aos.md +41 -0
  92. package/docs/composables/use-breakpoints.md +42 -0
  93. package/docs/composables/use-dialog.md +58 -0
  94. package/docs/composables/use-display-names.md +130 -0
  95. package/docs/composables/use-drag.md +185 -0
  96. package/docs/composables/use-form-validator.md +1123 -0
  97. package/docs/composables/use-idle-timeout.md +172 -0
  98. package/docs/composables/use-pull-to-refresh.md +86 -0
  99. package/docs/composables/use-reading-time.md +132 -0
  100. package/docs/composables/use-string-matching.md +41 -0
  101. package/docs/composables/use-swipe.md +171 -0
  102. package/docs/composables/use-timer.md +104 -0
  103. package/docs/composables/use-toast.md +50 -0
  104. package/docs/composables/use-user-visibility.md +127 -0
  105. package/docs/composables/use-wait.md +50 -0
  106. package/docs/composables/use-window-size.md +25 -0
  107. package/docs/directives/click-outside.md +182 -0
  108. package/docs/directives/fullscreen-img.md +83 -0
  109. package/docs/directives/lazy-img.md +182 -0
  110. package/docs/directives/tooltip.md +298 -0
  111. package/docs/directives/zoom-img.md +100 -0
  112. package/docs/ecosystem/eslint-config.md +289 -0
  113. package/docs/ecosystem/icons/icon-set.md +25 -0
  114. package/docs/ecosystem/icons/index.md +584 -0
  115. package/docs/ecosystem/mcp.md +165 -0
  116. package/docs/ecosystem/node/exec-promise.md +93 -0
  117. package/docs/ecosystem/node/index.md +53 -0
  118. package/docs/ecosystem/node/logger.md +152 -0
  119. package/docs/ecosystem/node/print-banner.md +101 -0
  120. package/docs/ecosystem/node/setup-agents.md +102 -0
  121. package/docs/ecosystem/nuxt.md +551 -0
  122. package/docs/ecosystem/stylelint-config.md +310 -0
  123. package/docs/ecosystem/themes.md +966 -0
  124. package/docs/ecosystem/translations.md +1173 -0
  125. package/docs/ecosystem/utils/camel-case.md +37 -0
  126. package/docs/ecosystem/utils/capitalize.md +37 -0
  127. package/docs/ecosystem/utils/check-availability.md +85 -0
  128. package/docs/ecosystem/utils/cookie.md +86 -0
  129. package/docs/ecosystem/utils/country-code-to-unicode-flag.md +128 -0
  130. package/docs/ecosystem/utils/currency.md +53 -0
  131. package/docs/ecosystem/utils/date.md +53 -0
  132. package/docs/ecosystem/utils/debounce-callback.md +44 -0
  133. package/docs/ecosystem/utils/debounce-id.md +75 -0
  134. package/docs/ecosystem/utils/debounce.md +71 -0
  135. package/docs/ecosystem/utils/fetch-locale-ip.md +39 -0
  136. package/docs/ecosystem/utils/format-json.md +39 -0
  137. package/docs/ecosystem/utils/format-phone-number.md +43 -0
  138. package/docs/ecosystem/utils/get-browser-locale.md +35 -0
  139. package/docs/ecosystem/utils/get-country-flag-url.md +67 -0
  140. package/docs/ecosystem/utils/get-error-message.md +45 -0
  141. package/docs/ecosystem/utils/idle-timeout.md +96 -0
  142. package/docs/ecosystem/utils/index.md +57 -0
  143. package/docs/ecosystem/utils/is-client.md +38 -0
  144. package/docs/ecosystem/utils/is-equal.md +44 -0
  145. package/docs/ecosystem/utils/is-ios.md +43 -0
  146. package/docs/ecosystem/utils/is-server.md +37 -0
  147. package/docs/ecosystem/utils/is-standalone-mode.md +49 -0
  148. package/docs/ecosystem/utils/kebab-case.md +42 -0
  149. package/docs/ecosystem/utils/normalize-string.md +83 -0
  150. package/docs/ecosystem/utils/number.md +51 -0
  151. package/docs/ecosystem/utils/pascal-case.md +41 -0
  152. package/docs/ecosystem/utils/prevent-ios-input-zoom.md +72 -0
  153. package/docs/ecosystem/utils/script-loader.md +85 -0
  154. package/docs/ecosystem/utils/sleep.md +65 -0
  155. package/docs/ecosystem/utils/snake-case.md +42 -0
  156. package/docs/ecosystem/utils/swipe-handler.md +97 -0
  157. package/docs/ecosystem/utils/textarea-autogrow.md +47 -0
  158. package/docs/ecosystem/utils/throttle-id.md +54 -0
  159. package/docs/ecosystem/utils/throttle.md +63 -0
  160. package/docs/ecosystem/utils/truthy-filter.md +37 -0
  161. package/docs/ecosystem/utils/types/deep-key-of.md +54 -0
  162. package/docs/ecosystem/utils/types/deep-partial.md +48 -0
  163. package/docs/ecosystem/utils/types/deep-required.md +45 -0
  164. package/docs/ecosystem/utils/types/flatten-object-keys.md +50 -0
  165. package/docs/ecosystem/utils/types/generic-instance-type.md +48 -0
  166. package/docs/ecosystem/utils/types/infer-maybe-ref.md +41 -0
  167. package/docs/ecosystem/utils/upper-first.md +38 -0
  168. package/docs/ecosystem/utils/user-visibility.md +75 -0
  169. package/docs/guide/ai-agents.md +237 -0
  170. package/docs/guide/browser-support.md +88 -0
  171. package/docs/guide/getting-started.md +191 -0
  172. package/docs/guide/global-defaults.md +103 -0
  173. package/docs/guide/maz-ui-provider.md +231 -0
  174. package/docs/guide/migration-v5.md +871 -0
  175. package/docs/guide/resolvers.md +650 -0
  176. package/docs/guide/tailwind.md +483 -0
  177. package/docs/guide/vue.md +286 -0
  178. package/docs/manifest.json +1 -0
  179. package/docs/plugins/aos.md +312 -0
  180. package/docs/plugins/dialog.md +269 -0
  181. package/docs/plugins/toast.md +221 -0
  182. package/docs/plugins/wait.md +78 -0
  183. package/docs/reference/icons.md +46 -0
  184. package/docs/reference/tailwind-tokens.md +191 -0
  185. package/docs/rules.md +57 -0
  186. package/package.json +31 -4
@@ -0,0 +1,483 @@
1
+ ---
2
+ title: "Tailwind CSS"
3
+ description: "Use and extend the maz-ui theme in your own Tailwind CSS v4 setup - theme colors, radius, shadows, spacing, breakpoints, custom utilities, dark mode, and how to add your own tokens, fonts, animations and variants."
4
+ package: "maz-ui"
5
+ url: "https://maz-ui.com/guide/tailwind"
6
+ ---
7
+
8
+ # Tailwind CSS
9
+
10
+ > Use and extend the maz-ui theme in your own Tailwind CSS v4 setup - theme colors, radius, shadows, spacing, breakpoints, custom utilities, dark mode, and how to add your own tokens, fonts, animations and variants.
11
+
12
+ - Package: `maz-ui`
13
+ - Web: https://maz-ui.com/guide/tailwind
14
+
15
+ **Tip: This page is optional**
16
+
17
+ maz-ui works without Tailwind: install the package, import `maz-ui/style.css` and the components render with the theme preset you chose.
18
+
19
+ This page is for apps that **have their own Tailwind v4 setup** and want their utilities (`bg-primary`, `rounded-md`, `tab-m:flex`...) to follow the active maz-ui theme, preset and color mode.
20
+
21
+ ## Setup
22
+
23
+ Add the maz-ui theme right after Tailwind in your Tailwind entry:
24
+
25
+ ```css
26
+ /* src/assets/css/main.css (your Tailwind entry) */
27
+ @import 'tailwindcss';
28
+ @import 'maz-ui/tailwindcss/theme.css';
29
+ @import 'maz-ui/tailwindcss/utilities.css';
30
+ ```
31
+
32
+ That's it: your utilities now resolve to the active maz-ui theme. Switch presets or color mode at runtime with `useTheme()` and every utility follows, without rebuild.
33
+
34
+ **Prerequisites:** `tailwindcss@^4.2`, `@tailwindcss/vite` or `@tailwindcss/postcss` (or `@nuxtjs/tailwindcss` v7 with Nuxt), and the theme initialized by the `MazUi` plugin or the `@maz-ui/nuxt` module.
35
+
36
+ ### Where to import `maz-ui/style.css`
37
+
38
+ `maz-ui/style.css` holds the styles of the components. It declares the same cascade layers as Tailwind (`theme`, `base`, `components`, `utilities`), so it composes with your own Tailwind output.
39
+
40
+ - **Vue**: keep `import 'maz-ui/style.css'` in `main.ts`, before your own CSS (see [Vue guide](./vue.md)).
41
+ - **Nuxt**: the module injects it (`css.injectCss: true`, the default). To control the CSS order yourself, disable the injection and import it first in your Tailwind entry:
42
+
43
+ ```ts
44
+ // nuxt.config.ts
45
+ export default defineNuxtConfig({
46
+ modules: ['@maz-ui/nuxt'],
47
+ css: ['~/assets/css/main.css'],
48
+ mazUi: {
49
+ css: { injectCss: false },
50
+ },
51
+ })
52
+ ```
53
+
54
+ ```css
55
+ /* app/assets/css/main.css */
56
+ @import 'maz-ui/style.css';
57
+ @import 'tailwindcss';
58
+ @import 'maz-ui/tailwindcss/theme.css';
59
+ @import 'maz-ui/tailwindcss/utilities.css';
60
+ ```
61
+
62
+ ### Never use the `maz:` prefix
63
+
64
+ The maz-ui library compiles its own utilities with an internal `prefix(maz)`, and its documentation site does the same. That prefix never applies to your project: in your code, write `bg-primary`, `flex`, `tab-m:grid`, without `maz:`.
65
+
66
+ The utilities used inside the components ship precompiled in `maz-ui/style.css`, prefixed, so they never conflict with yours.
67
+
68
+ ### Granular entries
69
+
70
+ `theme.css` imports every module. Import only some of them if you want part of the design system:
71
+
72
+ | Import | Content |
73
+ | --- | --- |
74
+ | `maz-ui/tailwindcss/theme.css` | Everything below except the utilities |
75
+ | `maz-ui/tailwindcss/theme-colors.css` | Colors and their scales |
76
+ | `maz-ui/tailwindcss/theme-components.css` | `bg-container` and `bg-input` surfaces |
77
+ | `maz-ui/tailwindcss/theme-spacing.css` | Spacing scale |
78
+ | `maz-ui/tailwindcss/theme-radius.css` | Border radius scale |
79
+ | `maz-ui/tailwindcss/theme-shadows.css` | Shadow scale |
80
+ | `maz-ui/tailwindcss/theme-breakpoints.css` | `mob-*`, `tab-*`, `lap-*` breakpoints |
81
+ | `maz-ui/tailwindcss/theme-z-index.css` | z-index scale |
82
+ | `maz-ui/tailwindcss/theme-typography.css` | Fonts, border width, durations and easings |
83
+ | `maz-ui/tailwindcss/theme-variants.css` | `dark:` variant wired to the `.dark` class |
84
+ | `maz-ui/tailwindcss/utilities.css` | maz-ui utilities (`flex-center`, `padded-container`...) |
85
+
86
+ ## Colors
87
+
88
+ Every theme color works with all the color utilities of Tailwind (`bg-`, `text-`, `border-`, `ring-`, `outline-`, `fill-`, `stroke-`, `divide-`, `from-`/`via-`/`to-`, `decoration-`, `placeholder-`, `accent-`, `caret-`...) and with opacity modifiers (`bg-primary/50`).
89
+
90
+ ### Brand and state colors
91
+
92
+ Each one has a paired `-foreground` color for text on top of it, and an 11-step scale from `-50` (light) to `-950` (dark), `-500` being the base color.
93
+
94
+ | Color | Use for |
95
+ | --- | --- |
96
+ | `primary` | Main actions, links, focus |
97
+ | `secondary` | Secondary brand color |
98
+ | `accent` | Highlights |
99
+ | `info` | Informational state |
100
+ | `success` | Success state |
101
+ | `warning` | Warning state |
102
+ | `destructive` | Errors, destructive actions |
103
+ | `contrast` | Neutral high-contrast color (near black in light mode, near white in dark mode) |
104
+
105
+ ```html
106
+ <button class="bg-primary text-primary-foreground hover:bg-primary-600">Save</button>
107
+ <p class="rounded-md bg-success-50 p-3 text-success-800">Saved!</p>
108
+ <span class="bg-destructive/10 text-destructive">3 errors</span>
109
+ ```
110
+
111
+ **Tip: Use maz-ui components first**
112
+
113
+ For buttons, alerts and badges, use `MazBtn`, `MazAlert` and `MazBadge`: they already apply these colors. The utilities are for your own layouts and components.
114
+
115
+ ### Neutral and surface colors
116
+
117
+ They also have an 11-step scale, but no `-foreground`.
118
+
119
+ | Color | Use for |
120
+ | --- | --- |
121
+ | `surface` | Page and container backgrounds |
122
+ | `foreground` | Body text |
123
+ | `muted` | Secondary text, placeholders, disabled content |
124
+ | `divider` | Borders and separators |
125
+ | `overlay` | Backdrops behind dialogs (`bg-overlay/60`) |
126
+ | `shadow` | Shadow tint (`shadow-shadow/20`) |
127
+
128
+ ```html
129
+ <main class="bg-surface text-foreground">
130
+ <p class="text-muted">Last updated 3 days ago</p>
131
+ <hr class="border-divider">
132
+ </main>
133
+ ```
134
+
135
+ ### Component surfaces
136
+
137
+ Two colors follow the `components` block of the preset, to match the maz-ui components in your own ones:
138
+
139
+ - `bg-container`: background of `MazCard`, `MazContainer`, `MazDialog`, `MazPopover`, `MazDrawer`...
140
+ - `bg-input`: background of `MazInput`, `MazSelect`, `MazTextarea`... (different from the surface in dark mode by default)
141
+
142
+ ### Light and dark modes
143
+
144
+ Theme colors are resolved with `light-dark()`: the same class gives the right color in both modes. **Do not add `dark:` overrides for theme colors**: `bg-surface dark:bg-gray-900` is wrong, `bg-surface` is enough. Keep the `dark:` variant for real differences (an illustration, a different layout).
145
+
146
+ **Warning: Avoid the default Tailwind palette**
147
+
148
+ `bg-blue-500`, `text-gray-600`, `bg-white`, `text-black` or `bg-[#1d90ff]` ignore the preset and dark mode. Pick the theme color with the same role: `bg-primary`, `text-muted`, `bg-surface`, `text-foreground`. For a brand color missing from the theme, add your own token.
149
+
150
+ ## Radius
151
+
152
+ The `rounded-*` scale follows the `scales.rounded` of the preset:
153
+
154
+ | Utility | Value |
155
+ | --- | --- |
156
+ | `rounded-xs` ... `rounded-3xl` | `var(--maz-rounded-{xs..3xl})` |
157
+ | `rounded` | same as `rounded-md` |
158
+
159
+ `rounded-full` and `rounded-none` keep their Tailwind values.
160
+
161
+ ## Shadows
162
+
163
+ | Utility | Use for |
164
+ | --- | --- |
165
+ | `shadow-xs`, `shadow-sm`, `shadow-md`, `shadow-lg`, `shadow-xl` | Standard scale, from the preset `scales.shadow` |
166
+ | `shadow-elevation` | Raised surfaces: cards, popovers, menus |
167
+
168
+ ## Spacing
169
+
170
+ `--spacing` is bound to the `foundation.space` token of the preset (`0.25rem` by default): `p-4`, `gap-2`, `mt-6`, `w-10`, `inset-1`... are multiples of it and rescale with the preset. Prefer the scale to arbitrary values such as `p-[13px]`.
171
+
172
+ ## Breakpoints
173
+
174
+ maz-ui adds mobile-first breakpoints **on top of** the Tailwind ones (`sm:` to `2xl:` keep working):
175
+
176
+ | Variant | Min width | Variant | Min width |
177
+ | --- | --- | --- | --- |
178
+ | `mob-s:` | 320px | `lap-s:` | 1024px |
179
+ | `mob-m:` | 425px | `lap-m:` | 1280px |
180
+ | `mob-l:` | 576px | `lap-l:` | 1366px |
181
+ | `tab-s:` | 640px | `lap-xl:` | 1440px |
182
+ | `tab-m:` | 768px | `lap-2xl:` | 1680px |
183
+ | `tab-l:` | 992px | `lap-3xl:` | 1920px |
184
+
185
+ Prefix them with `max-` for max-width queries: `max-tab-m:hidden`.
186
+
187
+ ```html
188
+ <div class="grid gap-4 tab-m:grid-cols-2 lap-m:grid-cols-3">...</div>
189
+ ```
190
+
191
+ The same values are available in TypeScript with `import { screens } from 'maz-ui/tailwindcss'` and the [useBreakpoints](../composables/use-breakpoints.md) composable.
192
+
193
+ ## Typography and motion
194
+
195
+ | Utility | Source |
196
+ | --- | --- |
197
+ | `font-sans` | `var(--maz-font-family)` (preset `foundation.font-family`) |
198
+ | `font-mono` | `var(--maz-font-mono-stack)` |
199
+ | `font-display` | `var(--maz-font-display-stack)` (headings) |
200
+ | `ease-out`, `ease-in`, `ease-in-out` | `var(--maz-easing-*)` |
201
+ | `duration-(--duration-fast)`, `duration-(--duration-normal)`, `duration-(--duration-slow)` | `var(--maz-motion-*)` |
202
+
203
+ The default border width and the default transition duration and easing follow the preset too. Durations are theme variables, not named utilities: write `transition-colors duration-(--duration-fast)`.
204
+
205
+ ## z-index
206
+
207
+ `z-1` to `z-5`, `z-15`, `z-25`, `z-35`, `z-45`, `z-75`, `z-100`, and `z-default-backdrop` (`1050`, the layer of `MazDialog` and the toasts).
208
+
209
+ ## maz-ui utilities
210
+
211
+ `maz-ui/tailwindcss/utilities.css` adds:
212
+
213
+ | Utility | Effect |
214
+ | --- | --- |
215
+ | `flex-center` | `align-items: center; justify-content: center` (combine with `flex`) |
216
+ | `padded-container` | Full width with responsive horizontal padding, content centered within `--maz-container-max-width` |
217
+ | `padded-container-no-p` | Same centering without the minimum padding |
218
+ | `cap-f` | Capitalizes the first letter |
219
+ | `disabled-state`, `disabled-opacity`, `disabled-cursor` | The disabled look of the preset |
220
+ | `z-default-backdrop` | `z-index: 1050` |
221
+
222
+ ```html
223
+ <section class="padded-container py-12">
224
+ <div class="flex flex-center gap-2">...</div>
225
+ </section>
226
+ ```
227
+
228
+ ### Container width
229
+
230
+ `padded-container` reads CSS variables that you can override:
231
+
232
+ | Variable | Default |
233
+ | --- | --- |
234
+ | `--maz-container-max-width` | `1440px` |
235
+ | `--maz-container-padding-mobile` | `1rem` |
236
+ | `--maz-container-padding-tablet` | `2rem` (from `mob-l`) |
237
+ | `--maz-container-padding-desktop` | `2.5rem` (from `lap-s`) |
238
+
239
+ The content stops growing at `--maz-container-max-width` once the viewport is wider than the max width plus twice the desktop padding. When you change the max width, update that threshold too:
240
+
241
+ ```css
242
+ @layer base {
243
+ html {
244
+ --maz-container-max-width: 1024px;
245
+ }
246
+
247
+ /* 1024px + 2 * 2.5rem */
248
+ @media (width >= 1104px) {
249
+ :root {
250
+ --maz-container-width: var(--maz-container-max-width);
251
+ }
252
+ }
253
+ }
254
+ ```
255
+
256
+ ### Vue transitions
257
+
258
+ `maz-ui/style.css` ships transition classes you can reuse with `<Transition name="...">`: `maz-scale-fade`, `maz-scale`, `maz-slide`, `maz-slideinvert`, `maz-slidevnext`, `maz-slidevprev`, `maz-expand`.
259
+
260
+ ## Dark mode variant
261
+
262
+ `maz-ui/tailwindcss/theme-variants.css` binds `dark:` to the `.dark` class that `useTheme()` sets on `<html>` (`darkModeStrategy: 'class'`, the default). Adapt it when you change the strategy:
263
+
264
+ ```css
265
+ /* darkModeStrategy: 'media' */
266
+ @custom-variant dark (@media (prefers-color-scheme: dark));
267
+
268
+ /* custom darkClass: 'theme-dark' */
269
+ @custom-variant dark (&:where(.theme-dark, .theme-dark *));
270
+ ```
271
+
272
+ Toggle the mode with `useTheme()` (`toggleDarkMode()`, `setColorMode('dark' | 'light' | 'auto')`), never by editing the class yourself: see [Theming](../ecosystem/themes.md).
273
+
274
+ ## Extending the theme
275
+
276
+ ### Brand colors: use a preset
277
+
278
+ Your brand colors, radius, fonts and spacing belong to a theme preset: every maz-ui component **and** every Tailwind utility (`bg-primary`, `rounded-md`, `font-sans`...) then use them, in light and dark modes.
279
+
280
+ ```ts
281
+ import { definePreset } from '@maz-ui/themes'
282
+ import { mazUi } from '@maz-ui/themes/presets/mazUi'
283
+
284
+ export const brandPreset = definePreset({
285
+ base: mazUi,
286
+ overrides: {
287
+ name: 'brand',
288
+ foundation: {
289
+ 'font-family': 'Archivo, ui-sans-serif, system-ui, sans-serif',
290
+ },
291
+ scales: {
292
+ rounded: { md: '0.5rem' },
293
+ },
294
+ colors: {
295
+ light: { primary: 'oklch(0.62 0.2 255)' },
296
+ dark: { primary: 'oklch(0.72 0.17 255)' },
297
+ },
298
+ },
299
+ })
300
+ ```
301
+
302
+ See [Creating custom themes](../ecosystem/themes.md#creating-custom-themes) and the Theme Editor.
303
+
304
+ ### Add your own colors
305
+
306
+ For a color outside the maz-ui roles (a chart series, a product category), declare it once in your Tailwind entry. `light-dark()` works because maz-ui sets `color-scheme`:
307
+
308
+ ```css
309
+ @theme {
310
+ --color-brand: light-dark(oklch(0.65 0.21 30), oklch(0.75 0.17 30));
311
+ }
312
+ ```
313
+
314
+ `bg-brand`, `text-brand/80` and `border-brand` are now available. To base a color on a maz-ui token, use `@theme inline` so the utility reads the variable at runtime:
315
+
316
+ ```css
317
+ @theme inline {
318
+ --color-primary-soft: color-mix(in oklab, var(--maz-primary) 15%, transparent);
319
+ }
320
+ ```
321
+
322
+ ### Fonts
323
+
324
+ The font utilities read the preset (`foundation.font-family`, `font-display-stack`, `font-mono-stack`). You can also override them in your Tailwind entry, after the maz-ui import:
325
+
326
+ ```css
327
+ @theme {
328
+ --font-sans: Archivo, ui-sans-serif, system-ui, sans-serif;
329
+ --font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
330
+ }
331
+ ```
332
+
333
+ **Tip: Nuxt fonts**
334
+
335
+ With `@nuxt/fonts`, write the font family name literally (not only `var(--maz-font-family)`) somewhere in your CSS so the module detects it and self-hosts it.
336
+
337
+ ### Animations
338
+
339
+ Declare `--animate-*` tokens and their keyframes, reusing the motion tokens of the theme:
340
+
341
+ ```css
342
+ @theme {
343
+ --animate-rise: rise 0.5s var(--maz-easing-out) backwards;
344
+ }
345
+
346
+ @keyframes rise {
347
+ from {
348
+ opacity: 0;
349
+ transform: translateY(1rem);
350
+ }
351
+ }
352
+ ```
353
+
354
+ ```html
355
+ <h1 class="animate-rise">Welcome</h1>
356
+ ```
357
+
358
+ ### Variants
359
+
360
+ Add your own variants next to the maz-ui ones:
361
+
362
+ ```css
363
+ /* short screens (small Android, landscape) */
364
+ @custom-variant short (@media (max-height: 50rem));
365
+ ```
366
+
367
+ ```html
368
+ <header class="py-8 short:py-3">...</header>
369
+ ```
370
+
371
+ ### Base styles
372
+
373
+ A typical base layer that applies the theme to the document:
374
+
375
+ ```css
376
+ @layer base {
377
+ *,
378
+ ::after,
379
+ ::before,
380
+ ::backdrop,
381
+ ::file-selector-button {
382
+ border-color: var(--maz-divider);
383
+ }
384
+
385
+ html {
386
+ font-family: var(--maz-font-family);
387
+ font-size: var(--maz-base-font-size);
388
+ color: var(--maz-foreground);
389
+ background-color: var(--maz-surface);
390
+ }
391
+
392
+ ::selection {
393
+ background-color: color-mix(in srgb, var(--maz-primary) 28%, transparent);
394
+ }
395
+ }
396
+ ```
397
+
398
+ ### Complete example
399
+
400
+ ```css
401
+ /* app/assets/css/main.css */
402
+ @import 'maz-ui/style.css';
403
+ @import 'tailwindcss';
404
+ @import 'maz-ui/tailwindcss/theme.css';
405
+ @import 'maz-ui/tailwindcss/utilities.css';
406
+
407
+ @custom-variant short (@media (max-height: 50rem));
408
+
409
+ @theme {
410
+ --font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
411
+ --color-brand: light-dark(oklch(0.65 0.21 30), oklch(0.75 0.17 30));
412
+ --animate-rise: rise 0.5s var(--maz-easing-out) backwards;
413
+ }
414
+
415
+ @keyframes rise {
416
+ from {
417
+ opacity: 0;
418
+ transform: translateY(1rem);
419
+ }
420
+ }
421
+
422
+ @layer base {
423
+ html {
424
+ --maz-container-max-width: 1200px;
425
+
426
+ font-family: var(--maz-font-family);
427
+ color: var(--maz-foreground);
428
+ background-color: var(--maz-surface);
429
+ }
430
+ }
431
+ ```
432
+
433
+ ## Custom CSS
434
+
435
+ In plain CSS or in `<style>` blocks, use the theme variables rather than literal values:
436
+
437
+ ```css
438
+ .card {
439
+ padding: calc(var(--maz-space) * 4);
440
+ border: var(--maz-border-width) solid var(--maz-divider);
441
+ border-radius: var(--maz-rounded-md);
442
+ background-color: var(--maz-container-bg, var(--maz-surface));
443
+ box-shadow: var(--maz-shadow-style-elevation);
444
+ color: var(--maz-foreground);
445
+ transition: background-color var(--maz-motion-fast) var(--maz-easing-out);
446
+ }
447
+ ```
448
+
449
+ The full list of variables is in the [token reference of the theming guide](../ecosystem/themes.md#token-reference).
450
+
451
+ ### `@apply` in Vue SFC `<style>` blocks
452
+
453
+ Tailwind v4 processes each SFC `<style>` block in isolation: a block that uses `@apply` must start with a `@reference` to your Tailwind entry.
454
+
455
+ ```vue
456
+ <style scoped>
457
+ @reference "../assets/css/main.css";
458
+
459
+ .card {
460
+ @apply flex gap-4 rounded-md bg-surface p-4 shadow-elevation;
461
+ }
462
+ </style>
463
+ ```
464
+
465
+ ## AI agents
466
+
467
+ Every class and variable of this page is available to AI coding agents, generated from the sources of the installed version: the `get_theme_tokens` tool of the [maz-ui MCP server](../ecosystem/mcp.md), and `node_modules/maz-ui/docs/reference/tailwind-tokens.md`. See [AI agents](./ai-agents.md).
468
+
469
+ ## Migrating from Tailwind v3
470
+
471
+ Run the official upgrade tool first, it handles most of the v3 to v4 transition (renamed utilities, `tailwind.config.js` to CSS-first configuration):
472
+
473
+ ```bash
474
+ npx @tailwindcss/upgrade
475
+ ```
476
+
477
+ Then apply the maz-ui specific changes of the [v4 to v5 migration guide](./migration-v5.md#advanced-you-had-your-own-tailwind-setup).
478
+
479
+ ## See also
480
+
481
+ - [Theming](../ecosystem/themes.md): presets, color modes, runtime switching
482
+ - [Migration v4 to v5](./migration-v5.md)
483
+ - [Browser support](./browser-support.md): minimum versions required by Tailwind v4