← All UI styles
Pixel Eight Bit
Everything snaps to an 8px cell: square corners, hard edges, no half pixels.
PixelretroGamesDeveloper toysNostalgia products
Construction · Pixel
Everything snaps to the grid: hard rings instead of borders, block offsets instead of shadows, and no soft edge anywhere.
Every style renders this same screen, so the only thing changing between two of them is the style. The component above is the file below, running.
Prompt
Design this interface in the Pixel Eight Bit style. Every dimension is a multiple of 8, corners are square, and there is no anti-aliasing or blur anywhere. Type is monospaced and set on the same cell. Build every surface the Pixel way: Everything snaps to the grid: hard rings instead of borders, block offsets instead of shadows, and no soft edge anywhere. Use exactly these values: background #e8e8d8, surfaces #f4f4e8, text #141410, secondary text #525246, accent #2a6f3f with #f4f4e8 on it; corner radius 0/0/0px; 2px solid borders; a hard offset shadow in the ink color, never blurred; ui-monospace for body at 14px, line height 1.5; 8px spacing grid, regular spacing; labels in uppercase with wide letter spacing. Never: rounded corners; blurred shadows; gradients; sub-pixel spacing. Dark mode uses background #101014, surfaces #18181e, text #f0f0e4, accent #57d67f — the same style, not an inverted one.
The numbers in this prompt are printed from the tokens below, so it cannot drift from what the specimen renders.
What carries the look
- everything on an 8px cell
- square corners
- no anti-aliasing
- monospaced type
What this style refuses
- rounded corners
- blurred shadows
- gradients
- sub-pixel spacing
The refusals are the half that keeps generated interfaces from converging — a prompt that only says what to add gets the default look.
Tokens
Palette
RoleLightDark
Background
#e8e8d8#101014Surface
#f4f4e8#18181eBorder
#2a2a20#e8e8dcText
#141410#f0f0e4Muted text
#525246#9e9e92Accent
#2a6f3f#57d67fOn accent
#f4f4e8#04160cShape and type
Radius0 / 0 / 0 px
Border2px solid
Shadowhard-offset
Displayui-monospace
Bodyui-monospace
Monoui-monospace
Type scale10 · 12 · 14 · 16 · 24 · 32 px
Weights400 / 700 / 700
Line height1.5
Tracking0em
Spacing8px grid · regular
Surfaceflat
Accentblock
Separatorhairline
Labelsuppercase
Blurnone
Measured contrast — body 14.92:1 light, 16.53:1 dark; secondary text 6.39:1 and 7.01:1. Every pair clears WCAG AA in both themes, checked on each build.
Specimen · Specimen.tsx
import type { CSSProperties } from "react";
/**
* Vibary · Pixel Eight Bit
*
* Everything snaps to an 8px cell: square corners, hard edges, no half pixels.
*
* One complete product screen, rendered from the token object below —
* the same screen every other Vibary specimen renders, so the style
* is the only variable. Self-contained: React only, no CSS file, no
* assets, no chart library.
*
* `theme` defaults to following the system setting; pass "light" or
* "dark" to pin one.
*/
export const TOKENS = {
"material": "pixel",
"color": {
"light": {
"bg": "#e8e8d8",
"surface": "#f4f4e8",
"border": "#2a2a20",
"text": "#141410",
"muted": "#525246",
"accent": "#2a6f3f",
"accentText": "#f4f4e8"
},
"dark": {
"bg": "#101014",
"surface": "#18181e",
"border": "#e8e8dc",
"text": "#f0f0e4",
"muted": "#9e9e92",
"accent": "#57d67f",
"accentText": "#04160c"
}
},
"radius": {
"sm": 0,
"md": 0,
"lg": 0,
"pill": 999
},
"border": {
"width": 2,
"style": "solid"
},
"shadow": {
"level": "hard-offset",
"value": "5px 5px 0 0 currentColor"
},
"type": {
"family": {
"display": "ui-monospace, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace",
"body": "ui-monospace, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace",
"mono": "ui-monospace, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace"
},
"scale": [
10,
12,
14,
16,
24,
32
],
"weight": {
"body": 400,
"strong": 700,
"display": 700
},
"lineHeight": 1.5,
"tracking": 0
},
"space": {
"unit": 8,
"density": "regular"
},
"effects": {
"surface": "flat",
"accentStyle": "block",
"separator": "hairline",
"labelCase": "upper",
"blur": 0
}
};
type Palette = typeof TOKENS.color.light;
export type PixelEightBitSpecimenProps = {
theme?: "system" | "light" | "dark";
/** Scopes the custom properties; only matters if you render two. */
scope?: string;
};
function vars(palette: Palette): string {
return [
`--sp-bg: ${palette.bg}`,
`--sp-surface: ${palette.surface}`,
`--sp-border: ${palette.border}`,
`--sp-text: ${palette.text}`,
`--sp-muted: ${palette.muted}`,
`--sp-accent: ${palette.accent}`,
`--sp-accent-text: ${palette.accentText}`,
].join("; ");
}
/** Fixed content: identical in every specimen, on purpose. */
const NAV: readonly { label: string; path: string }[] = [
{ label: "Overview", path: "M3 9.5 9 4.5l6 5V15a1 1 0 0 1-1 1h-2.5v-4h-5v4H4a1 1 0 0 1-1-1z" },
{ label: "Orders", path: "M4 5h10l-1 9H5zM7 5V3.5h4V5" },
{ label: "Customers", path: "M9 9a2.6 2.6 0 1 0 0-5.2A2.6 2.6 0 0 0 9 9M3.6 15.4c0-2.4 2.4-3.8 5.4-3.8s5.4 1.4 5.4 3.8" },
{ label: "Reports", path: "M4.5 15V8M9 15V4.5M13.5 15v-4.5" },
{ label: "Settings", path: "M9 11.4A2.4 2.4 0 1 0 9 6.6a2.4 2.4 0 0 0 0 4.8M9 2.6v1.4M9 14v1.4M15.4 9H14M4 9H2.6M13.5 4.5l-1 1M5.5 12.5l-1 1M13.5 13.5l-1-1M5.5 5.5l-1-1" },
];
const STATS: readonly { label: string; value: string; delta: string; up: boolean }[] = [
{ label: "Revenue", value: "$48,290", delta: "+12.4%", up: true },
{ label: "Orders", value: "1,284", delta: "+3.1%", up: true },
{ label: "Refunds", value: "42", delta: "-1.8%", up: false },
];
const BARS: readonly { day: string; value: number }[] = [
{ day: "M", value: 0.42 },
{ day: "T", value: 0.61 },
{ day: "W", value: 0.38 },
{ day: "T", value: 0.74 },
{ day: "F", value: 0.93 },
{ day: "S", value: 0.55 },
{ day: "S", value: 0.29 },
];
const ROWS: readonly { name: string; meta: string; state: string; amount: string }[] = [
{ name: "Kyoto Print Co.", meta: "Invoice 2841", state: "Paid", amount: "420.00" },
{ name: "Aurora Supply", meta: "Invoice 2839", state: "Pending", amount: "186.50" },
{ name: "Northwind Studio", meta: "Invoice 2836", state: "Overdue", amount: "678.00" },
];
const SWITCHES: readonly { label: string; on: boolean }[] = [
{ label: "Auto-pay invoices", on: true },
{ label: "Email receipts", on: false },
];
/**
* The material: how this style paints an element, as opposed to what
* color it paints it. This is the part that makes Pixel
* a different design language rather than a different theme —
* Everything snaps to the grid: hard rings instead of borders, block offsets instead of shadows, and no soft edge anywhere.
*/
const MATERIAL = {
"surface": {
"background": "var(--sp-surface)",
"boxShadow": "0 0 0 3px var(--sp-text), 4px 4px 0 3px var(--sp-text)",
"border": "none"
},
"button": {
"background": "var(--sp-accent)",
"color": "var(--sp-accent-text)",
"boxShadow": "0 0 0 3px var(--sp-text), 3px 3px 0 3px var(--sp-text)",
"border": "none"
},
"switchOn": {
"background": "var(--sp-accent)",
"boxShadow": "0 0 0 3px var(--sp-text)",
"border": "none"
},
"switchOff": {
"background": "var(--sp-surface)",
"boxShadow": "0 0 0 3px var(--sp-text)",
"border": "none"
},
"knob": {
"background": "var(--sp-text)",
"boxShadow": "none"
},
"navActive": {
"background": "var(--sp-accent)",
"boxShadow": "0 0 0 3px var(--sp-text)"
},
"bar": {
"background": "var(--sp-accent)",
"boxShadow": "0 0 0 2px var(--sp-text)",
"border": "none"
}
};
const SURFACE_BORDER = `${TOKENS.border.width}px solid var(--sp-border)`;
const ROW_SEPARATOR = "1px solid var(--sp-border)";
const RING = 0.68;
export function PixelEightBitSpecimen({ theme = "system", scope = "sp-pixel-eight-bit" }: PixelEightBitSpecimenProps) {
const css =
theme === "light"
? `.${scope}{${vars(TOKENS.color.light)}}`
: theme === "dark"
? `.${scope}{${vars(TOKENS.color.dark)}}`
: `.${scope}{${vars(TOKENS.color.light)}}@media(prefers-color-scheme:dark){.${scope}{${vars(TOKENS.color.dark)}}}`;
const label: CSSProperties = {
font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}`,
letterSpacing: "0.08em",
textTransform: "uppercase",
color: "var(--sp-muted)",
};
const meta: CSSProperties = {
font: `${TOKENS.type.weight.body} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}`,
color: "var(--sp-muted)",
};
const card: CSSProperties = {
...MATERIAL.surface,
borderRadius: TOKENS.radius.md,
padding: 15,
};
const heading: CSSProperties = {
font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[2]}px ${TOKENS.type.family.display}`,
textTransform: "uppercase",
letterSpacing: "0.05em",
};
const primary: CSSProperties = { ...MATERIAL.button, borderRadius: TOKENS.radius.sm };
const pill = (active: boolean): CSSProperties => ({
padding: "2px 8px",
borderRadius: TOKENS.radius.pill,
background: active
? "var(--sp-accent)"
: "color-mix(in srgb, var(--sp-text) 10%, transparent)",
color: active ? "var(--sp-accent-text)" : "var(--sp-muted)",
font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}`,
textTransform: "uppercase",
letterSpacing: "0.07em",
});
return (
<div
className={scope}
style={{
width: 760,
display: "flex",
background: "var(--sp-bg)",
color: "var(--sp-text)",
font: `${TOKENS.type.weight.body} ${TOKENS.type.scale[1]}px/${TOKENS.type.lineHeight} ${TOKENS.type.family.body}`,
letterSpacing: `${TOKENS.type.tracking}em`,
overflow: "hidden",
position: "relative",
}}
>
<style>{css}</style>
{/* Sidebar */}
<div
style={{
width: 176,
flex: "none",
display: "flex",
flexDirection: "column",
gap: 4,
padding: 18,
borderRight: `${TOKENS.border.width}px solid var(--sp-border)`,
background: "color-mix(in srgb, var(--sp-surface) 70%, transparent)",
}}
>
<div style={{ display: "flex", alignItems: "center", gap: 8, marginBottom: 14 }}>
<span
style={{
width: 22,
height: 22,
borderRadius: TOKENS.radius.sm,
background: "var(--sp-accent)",
display: "grid",
placeItems: "center",
color: "var(--sp-accent-text)",
font: `${TOKENS.type.weight.display} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.display}`,
}}
>
N
</span>
<span
style={{
font: `${TOKENS.type.weight.display} ${TOKENS.type.scale[2]}px ${TOKENS.type.family.display}`,
textTransform: "uppercase",
letterSpacing: "0.06em",
}}
>
Northwind
</span>
</div>
{NAV.map((item, index) => (
<span
key={item.label}
style={{
display: "flex",
alignItems: "center",
gap: 9,
height: 34,
padding: "0 9px",
borderRadius: TOKENS.radius.sm,
...(index === 0 ? MATERIAL.navActive : null),
color: index === 0 ? "var(--sp-accent)" : "var(--sp-muted)",
font: `${index === 0 ? TOKENS.type.weight.strong : TOKENS.type.weight.body} ${TOKENS.type.scale[1]}px ${TOKENS.type.family.body}`,
textTransform: "uppercase",
letterSpacing: "0.07em",
}}
>
<svg width="17" height="17" viewBox="0 0 18 18" fill="none" aria-hidden="true">
<path
d={item.path}
stroke="currentColor"
strokeWidth={index === 0 ? 1.7 : 1.3}
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
{item.label}
</span>
))}
<span style={{ flex: 1 }} />
<span
style={{
display: "flex",
alignItems: "center",
gap: 8,
paddingTop: 14,
borderTop: `${TOKENS.border.width}px solid var(--sp-border)`,
}}
>
<span
style={{
width: 26,
height: 26,
flex: "none",
display: "grid",
placeItems: "center",
borderRadius: TOKENS.radius.pill,
background: "color-mix(in srgb, var(--sp-text) 12%, transparent)",
font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}`,
}}
>
MK
</span>
<span style={{ minWidth: 0 }}>
<span style={{ display: "block", font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}` }}>
Mika Ito
</span>
<span style={{ ...meta, display: "block" }}>Finance</span>
</span>
</span>
</div>
{/* Main */}
<div
style={{
flex: 1,
minWidth: 0,
display: "flex",
flexDirection: "column",
gap: 14,
padding: 18,
}}
>
{/* Header */}
<div style={{ display: "flex", alignItems: "center", gap: 10 }}>
<span style={{ flex: 1, minWidth: 0 }}>
<span style={{ ...label, display: "block" }}>March 2026</span>
<span
style={{
display: "block",
font: `${TOKENS.type.weight.display} ${TOKENS.type.scale[4]}px ${TOKENS.type.family.display}`,
textTransform: "uppercase",
letterSpacing: "0.04em",
}}
>
Overview
</span>
</span>
<span
style={{
display: "flex",
alignItems: "center",
gap: 7,
padding: "7px 11px",
background: "var(--sp-surface)",
border: `${TOKENS.border.width}px solid var(--sp-border)`,
borderRadius: TOKENS.radius.sm,
color: "var(--sp-muted)",
font: `${TOKENS.type.weight.body} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}`,
}}
>
<svg width="13" height="13" viewBox="0 0 18 18" fill="none" aria-hidden="true">
<circle cx="8" cy="8" r="5.4" stroke="currentColor" strokeWidth="1.5" />
<path d="M12.4 12.4 16 16" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
</svg>
Search
</span>
<span
style={{
...primary,
padding: "8px 13px",
font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}`,
textTransform: "uppercase",
letterSpacing: "0.07em",
}}
>
New report
</span>
</div>
{/* Stats */}
<div style={{ display: "flex", gap: 14 }}>
{STATS.map((stat) => (
<div key={stat.label} style={{ ...card, flex: 1, minWidth: 0 }}>
<span style={{ ...label, display: "block" }}>{stat.label}</span>
<span
style={{
display: "block",
marginTop: 3,
fontVariantNumeric: "tabular-nums",
font: `${TOKENS.type.weight.display} ${TOKENS.type.scale[4]}px ${TOKENS.type.family.display}`,
}}
>
{stat.value}
</span>
<span style={{ display: "inline-flex", marginTop: 6, ...pill(stat.up) }}>
{stat.delta}
</span>
</div>
))}
</div>
{/* Chart + ring */}
<div style={{ display: "flex", gap: 14 }}>
<div style={{ ...card, flex: 1.6, minWidth: 0 }}>
<div style={{ display: "flex", alignItems: "baseline", justifyContent: "space-between" }}>
<span style={heading}>Revenue by day</span>
<span style={meta}>7 days</span>
</div>
<div
style={{
display: "flex",
alignItems: "flex-end",
gap: 7,
height: 92,
marginTop: 10,
}}
>
{BARS.map((bar, index) => (
<span key={index} style={{ flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: 5 }}>
<span
style={{
width: "100%",
height: bar.value * 74,
borderRadius: `${TOKENS.radius.sm}px ${TOKENS.radius.sm}px 0 0`,
...(index === 4
? MATERIAL.bar
: {
background: "color-mix(in srgb, var(--sp-accent) 32%, var(--sp-surface))",
border: SURFACE_BORDER,
}),
}}
/>
<span style={meta}>{bar.day}</span>
</span>
))}
</div>
</div>
<div style={{ ...card, flex: 1, minWidth: 0, display: "flex", alignItems: "center", gap: 12 }}>
<span
style={{
width: 74,
height: 74,
flex: "none",
borderRadius: TOKENS.radius.pill,
display: "grid",
placeItems: "center",
background: `conic-gradient(var(--sp-accent) 0turn ${RING}turn, color-mix(in srgb, var(--sp-text) 12%, transparent) ${RING}turn 1turn)`,
}}
>
<span
style={{
width: 52,
height: 52,
borderRadius: TOKENS.radius.pill,
background: "var(--sp-surface)",
display: "grid",
placeItems: "center",
fontVariantNumeric: "tabular-nums",
font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[2]}px ${TOKENS.type.family.mono}`,
}}
>
68%
</span>
</span>
<span style={{ minWidth: 0 }}>
<span style={{ ...heading, display: "block" }}>Budget</span>
<span style={{ ...meta, display: "block", marginTop: 4 }}>Spent $34,120</span>
<span style={{ ...meta, display: "block" }}>Left $16,170</span>
</span>
</div>
</div>
{/* Table + controls */}
<div style={{ display: "flex", gap: 14 }}>
<div style={{ ...card, flex: 1.6, minWidth: 0, padding: 0, overflow: "hidden" }}>
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "space-between",
padding: `${15}px ${15}px 8px`,
}}
>
<span style={heading}>Recent orders</span>
<span style={{ color: "var(--sp-accent)", font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}` }}>
View all
</span>
</div>
{ROWS.map((row, index) => (
<div
key={row.name}
style={{
display: "flex",
alignItems: "center",
gap: 10,
height: 44,
padding: `0 ${15}px`,
borderTop: ROW_SEPARATOR,
}}
>
<span
style={{
width: 24,
height: 24,
flex: "none",
display: "grid",
placeItems: "center",
borderRadius: TOKENS.radius.sm,
background: "color-mix(in srgb, var(--sp-text) 9%, transparent)",
font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.mono}`,
}}
>
{row.name.slice(0, 1)}
</span>
<span style={{ flex: 1, minWidth: 0 }}>
<span style={{ display: "block", font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[1]}px ${TOKENS.type.family.body}` }}>
{row.name}
</span>
<span style={{ ...meta, display: "block" }}>{row.meta}</span>
</span>
<span style={pill(index === 0)}>{row.state}</span>
<span
style={{
width: 66,
textAlign: "right",
fontVariantNumeric: "tabular-nums",
font: `${TOKENS.type.weight.strong} ${TOKENS.type.scale[1]}px ${TOKENS.type.family.mono}`,
}}
>
{row.amount}
</span>
</div>
))}
</div>
<div style={{ ...card, flex: 1, minWidth: 0, display: "flex", flexDirection: "column", gap: 10 }}>
<span style={heading}>Preferences</span>
{SWITCHES.map((item) => (
<span key={item.label} style={{ display: "flex", alignItems: "center", gap: 10 }}>
<span style={{ flex: 1, minWidth: 0, font: `${TOKENS.type.weight.body} ${TOKENS.type.scale[0]}px ${TOKENS.type.family.body}` }}>
{item.label}
</span>
<span
style={{
width: 34,
height: 20,
flex: "none",
position: "relative",
borderRadius: TOKENS.radius.pill,
...(item.on ? MATERIAL.switchOn : MATERIAL.switchOff),
}}
>
<span
style={{
position: "absolute",
top: 3,
left: item.on ? 17 : 3,
width: 14,
height: 14,
borderRadius: TOKENS.radius.pill,
...MATERIAL.knob,
}}
/>
</span>
</span>
))}
<span style={{ marginTop: 2 }}>
<span style={{ display: "flex", justifyContent: "space-between" }}>
<span style={meta}>Alert threshold</span>
<span style={{ ...meta, fontVariantNumeric: "tabular-nums" }}>62%</span>
</span>
<span
style={{
display: "block",
position: "relative",
height: 5,
marginTop: 7,
borderRadius: TOKENS.radius.pill,
background: "color-mix(in srgb, var(--sp-text) 14%, transparent)",
}}
>
<span
style={{
position: "absolute",
inset: "0 38% 0 0",
borderRadius: TOKENS.radius.pill,
background: "var(--sp-accent)",
}}
/>
<span
style={{
position: "absolute",
top: -5,
left: "62%",
width: 15,
height: 15,
marginLeft: -7,
borderRadius: TOKENS.radius.pill,
background: "var(--sp-surface)",
border: `2px solid var(--sp-accent)`,
}}
/>
</span>
</span>
</div>
</div>
</div>
</div>
);
}
export default PixelEightBitSpecimen;