Style with daisyUI
Use daisyUI components, layout-only Tailwind, and 360px-first responsive rules.
Use daisyUI components first
Reach for daisyUI component classes before utilities:
| Need | Classes |
|---|---|
| Bar, card | navbar, card card-body card-title |
| Actions, inputs | btn btn-primary btn-ghost btn-sm, input |
| Groups, lists | join join-item, list list-row list-col-grow |
| Feedback | badge, alert alert-soft, text-error |
| Structure | fieldset, footer, link |
- Use Tailwind utilities only for layout (
flex,gap-*,max-w-*). - Mark faint text with
opacity-70, never gray color utilities. - Ship
lightanddarkthemes only; switching needs no code.
Lay out phones first
- Keep
charsetandviewportmeta tags first inhead. - Verify every page at 360px wide before desktop widths.
- Stack by default; spread out from
sm:up (grid grid-cols-1 sm:grid-cols-3,flex flex-col sm:flex-row). - Use widths that fit the screen; never set fixed widths wider than 360px.
- Shorten long text with
truncateorbreak-words. - Wrap wide tables in
overflow-x-auto. - Use
btntap targets for primary actions andw-fullinputs. - Prefer
min-h-dvhovermin-h-screenso mobile browser bars never cut content. - Keep fixed bottom UI (bottom nav, FABs, toasts, cookie bars) clear of the Free badge: offset with
bottom: calc(env(safe-area-inset-bottom) + var(--outer-badge-space, 0px)). The proxy appends the badge (#outer-badge) to Free apps; Pro pages unset the variable so it falls back to 0. Never hide, cover, or restyle the badge.
For the person-side walkthrough, see Start from phones.