SantyCSS SantyCSS v1.3.1
✦ Plain English · No Build Step · 723KB npm version npm downloads bundle size GitHub stars

CSS that reads like
plain English

SantyCSS is a utility-first framework where class names describe what they do — in words you already know. No cryptic abbreviations, no lookup tables.

add-padding-24 add-border-left-4 make-flex align-center justify-between round-corners-12 set-text-18 text-semibold add-shadow-md opacity-80 on-hover:scale-105 transition-normal background-blue-500 color-white grid-cols-3 gap-16
Get Started Browse Utilities

SantyCSS vs Tailwind

Same power. Human-readable names.

Tailwind CSS
<div class="p-6 mt-4 flex items-center
      justify-between border-l-4 border-blue-500
      rounded-xl shadow-lg text-xl font-semibold
      hover:scale-105 transition-all">
SantyCSS ✦
<div class="add-padding-24 add-margin-top-16
      make-flex align-center justify-between
      add-border-left-4 border-color-blue-500
      round-corners-12 add-shadow-lg set-text-20
      text-semibold on-hover:scale-105
      transition-normal">
🤖 Built for the AI Era

Why SantyCSS in the Age of AI?

AI tools like Claude, ChatGPT, and Copilot write CSS every day — but they default to Tailwind or Bootstrap. SantyCSS is different: its class names are the documentation.

🧠

LLMs understand it instantly

Class names like make-flex align-center are self-documenting. Any AI can generate, read, and modify SantyCSS without a lookup table.

📋

One context file, any AI tool

Paste santycss.context.md into Claude, GPT-4, or Cursor system prompt and the AI generates SantyCSS instead of Tailwind — every time.

↓ Download context file

No build step, ever

AI-generated code should just work. Link one CSS file and use 8,500+ classes — no Webpack, no PostCSS, no config. Paste AI output directly into your HTML.

🔁

Prompt → Class → Done

The built-in AI Generator turns plain English into ready-to-use SantyCSS classes instantly — right in the browser, no API key required.

Try the generator ↓
AI prompt → SantyCSS classes
You tell the AI

"a card with shadow, blue left border, rounded corners and hover scale effect"

AI outputs
make-card style-bordered
add-border-left-4
border-color-blue-500
round-corners-16
add-shadow-md
on-hover:scale-105
transition-all

Everything you need

A complete design system in one file.

Plain English Names

Class names are full descriptive words. add-border-left-20 does exactly what it says — no memorization needed.

Zero Build Step

Drop santy.css into any project and start building. No Node, no config, no CLI tools needed.

Responsive Variants

Prefix any class with on-mobile:, on-tablet:, md:, lg: for responsive design.

State Variants

Hover, focus, active, disabled states with intuitive prefixes like on-hover: and on-focus:.

20-Palette Color System

20 color families × 10 shades each for text, background, border, fill, and stroke. Plus dark mode variants.

Component Shortcuts

Pre-built components: .btn, .card, .input, .badge, .alert, .spinner, and more.

Getting Started

One line. That's it.

npm

Install via npm

# Install
npm install santycss

# Option A — Import full CSS (React / Vue / Vite / Next.js)
import 'santycss/css';

# Option B — Import individual parts
import 'santycss/css/core';
import 'santycss/css/components';
import 'santycss/css/animations';

# Option C — In CSS / SCSS
@import 'santycss/dist/santy.css';

# Option D — Resolve path (webpack / rollup config)
const santy = require('santycss');
// santy.css        → absolute path to dist/santy.css
// santy.core       → absolute path to dist/santy-core.css
// santy.components → absolute path to dist/santy-components.css
npm ↗ GitHub ↗ MIT License v1.3.1
CDN

Use via CDN — zero install

Drop one line into any HTML file — no download, no npm, works instantly anywhere.

<!-- jsDelivr (recommended, global CDN) -->
<link rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/santycss/dist/santy.min.css">

<!-- Version-pinned (best for production) -->
<link rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/santycss@1.3.1/dist/santy.min.css">

<!-- unpkg -->
<link rel="stylesheet"
      href="https://unpkg.com/santycss/dist/santy.css">

<!-- Load only components via CDN -->
<link rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/santycss/dist/santy-core.css">
<link rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/santycss/dist/santy-components.css">
jsDelivr ↗ unpkg ↗ Auto-updates on npm publish
1

Download & Link Locally

<!-- In your <head> -->
<link rel="stylesheet" href="santy.css">
2

