Skip to main content
@renge-ui/petals13 categories · 129 petals

Petals

Semantic composition patterns for Renge. Pre-made combinations of tokens for typography, spacing, cards, forms, navigation, overlays, and more — bridging the token system and component implementations without prescribing markup.

Renge tokens are orthogonal — each scale (spacing, color, typography) stands alone. This is powerful for fine-grained control, but consumers often compose the same combinations repeatedly. Petals codify those combinations as named, typed, documented objects.

They work in any framework. Pure CSS custom property references — no runtime, no opinion on markup.

Usage

pnpm add @renge-ui/petals
# or
npm install @renge-ui/petals
import { petals } from '@renge-ui/petals';

// Typography
const heading = petals.typography.displayLarge.tokens;
// → { fontSize: 'var(--renge-font-size-4xl)', lineHeight: 'var(--renge-line-height-4xl)' }

// Semantic alert
const alert = petals.alerts.success.tokens;
// → { padding, borderRadius, border: '1px solid var(--renge-color-success)', ... }

// Form controls
const checkbox = petals.forms.checkbox.tokens;
// → { width, height, borderRadius, border, transition }

// Overlay patterns
const dropdown = petals.overlay.dropdownMenu.tokens;
// → { padding, borderRadius, boxShadow, border, zIndex: 'var(--renge-zindex-dropdown)' }

// Combine multiple petals
const cardHeading = {
  ...petals.typography.headingMedium.tokens,
  ...petals.cards.surfaceComfortable.tokens,
  color: 'var(--renge-color-fg)',
};

Petals can be spread directly onto React, Vue, or Svelte style props, passed to a CSS-in-JS system, or mapped to CSS variables in a stylesheet.

// React
<div style={petals.alerts.danger.tokens}>Error message</div>

// Vue
<div :style="petals.forms.textarea.tokens">...</div>

// Vanilla CSS object
const sheet = Object.entries(petals.navigation.navItem.tokens)
  .map(([prop, val]) => `${prop}: ${val};`)
  .join(' ');

Why Petals?

"Every lotus blooms one petal at a time. These are Renge's. Pre-composed token combinations that sit between the math and the markup."

Petals are not components. The distinction matters:

Petals do
  • Compose tokens into semantic patterns
  • Stay framework-agnostic
  • Enable consistent token combinations
  • Document common design decisions
  • Export pure CSS custom property references
Petals don't
  • Include component logic or event handlers
  • Prescribe HTML structure
  • Create new colors or spacing values
  • Require a specific framework or bundler
  • Compile to CSS at build time

Typography

8 petals

Font size and line-height pairs derived from the PHI scale. Apply these to any text-bearing element to lock into the mathematical rhythm.

Display Large

displayLarge

Hero headline — 4xl size with generous line-height

Renge
{
  "fontSize": "var(--renge-font-size-4xl)",
  "lineHeight": "var(--renge-line-height-4xl)"
}

Display Medium

displayMedium

Page title — 3xl size with proportional line-height

Renge
{
  "fontSize": "var(--renge-font-size-3xl)",
  "lineHeight": "var(--renge-line-height-3xl)"
}

Heading Large

headingLarge

Section heading — 2xl with breathing room

Heading text
{
  "fontSize": "var(--renge-font-size-2xl)",
  "lineHeight": "var(--renge-line-height-2xl)"
}

Heading Medium

headingMedium

Subsection — xl with natural rhythm

Heading text
{
  "fontSize": "var(--renge-font-size-xl)",
  "lineHeight": "var(--renge-line-height-xl)"
}

Body Large

bodyLarge

Comfortable reading text — lg size for emphasis

The quick brown fox jumps over the lazy dog
{
  "fontSize": "var(--renge-font-size-lg)",
  "lineHeight": "var(--renge-line-height-lg)"
}

Body Regular

bodyRegular

Default body text — base size for prose

The quick brown fox jumps over the lazy dog
{
  "fontSize": "var(--renge-font-size-base)",
  "lineHeight": "var(--renge-line-height-base)"
}

Body Small

bodySm

Secondary text — sm size for captions

The quick brown fox jumps over the lazy dog
{
  "fontSize": "var(--renge-font-size-sm)",
  "lineHeight": "var(--renge-line-height-sm)"
}

Label XS

labelXs

UI label — xs size for forms and metadata

