This is a reference for 's visual design system, including colors, fonts, spacing, and reusable components. See the design wiki↗ and develop wiki↗ guides for contributing.

Theme

☼ light☽ dark

Colors

Palette

--color-blue
--color-purple
--color-pink
--color-orange
--color-yellow
--color-white
--color-black
--color-light-grey
--color-very-light-grey
--color-dark-grey
--color-shadow

Semantic Colors

VariableColorHexContrast
--wordplay-foreground
––
--wordplay-background
––
--wordplay-header
––
--wordplay-chrome
––
--wordplay-border-color
––
--wordplay-evaluation-color
––
--wordplay-highlight-color
––
--wordplay-focus-color
––
--wordplay-hover
––
--wordplay-error
––
--wordplay-warning
––
--wordplay-inactive-color
––
--wordplay-alternating-color
––
--wordplay-doc-color
––
--wordplay-relation-color
––

Color Accessibility

Anything rendered as text must use one of the AA text variants (—color-gold-text, —color-grey-text, —color-blue-text, —color-orange-text, or a semantic variable that points at one), which meet the 4.5:1 contrast that WCAG 2.2↗ requires. The brighter brand hues are only for backgrounds, borders, and highlights, which need 3:1 or nothing. These ratios are enforced by unit tests and by automated scans of every page, in both light and dark mode. One deliberate exception: the light-mode border grey is below 3:1, because borders here are decorative separation and every essential boundary carries another cue.
Never convey meaning by color alone: pair every color-coded state with a second cue — a shape, a line style, a glyph, or a word. For example, the editor draws the caret's highlight and major conflicts solid, selected output dashed, and minor conflicts dotted, so severity and selection remain distinct without hue.
See the design wiki↗ guide for the full contributor guidance.

Fonts

VariableCSS valuePrimary facePreview
--wordplay-app-font… …Aa 0123 The quick brown fox
--wordplay-code-font… …Aa 0123 The quick brown fox

Spacing

VariableCSS valueComputedPreview
--wordplay-spacing-quarter0.125rem…
--wordplay-spacing-half0.25rem…
--wordplay-spacing0.5rem…
--wordplay-spacing-double1rem…
--wordplay-spacing-triple1.5rem…
--wordplay-spacing-quad2rem…
--wordplay-border-width1px…
--wordplay-focus-width4px…
--wordplay-border-radius8px…
--wordplay-widget-height1.5em…
--wordplay-target-size24px…
--wordplay-marker-size24px…
--wordplay-min-line-height3ex…
--wordplay-editor-indent3em…
--wordplay-editor-radius3px…
--wordplay-palette-min-width5em…
--wordplay-palette-max-width15em…

Typography

Header.svelte

Header

Subheader.svelte

Subheader

Link.svelteAbout
Note.svelte
This is a note.
Notice.svelte

Logo

The Wordplay logo is a speech bubble holding one letter: a tiny stage on which the bubble can say anything — a letter of the reader's writing system, an emoji, or a circle, triangle, and square while something loads. In the app, the letter follows your primary language's writing system; on script-neutral surfaces like the browser icon and share images, the bubble shows the three shapes, about to make something.
The drawing itself never depicts motion. Movement is behavioral — the landing page cycles what the bubble says in step with the language chooser, and while loading the shapes take turns hopping, like a crowd doing the wave — and always scales with the animation speed setting, stopping entirely when animation is off.
The mark is always drawn in the current text color, so wherever text meets contrast requirements, the logo does too.
a
At rest
Loading
Across writing systems
عربي
বাংলা লিপি
Кириллица
देवनागरी
Ελληνικά
ગુજરાતી લિપિ
ਗੁਰਮੁਖੀ
简化字
אָלֶף־בֵּית עִבְרִי
平仮名
ಕನ್ನಡ ಲಿಪಿ
한글
Latin
தமிழ் அரிச்சுவடி
తెలుగు లిపి

Components

ComponentPreview
Button.svelte
Mode.svelte
Label
Option oneOption twoOption three
Tabbed.svelte
The first panelThe second panelThe third panel

Panel one. The selected tab joins this panel.

Switch.svelte☼ light☽ dark
Toggle.svelte
Options.svelte
Slider.svelte
​
5000%
TextField.svelte
Enter text…
Checkbox.svelte