Or load only what you need — modular

Split CSS into 3 independent files. Load only the parts your page needs for optimal performance.

<!-- Utilities only (layout, spacing, colors, typography) -->
<link rel="stylesheet" href="santy-core.css">

<!-- Components only (btn, card, modal, drawer, table…) -->
<link rel="stylesheet" href="santy-components.css">

<!-- 70+ animations — only when you need them -->
<link rel="stylesheet" href="santy-animations.css">
santy-core.css — 593KB santy-components.css — 31KB santy-animations.css — 33KB
3

Write your first page

<div class="container add-padding-y-48">

  <!-- A card -->
  <div class="card add-padding-32 add-shadow-md">
    <h1 class="set-text-32 text-bold color-gray-900">Hello SantyCSS</h1>

    <!-- Border example -->
    <div class="add-border-left-4 border-color-blue-500
               add-padding-left-16 add-margin-y-24">
      Border on the left, 4px wide.
    </div>

    <!-- Button -->
    <button class="btn btn-primary on-hover:scale-105
                  transition-normal">
      Click me
    </button>
  </div>

</div>

Framework Integration

Drop-in for every major JS framework. Purge works exactly like Tailwind.

1. Copy santy.css into your project

your-app/
  public/
    santy.css   ← copy here
  src/
    app/
      layout.js

2. Import in layout.js (App Router) or _app.js

// app/layout.js  (Next.js 13+)
import '../public/santy.css'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>{children}</body>
    </html>
  )
}

3. Purge at build time — postcss.config.js

const santycss = require('santycss/postcss')

module.exports = {
  plugins: [
    santycss({
      content:  ['./src/**/*.{js,jsx,ts,tsx}', './app/**/*.{js,jsx,ts,tsx}'],
      safelist: ['make-hidden', 'animate-spin'],  // always keep these
    }),
  ],
}

// Result: 723 KB → ~15 KB in production automatically

4. Use in components

export default function Card({ title, badge }) {
  return (
    <div className="card add-padding-24 on-hover:add-shadow-lg transition-normal">
      <h2 className="set-text-20 text-semibold color-gray-900">{title}</h2>
      <span className="badge background-blue-100 color-blue-700">{badge}</span>
      <button className="btn btn-primary add-margin-top-16">Go</button>
    </div>
  )
}

Production Size Summary

723 KB
Full (raw)
72 KB
Full (gzip)
~15 KB
Purged (raw)
~3 KB
Purged (gzip) ✦

✦ Typical real-world page using 50–150 classes. Actual size varies by usage. Same order of magnitude as Tailwind's purged output.

SantyCSS vs Every Major Framework

A complete, honest breakdown across Tailwind, Bootstrap, Material UI, Bulma, Foundation & Chakra UI.

Bootstrap 5 Material UI Tailwind CSS Bulma Foundation Chakra UI
  • Full Table
  • vs Tailwind
  • vs Bootstrap
  • vs Material UI
  • vs Bulma
Feature SantyCSS Tailwind Bootstrap Material UI Bulma Foundation

Exclusive to SantyCSS

Not available out-of-the-box in any other framework.

Features unique to SantyCSS

Not available in Tailwind without plugins or custom config.

Plain-English class names

All other frameworks use abbreviated or cryptic names. SantyCSS reads like English — no memorising abbreviations.

Bootstrap: border-start-5 me-4 p-3
Tailwind: border-l-5 mr-4 p-3
Santy: add-border-left-5 add-margin-right-16 add-padding-12

Pixel-exact values — no arbitrary syntax

Every px from 0–200 is pre-generated. Bootstrap uses rem steps. Tailwind needs [20px] for custom values.

Tailwind: w-[137px] ← arbitrary syntax
Santy: set-width-137 ← built-in

120+ animations built-in

Bootstrap has 0, Tailwind has 4, Bulma has 0. SantyCSS ships 120+ — fades, bounces, slides, zooms, flips, scroll-triggered, stagger, and more.

animate-bounce-in-from-left animate-flip-in-x animate-rubber-band

View all 120+ animations →

No build step — drop-in CDN

Tailwind and Chakra require Node + bundler. Bootstrap requires PostCSS for customisation. SantyCSS works instantly.

<link rel="stylesheet" href="santy.css">
// All 10,000+ classes ready — no build needed.

Modular loading — load only what you need

Split CSS into 3 separate files so you can load only what a page needs. No other utility framework offers this.

