Skip to main content

@renge-ui/tailwind

Tailwind, proportionally.

Renge tokens as Tailwind utilities. One plugin line bakes spacing, color, typography, motion, radius, layout, and semantic petals into your stylesheet. Profile-reactive. Variant-complete. Proportionally correct.

pnpm add @renge-ui/tailwind @renge-ui/tokens

Installation

Two minutes to proportional UI.

Add the plugin to globals.css, set data-profile on <html>, and every Renge token becomes a utility class. All variants work: hover:, md:, dark:, focus:, group-hover:, etc.

1. Install

pnpm add @renge-ui/tailwind @renge-ui/tokens

2. Register the plugin

/* globals.css */
@import "tailwindcss";
@plugin "@renge-ui/tailwind/plugin";

3. Set the profile

<!-- app.html or layout file -->
<html lang="en" data-profile="ocean" data-mode="light">
  <head>...</head>
  <body>...</body>
</html>

<!-- Optional: Switch profiles at runtime (no rebuild) -->
<script>
  document.documentElement.dataset.profile = "twilight";
  document.documentElement.dataset.mode = "dark";
</script>

Available profiles

Each profile is a complete color system with light and dark variants.

ocean

Cool periwinkle

earth

Warm parchment

twilight

Dusk transition

fire

Warm embers

void

Deep space

leaf

Natural green

Note: Tailwind v4 plugin is recommended. For v3, use @renge-ui/tailwind directly as a preset in tailwind.config.js.

Color System

Six worlds with semantic tokens.

Each profile includes 22 semantic color tokens for backgrounds, text, borders, states, and accents. All WCAG 2.1 AA certified.

Semantic color tokens

Use semantic colors instead of hardcoding hex values. They automatically adapt to the active profile and dark mode.

/* Don't use hardcoded colors */
.button {
  background: #5B7FB7;  /* ❌ breaks when profile changes */
}

/* Use semantic tokens instead */
.button {
  background: var(--renge-color-accent);        /* ✅ profile-reactive */
}

/* Tailwind equivalents */
<button class="bg-renge-accent hover:bg-renge-accent-hover text-renge-fg-inverse">
  Action
</button>

Color palette demo:

accent
bg-accent
success
bg-success
warning
bg-warning
danger
bg-danger
info
bg-info
neutral
bg-neutral

22 semantic color tokens

ClassValue / DerivationCSS output
bg-renge-bgDocument backgroundAdapts to profile + mode
bg-renge-bg-subtleSubtle background layerSlightly elevated
bg-renge-bg-mutedMuted backgroundFurther elevated
bg-renge-bg-inverseInverse of primary bgFor code blocks
text-renge-fgPrimary text colorHigh contrast
text-renge-fg-subtleSecondary textLower contrast
text-renge-fg-mutedTertiary textMinimal contrast
text-renge-fg-inverseInverse textFor dark backgrounds
border-renge-borderDefault border colorStandard dividers
border-renge-border-subtleSubtle borderMinimal emphasis
border-renge-border-focusFocus ring colorKeyboard navigation
bg-renge-accentPrimary accentCTA, highlights
bg-renge-accent-hoverHover state accentInteractive feedback
bg-renge-accent-subtleSubtle accent backgroundSoft highlight
text-renge-successSuccess status colorWCAG AA compliant
text-renge-warningWarning status colorWCAG AA compliant
text-renge-dangerError/danger colorWCAG AA compliant
text-renge-infoInformational colorWCAG AA compliant

Real-world profile usage

<!-- Example: Ocean profile (cool, professional) -->
<html data-profile="ocean">
  <!-- Periwinkle accent, cool neutrals -->
</html>

<!-- Example: Earth profile (warm, natural) -->
<html data-profile="earth">
  <!-- Warm tan accent, earthy neutrals -->
</html>

<!-- Example: Dark mode with Twilight -->
<html data-profile="twilight" data-mode="dark">
  <!-- All colors invert automatically -->