The quick brown fox jumps over the lazy dog
{
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Spacing

4 petals

Padding and gap combinations following the Fibonacci sequence. One petal sets both dimensions consistently.

Generous

generous

Maximum breathing room — space-5

Item 1
Item 2
{
  "padding": "var(--renge-space-5)",
  "gap": "var(--renge-space-4)"
}

Comfortable

comfortable

Natural spacing — space-4 with gap-3

Item 1
Item 2
{
  "padding": "var(--renge-space-4)",
  "gap": "var(--renge-space-3)"
}

Compact

compact

Tight spacing — space-3 with gap-2

Item 1
Item 2
{
  "padding": "var(--renge-space-3)",
  "gap": "var(--renge-space-2)"
}

Condensed

condensed

Minimal spacing — space-2 with gap-1

Item 1
Item 2
{
  "padding": "var(--renge-space-2)",
  "gap": "var(--renge-space-1)"
}

Cards

4 petals

Surface styling with padding, radius, and shadow elevation. Four levels from generous to minimal.

Surface Generous

surfaceGenerous

Full-featured card — max padding, radius, and shadow

Card Title
Surface styled with surfaceGenerous.
{
  "padding": "var(--renge-space-5)",
  "borderRadius": "var(--renge-radius-5)",
  "boxShadow": "var(--renge-shadow-layer-2)"
}

Surface Comfortable

surfaceComfortable

Standard card — balanced padding and elevation

Card Title
Surface styled with surfaceComfortable.
{
  "padding": "var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-4)",
  "boxShadow": "var(--renge-shadow-layer-1)"
}

Surface Compact

surfaceCompact

Tight card — reduced padding, softer corners

Card Title
Surface styled with surfaceCompact.
{
  "padding": "var(--renge-space-3)",
  "borderRadius": "var(--renge-radius-3)",
  "boxShadow": "var(--renge-shadow-layer-1)"
}

Surface Minimal

surfaceMinimal

Subtle container — minimal padding, no shadow

Card Title
Surface styled with surfaceMinimal.
{
  "padding": "var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-2)",
  "boxShadow": "none"
}

Interactive

7 petals

Button sizing and focus indicator. Padding, radius, and transition timing in one application.

Button Large

buttonLarge

Primary action button — generous padding, prominent radius

{
  "padding": "var(--renge-space-3) var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "transition": "all var(--renge-duration-2) var(--renge-easing-ease-out)"
}

Button Medium

buttonMedium

Standard button — balanced padding and radius

{
  "padding": "var(--renge-space-2) var(--renge-space-3)",
  "borderRadius": "var(--renge-radius-2)",
  "transition": "all var(--renge-duration-2) var(--renge-easing-ease-out)"
}

Button Small

buttonSmall

Compact button — minimal padding, subtle corners

{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-1)",
  "transition": "all var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Focus State

focus

Keyboard focus ring — 3px accent glow via color-mix, WCAG-compliant

unfocused
Input
:focus
Input
{
  "outline": "none",
  "boxShadow": "var(--renge-shadow-focus)",
  "transition": "box-shadow var(--renge-duration-2) var(--renge-easing-ease-out)"
}

Hover Surface

hoverSurface

Subtle background shift on pointer entry — bg-subtle with ease-out

Dashboard
Analytics:hover
Settings
Team
{
  "background": "var(--renge-color-bg-subtle)",
  "transition": "background var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Active Surface

activeSurface

Pressed/active state background — bg-muted, slightly deeper than hover

Dashboard
Analytics
Settings:active
Team
{
  "background": "var(--renge-color-bg-muted)",
  "transition": "background var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Interactive Base

interactiveBase

Full set of interaction state transitions — background, box-shadow, and transform with Renge easing

default
Button
:hover
Button
:active
Button
:focus
Button
{
  "transition": "background var(--renge-duration-1) var(--renge-easing-ease-out), box-shadow var(--renge-duration-2) var(--renge-easing-ease-out), transform var(--renge-duration-1) var(--renge-easing-spring)"
}

Compositions

7 petals

Higher-level patterns combining multiple token types — text fields, badges, and chips.

Text Field

textField

Input field styling — padding, radius, border, transition

{
  "padding": "var(--renge-space-2) var(--renge-space-3)",
  "borderRadius": "var(--renge-radius-2)",
  "border": "1px solid var(--renge-color-border)",
  "transition": "all var(--renge-duration-2) var(--renge-easing-ease-out)"
}

Badge

badge

Compact label — tight padding with condensed spacing

Badge
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-full)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Chip

chip

Dismissible tag — small padding with focus support

Chip ×
{
  "padding": "var(--renge-space-1) var(--renge-space-3)",
  "borderRadius": "var(--renge-radius-full)",
  "fontSize": "var(--renge-font-size-sm)",
  "lineHeight": "var(--renge-line-height-sm)"
}

Hero Layout

heroSection

Large-viewport landing section — generous vertical padding with centered content max-width

Hero Headline
Supporting subtitle text here
Get started
{
  "paddingTop": "var(--renge-space-8)",
  "paddingBottom": "var(--renge-space-8)",
  "paddingLeft": "var(--renge-space-5)",
  "paddingRight": "var(--renge-space-5)",
  "maxWidth": "var(--renge-container-lg)"
}

Stat Grid

statGrid

2–4 metric grid — gap derived from Fibonacci with comfortable card padding

24.9K
Users
$48.2K
Revenue
98.1%
Uptime
1.2s
Load time
{
  "display": "grid",
  "gap": "var(--renge-space-5)",
  "padding": "var(--renge-space-4)"
}

Form Section

formSection

Vertical-rhythm form layout — label group → inputs → submit with PHI-spaced gap

{
  "display": "flex",
  "flexDirection": "column",
  "gap": "var(--renge-space-5)",
  "padding": "var(--renge-space-5)"
}

Data Row

dataRow

Label + value pair for detail views — horizontal layout with tight vertical padding

Full nameJane Smith
Emailjane@example.com
PlanPro
Member sinceJan 2024
{
  "display": "flex",
  "justifyContent": "space-between",
  "alignItems": "baseline",
  "gap": "var(--renge-space-4)",
  "paddingTop": "var(--renge-space-3)",
  "paddingBottom": "var(--renge-space-3)",
  "borderBottom": "1px solid var(--renge-color-border-subtle)"
}

Alerts

5 petals

Semantic feedback containers. Five variants (success, warning, danger, info, neutral) each carrying border color, background, and padding.

Alert — Success

success

Positive feedback container — success border with subtle fill

Alert — Success
This is a notification message with relevant context.
{
  "padding": "var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "border": "1px solid var(--renge-color-success)",
  "backgroundColor": "var(--renge-color-success-subtle)",
  "color": "var(--renge-color-fg)"
}

Alert — Warning

warning

Caution container — warning border with subtle fill

Alert — Warning
This is a notification message with relevant context.
{
  "padding": "var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "border": "1px solid var(--renge-color-warning)",
  "backgroundColor": "var(--renge-color-warning-subtle)",
  "color": "var(--renge-color-fg)"
}

Alert — Danger

danger

Error container — danger border with subtle fill

Alert — Danger
This is a notification message with relevant context.
{
  "padding": "var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "border": "1px solid var(--renge-color-danger)",
  "backgroundColor": "var(--renge-color-danger-subtle)",
  "color": "var(--renge-color-fg)"
}

Alert — Info

info

Informational container — info border with subtle fill

Alert — Info
This is a notification message with relevant context.
{
  "padding": "var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "border": "1px solid var(--renge-color-info)",
  "backgroundColor": "var(--renge-color-info-subtle)",
  "color": "var(--renge-color-fg)"
}

Alert — Neutral

neutral

Default notification container — subtle border and background

Alert — Neutral
This is a notification message with relevant context.
{
  "padding": "var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "border": "1px solid var(--renge-color-border)",
  "backgroundColor": "var(--renge-color-bg-subtle)",
  "color": "var(--renge-color-fg)"
}

Overlay

9 petals

Floating elements above the document flow. Modals, drawers, dropdowns, tooltips, and popovers with z-index tokens baked in.

Modal Backdrop

modalBackdrop

Dimming overlay behind modals — inverse surface color

backdrop dimming
{
  "backgroundColor": "var(--renge-color-bg-inverse)",
  "zIndex": "var(--renge-zindex-modal)"
}

Modal Container

modalContainer

Dialog surface — elevated card with generous padding

Modal Container
Floating content surface
{
  "padding": "var(--renge-space-6)",
  "borderRadius": "var(--renge-radius-4)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-3)",
  "zIndex": "var(--renge-zindex-modal)"
}

Modal Header

modalHeader

Dialog title area — bottom border separating from body

Dialog Title
{
  "padding": "var(--renge-space-4) var(--renge-space-6)",
  "borderBottom": "1px solid var(--renge-color-border-subtle)",
  "fontSize": "var(--renge-font-size-lg)",
  "lineHeight": "var(--renge-line-height-lg)"
}

Modal Footer

modalFooter

Dialog action area — top border separating from body

{
  "padding": "var(--renge-space-4) var(--renge-space-6)",
  "borderTop": "1px solid var(--renge-color-border-subtle)",
  "gap": "var(--renge-space-3)"
}

Drawer Panel

drawerPanel

Slide-in panel — full-height surface with heavy elevation

Drawer Panel
Floating content surface
{
  "padding": "var(--renge-space-5)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-3)",
  "zIndex": "var(--renge-zindex-modal)"
}

Dropdown Menu

dropdownMenu

Floating menu container — card surface with tight inner padding

Edit
Duplicate
Delete
{
  "padding": "var(--renge-space-1)",
  "borderRadius": "var(--renge-radius-3)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-2)",
  "border": "1px solid var(--renge-color-border-subtle)",
  "zIndex": "var(--renge-zindex-dropdown)"
}

Dropdown Item

dropdownItem

Menu list entry — compact padding with hover transition

Edit
Duplicate
Archive
{
  "padding": "var(--renge-space-2) var(--renge-space-3)",
  "borderRadius": "var(--renge-radius-2)",
  "fontSize": "var(--renge-font-size-sm)",
  "lineHeight": "var(--renge-line-height-sm)",
  "transition": "background-color var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Tooltip

tooltip

Small informational bubble — inverse surface, condensed type

Helpful tooltip text
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-1)",
  "backgroundColor": "var(--renge-color-bg-inverse)",
  "color": "var(--renge-color-fg-inverse)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)",
  "boxShadow": "var(--renge-shadow-layer-1)",
  "zIndex": "var(--renge-zindex-toast)"
}

Popover

popover

Rich floating content — card surface with comfortable padding

Popover
Floating content surface
{
  "padding": "var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-2)",
  "border": "1px solid var(--renge-color-border-subtle)",
  "zIndex": "var(--renge-zindex-dropdown)"
}

Forms

16 petals

Every form control beyond text input — checkboxes, radios, toggles, range sliders, selects, textareas, file inputs, and star ratings.

Checkbox

checkbox

Square form control — compact sizing with subtly rounded corners

{
  "width": "var(--renge-h-4)",
  "height": "var(--renge-h-4)",
  "borderRadius": "var(--renge-radius-1)",
  "border": "1.5px solid var(--renge-color-border)",
  "transition": "all var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Checkbox — Checked

checkboxChecked

Active checkbox state — accent fill and border

{
  "backgroundColor": "var(--renge-color-accent)",
  "borderColor": "var(--renge-color-accent)"
}

Radio Button

radio

Circular form control — compact sizing with full radius

{
  "width": "var(--renge-h-4)",
  "height": "var(--renge-h-4)",
  "borderRadius": "var(--renge-radius-full)",
  "border": "1.5px solid var(--renge-color-border)",
  "transition": "all var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Radio Button — Checked

radioChecked

Active radio state — accent outer ring with inset dot

{
  "borderColor": "var(--renge-color-accent)",
  "boxShadow": "inset 0 0 0 3px var(--renge-color-accent)"
}

Toggle Track

toggle

Switch track — pill wider than tall, PHI-proportioned

{
  "width": "var(--renge-h-8)",
  "height": "var(--renge-h-4)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg-muted)",
  "transition": "background-color var(--renge-duration-2) var(--renge-easing-ease-out)"
}

Toggle Track — Active

toggleActive

On state for the switch track — accent fill

{
  "backgroundColor": "var(--renge-color-accent)"
}

Toggle Thumb

toggleThumb

Switch handle — circle that slides within the track

{
  "width": "var(--renge-h-3)",
  "height": "var(--renge-h-3)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-1)",
  "transition": "transform var(--renge-duration-2) var(--renge-easing-ease-out)"
}

Range Track

rangeTrack

Slider rail — thin pill on muted background

{
  "height": "var(--renge-h-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg-muted)"
}

Range Fill

rangeFill

Filled portion of slider track — accent color

{
  "height": "var(--renge-h-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-accent)"
}

Range Thumb

rangeThumb

Slider handle — elevated circle with focus shadow support

{
  "width": "var(--renge-h-5)",
  "height": "var(--renge-h-5)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-accent)",
  "boxShadow": "var(--renge-shadow-layer-1)",
  "transition": "box-shadow var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Select

select

Dropdown select — textField base with explicit background

{
  "padding": "var(--renge-space-2) var(--renge-space-3)",
  "borderRadius": "var(--renge-radius-2)",
  "border": "1px solid var(--renge-color-border)",
  "backgroundColor": "var(--renge-color-bg)",
  "fontSize": "var(--renge-font-size-base)",
  "transition": "all var(--renge-duration-2) var(--renge-easing-ease-out)"
}

Textarea

textarea

Multi-line text area — textField base with minimum height

{
  "padding": "var(--renge-space-2) var(--renge-space-3)",
  "borderRadius": "var(--renge-radius-2)",
  "border": "1px solid var(--renge-color-border)",
  "minHeight": "var(--renge-h-8)",
  "fontSize": "var(--renge-font-size-base)",
  "lineHeight": "var(--renge-line-height-base)",
  "transition": "all var(--renge-duration-2) var(--renge-easing-ease-out)"
}

File Input

fileInput

File upload target — dashed border drop zone

Drag & drop files, or click to browse
{
  "padding": "var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "border": "1.5px dashed var(--renge-color-border)",
  "backgroundColor": "var(--renge-color-bg-subtle)",
  "fontSize": "var(--renge-font-size-sm)",
  "transition": "all var(--renge-duration-2) var(--renge-easing-ease-out)"
}

File Input — Drag Active

fileInputActive

File drop zone while dragging — accent border and background

Release to upload
{
  "border": "1.5px dashed var(--renge-color-accent)",
  "backgroundColor": "var(--renge-color-accent-subtle)"
}

Rating

rating

Filled star rating item — warning color

{
  "color": "var(--renge-color-warning)",
  "fontSize": "var(--renge-font-size-xl)",
  "lineHeight": "var(--renge-line-height-xl)",
  "transition": "color var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Rating — Empty

ratingEmpty

Unfilled star — muted color

{
  "color": "var(--renge-color-bg-muted)",
  "fontSize": "var(--renge-font-size-xl)",
  "lineHeight": "var(--renge-line-height-xl)"
}

Feedback

10 petals

Loading states, progress bars, skeleton loaders, and toast notifications. UI state rather than content.

Skeleton

skeleton

Block loading placeholder — muted background for shapes

{
  "backgroundColor": "var(--renge-color-bg-muted)",
  "borderRadius": "var(--renge-radius-2)"
}

Skeleton Text

skeletonText

Inline text placeholder — pill shape matching body line-height

{
  "backgroundColor": "var(--renge-color-bg-muted)",
  "borderRadius": "var(--renge-radius-full)",
  "height": "var(--renge-h-3)"
}

Skeleton Avatar

skeletonAvatar

Circular avatar placeholder

{
  "width": "var(--renge-h-8)",
  "height": "var(--renge-h-8)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg-muted)"
}

Progress Track

progressTrack

Progress bar rail — thin muted pill

Loading… 60%
{
  "height": "var(--renge-h-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg-muted)"
}

Progress Fill

progressFill

Progress bar fill — accent color with smooth transition

Loading… 60%
{
  "height": "var(--renge-h-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-accent)",
  "transition": "width var(--renge-duration-3) var(--renge-easing-ease-out)"
}

Progress Fill — Success

progressSuccess

Completed progress — success color fill

Loading… 60%
{
  "height": "var(--renge-h-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-success)",
  "transition": "width var(--renge-duration-3) var(--renge-easing-ease-out)"
}

Toast

toast

Notification message — elevated surface, compact padding

Notification
Brief context message for the user.
{
  "padding": "var(--renge-space-3) var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-2)",
  "border": "1px solid var(--renge-color-border-subtle)",
  "fontSize": "var(--renge-font-size-sm)",
  "zIndex": "var(--renge-zindex-toast)"
}

Toast — Success

toastSuccess

Positive notification — left success accent border

Saved successfully
Brief context message for the user.
{
  "padding": "var(--renge-space-3) var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-2)",
  "borderLeft": "4px solid var(--renge-color-success)",
  "fontSize": "var(--renge-font-size-sm)",
  "zIndex": "var(--renge-zindex-toast)"
}

Toast — Warning

toastWarning

Caution notification — left warning accent border

Disk space low
Brief context message for the user.
{
  "padding": "var(--renge-space-3) var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-2)",
  "borderLeft": "4px solid var(--renge-color-warning)",
  "fontSize": "var(--renge-font-size-sm)",
  "zIndex": "var(--renge-zindex-toast)"
}

Toast — Danger

toastDanger

Error notification — left danger accent border

Something went wrong
Brief context message for the user.
{
  "padding": "var(--renge-space-3) var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "backgroundColor": "var(--renge-color-bg)",
  "boxShadow": "var(--renge-shadow-layer-2)",
  "borderLeft": "4px solid var(--renge-color-danger)",
  "fontSize": "var(--renge-font-size-sm)",
  "zIndex": "var(--renge-zindex-toast)"
}

Data Display

19 petals

Tables, stats, avatars, chat bubbles, timelines, and accordions. The visual rhythm of structured information.

Table

tableRoot

Table container — full width with body-size typography

Name
Status
Amount
Alice
Active
$120
Bob
Pending
$80
{
  "width": "var(--renge-w-full)",
  "fontSize": "var(--renge-font-size-sm)",
  "lineHeight": "var(--renge-line-height-sm)"
}

Table Header Cell

tableHeader

Column heading — condensed type, bottom border, muted color

Name
Status
Amount
Alice
Active
$120
Bob
Pending
$80
{
  "padding": "var(--renge-space-2) var(--renge-space-3)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)",
  "color": "var(--renge-color-fg-subtle)",
  "borderBottom": "1px solid var(--renge-color-border)"
}

Table Cell

tableCell

Data cell — comfortable padding with subtle row separator

Name
Status
Amount
Alice
Active
$120
Bob
Pending
$80
{
  "padding": "var(--renge-space-3)",
  "borderBottom": "1px solid var(--renge-color-border-subtle)",
  "fontSize": "var(--renge-font-size-sm)",
  "lineHeight": "var(--renge-line-height-sm)"
}

Table Row — Stripe

tableRowStripe

Alternating row background for scan-ability

Name
Status
Amount
Alice
Active
$120
Bob
Pending
$80
{
  "backgroundColor": "var(--renge-color-bg-subtle)"
}

Table Row — Hover

tableRowHover

Interactive row highlight on pointer entry

Name
Status
Amount
Alice
Active
$120
Bob
Pending
$80
{
  "backgroundColor": "var(--renge-color-bg-subtle)",
  "transition": "background-color var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Stat

statRoot

Metric container — comfortable padding, column layout gap

Monthly Revenue
$24,890
↑ 12% from last month
{
  "padding": "var(--renge-space-4)",
  "gap": "var(--renge-space-2)"
}

Stat Value

statValue

Primary metric — large, prominent number

Monthly Revenue
$24,890
↑ 12% from last month
{
  "fontSize": "var(--renge-font-size-3xl)",
  "lineHeight": "var(--renge-line-height-3xl)",
  "color": "var(--renge-color-fg)"
}

Stat Label

statLabel

Metric name — condensed, subdued

Monthly Revenue
$24,890
↑ 12% from last month
{
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)",
  "color": "var(--renge-color-fg-subtle)"
}

Stat Description

statDesc

Secondary context beneath the metric — muted

Monthly Revenue
$24,890
↑ 12% from last month
{
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)",
  "color": "var(--renge-color-fg-muted)"
}

Avatar — Small

avatarSm

Compact user avatar — small circle

JD
JD
JD
{
  "width": "var(--renge-h-6)",
  "height": "var(--renge-h-6)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg-muted)",
  "fontSize": "var(--renge-font-size-xs)"
}

Avatar — Medium

avatarMd

Standard user avatar — comfortable circle

JD
JD
JD
{
  "width": "var(--renge-h-8)",
  "height": "var(--renge-h-8)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg-muted)",
  "fontSize": "var(--renge-font-size-sm)"
}

Avatar — Large

avatarLg

Profile-size avatar — generous circle

JD
JD
JD
{
  "width": "var(--renge-h-10)",
  "height": "var(--renge-h-10)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg-muted)",
  "fontSize": "var(--renge-font-size-lg)"
}

Chat Bubble

chatBubble

Incoming message — subtle background, readable padding

Hey, how's it going?
Pretty great, thanks!
{
  "padding": "var(--renge-space-2) var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "backgroundColor": "var(--renge-color-bg-subtle)",
  "color": "var(--renge-color-fg)",
  "fontSize": "var(--renge-font-size-base)",
  "lineHeight": "var(--renge-line-height-base)"
}

Chat Bubble — Own

chatBubbleOwn

Outgoing message — accent background with inverse text

Hey, how's it going?
Pretty great, thanks!
{
  "padding": "var(--renge-space-2) var(--renge-space-4)",
  "borderRadius": "var(--renge-radius-3)",
  "backgroundColor": "var(--renge-color-accent)",
  "color": "var(--renge-color-fg-inverse)",
  "fontSize": "var(--renge-font-size-base)",
  "lineHeight": "var(--renge-line-height-base)"
}

Timeline Connector

timelineConnector

Vertical rule connecting timeline nodes

Shipped
In transit
Ordered
{
  "width": "1px",
  "backgroundColor": "var(--renge-color-border)"
}

Timeline Dot

timelineDot

Node indicator — compact filled circle on connector

Shipped
In transit
Ordered
{
  "width": "var(--renge-h-3)",
  "height": "var(--renge-h-3)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-accent)",
  "border": "2px solid var(--renge-color-bg)"
}

Timeline Label

timelineLabel

Time or title beside a node — condensed, muted

Shipped
In transit
Ordered
{
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)",
  "color": "var(--renge-color-fg-subtle)"
}

Accordion Trigger

accordionTrigger

Expandable section header — standard interactive padding

What are petals?
Semantic token compositions for Renge. Pre-made combinations that bridge tokens and components.
{
  "padding": "var(--renge-space-3) var(--renge-space-4)",
  "fontSize": "var(--renge-font-size-base)",
  "lineHeight": "var(--renge-line-height-base)",
  "borderBottom": "1px solid var(--renge-color-border-subtle)",
  "transition": "background-color var(--renge-duration-1) var(--renge-easing-ease-out)"
}

Accordion Content

accordionContent

Expandable section body — comfortable padding, subtle background

What are petals?
Semantic token compositions for Renge. Pre-made combinations that bridge tokens and components.
{
  "padding": "var(--renge-space-4)",
  "backgroundColor": "var(--renge-color-bg-subtle)",
  "fontSize": "var(--renge-font-size-sm)",
  "lineHeight": "var(--renge-line-height-sm)"
}

Layout

14 petals

Page-level structure — heroes, footers, dividers, indicators, join groups, sections, and container widths.

Hero

heroRoot

Full-width banner section — generous vertical padding

Hero Headline
Supporting subtext beneath
{
  "padding": "var(--renge-space-8) var(--renge-space-5)"
}

Hero Content

heroContent

Hero inner container — constrained max-width

Hero inner container — constrained max-width
{
  "maxWidth": "var(--renge-container-lg)"
}

Footer

footerRoot

Page footer — inverse surface with generous padding

© 2025 RengeBuilt with Renge
{
  "padding": "var(--renge-space-7) var(--renge-space-5)",
  "backgroundColor": "var(--renge-color-bg-inverse)",
  "color": "var(--renge-color-fg-inverse)"
}

Footer Section

footerSection

Footer link group — compact vertical gap

Footer link group — compact vertical gap
{
  "gap": "var(--renge-space-3)",
  "fontSize": "var(--renge-font-size-sm)",
  "lineHeight": "var(--renge-line-height-sm)"
}

Divider

divider

Horizontal separator — 1px rule with vertical margin

Content above
Content below
{
  "height": "1px",
  "backgroundColor": "var(--renge-color-border-subtle)",
  "margin": "var(--renge-space-3) 0"
}

Divider — Vertical

dividerVertical

Vertical separator — 1px rule for inline separation

Left
Right
{
  "width": "1px",
  "backgroundColor": "var(--renge-color-border-subtle)",
  "margin": "0 var(--renge-space-3)"
}

Indicator

indicator

Status badge overlay — small accent circle

🔔
Status dot
{
  "width": "var(--renge-h-2)",
  "height": "var(--renge-h-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-accent)",
  "border": "2px solid var(--renge-color-bg)"
}

Indicator — Danger

indicatorDanger

Error or unread dot indicator — danger color

🔔
Status dot
{
  "width": "var(--renge-h-2)",
  "height": "var(--renge-h-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-danger)",
  "border": "2px solid var(--renge-color-bg)"
}

Join Group

joinGroup

Connected element group — zero gap, shared outer border-radius

{
  "gap": "var(--renge-space-0)",
  "border": "1px solid var(--renge-color-border)",
  "borderRadius": "var(--renge-radius-2)"
}

Section

sectionRoot

Content section — vertical padding for page rhythm

Content section — vertical padding for page rhythm
{
  "padding": "var(--renge-space-6) var(--renge-space-5)"
}

Section Header

sectionHeader

Section heading block — bottom margin before content

Section heading block — bottom margin before content
{
  "marginBottom": "var(--renge-space-5)",
  "gap": "var(--renge-space-2)"
}

Container — Small

containerSm

Narrow constrained layout — small max-width

max-width: var(--renge-container-sm)
{
  "maxWidth": "var(--renge-container-sm)"
}

Container — Medium

containerMd

Standard constrained layout — medium max-width

max-width: var(--renge-container-md)
{
  "maxWidth": "var(--renge-container-md)"
}

Container — Large

containerLg

Wide constrained layout — large max-width

max-width: var(--renge-container-lg)
{
  "maxWidth": "var(--renge-container-lg)"
}

Decoration

14 petals

Badge variants (7), keyboard keys, countdown displays, diff views, and clip masks.

Badge — Solid

badgeSolid

Filled badge — accent background with inverse text

Solid
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-accent)",
  "color": "var(--renge-color-fg-inverse)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Badge — Outline

badgeOutline

Bordered badge — accent ring with transparent fill

Outline
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-full)",
  "border": "1px solid var(--renge-color-accent)",
  "color": "var(--renge-color-accent)",
  "backgroundColor": "transparent",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Badge — Subtle

badgeSubtle

Soft badge — accent subtle background with accent text

Subtle
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-accent-subtle)",
  "color": "var(--renge-color-accent)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Badge — Success