santy-core.css — utilities only
santy-components.css — components only
santy-animations.css — animations only

Skeleton, Spinner, Progress — built-in

Bootstrap ships spinners. Tailwind, Bulma, Foundation ship nothing. SantyCSS ships skeleton loaders, spinners, and progress bars.

Human state prefixes + readable responsiveness

State prefixes read like English. Responsive prefixes describe the viewport in words, not breakpoint codes.

on-hover:scale-110
on-mobile:make-hidden
on-focus:add-shadow-md

JIT runtime + PostCSS + Vite + CLI

SantyCSS works in every mode — CDN link, JIT runtime, PostCSS plugin, Vite plugin, or CLI purge. No other framework covers all these without plugins.

CDN JIT PostCSS Vite CLI

Text shadow, elevation, centering shortcuts

All missing from Tailwind and most others. SantyCSS ships text-shadow, Material elevation levels, and single-class absolute centering.

text-shadow

pin-center → absolute center in 1 class
elevation-3 → Material Design shadow

Naming Convention

Five intuitive patterns. Read once, use forever.

+

add-{property}-{value} — Additive utilities

Used for properties that you're adding/applying: padding, margin, border, shadow.

add-padding-24 add-margin-top-16 add-border-left-4 add-border-y-2 add-shadow-lg add-letter-space-2

make-{value} — Behavioral / display

Changes what an element is or how it behaves.

make-flex make-grid make-hidden make-block make-circle make-pill make-visible
S

set-{property}-{value} — Size / value setters

Assigns a specific numeric value to a dimension or font-size.

set-width-320 set-height-full set-text-24 set-width-1-of-2 max-width-768
P

pin-{side}-{value} — Positioning

Positions an absolute/fixed element by anchoring it to a side.

pin-top-0 pin-right-16 pin-bottom-32 pin-center pin-center-x pin-all-0
:

{state}:{class} — State & responsive variants

Prefix any class with a state or breakpoint to scope its effect.

on-hover:scale-110 on-focus:add-shadow-md on-mobile:make-hidden md:grid-cols-3 dark:background-gray-900 group-hover:color-blue-500

Utility Reference

The full class name catalogue, organized by category.

Spacing — Padding & Margin

Replace {n} with any pixel value from 0–200 (every 1px up to 50, then every 4px), plus larger values like 256, 320, 384, 448, 512, 640, 768, 1024.

ClassCSS OutputDescription
add-padding-{n}padding: {n}pxAll sides
add-padding-top-{n}padding-top: {n}pxTop only
add-padding-bottom-{n}padding-bottom: {n}pxBottom only
add-padding-left-{n}padding-left: {n}pxLeft only
add-padding-right-{n}padding-right: {n}pxRight only
add-padding-x-{n}padding-left + right: {n}pxHorizontal axis
add-padding-y-{n}padding-top + bottom: {n}pxVertical axis
add-margin-{n}margin: {n}pxAll sides
add-margin-top-{n}margin-top: {n}pxTop only
add-margin-bottom-{n}margin-bottom: {n}pxBottom only
add-margin-left-{n}margin-left: {n}pxLeft only
add-margin-right-{n}margin-right: {n}pxRight only
add-margin-x-{n}margin-left + right: {n}pxHorizontal
add-margin-y-{n}margin-top + bottom: {n}pxVertical
add-margin-x-automargin-left: auto; margin-right: autoCenter horizontally
center-marginmargin: 0 autoCenter block element
subtract-margin-{n}margin: -{n}pxNegative margin
gap-{n}gap: {n}pxFlex/grid gap
gap-x-{n}column-gap: {n}pxColumn gap only
gap-y-{n}row-gap: {n}pxRow gap only

Live Demo

add-padding-8
add-padding-16
add-padding-24
add-padding-32
margin-right-8
margin-right-24
no extra margin

Border & Radius

Border widths: 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24, 28, 32, 40, 48px

ClassCSS OutputNotes
add-border-{n}border: {n}px solidAll sides
add-border-top-{n}border-top: {n}px solidTop
add-border-bottom-{n}border-bottom: {n}px solidBottom
add-border-left-{n}border-left: {n}px solidLeft
add-border-right-{n}border-right: {n}px solidRight
add-border-x-{n}border-left + right: {n}px solidHorizontal
add-border-y-{n}border-top + bottom: {n}px solidVertical
border-color-{name}-{shade}border-color: {hex}e.g. border-color-blue-500
border-solid / dashed / dotted / doubleborder-style: …Border style
round-corners-{n}border-radius: {n}px0–128px
make-circleborder-radius: 50%Perfect circle
make-pillborder-radius: 9999pxPill/capsule shape
round-top-{n}border-top-left/right-radius: {n}pxTop corners
round-bottom-{n}border-bottom-left/right-radius: {n}pxBottom corners
round-left-{n}border-top/bottom-left-radius: {n}pxLeft corners
round-right-{n}border-top/bottom-right-radius: {n}pxRight corners