</html>

<!-- Switch profiles dynamically -->
<script>
  function setTheme(profile, mode) {
    document.documentElement.dataset.profile = profile;  // 'ocean', 'earth', 'twilight', etc.
    document.documentElement.dataset.mode = mode;        // 'light' or 'dark'
  }

  setTheme('fire', 'dark');  // Warm embers in dark mode
</script>

Use cases

What you can build.

Real-world patterns: cards, forms, navigation, dashboards, modal layouts, and more.

Product card

<div class="petal-card-surfaceComfortable flex-renge-col gap-renge-3">
  <img src="/product.jpg" class="aspect-renge-golden rounded-renge-2 w-full" />
  <div class="flex-renge-col gap-renge-2">
    <h3 class="text-renge-lg leading-renge-lg text-renge-fg">
      Product name
    </h3>
    <p class="text-renge-sm leading-renge-sm text-renge-fg-muted">
      Description and details.
    </p>
    <div class="flex-renge-row justify-between">
      <span class="text-renge-xl text-renge-accent">$99</span>
      <button class="petal-interactive-buttonMedium bg-renge-accent text-renge-bg">
        Add to cart
      </button>
    </div>
  </div>
</div>

Contact form

<form class="flex-renge-col gap-renge-5">
  <div class="flex-renge-col gap-renge-2">
    <label class="text-renge-sm text-renge-fg font-semibold">
      Email
    </label>
    <input
      type="email"
      class="petal-composition-textField"
      placeholder="hello@example.com"
    />
  </div>

  <div class="flex-renge-col gap-renge-2">
    <label class="text-renge-sm text-renge-fg font-semibold">
      Message
    </label>
    <textarea
      class="petal-composition-textField min-h-32"
      placeholder="Your message..."
    />
  </div>

  <button
    type="submit"
    class="petal-interactive-buttonMedium bg-renge-accent text-renge-bg hover:bg-renge-accent-hover"
  >
    Send
  </button>
</form>

Navigation bar

<nav class="flex-renge-row justify-between px-renge-5 py-renge-4 border-b border-renge-border-subtle">
  <a href="/" class="text-renge-lg leading-renge-lg font-semibold text-renge-accent">
    Logo
  </a>

  <div class="stack-h gap-renge-6">
    <a href="/docs" class="text-renge-base text-renge-fg-muted hover:text-renge-fg">
      Docs
    </a>
    <a href="/api" class="text-renge-base text-renge-fg-muted hover:text-renge-fg">
      API
    </a>
    <button class="petal-interactive-buttonMedium bg-renge-accent text-renge-bg">
      Sign in
    </button>
  </div>
</nav>

Responsive grid

<div class="grid grid-cols-renge-1 md:grid-cols-renge-2 lg:grid-cols-renge-3 gap-renge-5">
  {items.map(item => (
    <div key={item.id} class="petal-card-surfaceComfortable">
      {item.content}
    </div>
  ))}
</div>

<!-- Or responsive auto-fit -->
<div class="grid grid-cols-auto-fit-renge-md gap-renge-4">
  {items.map(item => (
    <div key={item.id} class="petal-card-surfaceMinimal">
      {item.content}
    </div>
  ))}
</div>

Semantic petals

Pre-composed token patterns.

Petals are semantic combinations of tokens — typography, spacing, cards, and interactive patterns. Apply them as single utilities for consistent, maintainable components.

What are petals?

Petals bridge individual tokens and full components. Instead of composing fontSize + lineHeight for every heading, use petal-typography-displayLarge. One class applies proven combinations.

100 petals across 13 categories

