"Less is pure"

A minimalist design system built with pure HTML5 and CSS. Zero JavaScript. Maximum accessibility. Inspired by the purest water on Earth: Antarctic ice.


Manifesto

The modern web is drowning in complexity. Megabytes of JavaScript for a button. Build tools for build tools. Dependencies upon dependencies.

Purissimo is a return to essence.

Simplicity

Less code means less energy, faster loads, and a longer lifespan. The web platform is enough.

Accessibility

If it doesn't work for everyone, it doesn't work. WCAG 2.1 AA as a baseline, not an afterthought.

Sustainability

Minimal footprint. No build steps. No runtime dependencies. Pure, long-lasting CSS.


Principles

Purity

No JavaScript in components. If it can be done with HTML and CSS, it will be.

Clarity

Clean visual language. Every element has purpose. Nothing decorative without function.

Lightness

Minimal footprint. Fast loading. Low energy consumption.

Accessibility

WCAG 2.1 AA compliance minimum. Respects user preferences for motion and contrast.

Transparency

Open process. Documented decisions. Visible design tokens.

AI-Friendly

Consistent patterns that AI tools can understand and generate correctly.


Components

Live examples using Purissimo itself. All components work with pure HTML and CSS.

Buttons

Use buttons for actions. Choose the variant that matches the importance of the action. All buttons support hover, focus, active, and disabled states. Accessible via keyboard (Enter / Space).

<button class="btn btn--primary">Primary</button>
<button class="btn btn--secondary">Secondary</button>
<button class="btn btn--ghost">Ghost</button>
<button class="btn btn--primary btn--sm">Small</button>
<button class="btn btn--primary btn--lg">Large</button>
<button class="btn btn--primary" disabled>Disabled</button>

Styled links for different contexts: default for inline content, subtle for secondary navigation, nav for primary navigation with active-page support via aria-current.

<a href="#" class="link">Default link</a>
<a href="#" class="link link--subtle">Subtle link</a>
<a href="#" class="link link--nav">Nav link</a>

Forms

Complete form system with labels, inputs, textareas, selects, hints, and validation. Custom checkbox, radio, and toggle controls are built with pure CSS. All controls are keyboard-accessible and use visible focus rings.

Your full name as it appears on documents.
Preferred contact
<div class="form-field">
  <label for="name" class="form-label">Name</label>
  <input type="text" id="name" class="form-input" placeholder="Enter your name">
  <span class="form-hint">Your full name.</span>
</div>

<label class="form-checkbox">
  <input type="checkbox">
  <span class="form-checkbox__indicator"></span>
  <span class="form-checkbox__label">I agree</span>
</label>

<label class="form-toggle">
  <input type="checkbox">
  <span class="form-toggle__track"></span>
  <span class="form-toggle__label">Notifications</span>
</label>

Cards

Content containers with optional header and footer. Variants: default (subtle border), elevated (shadow), outlined (visible border), and glass (frosted backdrop). Use <article> for semantic markup.

Default

Subtle border, clean look.

Elevated

Shadow for depth.

Outlined

Visible border.

Glass

Frosted effect.

<article class="card card--elevated">
  <header class="card__header">
    <h3 class="card__title">Title</h3>
  </header>
  <div class="card__body"><p>Content</p></div>
  <footer class="card__footer">
    <button class="btn btn--primary">Action</button>
  </footer>
</article>

Alerts

Informational messages with semantic color coding. Always include role="alert" for screen reader announcements.

<div class="alert alert--info" role="alert">
  <span class="alert__icon" aria-hidden="true">&#8505;</span>
  <p class="alert__message">Informational message.</p>
</div>

Tables

Data tables with striped and bordered variants. Use semantic <thead> and <tbody> for accessibility.