Live Demo

add-border-1
add-border-2
round-corners-8
add-border-4
round-corners-16
add-border-left-6
make-circle
border-dashed
make-pill

Typography

ClassCSS Output
set-text-{n}font-size: {n}px (8–144)
text-thinfont-weight: 100
text-extra-lightfont-weight: 200
text-lightfont-weight: 300
text-normalfont-weight: 400
text-mediumfont-weight: 500
text-semiboldfont-weight: 600
text-boldfont-weight: 700
text-extra-boldfont-weight: 800
text-black-weightfont-weight: 900
text-italic / text-not-italicfont-style: italic / normal
font-sans / font-serif / font-monoSystem font stacks
text-left / center / right / justifytext-align
text-uppercase / lowercase / capitalizetext-transform
text-underline / strikethrough / no-decorationtext-decoration
text-truncateEllipsis overflow truncation
text-nowrapwhite-space: nowrap
line-height-none / tight / snug / normal / relaxed / looseline-height presets
add-letter-space-{n}letter-spacing: {n}px
letter-space-wide / wider / widestem-based letter spacing

Font Scale

set-text-48

set-text-36 text-bold

set-text-24 text-semibold

set-text-18 text-medium

set-text-14 text-normal — body text

set-text-12 letter-space-wider uppercase

Layout, Flexbox & Grid

ClassCSS Output
make-flex / make-grid / make-block / make-hiddendisplay values
flex-row / flex-columnflex-direction
flex-wrap / flex-nowrapflex-wrap
align-center / align-start / align-end / align-stretchalign-items
justify-center / justify-between / justify-start / justify-end / justify-around / justify-evenlyjustify-content
flex-grow / flex-shrink / flex-none / flex-equalflex shorthand values
self-center / self-start / self-end / self-stretchalign-self
place-centerplace-items: center; place-content: center
grid-cols-{1-12}grid-template-columns: repeat(n, 1fr)
grid-rows-{1-6}grid-template-rows: repeat(n, 1fr)
span-col-{n}grid-column: span n
span-col-fullgrid-column: 1 / -1
gap-{n} / gap-x-{n} / gap-y-{n}gap / column-gap / row-gap
order-{1-12} / order-first / order-lastorder
grid-flow-row / grid-flow-col / grid-flow-densegrid-auto-flow

Grid Demo — grid-cols-4 gap-16

1
span-col-2
4
5
6
span-col-full

Sizing

ClassCSS Output
set-width-{n}width: {n}px (0–1024)
set-width-fullwidth: 100%
set-width-screenwidth: 100vw
set-width-autowidth: auto
set-width-min / max / fitmin-content / max-content / fit-content
set-width-1-of-2width: 50%
set-width-1-of-3 / 2-of-3width: 33.33% / 66.66%
set-width-1-of-4 … 3-of-4width: 25% / 50% / 75%
set-height-{n}height: {n}px (0–1024)
set-height-fullheight: 100%
set-height-screenheight: 100vh
min-width-{n} / max-width-{n}min/max-width: {n}px
min-height-{n} / max-height-{n}min/max-height: {n}px
max-width-nonemax-width: none

Color System

20 color families × 10 shades (50–900). Use prefixes: color-, background-, border-color-, fill-, stroke-.

PatternExampleCSS Output
color-{name}-{shade}color-blue-500color: #3b82f6
background-{name}-{shade}background-green-100background-color: #dcfce7
border-color-{name}-{shade}border-color-red-600border-color: #dc2626
fill-{name}-{shade}fill-purple-500fill: #a855f7 (SVG)
stroke-{name}-{shade}stroke-teal-400stroke: #2dd4bf (SVG)
color-white / color-blackcolor: #fff / #000
background-white / background-blackbackground-color: #fff / #000

Effects, Transforms & Animations