<!-- Typography: 8 levels from display to label -->
<h1 class="petal-typography-displayLarge">Hero headline</h1>
<h2 class="petal-typography-headingLarge">Section title</h2>
<h3 class="petal-typography-headingMedium">Subsection</h3>
<h4 class="petal-typography-headingSmall">Sub-subsection</h4>
<p class="petal-typography-bodyLarge">Large paragraph</p>
<p class="petal-typography-bodyRegular">Standard paragraph</p>
<p class="petal-typography-bodySmall">Small body text</p>
<span class="petal-typography-labelXs">UI label, <code>, <small></span>

<!-- Spacing: 4 comfort levels for padding/gap -->
<div class="petal-spacing-generous">Generous padding + gap</div>
<div class="petal-spacing-comfortable">Natural rhythm (default)</div>
<div class="petal-spacing-compact">Tight but breathable</div>
<div class="petal-spacing-condensed">Minimal spacing</div>

<!-- Cards: 4 surface levels with shadow and radius -->
<div class="petal-card-surfaceGenerous">Full featured</div>
<div class="petal-card-surfaceComfortable">Standard (most used)</div>
<div class="petal-card-surfaceCompact">Tight</div>
<div class="petal-card-surfaceMinimal">Subtle</div>

<!-- Interactive: Buttons and focus states -->
<button class="petal-interactive-buttonLarge">Primary action</button>
<button class="petal-interactive-buttonMedium">Standard</button>
<button class="petal-interactive-buttonSmall">Compact</button>
<div class="petal-interactive-focus">Focus ring (copy to any elem)</div>

<!-- Compositions: Pre-styled form elements -->
<input class="petal-composition-textField" placeholder="Text input" />
<span class="petal-composition-badge">Label</span>
<span class="petal-composition-chip">Dismissible ×</span>

Petals in action:

petal-typography-displayLarge
Large Display Heading
petal-interactive-buttonLarge
petal-cards-surfaceGenerous
Card with generous padding
Semantic composition for consistent spacing

Petal reference table

ClassValue / DerivationCSS output
petal-typography-displayLargefont-size: 110px, line-height: 1.2, tracking: -0.02emHero/title
petal-typography-headingLargefont-size: 68px, line-height: 1.2H2 / section title
petal-typography-headingMediumfont-size: 42px, line-height: 1.4H3 / subsection
petal-typography-headingSmallfont-size: 26px, line-height: 1.4H4 / emphasis
petal-typography-bodyLargefont-size: 18px, line-height: 1.6Lead paragraph
petal-typography-bodyRegularfont-size: 16px, line-height: 1.6Body text (default)
petal-typography-bodySmallfont-size: 14px, line-height: 1.6Small body
petal-typography-labelXsfont-size: 12px, line-height: 1.4, uppercaseLabels, small UI
petal-spacing-generousp: space-5 (32px), gap: space-4 (20px)Spacious UIs
petal-spacing-comfortablep: space-4 (20px), gap: space-3 (12px)Standard rhythm
petal-spacing-compactp: space-3 (12px), gap: space-2 (8px)Dense UIs
petal-spacing-condensedp: space-2 (8px), gap: space-1 (4px)Very tight
petal-card-surfaceGenerousp: space-5, shadow-5, radius-3Featured cards
petal-card-surfaceComfortablep: space-4, shadow-3, radius-3Standard cards
petal-card-surfaceCompactp: space-3, shadow-2, radius-2Compact cards
petal-card-surfaceMinimalp: space-2, shadow-1, radius-2Subtle surfaces
petal-interactive-buttonLargep: space-3 space-5, radius-2, transitionLarge CTAs
petal-interactive-buttonMediump: space-2 space-4, radius-2, transitionStandard buttons
petal-interactive-buttonSmallp: space-1 space-3, radius-2, transitionIcon/compact
petal-interactive-focusring-2, ring-color-border-focus, radius-1Keyboard focus
petal-composition-textFieldp: space-2 space-3, border, radius-2Text inputs
petal-composition-badgep: space-1 space-2, radius-full, font-size-xsLabels
petal-composition-chipp: space-1 space-2, radius-full, bg-accent-subtleTags/chips

