Utilities

A small set of atomic classes, Tailwind-style — hand-written, not generated: only what the Vanelton Media ecosystem itself actually needed. It grows on demand.

These come from joy-utilities.css, which needs to load after joy.css — that way a utility always wins over a component style, the same way Tailwind works layered on top of any base CSS.

Flex

Item A Item B
HTML
<div class="joy-flex joy-items-center joy-justify-between joy-gap-3" style="background:rgba(127,127,127,.08);padding:12px;border-radius:12px;">
    <span>Item A</span>
    <span>Item B</span>
</div>
ClassCSS
.joy-flexdisplay: flex
.joy-flex-coldisplay: flex; flex-direction: column
.joy-flex-wrapflex-wrap: wrap
.joy-items-centeralign-items: center
.joy-items-startalign-items: flex-start
.joy-justify-centerjustify-content: center
.joy-justify-betweenjustify-content: space-between

Grid

ClassCSSNote
.joy-grid-2grid-template-columns: repeat(2, 1fr)collapses to 1 column at ≤900px
.joy-grid-3grid-template-columns: repeat(3, 1fr)collapses to 1 column at ≤900px
.joy-grid-4grid-template-columns: repeat(4, 1fr)collapses to 1 column at ≤900px

Gap

ClassValue
.joy-gap-14px
.joy-gap-28px
.joy-gap-312px
.joy-gap-416px
.joy-gap-524px
.joy-gap-632px

Margin & padding

ClassCSS
.joy-mt-2.joy-mt-6margin-top (8px to 32px)
.joy-mb-2.joy-mb-5, .joy-mb-0margin-bottom (8px to 24px, or 0)
.joy-py-2 / .joy-py-4vertical padding (8px / 16px)
.joy-px-4horizontal padding (16px)

Text

Highlighted text

Smaller, secondary text

HTML
<p class="joy-text-accent joy-font-bold">Highlighted text</p>
<p class="joy-text-muted joy-text-sm">Smaller, secondary text</p>
ClassEffect
.joy-text-center / .joy-text-lefttext alignment
.joy-text-accent--joy-accent color
.joy-text-muted--joy-text-muted color
.joy-text-sm.joy-text-3xl0.9rem up to 2.75rem
.joy-font-semibold / .joy-font-boldweight 600 / 700

Width & display

ClassEffect
.joy-w-fullwidth: 100%
.joy-max-w-smmax-width: 480px
.joy-max-w-mdmax-width: 720px
.joy-mx-autoauto inline margin (centers the element)
.joy-hidden / .joy-blockdisplay: none / block
.joy-relativeposition: relative

Radius & order

ClassEffect
.joy-rounded-sm/md/lg/pillmaps to the --joy-radius-* tokens
.joy-order-first / .joy-order-lastorder: -1 / order: 999 (flex/grid)

Responsive prefix

Same idea as Tailwind, written by hand — it only covers what the ecosystem has actually needed so far, not the full combinatorial set:

PrefixBreakpoint
md:@media (max-width: 900px) — tablet and below
sm:@media (max-width: 600px) — phone and below
Side by side on desktop Stacked on phone
HTML
<div class="joy-flex sm:joy-flex-col joy-gap-3">
    <span class="joy-chip">Side by side on desktop</span>
    <span class="joy-chip">Stacked on phone</span>
</div>

Only hidden, block, flex, flex-col, text-center, text-left, w-full, order-first and order-last have md:/sm: variants today. gap, margin, radius and grid-N don't yet — add the one you need if it's missing.