ClassCSS Output
add-shadow-sm / md / lg / xl / innerbox-shadow presets
no-shadowbox-shadow: none
opacity-{0–100}opacity: 0–1 (in steps of 5)
transition-fast / normal / slowtransition: all 0.15s / 0.3s / 0.5s ease
transition-colors / opacity / transformTargeted transitions
rotate-45 / 90 / 135 / 180 / 270transform: rotate(Ndeg)
scale-75 / 90 / 95 / 100 / 105 / 110 / 125 / 150transform: scale(N)
flip-horizontal / flip-verticaltransform: scaleX(-1) / scaleY(-1)
skew-x-3 / 6 / 12 / skew-y-3 / 6 / 12transform: skewX/Y(Ndeg)
blur-sm / blur / blur-md / blur-lg / blur-xlfilter: blur(Npx)
grayscale / sepia / invertfilter presets
brightness-{50–200} / contrast-{50–200}filter: brightness/contrast
animate-spin / ping / pulse / bounceLooping animations
animate-fade-in / fade-in-from-top / …9 fade entrances
animate-bounce-in-from-{top/bottom/left/right}5 bounce entrances
animate-slide-in-from-{side} / slide-out-to-{side}4+4 slide variants
animate-zoom-in / zoom-in-from-{side} / zoom-out-…5+5 zoom variants
animate-flip / flip-in-x / flip-in-y / flip-out-x / y5 flip variants
animate-shake-x / shake-y / rubber-band / tada / wobbleAttention seekers
animate-rotate-in / rotate-in-from-{corner}5+5 rotate variants
animate-back-in-from-{side} / back-out-to-{side}4+4 back variants
animate-hinge / jack-in-box / roll-in / roll-outSpecials
animation-speed-{fastest → glacial}Duration helpers (0.3s–3s)
animation-delay-{100–3000}Delay in ms
animation-loop-{1–5} / foreverIteration count
animation-fill-{none/forwards/backwards/both}Fill mode
drop-shadow-sm / md / lgfilter: drop-shadow(…)
text-shadow-sm / md / lgtext-shadow presets
blend-multiply / screen / overlay / …mix-blend-mode

Animation Demo

animate-fade-in
animate-bounce-in-from-left
animate-fade-in-from-top
animate-rubber-band
animate-zoom-in

See all 70+ animations with live previews

Responsive & State Variants

Breakpoints

PrefixMedia QueryExample
on-mobile:max-width: 639pxon-mobile:make-hidden
on-tablet:640px – 1023pxon-tablet:grid-cols-2
on-desktop:min-width: 1024pxon-desktop:grid-cols-4
on-wide:min-width: 1280pxon-wide:set-text-20
sm:min-width: 640pxsm:make-flex
md:min-width: 768pxmd:grid-cols-3
lg:min-width: 1024pxlg:add-padding-48
xl:min-width: 1280pxxl:set-text-24
xxl:min-width: 1536pxxxl:container

State Variants

PrefixTargetsExample
on-hover::hoveron-hover:background-blue-600
on-focus::focuson-focus:add-shadow-md
on-active::activeon-active:scale-95
on-disabled::disabledon-disabled:opacity-50
on-checked::checkedon-checked:background-blue-500
on-first::first-childon-first:add-margin-top-0
on-last::last-childon-last:add-margin-bottom-0
on-odd: / on-even:nth-childon-odd:background-gray-50
on-placeholder:::placeholderon-placeholder:color-gray-400
on-focus-within::focus-withinon-focus-within:add-shadow-md
on-focus-visible::focus-visibleon-focus-visible:outline
dark:prefers-color-scheme: darkdark:background-gray-900
group-hover:Parent .group:hovergroup-hover:color-blue-500
<!-- Responsive card grid: 1 col mobile → 2 col tablet → 3 col desktop -->
<div class="make-grid grid-cols-1 gap-16
          on-tablet:grid-cols-2
          on-desktop:grid-cols-3">
  <div class="card group cursor-pointer transition-normal
              on-hover:add-shadow-lg on-hover:scale-102">
    <span class="color-gray-600 group-hover:color-blue-600 transition-colors">
      Hover me
    </span>
  </div>
</div>

Position, Z-index, Overflow & More

Position

ClassCSS Output
position-staticposition: static
position-relativeposition: relative
position-absoluteposition: absolute
position-fixedposition: fixed
position-stickyposition: sticky
pin-top / pin-bottom / pin-left / pin-righttop/bottom/left/right: 0
pin-top-{n} / pin-left-{n} / …top/left/…: {n}px
inset-0top/right/bottom/left: 0