Building buttons with petals

<!-- Primary button: petal + accent color -->
<button class="petal-interactive-buttonMedium bg-renge-accent text-renge-bg hover:bg-renge-accent-hover focus:ring-2 ring-renge-border-focus">
  Save changes
</button>

<!-- Secondary button: petal + subtle colors -->
<button class="petal-interactive-buttonMedium bg-renge-bg-subtle text-renge-fg hover:bg-renge-bg-muted border border-renge-border">
  Cancel
</button>

<!-- Danger button: petal + danger color -->
<button class="petal-interactive-buttonMedium bg-renge-danger text-renge-bg hover:opacity-90">
  Delete
</button>

<!-- Small compact button -->
<button class="petal-interactive-buttonSmall bg-renge-accent text-renge-bg">
  Add
</button>

<!-- Large, full-width button -->
<button class="petal-interactive-buttonLarge w-full bg-renge-accent text-renge-bg">
  Continue
</button>

Full petal reference: visit /petals to explore all 100 petals with visual previews.

Best practices

Build smarter with proportions.

Patterns and principles for scalable, maintainable Tailwind + Renge interfaces.

Start with petals, extend with utilities

Petals encode semantic intent. Use petal-typography-bodyRegular for body text, then add text-renge-fg-muted or text-renge-accent for variants. Never guess spacing or type sizes.

Use gap-renge-* for consistent rhythm

Spacing within components should follow the Fibonacci scale. gap-renge-4 inside a card is more consistent than arbitrary pixels. The scale compounds across your interface.

Compose cards from petals

<!-- ❌ Don't hardcode spacing and radius -->
<div class="p-4 rounded-lg shadow-md">...</div>

<!-- ✅ Do use card petals -->
<div class="petal-card-surfaceComfortable">...</div>

<!-- ✅ Mix petals for custom combinations -->
<div class="petal-spacing-comfortable bg-renge-bg-subtle border border-renge-border rounded-renge-3">
  ...
</div>

Profile-aware colors

Never hardcode colors. Use semantic tokens: text-renge-fg, text-renge-fg-muted, bg-renge-accent. They adapt to every color profile and dark mode.

Responsive with golden breakpoints

<!-- md: = 768px, lg: = 1024px, etc. (Fibonacci × base scale) -->
<div class="grid grid-cols-renge-1 md:grid-cols-renge-2 lg:grid-cols-renge-3 gap-renge-5">
  ...
</div>

<!-- Stack to flex-row on larger screens -->
<div class="stack md:stack-h gap-renge-4">
  ...
</div>

Motion and transitions

<!-- Renge durations are Fibonacci × 100ms: 100ms, 100ms, 200ms, 300ms, 500ms... -->
<button class="transition-colors duration-renge-2 ease-renge-ease-out hover:bg-renge-accent">
  Smooth interaction
</button>

<!-- Motion scale: duration-renge-1 through duration-renge-10 -->
<div class="transition-all duration-renge-4 ease-renge-spring">
  Springy animation
</div>

Utility reference

Complete class reference.

All available utility classes organized by category. Mix and match for infinite combinations.

Spacing (Fibonacci × 4px, steps 0–10)

<!-- Padding: p-, px-, py-, pt-, pr-, pb-, pl- -->
p-renge-0 through p-renge-10
px-renge-*, py-renge-*, pt-renge-*, etc.

<!-- Margin -->
m-renge-*, mx-renge-*, my-renge-*, mt-renge-*, etc.

<!-- Gap (flex/grid) -->
gap-renge-*, gap-x-renge-*, gap-y-renge-*

<!-- Width & Height -->
w-renge-*, h-renge-*, min-w-renge-*, max-w-renge-*, min-h-renge-*

<!-- Values: 0px, 4px, 8px, 12px, 20px, 32px, 52px, 84px, 136px, 220px -->
<div class="p-renge-4 m-renge-3 gap-renge-5">...</div>