TokenValueUsage
--space-14pxTight spacing
--space-416pxDefault spacing
--space-832pxSection gaps
<table class="table table--striped">
  <thead><tr><th>Name</th><th>Value</th></tr></thead>
  <tbody><tr><td>Data</td><td>Value</td></tr></tbody>
</table>

Accordion

Expandable sections using native <details> and <summary>. No JavaScript required. Keyboard-accessible with Enter and Space.

What makes Purissimo different?

Purissimo is built entirely with HTML and CSS. No JavaScript, no build tools, no runtime dependencies. Every component is accessible out of the box.

Which browsers are supported?

The last 2 versions of Chrome, Firefox, Safari, and Edge. Modern CSS features like custom properties, Grid, and :has() are used throughout.

Can I customize the design tokens?

Yes. Override the CSS custom properties on :root or on any container element to change colors, spacing, typography, and more.

<div class="accordion">
  <details class="accordion__item">
    <summary class="accordion__header">Section Title</summary>
    <div class="accordion__content"><p>Content here.</p></div>
  </details>
</div>

Tabs

Tabbed content using radio inputs. Pure CSS, keyboard-navigable with arrow keys. Supports up to 5 panels.

Purissimo is a minimalist design system for the modern web.

Zero JavaScript, WCAG 2.1 AA compliant, base-4 spacing, and a single CSS file.

Add <link rel="stylesheet" href="purissimo.css"> to your HTML and start building.

<div class="tabs">
  <input type="radio" name="tabs" id="tab1" class="tabs__input" checked>
  <label for="tab1" class="tabs__label">Tab 1</label>
  <input type="radio" name="tabs" id="tab2" class="tabs__input">
  <label for="tab2" class="tabs__label">Tab 2</label>
  <div class="tabs__panels">
    <div class="tabs__panel">Content 1</div>
    <div class="tabs__panel">Content 2</div>
  </div>
</div>

Modal

Overlay dialog using :target. Opens via anchor link, closes by navigating away. Use role="dialog" and aria-modal="true".

Open Modal
<a href="#my-modal" class="btn btn--primary">Open</a>
<div id="my-modal" class="modal">
  <a href="#" class="modal__overlay" aria-hidden="true"></a>
  <div class="modal__content" role="dialog" aria-modal="true">
    <header class="modal__header">
      <h2 class="modal__title">Title</h2>
      <a href="#" class="modal__close" aria-label="Close">&times;</a>
    </header>
    <div class="modal__body"><p>Content</p></div>
    <footer class="modal__footer">
      <a href="#" class="btn btn--secondary">Cancel</a>
      <button class="btn btn--primary">Confirm</button>
    </footer>
  </div>
</div>

Badges

Small labels for status, counts, or categories.

Default Primary Success Warning Error
<span class="badge badge--primary">Primary</span>
<span class="badge badge--success">Success</span>

Tooltip

Contextual information on hover or focus. Use aria-describedby to link the trigger to the tooltip content for screen readers.

Hover me Tooltip text
<button class="tooltip" aria-describedby="tip1">
  Info
  <span class="tooltip__content" role="tooltip" id="tip1">Details</span>
</button>

Typography & Code

Blockquotes, inline code, code blocks, and keyboard shortcuts.

"Less is pure."

Purissimo

Use the --color-action variable for interactive elements. Press Ctrl + S to save.

<blockquote class="blockquote">
  <p>"Less is pure."</p>
  <footer class="blockquote__footer"><cite>Purissimo</cite></footer>
</blockquote>

<code class="code">inline code</code>
<kbd>Ctrl</kbd> + <kbd>S</kbd>

Navigation

Navbar and breadcrumb components. Use aria-label on <nav> and aria-current="page" on the active link.

<nav class="breadcrumb" aria-label="Breadcrumb">
  <ol>
    <li><a href="/">Home</a></li>
    <li><a href="/docs">Docs</a></li>
    <li aria-current="page">Components</li>
  </ol>
</nav>

Design Tokens

All values are CSS custom properties. Override them on :root to customize the system.