Z-index

ClassCSS Output
z-0z-index: 0
z-10z-index: 10
z-20z-index: 20
z-30z-index: 30
z-40z-index: 40
z-50z-index: 50
z-100z-index: 100
z-autoz-index: auto
layer-{n} / layer-autoz-index: n (alternate name)

Overflow

ClassCSS Output
overflow-hiddenoverflow: hidden
overflow-autooverflow: auto
overflow-scrolloverflow: scroll
overflow-visibleoverflow: visible
overflow-x-hiddenoverflow-x: hidden
overflow-x-autooverflow-x: auto
overflow-y-hiddenoverflow-y: hidden
overflow-y-autooverflow-y: auto

Cursor

ClassCSS Output
cursor-pointercursor: pointer
cursor-defaultcursor: default
cursor-not-allowedcursor: not-allowed
cursor-grab / cursor-grabbingcursor: grab / grabbing
cursor-wait / cursor-text / cursor-movecursor: wait / text / move
cursor-crosshair / cursor-zoom-in / cursor-zoom-outcursor variants
cursor-none / cursor-help / cursor-autocursor variants

Pointer Events & User Select

ClassCSS Output
pointer-events-nonepointer-events: none
pointer-events-autopointer-events: auto
select-noneuser-select: none
select-alluser-select: all
select-textuser-select: text
select-autouser-select: auto

Object Fit & Aspect Ratio

ClassCSS Output
object-fit-cover / fit-coverobject-fit: cover
object-fit-contain / fit-containobject-fit: contain
object-fit-fill / fit-fillobject-fit: fill
object-fit-none / fit-noneobject-fit: none
object-position-center / top / bottom / left / rightobject-position
aspect-ratio-16-9 / aspect-videoaspect-ratio: 16 / 9
aspect-ratio-1-1 / aspect-squareaspect-ratio: 1 / 1
aspect-ratio-4-3aspect-ratio: 4 / 3
aspect-ratio-3-2aspect-ratio: 3 / 2

Gradients & Color Stops

ClassCSS Output
gradient-to-rightbackground-image: linear-gradient(to right, var(--grad-from), var(--grad-to))
gradient-to-bottombackground-image: linear-gradient(to bottom, …)
gradient-to-left / gradient-to-toplinear-gradient to left / top
gradient-to-bottom-right / top-rightdiagonal gradients
from-blue-500--grad-from: #3b82f6
from-purple-500 / from-purple-600--grad-from: #a855f7 / #9333ea
from-green-500 / from-teal-500--grad-from: #22c55e / #14b8a6
from-orange-500 / from-red-500 / from-pink-500gradient start colors
to-purple-600--grad-to: #9333ea
to-blue-500 / to-indigo-500--grad-to: #3b82f6 / #6366f1
to-green-500 / to-teal-500 / to-cyan-400gradient end colors
to-pink-500 / to-rose-500 / to-amber-400gradient end colors

Gradient Demo

blue → purple
green → teal
orange → red
sky → indigo
pink → rose

Accessibility & Outline

ClassCSS Output
sr-onlyVisually hidden, screen-reader accessible
not-sr-onlyUndo sr-only (make visible again)
outline-noneoutline: none
outlineoutline: 2px solid currentColor
outline-offset-2 / outline-offset-4outline-offset
ring-2 / ring-4 / ring-8box-shadow focus ring (primary color)
ring-blue / ring-green / ring-red / ring-purpleColored focus rings
ring-offset-1 / ring-offset-2 / ring-offset-4Ring with white gap offset

Backdrop Filter

ClassCSS Output
backdrop-blur-smbackdrop-filter: blur(4px)
backdrop-blurbackdrop-filter: blur(8px)
backdrop-blur-mdbackdrop-filter: blur(12px)
backdrop-blur-lgbackdrop-filter: blur(16px)
backdrop-blur-xl / 2xl / 3xlblur(24px / 40px / 64px)
navbar-glassbackdrop-filter: blur(12px) + semi-transparent bg

Theming & Advanced Features

CSS variables, dark mode, peer variants, print styles, RTL support.

CSS Variables / Theming

Override design tokens in your own stylesheet — no build step, no config file, just CSS. Every component reads from these variables.