Spacing scale demo:

gap-renge-1
gap-renge-2
gap-renge-3
gap-renge-4
gap-renge-5
gap-renge-6
gap-renge-7
gap-renge-8

Colors (22 semantic tokens)

<!-- Backgrounds -->
bg-renge-bg, bg-renge-bg-subtle, bg-renge-bg-muted, bg-renge-bg-inverse

<!-- Text (foreground) -->
text-renge-fg, text-renge-fg-subtle, text-renge-fg-muted, text-renge-fg-inverse

<!-- Borders -->
border-renge-border, border-renge-border-subtle, border-renge-border-focus

<!-- Accent (primary) -->
bg-renge-accent, bg-renge-accent-hover, bg-renge-accent-subtle

<!-- Status -->
text-renge-success, text-renge-warning, text-renge-danger, text-renge-info

<!-- Focus ring -->
ring-renge-border-focus

<div class="bg-renge-bg text-renge-fg border border-renge-border">
  <button class="bg-renge-accent text-renge-bg hover:bg-renge-accent-hover">
    CTA
  </button>
</div>

Typography (PHI scale)

<!-- Font size: text-renge-xs through text-renge-4xl -->
text-renge-xs   (10px)
text-renge-sm   (13px)
text-renge-base (16px)
text-renge-lg   (26px)
text-renge-xl   (42px)
text-renge-2xl  (68px)
text-renge-3xl  (110px)
text-renge-4xl  (177px)

<!-- Line height -->
leading-renge-xs through leading-renge-4xl

<!-- Font weight (standard Tailwind) -->
font-normal, font-semibold, font-bold

<h1 class="text-renge-3xl leading-renge-xs font-bold">Title</h1>
<p class="text-renge-base leading-renge-base">Body</p>

Typography scale demo (PHI ratio):

text-xs (10px)
Demonstrates the PHI ratio scale in typography
text-sm (13px)
Demonstrates the PHI ratio scale in typography
text-base (16px)
Demonstrates the PHI ratio scale in typography
text-lg (26px)
Demonstrates the PHI ratio scale in typography
text-xl (42px)
Demonstrates the PHI ratio scale in typography
text-2xl (68px)
Demonstrates the PHI ratio scale in typography
text-3xl (110px)
Demonstrates the PHI ratio scale in typography
text-4xl (177px)
Demonstrates the PHI ratio scale in typography

Radius (Fibonacci × 4px)

<!-- Rounded corners -->
rounded-renge-0 (0px)
rounded-renge-1 (4px)
rounded-renge-2 (8px)
rounded-renge-3 (12px)
rounded-renge-4 (20px)
rounded-renge-5 (32px)
rounded-renge-full (pill)

<!-- Directional -->
rounded-t-renge-*, rounded-r-renge-*, rounded-b-renge-*, rounded-l-renge-*
rounded-tl-renge-*, rounded-tr-renge-*, rounded-br-renge-*, rounded-bl-renge-*

<div class="rounded-renge-2">Card</div>
<div class="rounded-renge-full">Pill</div>

Border radius scale demo:

rounded-none
rounded-1
rounded-2
rounded-3
rounded-4
rounded-5
rounded-full

Motion (Fibonacci × 100ms, 10 easing curves)

<!-- Duration: duration-renge-1 through duration-renge-10 -->
duration-renge-1   (100ms)
duration-renge-2   (100ms)
duration-renge-3   (200ms)
duration-renge-4   (300ms)
duration-renge-5   (500ms)
/* ... through ... */
duration-renge-10  (5500ms)

<!-- Easing -->
ease-renge-linear, ease-renge-ease-in, ease-renge-ease-out, ease-renge-ease-in-out
ease-renge-spring, ease-renge-bounce, ease-renge-back-in, ease-renge-back-out
ease-renge-elastic-in, ease-renge-elastic-out

