Aesthetium

Aesthetium

A classless CSS framework driven by design tokens. Drop in the stylesheet, write semantic HTML, and add expressive attributes when you need variants. No class names. No build step.

<link rel="stylesheet" href="aesthetium.css">

Typography

Heading 1 — The quick brown fox

Heading 2 — The quick brown fox

Heading 3 — The quick brown fox

Body copy. Aesthetium is designed with a deliberately constrained palette and a healthy dose of whitespace. Typography should be invisible — the reader should notice the content, not the design.

Links look like this anchor. They use the accent color and fade on hover. Bold text for emphasis, italics for tone, small text for metadata, deleted content, and highlighted passages.

Good design is as little design as possible. — Dieter Rams

Inline code: const x = 42. For longer snippets use a <pre> block:

/* Override the accent color to match your brand */
:root {
  --color-accent:    #6d28d9;
  --color-accent-fg: #ffffff;
}

Lists

  • Classless by default
  • Token-driven theming
  • Semantic HTML first
    • Nested lists work
    • As expected
  • Attribute variants
  1. Write semantic HTML
  2. Link the stylesheet
  3. Override tokens as needed
  4. Ship it

Colors

The palette is neutral by default. Override --color-accent to apply your brand. Positive, negative, and alert accents are pre-defined.

Surface stack — light

Depth in light mode: white cards sit on a near-white page. Shadows complete the separation.

page
bg
surface
surface‑2
border
muted
text

Shadow scale

sm
md
lg
xl

Semantic accents

accent
positive
negative
alert

Neutral scale

50
100
200
300
400
500
600
700
800
900

Badges

accent default positive negative alert

Buttons

Buttons are styled by attribute, not class. The default is a neutral secondary button. Add highlight for a primary action.

Variants

Sizes

Shapes

Markup

<button>Default</button>
<button highlight>Call to Action</button>
<button ghost>Ghost</button>
<button positive>Confirm</button>
<button negative>Delete</button>
<button alert>Warning</button>
<button small pill>Small Pill</button>

Forms

Account details
Looks good.
Please enter a valid email address.

Progress

Components

Callouts

Disclosure

What is a classless framework?

A classless framework styles native HTML elements directly. You write semantic markup — <button>, <table>, <nav> — and the framework makes it look good without any class names.

How do I add my brand color?

Override --color-accent and --color-accent-fg in your own stylesheet or a <style> block after the framework import:

:root {
  --color-accent:    #6d28d9;
  --color-accent-fg: #ffffff;
}
Can I use custom fonts?

Yes. Override --font-heading and --font-body with any font stack you prefer. Load the font yourself via @import or a <link> tag.

Table

Token Default Purpose Status
--color-accent #000000 CTA buttons, links, focus rings core
--color-positive #16a34a Success states, confirm actions semantic
--color-negative #dc2626 Errors, destructive actions semantic
--color-alert #d97706 Warnings, expiring states semantic
--font-heading 'Inter' All heading elements type

Articles

Article card

The <article> element gets a surface background, border, and rounded corners. Useful for cards, posts, or any contained content unit.

Draft

Customizing & Token Reference

All tokens are defined as CSS variables in system.css. For customization override any at the :root level in your own stylesheet.

Colors — Surfaces

VariableDefault (light)Description
--color-page#fafafaPage shell background
--color-bg#ffffffCards, inputs, dialogs
--color-surface#f5f5f5Inset elements, table headers
--color-surface-2#ebebebHover states, nested surfaces
--color-border#d4d4d4Borders and dividers
--color-text#171717Primary text
--color-muted#737373Secondary / de-emphasized text

Colors — Accent

VariableDefaultDescription
--color-accent#000000CTAs, links, focus rings — override with your brand color
--color-accent-fg#ffffffText on accent backgrounds

Colors — Semantic

VariableDefaultDescription
--color-positive#16a34aSuccess states, confirm actions
--color-positive-fg#ffffffText on positive backgrounds
--color-negative#dc2626Errors, destructive actions
--color-negative-fg#ffffffText on negative backgrounds
--color-alert#d97706Warnings, expiring states
--color-alert-fg#ffffffText on alert backgrounds

Colors — Neutral scale

VariableValue
--gray-50#fafafa
--gray-100#f5f5f5
--gray-200#ebebeb
--gray-300#d4d4d4
--gray-400#a3a3a3
--gray-500#737373
--gray-600#525252
--gray-700#404040
--gray-800#262626
--gray-900#171717

Typography — Fonts

VariableDefaultDescription
--font-heading'Inter', system-ui, sans-serifh1–h6
--font-body'Inter', system-ui, sans-serifBody text
--font-monoui-monospace, 'JetBrains Mono'Code blocks

Typography — Type scale

VariableValuepx
--text-xs0.75rem12px
--text-sm0.875rem14px
--text-base1rem16px
--text-lg1.125rem18px
--text-xl1.25rem20px
--text-2xl1.5rem24px
--text-3xl1.875rem30px
--text-4xl2.25rem36px
--text-5xl3rem48px

Typography — Leading

VariableValue
--leading-tight1.25
--leading-normal1.65
--leading-loose1.8

Spacing

VariableValuepx
--space-10.25rem4px
--space-20.5rem8px
--space-30.75rem12px
--space-41rem16px
--space-51.25rem20px
--space-61.5rem24px
--space-82rem32px
--space-102.5rem40px
--space-123rem48px
--space-164rem64px
--space-205rem80px

Border radius

VariableValue
--radius-sm0.25rem
--radius0.4rem
--radius-lg0.75rem
--radius-xl1.25rem
--radius-full9999px

Motion

VariableValue
--duration-fast100ms
--duration150ms
--duration-slow250ms
--easeease

Shadows

VariableDescription
--shadow-smSubtle — cards, inputs
--shadowMedium — dropdowns, popovers
--shadow-lgLarge — floating panels
--shadow-xlExtra large — dialogs, modals

Layout

VariableDefaultDescription
--container-width72remMax width of the page layout
--content-width68chMax width of text paragraphs