/* Override in your CSS file */
:root {
  --santy-primary:       #7c3aed;  /* brand purple */
  --santy-primary-dark:  #6d28d9;
  --santy-primary-light: #ede9fe;
  --santy-secondary:     #0f172a;
  --santy-success:       #16a34a;
  --santy-danger:        #dc2626;
  --santy-radius:        12px;
  --santy-radius-sm:     6px;
  --santy-radius-lg:     20px;
  --santy-font-sans:     'Inter', sans-serif;
}
Token Badge
TokenDefaultUsed by
--santy-primary#3b82f6.btn-primary, .ring-*, .tabs-item.active
--santy-primary-dark#2563eb.btn-primary:hover
--santy-primary-light#dbeafelight bg accents
--santy-secondary#6b7280.btn-secondary
--santy-success / danger / warning / infogreen/red/amber/cyan.btn-success, .alert-*, notification-*
--santy-radius / -sm / -md / -lg / -xl / -full8px … 9999pxall rounded corners
--santy-font-sans / -serif / -monosystem-ui / Georgia / monospace.font-sans, .font-serif, .font-mono

Dark Mode

Add .dark to <html> or <body> — all components auto-adapt. Use .dark-auto to follow the OS preference.

<!-- Manual dark mode -->
<html class="dark">

<!-- Follow OS preference -->
<html class="dark-auto">

<!-- Per-element dark override -->
<div class="dark:background-gray-900 dark:color-white">
Dark Card
✅ Dark alert-success
❌ Dark alert-danger
Component.dark class adapts
.card / .card-header / .card-body / .card-footer
.btn-outline / .btn-ghost / .btn-secondary
.alert-info / -success / -warning / -danger
.badge / .notification-*
.input / .select / .textarea
.modal-box / .drawer-panel
.accordion / .tabs / .dropdown-menu
.table / .navbar / .pagination

Peer & Group Variants

Target sibling elements when an ancestor or peer changes state — no JS required.

<!-- peer-checked: show sibling -->
<input type="checkbox" class="peer">
<p class="make-hidden peer-checked:make-block">
  Visible when checked!
</p>

<!-- peer-hover: change color -->
<input class="peer">
<label class="peer-focus:color-blue-600">
  Label</label>

<!-- group-hover: child reacts to parent -->
<div class="group cursor-pointer">
  <span class="group-hover:color-blue-500">hover me</span>
</div>
VariantTriggers when
peer-hover:{cls}peer element is hovered
peer-focus:{cls}peer element is focused
peer-checked:{cls}peer checkbox/radio is checked
peer-disabled:{cls}peer element is disabled
group-hover:{cls}parent .group is hovered
group-focus:{cls}parent .group has focus

Print, Motion & Link Variants

Built-in accessibility and print utilities — no plugins or extra config.

<!-- Print styles -->
<nav class="print:make-hidden"></nav>
<footer class="print:make-hidden"></footer>
<article class="print:set-text-12 print:color-black"></article>

<!-- Motion accessibility -->
<div class="motion-safe:animate-spin
         motion-reduce:animate-none"></div>

<!-- Link states -->
<a class="color-blue-500
        on-visited:color-purple-600
        on-hover:color-blue-700">
  Link
</a>
VariantDescription
print:{cls}Applied only when printing
print:make-hiddenHide element in print
print:make-blockShow element only in print
motion-safe:{cls}Only if user has no reduce-motion preference
motion-reduce:{cls}Applied when reduce-motion is set
motion-reduce:animate-noneKills animations for accessibility
on-visited:{cls}Visited links
on-required:{cls}Required form fields
on-invalid:{cls}Invalid form fields
on-read-only:{cls}Read-only inputs

RTL / Logical Properties

SantyCSS ships logical property utilities. Add dir="rtl" to <html> and spacing/borders automatically flip — no extra classes needed.

<!-- RTL-safe layout -->
<html dir="rtl">
  <div class="ps-16 pe-8">
    <!-- padding-inline-start/end flips in RTL -->
  </div>
  <div class="ms-auto border-start-4">
    <!-- start/end flip in RTL -->
  </div>
ClassLogical Property
ps-{n}padding-inline-start (LTR: left, RTL: right)
pe-{n}padding-inline-end (LTR: right, RTL: left)
ms-automargin-inline-start: auto
me-automargin-inline-end: auto
border-start-1/2/4border-inline-start (flips in RTL)
border-end-1/2/4border-inline-end (flips in RTL)
start-0 / end-0inset-inline-start/end: 0

Component Shortcuts

High-level classes for common patterns — built on top of utilities.

Buttons

.make-button .style-primary .size-small/.large/.xl