<div class="transition-all duration-renge-3 ease-renge-ease-out">
  Smooth animation
</div>

Layout

Layout primitives.

Stack, container, grid, flex, and aspect ratio — each derived from the PHI / Fibonacci foundation. Nothing hardcoded.

Stack

Direction-only flex containers. Compose with gap-renge-* for spacing.

stack

Item 1
Item 2
Item 3

stack-h

A
B
C
<div class="stack gap-renge-4">
  <div>Item 1</div>
  <div>Item 2</div>
</div>

<nav class="stack-h gap-renge-5">
  <a href="/">Home</a>
  <a href="/docs">Docs</a>
</nav>

<!-- Responsive direction -->
<div class="stack md:stack-h gap-renge-4"> ... </div>
ClassValue / DerivationCSS output
stackdisplay: flex; flex-direction: column
stack-hdisplay: flex; flex-direction: row

Flex

Directional flex with built-in alignment and default gap of space-3 (12px = 3 × Fibonacci base). Override with gap-renge-*.

<!-- Row: flex row, align-items center, gap space-3 -->
<div class="flex-renge-row">
  <Avatar />
  <span>Renge UI</span>
</div>

<!-- Col: flex column, align-items stretch, gap space-3 -->
<div class="flex-renge-col gap-renge-5">
  <h2>Title</h2>
  <p>Body</p>
</div>
ClassValue / DerivationCSS output
flex-renge-rowgap: space-3 (12px)display: flex; flex-direction: row; align-items: center; gap: var(--renge-space-3)
flex-renge-colgap: space-3 (12px)display: flex; flex-direction: column; align-items: stretch; gap: var(--renge-space-3)

Container

Centered max-width wrappers. Each tier is exactly φ times the previous — 200px × φⁿ.

sm
200 × φ² = 524px
md
200 × φ³ = 847px
lg
200 × φ⁴ = 1371px
xl
200 × φ⁵ = 2218px
<div class="container-renge-lg">
  <!-- max-width: 1371px · margin: auto -->
</div>

<!-- Compose with padding -->
<div class="container-renge-md px-renge-5 py-renge-7">
  <h1>Comfortable reading width.</h1>
</div>
ClassValue / DerivationCSS output
container-renge-sm200 × φ² = 524pxwidth: 100%; max-width: 524px; margin: auto
container-renge-md200 × φ³ = 847pxwidth: 100%; max-width: 847px; margin: auto
container-renge-lg200 × φ⁴ = 1371pxwidth: 100%; max-width: 1371px; margin: auto
container-renge-xl200 × φ⁵ = 2218pxwidth: 100%; max-width: 2218px; margin: auto
container-renge-full100%width: 100%; max-width: 100%; margin: auto

Grid

Fixed column counts (base-6 system) and responsive auto-fit/fill grids. Auto-fit/fill min-widths use Fibonacci[6..9] × 8px.

2
3
4
6
<!-- Fixed columns: 2, 3, 4, 6, 12 -->
<div class="grid grid-cols-renge-3 gap-renge-4">
  <Card>...</Card>
  <Card>...</Card>
  <Card>...</Card>
</div>

<!-- Responsive: collapses when viewport narrows -->
<div class="grid grid-cols-auto-fit-renge-sm gap-renge-4">
  <!-- min column width: 272px (34 × 8px) -->
</div>

<!-- Preserve empty tracks -->
<div class="grid grid-cols-auto-fill-renge-md gap-renge-5">
  <!-- min column width: 440px (55 × 8px) -->