Colors

pure-white

ice-white

frost

mist

gray-300

gray-500

gray-800

glacial-100

glacial-300

glacial-500

glacial-700

glacial-900

success

warning

error

Typography Scale

5xl — 48px

4xl — 40px

3xl — 32px

2xl — 24px

xl — 20px

lg — 18px

base — 16px

sm — 14px

xs — 12px

Spacing Scale (base-4)

--space-1 (4px)
--space-2 (8px)
--space-3 (12px)
--space-4 (16px)
--space-6 (24px)
--space-8 (32px)
--space-12 (48px)
--space-16 (64px)

The Process

How Purissimo was created through human-AI collaboration.

AI as a Design Partner

Purissimo was built collaboratively between a human product designer and Claude, an AI assistant. The entire design system — from specification to implementation — was developed through iterative conversation.

The Workflow

The process started with a clear brief: build a pure CSS design system inspired by Antarctic ice. Through structured phases, each decision was documented, debated, and refined. The AI asked clarifying questions, proposed alternatives, and executed the code.

Key Decisions

Why no JavaScript?

Modern HTML and CSS are remarkably capable. By constraining ourselves to these two technologies, Purissimo demonstrates what the web platform can do natively — while gaining zero runtime dependencies, universal accessibility, and maximum performance.

Why base-4 spacing?

A 4px grid is the industry standard. It works well with common font sizes (12, 14, 16px), produces visually harmonious layouts, and is easy to reason about. Every spacing value in Purissimo is a multiple of 4.

Why the Outfit typeface?

Outfit is a geometric sans-serif with a delicate, modern feel. It has excellent readability at all sizes, supports the weight range we need (300–700), and is freely available through Google Fonts.

Why Antarctic ice as inspiration?

The Antarctic palette represents purity and clarity — whites, pale blues, and glacial turquoise. It reinforces the project's name and philosophy: the purest form of design, stripped to its essence.

What We Learned

Clear requirements lead to better AI output. By starting with a detailed specification and phased roadmap, every decision had context. The result is a design system that's both human-designed and AI-executed — demonstrating a new model for creative collaboration.


How to Use

Get started with Purissimo in seconds.

1. Include the CSS

Download purissimo.min.css and add it to your project, or use the CDN:

<!-- CDN (GitHub Pages) -->
<link rel="stylesheet" href="https://craice.github.io/purissimo/purissimo.min.css">

<!-- Or local file -->
<link rel="stylesheet" href="purissimo.min.css">

2. Write semantic HTML

<button class="btn btn--primary">Get Started</button>

<article class="card card--elevated">
  <div class="card__body">
    <p>Pure HTML. Pure CSS. Pure simplicity.</p>
  </div>
</article>

3. Customize with tokens

:root {
  --color-action: #6C63FF;       /* Change primary color */
  --font-family-base: 'Inter';   /* Change typeface */
  --radius-base: 1rem;           /* Rounder corners */
}

For AI Users

See AI.md for instructions on using Purissimo with AI tools like Claude, ChatGPT, and Copilot.


Metrics

0

Lines of JavaScript

AA

WCAG 2.1 Compliance

~60KB

Unminified CSS

0

Dependencies


Roadmap

Version 1.0 Current

  • All base components (buttons, forms, cards, tables, alerts, navigation)
  • Interactive components without JavaScript (accordion, tabs, modal, tooltip)
  • 12-column responsive grid system
  • Complete design token system
  • WCAG 2.1 AA compliance
  • User preference support (reduced motion, high contrast)

Version 1.1 Planned

  • More component variants
  • Print stylesheet
  • Additional code examples

Version 2.0 Future

  • Dark mode (via prefers-color-scheme)
  • Additional color themes
  • Component playground
  • Figma design kit

About

Created by Rafael Craice

Product designer exploring the intersection of design systems, accessibility, and AI-assisted development.