badgeSuccess

Positive status badge — success colors

Success
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-success-subtle)",
  "color": "var(--renge-color-success)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Badge — Warning

badgeWarning

Caution status badge — warning colors

Warning
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-warning-subtle)",
  "color": "var(--renge-color-warning)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Badge — Danger

badgeDanger

Error status badge — danger colors

Danger
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-danger-subtle)",
  "color": "var(--renge-color-danger)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Badge — Neutral

badgeNeutral

Default label — muted background, subtle text

Neutral
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-full)",
  "backgroundColor": "var(--renge-color-bg-muted)",
  "color": "var(--renge-color-fg-subtle)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Kbd

kbd

Keyboard key — inset shadow, condensed label

PressKto open
{
  "padding": "var(--renge-space-1) var(--renge-space-2)",
  "borderRadius": "var(--renge-radius-1)",
  "backgroundColor": "var(--renge-color-bg-subtle)",
  "border": "1px solid var(--renge-color-border)",
  "boxShadow": "var(--renge-shadow-inset)",
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)"
}

Countdown Value

countdownValue

Ticking numeric display — large tabular figures

08hours
23mins
42secs
{
  "fontSize": "var(--renge-font-size-3xl)",
  "lineHeight": "var(--renge-line-height-3xl)",
  "color": "var(--renge-color-fg)"
}