</div>
ClassValue / DerivationCSS output
grid-cols-renge-22 equal columnsgrid-template-columns: repeat(2, minmax(0, 1fr))
grid-cols-renge-33 equal columnsgrid-template-columns: repeat(3, minmax(0, 1fr))
grid-cols-renge-44 equal columnsgrid-template-columns: repeat(4, minmax(0, 1fr))
grid-cols-renge-66 equal columnsgrid-template-columns: repeat(6, minmax(0, 1fr))
grid-cols-renge-1212 equal columnsgrid-template-columns: repeat(12, minmax(0, 1fr))
grid-cols-auto-fit-renge-xsmin 168px (21 × 8)repeat(auto-fit, minmax(168px, 1fr))
grid-cols-auto-fit-renge-smmin 272px (34 × 8)repeat(auto-fit, minmax(272px, 1fr))
grid-cols-auto-fit-renge-mdmin 440px (55 × 8)repeat(auto-fit, minmax(440px, 1fr))
grid-cols-auto-fit-renge-lgmin 712px (89 × 8)repeat(auto-fit, minmax(712px, 1fr))
grid-cols-auto-fill-renge-*same min-widthsrepeat(auto-fill, ...) — preserves empty tracks

Aspect ratio

PHI-derived ratios. golden = φ ≈ 1.618034 (Fibonacci 34:21 approximation). Values are CSS custom properties.

1:1
square
1:φ
golden
φ:1
portrait
16:9
video
4:3
classic
<!-- Golden ratio image -->
<div class="aspect-renge-golden overflow-hidden rounded-renge-3">
  <img src="/hero.jpg" class="w-full h-full object-cover" />
</div>

<!-- Widescreen video embed -->
<div class="aspect-renge-video">
  <iframe class="w-full h-full" src="..." />
</div>

<!-- Portrait card -->
<div class="aspect-renge-vertical bg-renge-bg-subtle rounded-renge-2">
  ...
</div>
ClassValue / DerivationCSS output
aspect-renge-square1aspect-ratio: var(--renge-aspect-square) → 1
aspect-renge-goldenφ ≈ 1.618aspect-ratio: var(--renge-aspect-golden) → 1.618034
aspect-renge-vertical1/φ ≈ 0.618aspect-ratio: var(--renge-aspect-vertical) → 0.618034
aspect-renge-video16/9 ≈ 1.778aspect-ratio: var(--renge-aspect-video) → 1.777778
aspect-renge-classic4/3 ≈ 1.333aspect-ratio: var(--renge-aspect-classic) → 1.333333

Token utilities

Every token, a utility.

All spacing, color, typography, motion, and radius tokens are available as Tailwind utilities. They reference CSS custom properties — profile changes update all values instantly.

<!-- Spacing (Fibonacci × 4px, steps 0–10) -->
<div class="p-renge-4 gap-renge-3 mt-renge-5">
  <!-- p = 20px (Fib 5 × 4), gap = 12px (Fib 3 × 4), mt = 32px (Fib 8 × 4) -->
</div>

<!-- Color (22 semantic tokens, profile-reactive) -->
<div class="bg-renge-bg text-renge-fg border-renge-border">
  <button class="bg-renge-accent hover:bg-renge-accent-hover
                 text-renge-fg-inverse rounded-renge-full">
    Action
  </button>
</div>

<!-- Typography (PHI scale: base × φⁿ) -->
<h1 class="text-renge-3xl leading-renge-3xl">Proportion.</h1>
<p  class="text-renge-base leading-renge-base text-renge-fg-subtle">
  Natural mathematics made visible.
</p>

<!-- Motion (Fibonacci × 100ms durations) -->
<div class="transition-colors duration-renge-2 ease-renge-ease-out">
  <!-- 200ms ease-out -->
</div>

<!-- Radius (Fibonacci × baseUnit) -->
<div class="rounded-renge-3">...</div>     <!-- 12px -->
<div class="rounded-renge-full">...</div>  <!-- pill -->

All utilities support full Tailwind variant syntax: hover:, md:, dark:, focus:, group-hover:, and arbitrary variants. Values are CSS custom properties — switch a color profile at runtime and every token updates without a rebuild or re-render.

Scale6.0