Modal / Dialog

Open Modal

CSS-only via <a href="#modal-id">

Dropdown Menu

.dropdown .dropdown-menu .dropdown-item

Tabs

Overview content here.
Details content here.
Settings content here.
.tabs .tabs-item.active .tab-panel

Accordion

A plain-English utility-first CSS framework.
Just drop in a single CSS file and go.
.accordion .accordion-header .accordion-body

Toast / Notification

Saved!
Your changes were saved.
Error
Failed to connect.
.notification .notification-success/.error

Progress & Skeleton

.progress .progress-bar / .skeleton

Badges & Chips

New Active Error Beta
Design Done Urgent Review
.badge / .chip .chip-blue/.green

Sidebar / Drawer

Open Drawer
Sidebar

Sidebar content goes here.

CSS-only via :target

Table

NameRoleStatus
AliceAdminActive
BobEditorPending
.table .table-hover .table-striped

Pagination & Breadcrumb

.pagination .page-item / .breadcrumb

Toggle & Range

.toggle .toggle-slider / .range

Stepper

  • Account
  • 2
    Profile
  • 3
    Payment
.steps .step .step.active .step.done

Card

Card Title Active
Card body content goes here with a white background, radius, and shadow.
.card .card-header .card-body .card-footer

Form Inputs

https://
.input .select .textarea .input-group

Avatar & Spinner

JS
AB
CD
.avatar .avatar-md / .spinner .spinner-lg

Alerts

Info: Informational message.
Success: Changes saved.
Warning: Review this.
Error: Something failed.
.alert .alert-info/.success/.warning/.danger

Navbar / Header

.navbar .navbar-brand .navbar-item .navbar-dark

Tooltip

Tooltip on top Tooltip on bottom Tooltip on right Tooltip on left
.tooltip .tooltip-top/.bottom/.left/.right .tooltip-content

Real-World Examples

Full UI patterns built entirely with SantyCSS classes.

Pricing Cards

Starter

$0 /month

Perfect for personal projects.


  • 5 Projects
  • 2GB Storage
  • Team features

Pro

$29 /month

For growing teams.

Popular

  • Unlimited Projects
  • 50GB Storage
  • Team features

Enterprise

Custom

For large organizations.


  • Everything in Pro
  • SLA & Support
  • Custom Integrations

Profile Card

JD

Jane Doe

Product Designer · San Francisco

128
Projects
4.9k
Followers
312
Following

Stats Dashboard

Revenue
$84,250
↑ 12.5% vs last month
Users
24,891
↑ 8.2% vs last month
Orders
1,429
↓ 3.1% vs last month
Conversion
5.74%
↑ 1.4% vs last month
✨ AI-Powered

Prompt → SantyCSS Classes

Describe what you want in plain English and get ready-to-use SantyCSS classes instantly.

100% client-side · no API key · works offline

🗺 Roadmap

What We're Building

SantyCSS is growing. Here's where we're taking it — from AI tooling to design systems.

AI Prompt-to-Classes

LIVE

Type a description → get SantyCSS classes instantly

Try it above ↑
🧩

VS Code Extension

PLANNED

Autocomplete + live hover preview for every class

🎨

Design Token System

LIVE

Brand your entire UI with CSS vars — zero build step

See theming docs ↑
🔧

Component Variant System

IN PROGRESS

Composable, AI-friendly class naming for components

🖼

Figma → SantyCSS Plugin

PLANNED

Select a frame → export SantyCSS classes instantly

🛝

SantyCSS Playground

IN PROGRESS

In-browser editor — try SantyCSS in 30 seconds

Try the JIT demo →
💡

"Explain This Class"

IN PROGRESS

Hover any class → see the raw CSS it generates

Flip the AI script — SantyCSS explains itself instead of you explaining Tailwind to AI.

Framework CLI

LIVE

Scaffold, purge, and manage SantyCSS from the terminal

npx santycss [your-html-files]

Accessibility Utilities

IN PROGRESS

Built-in ARIA-friendly classes AI consistently misses

make-sr-only  make-focusable  skip-to-content

🤖

SantyCSS for LLMs

LIVE

Paste into Claude / ChatGPT / Cursor — AI generates SantyCSS instead of Tailwind

Download santycss.context.md →
💬 Feedback

We'd love to hear from you

Share a bug, feature idea, or just say hi — your message goes straight to WhatsApp.

Opens WhatsApp with your message pre-filled — just hit send.