Countdown Label

countdownLabel

Unit label beneath countdown value — condensed, muted

08hours
23mins
42secs
{
  "fontSize": "var(--renge-font-size-xs)",
  "lineHeight": "var(--renge-line-height-xs)",
  "color": "var(--renge-color-fg-subtle)"
}

Diff — Added

diffAdded

Added line in a diff view — success subtle background

- const spacing = 8;
+ const spacing = 'var(--renge-space-3)';
{
  "backgroundColor": "var(--renge-color-success-subtle)",
  "color": "var(--renge-color-success)",
  "padding": "0 var(--renge-space-2)"
}

Diff — Removed

diffRemoved

Removed line in a diff view — danger subtle background

- const spacing = 8;
+ const spacing = 'var(--renge-space-3)';
{
  "backgroundColor": "var(--renge-color-danger-subtle)",
  "color": "var(--renge-color-danger)",
  "padding": "0 var(--renge-space-2)"
}

Mask — Circle

maskCircle

Circular clip mask — full radius, overflow hidden

circular clip
{
  "borderRadius": "var(--renge-radius-full)",
  "overflow": "hidden"
}

Mask — Squircle

maskSquircle

Rounded-square clip mask — large radius, overflow hidden

squircle clip
{
  "borderRadius": "var(--renge-radius-4)",
  "overflow": "hidden"
}
Scale6.0