Remixes of grainrad.com
Latest remixes
No public remixes yet. Be the first to make one.
Remix itLatest remixes
No public remixes yet. Be the first to make one.
Remix itSwitch between the rendered Visual preview and the Raw DESIGN.md.
version: alpha
name: Grainrad
description: |
Grainrad embodies a brutalist, retro-computational aesthetic rooted in ASCII
art and early digital culture. The design prioritizes raw functionality and
monospace typography over ornamentation, creating an interface that feels like
a command-line tool rendered for the web. Deep blacks dominate the canvas,
punctuated by muted grays and a singular accent of light gray (#CCCCCC), which
reads as both industrial and nostalgic. The interface rejects rounded corners
entirely, favoring sharp, rectilinear geometry. Every element is deliberately
spare, suggesting the constraints and character-based limitations of vintage
terminals and ASCII editors. This is a design system for creators and
technologists who value precision, history, and the beauty of constraints.
source:
url: "https://grainrad.com"
pagesAnalyzed: 1
extractedAt: 2026-10-29
tokensMeasured: true
colors:
primary: "#CCCCCC"
canvas: "#0A0A0A"
on-primary: "#222222"
ink: "#555555"
neutral-1: "#E5E7EB"
neutral-2: "#888888"
neutral-3: "#FFFFFF"
typography:
code-sm:
fontFamily: "IBM Plex Mono"
fontSize: 14px
fontWeight: 400
lineHeight: 1.43
letterSpacing: 0px
code-sm-strong:
fontFamily: "IBM Plex Mono"
fontSize: 14px
fontWeight: 500
lineHeight: 1.43
letterSpacing: 0px
code-xs:
fontFamily: "IBM Plex Mono"
fontSize: 12px
fontWeight: 400
lineHeight: 1.33
letterSpacing: 0px
code-xs-tight:
fontFamily: "IBM Plex Mono"
fontSize: 12px
fontWeight: 400
lineHeight: 1
letterSpacing: 0px
code-xs-uppercase:
fontFamily: "IBM Plex Mono"
fontSize: 12px
fontWeight: 400
lineHeight: 1.33
letterSpacing: 0px
textTransform: uppercase
code-xs-strong:
fontFamily: "IBM Plex Mono"
fontSize: 12px
fontWeight: 500
lineHeight: 1.33
letterSpacing: 0px
rounded:
none: 0px
spacing:
xxs: 4px
xs: 8px
sm: 12px
md: 16px
lg: 32px
borderWidths:
thin: 1px
elevationStrategy: color-blocking
themes:
derived: light # the other theme is the site's measured palette
light:
bg: "#FBFBFB"
surface: "#F1F1F1"
surfaceRaised: "#E9E9E9"
text: "#1A1A1A"
textMuted: "#6F6F6F"
border: "#D8D8D8"
accent: "#707070"
accentFg: "#FFFFFF"
focusRing: "#8F8F8F"
elevation: shadow
dark:
bg: "#0A0A0A"
surface: "#0A0A0A"
surfaceRaised: "#1E1E1E"
text: "#555555"
textMuted: "#3B3B3B"
border: "#131313"
accent: "#CCCCCC"
accentFg: "#0B0B0C"
focusRing: "#CCCCCC"
elevation: "border+surface"
contrastFailures:
- "dark: text on bg = 2.66:1 (needs 4.5:1)"
- "dark: muted on bg = 1.77:1 (needs 4.5:1)"
- "dark: text on surface = 2.66:1 (needs 4.5:1)"
components:
button-primary:
typography: "{typography.code-xs}"
textColor: "{colors.canvas}"
border: "1px solid {colors.primary}"
height: 30px
padding: "6px 12px 6px 12px"
backgroundColor: "{colors.primary}"
button-filled:
typography: "{typography.code-xs-tight}"
textColor: "{colors.primary}"
height: 24px
padding: "6px 8px 6px 8px"
backgroundColor: "rgb(15, 15, 15)"
button-outline:
textColor: "{colors.primary}"
border: "1px solid {colors.primary}"
height: 50px
padding: "8px 8px 8px 8px"
fontSize: 16px
fontFamily: "IBM Plex Mono"
fontWeight: 400
lineHeight: 1.5
button-outline-2:
textColor: "{colors.neutral-2}"
border: "1px solid {colors.on-primary}"
height: 50px
padding: "8px 8px 8px 8px"
fontSize: 16px
fontFamily: "IBM Plex Mono"
fontWeight: 400
lineHeight: 1.5
button-text:
typography: "{typography.code-xs-tight}"
textColor: "{colors.ink}"
height: 24px
padding: "6px 8px 6px 8px"
states:
input-focus:
target: input
state: focus
outline: "transparent solid 2px"
borderColor: "rgb(37, 99, 235)"
outlineColor: transparent
outlineWidth: 2px
input-hover:
target: input
state: hover
borderColor: transparent
backgroundColor: currentcolor
other-focus:
target: other
state: focus
outline: "transparent solid 2px"
outlineColor: transparent
outlineWidth: 2px
other-disabled:
target: other
state: disabled
opacity: 0.3
breakpoints:
- width: 375
containerWidth: 375
gridColumns: 0
navLinksVisible: 0
menuToggleVisible: false
headingPx: 0
bodyPx: 16
sectionPaddingX: 0
- width: 768
containerWidth: 768
gridColumns: 0
navLinksVisible: 0
menuToggleVisible: false
headingPx: 0
bodyPx: 16
sectionPaddingX: 0
- width: 1024
containerWidth: 1024
gridColumns: 0
navLinksVisible: 0
menuToggleVisible: false
headingPx: 0
bodyPx: 16
sectionPaddingX: 0
- width: 1280
containerWidth: 1280
gridColumns: 0
navLinksVisible: 0
menuToggleVisible: false
headingPx: 0
bodyPx: 16
sectionPaddingX: 0
- width: 1440
containerWidth: 1440
gridColumns: 0
navLinksVisible: 0
menuToggleVisible: false
headingPx: 0
bodyPx: 16
sectionPaddingX: 0
coverage:
statesFound: 16
gradientsFound: 0
rolesUnassigned: 3
archetypesUnnamed: 0
archetypesDetected: 0
responsiveMeasured: true
stylesheetsBlocked: false
semanticRampDeclared: false
Grainrad embodies a brutalist, retro-computational aesthetic rooted in ASCII art and early digital culture. The design prioritizes raw functionality and monospace typography over ornamentation, creating an interface that feels like a command-line tool rendered for the web. Deep blacks dominate the canvas, punctuated by muted grays and a singular accent of light gray ({colors.primary} — #CCCCCC), which reads as both industrial and nostalgic. The interface rejects rounded corners entirely, favoring sharp, rectilinear geometry. Every element is deliberately spare, suggesting the constraints and character-based limitations of vintage terminals and ASCII editors. This is a design system for creators and technologists who value precision, history, and the beauty of constraints.
Key Characteristics
{colors.primary} — #CCCCCC): Brand colour used for primary CTAs, active states, and brand elements; renders as a light gray that stands out against the dark canvas.{colors.canvas} — #0A0A0A): Default page background; near-black providing maximum contrast for legible text and UI.{colors.on-primary} — #222222): Label and text colour applied over primary accent surfaces; ensures readability on light accents.{colors.ink} — #555555): Headings and primary body text; mid-tone gray that sits between the canvas and lighter neutrals.{colors.neutral-1} — #E5E7EB): Unassigned decorative neutral; used sparingly for secondary UI elements or borders.{colors.neutral-2} — #888888): Unassigned decorative neutral; appears in secondary text and disabled states.{colors.neutral-3} — #FFFFFF): Unassigned decorative neutral; pure white reserved for highest contrast accents or special states.Primary: IBM Plex Mono (weights: 300, 400, 500)
Fallback: Monospace, monospace
All typography in the system uses IBM Plex Mono exclusively. No secondary font is employed; the design is entirely monospace-based.
| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
|---|---|---|---|---|---|---|
| Code XS | IBM Plex Mono | 12px | 400 | 1.33 | 0px | General body text; standard code-weight small. |
| Code XS Tight | IBM Plex Mono | 12px | 400 | 1.0 | 0px | Compact button text; reduced line-height for density. |
| Code XS Uppercase | IBM Plex Mono | 12px | 400 | 1.33 | 0px | Input labels; text-transform uppercase applied. |
| Code XS Strong | IBM Plex Mono | 12px | 500 | 1.33 | 0px | Emphasized code; medium weight for hierarchy. |
| Code SM | IBM Plex Mono | 14px | 400 | 1.43 | 0px | Body-level text; larger than XS for readability. |
| Code SM Strong | IBM Plex Mono | 14px | 500 | 1.43 | 0px | Emphasized body or labels; medium weight. |
Primary Button
{colors.primary} (#CCCCCC){colors.on-primary} (#222222)1px solid {colors.primary} (1px solid #CCCCCC)6px 12px30px{typography.code-xs} (12px, weight 400, line-height 1.33){rounded.none} (0px)none319pxFilled Button (Secondary)
#0F0F0F (deep black){colors.primary} (#CCCCCC)0px6px 8px24px{typography.code-xs-tight} (12px, weight 400, line-height 1.0){rounded.none} (0px)none255pxOutline Button
transparent (rgba(0, 0, 0, 0)){colors.primary} (#CCCCCC)1px solid {colors.primary} (1px solid #CCCCCC)8px50px{typography.code-sm} (14px, weight 400, line-height 1.43){rounded.none} (0px)none157.5pxOutline Button (Dimmed)
transparent{colors.neutral-2} (#888888)1px solid {colors.on-primary} (1px solid #222222)8px50px{typography.code-sm} (14px, weight 400, line-height 1.43){rounded.none} (0px)none157.5pxText Button
transparent{colors.ink} (#555555)0px6px 8px24px{typography.code-xs-tight} (12px, weight 400, line-height 1.0){rounded.none} (0px)none255pxText Input
{colors.canvas} (#0A0A0A){colors.primary} (#CCCCCC)1px solid {colors.primary} (1px solid #CCCCCC){typography.code-xs-uppercase} (12px, weight 400, line-height 1.33, text-transform uppercase){rounded.none} (0px)#2563EB (blue focus ring); outline transparent 2px; box-shadow appliedtransparent; background-color set to currentcolorPrimary Navigation
{colors.ink} (#555555) by default{colors.primary} (#CCCCCC); border-color may update based on context20Card / Panel
{colors.canvas} (#0A0A0A) or #0F0F0F (for secondary cards)1px solid {colors.primary} or 1px solid {colors.on-primary} depending on emphasis{spacing.md} (16px){rounded.none} (0px)No explicit badge component defined; status is conveyed via text colour and borders only.
Base unit: {spacing.xxs} = 4px
Scale (relative to base):
{spacing.xxs} = 4px (micro-spacing between tight elements){spacing.xs} = 8px (tight padding on inputs, buttons){spacing.sm} = 12px (small margin between adjacent sections){spacing.md} = 16px (standard padding on cards and containers; section margins){spacing.lg} = 32px (large separation between major content blocks)Usage Context:
{spacing.xs} to {spacing.sm} padding.{spacing.md} for internal padding.{spacing.lg}.{spacing.md}.16px across all breakpoints ({spacing.md}).{spacing.lg} (32px) separation.Whitespace is minimal and intentional. The design favors compact layouts that reflect terminal and command-line aesthetics. Breathing room is sparse; elements are placed close together to suggest efficiency and density. The deep black canvas ({colors.canvas}) serves as a visual rest point, allowing the light accent colour ({colors.primary}) to pop. Negative space is not used to create elegance; instead, it is a byproduct of the system's brutalist constraints.
{rounded.none} = 0px (applied to all interactive components: buttons, inputs, cards)The system has zero border radius; every corner is a sharp 90-degree angle. This reinforces the retro-computational, ASCII-art aesthetic and ensures crisp, rectilinear geometry throughout.
1px (applied to input borders, card borders, button outlines, and UI divisions)The system employs a single border width: 1px. This is sufficient to define boundaries without adding visual weight.
Grainrad uses color-blocking to create depth rather than layered shadows. Surfaces are distinguished by background colour alone, not by shadow offset or blur.
| Level | Treatment | Use |
|---|---|---|
| Flat | No shadow; canvas background | Default surfaces, body text, inactive states |
| Blocked | Background shifted to #0F0F0F (one shade darker/lighter) | Secondary panels, disabled states, recessed sections |
| Accent | Background shifts to {colors.primary} (#CCCCCC) | Active button states, highlighted elements, CTAs |
Elevation Philosophy:
No multi-level shadow system exists. Depth comes entirely from shifting background colour from the canvas (#0A0A0A) to secondary blacks (#0F0F0F) or to the accent grey (#CCCCCC). This approach aligns with ASCII art and early digital UI aesthetics, where colour and contrast drive visual hierarchy, not shadows. Box-shadow is set to none on all measured components.
These opacity values appear in disabled button states and hover effects, allowing elements to fade without shifting hue.
z-index: 20 (ensures dropdown menus and overlays sit above base content)z-index: auto or unset (cards, buttons, sections)A minimal z-index ladder is in use. Dropdowns are explicitly layered above all base content via z-index: 20. No modal, toast, or sticky layers are defined in the extraction.
border-radius: 0px on all buttons, inputs, cards, and containers. Maintain the rectilinear aesthetic.{colors.primary} (#CCCCCC) sparingly and deliberately as the accent colour. Ensure all text on coloured backgrounds meets accessibility standards.#0A0A0A to #0F0F0F or to #CCCCCC) to create visual hierarchy; avoid shadows.{spacing.xs} (8px) to {spacing.md} (16px) for most UI elements; only expand to {spacing.lg} (32px) for major section breaks.text-transform: uppercase to form labels and related text to reinforce the technical aesthetic.border-radius: 8px, border-radius: 12px, or any other radius value to buttons, inputs, or containers.box-shadow to create lift or dimension. Rely on colour shifts instead.{colors.primary} (#CCCCCC) should highlight only critical CTAs, active states, and brand moments. Do not apply it to body text or secondary UI.box-shadow layers, backdrop-filter, or Gaussian blur to soften edges.| Viewport | Width | Key Changes |
|---|---|---|
| Mobile | 375px | Single-column layout; full-width content; padding {spacing.md} (16px) |
| Tablet | 768px | Single-column layout; full-width content; padding {spacing.md} (16px) |
| Desktop | 1024px | Single-column layout; full-width content; padding {spacing.md} (16px) |
| Large Desktop | 1280px | Single-column layout; full-width content; padding {spacing.md} (16px) |
| Extra Large | 1440px | Single-column layout; full-width content; padding {spacing.md} (16px) |
Observation: All measured breakpoints render a single-column, full-width layout with consistent 16px (md) side padding. No responsive column shift, hamburger menu, or major layout reorganization is detected across the measured range.
24px to 50px (as measured from filled and outline variants)30px to 50px24px × 24px (inferred from smallest button height; pad tappable zones accordingly on touch devices)Interactive elements should maintain at least 24px of height to ensure comfortable touch interaction on mobile devices.
The site does not exhibit a responsive collapse pattern (no hamburger menu, no sidebar drawer). All breakpoints maintain the same single-column structure with full-width content. Section padding remains 16px throughout. If navigation needs to collapse on smaller screens, implement a drawer or menu toggle at or below 375px (the smallest measured viewport), but note that the extraction does not evidence this pattern in use.
{colors.primary} — #CCCCCC){colors.canvas} — #0A0A0A){colors.ink} — #555555){colors.on-primary} — #222222){colors.neutral-2} — #888888){colors.neutral-3} — #FFFFFF)#0A0A0A, #0F0F0F, and #CCCCCC to create hierarchy. Do not use box-shadow.4px, 8px, 12px, 16px, or 32px; do not introduce arbitrary spacing values.:hover, :focus, and :active, shift border colour, text colour, or background colour noticeably; do not use subtle transitions.text-transform: uppercase on input labels and specific UI labels; avoid on body text.{colors.neutral-1}, {colors.neutral-2}, {colors.neutral-3}) have no measured semantic role. They are decorative and appear in secondary UI; avoid assigning new semantic meaning to them without design review.:hover, :focus, :active, and :disabled states from the site's stylesheets. States such as :visited, :group-hover, or custom drag states are not documented; infer these from the existing patterns.z-index: 20 for dropdowns is documented. Modal, toast, sticky, and other layered components may require a z-index ladder; refer to "Known Gaps" if a comprehensive stacking context is needed.0px radius. No pill-shaped (9999px) or intermediate radius (4px, 8px) variants are in use; if needed, these are design additions outside the measured system.