Skip to content

Penne

Plain, neutral, cut once. Penne, “quills”, are plain tubes cut once on the diagonal and otherwise left alone. Penne is a neutral product system: a white page, soft grey wells instead of outlines, pill-shaped controls, black for the one thing to press and overlays that float on a wide, soft shadow.

MinimalItaly · Campaniaradius 24px / 20pxcomfortable densitynone shadows

Design language

Penne is the neutral product interface: a white page, soft grey wells where you type, pill-shaped controls and black for the one thing to press. It has no borders on fields and no colour of its own, so whatever the product shows (a message, an image, a result) is the only thing with character. Menus and dialogs float on a wide, soft shadow with no edge.

Principles

  • Wells, not outlines: inputs, chips and unselected tabs are filled with var(--mn-surface-2) and have no border.
  • One black button per view. Everything else is grey or ghost.
  • Pills and large radii: controls are fully rounded, containers 20px.
  • The content is the colour. The interface stays black, white and grey; a green accent exists only for confirmation.
  • Overlays float: no border, a 16px/48px soft shadow.

Shape

Fully rounded buttons, inputs and tabs (24px radius); 20px cards; 16px menus with 10px items.

Surface

White on white. Fields and chips are #f4f4f4 wells that turn white with a black edge on focus. Cards have a 1px #ececec edge and no shadow.

Colour

Ink primary (#0d0d0d / #f9f9f9), neutral greys, one green accent. No tinted neutrals.

Type

The system font, 400 for text and 500 for controls, headings at 600 tracked −0.03em.

Motion

penne-in: scale from .98 and fade in 200ms. Pressed buttons scale to .97.

Data

Pill bars in grey with the highlighted bar in ink; a 2px ink line.

Designing new components in Penne

MIAN does not ship every component you will need. To make a new one that belongs in Penne, build it from --mn-* tokens inside [data-noodle="penne"] and follow these rules.

Do

  • Use var(--mn-surface-2) as the fill for anything that holds input or can be chosen; remove the border.
  • Hover on a well: 4% darker. Focus: white fill and a 1px var(--mn-fg) edge, no glow.
  • Selected in a group: var(--mn-surface) thumb with a 1px/3px shadow inside a grey track.
  • Anything that floats: border-color transparent, box-shadow var(--pn-float), radius 16–20px.
  • Keep one ink-filled control per view; make the rest ghost or outline.

Avoid

  • Outlined inputs
  • Coloured primary buttons
  • Square corners
  • Tinted or gradient backgrounds
  • Several filled buttons side by side

Recipe: a selectable tile

[data-noodle="penne"] .tile {
  padding: 16px 18px; border: 1px solid transparent; border-radius: 20px;
  background: var(--mn-surface-2); color: var(--mn-fg);
  transition: background-color 160ms cubic-bezier(.16, 1, .3, 1), border-color 160ms;
}
[data-noodle="penne"] .tile:hover { background: color-mix(in oklab, var(--mn-surface-2), var(--mn-fg) 4%); }
[data-noodle="penne"] .tile[aria-selected="true"] { background: var(--mn-surface); border-color: var(--mn-fg); }

The same guide, for AI tools: /ai/noodles/penne.md · MCP tool get_design_language.

Colour, type and brand

What Penne says before anyone reads a word, and what kind of brand it suits. Tendencies, not laws: see the guides on colour, type, branding and logos.

Primary · Black and ink

#0d0d0d · deep, muted

Authority, precision, luxury. It makes everything next to it look more deliberate.

Watch for: Pure #000 on pure #fff is harsh on long text. Soften one of the two slightly, or warm both.

Accent · Teal and cyan

#0f6e58 · deep, saturated

Clarity, cleanliness, calm technology. Cooler than green, softer than blue.

Watch for: Very common in medical and SaaS products, so it needs a distinctive neutral or typeface to be remembered.

Page · White and paper

#ffffff · pale, muted

Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical.

Watch for: Empty is not the same as calm: white space needs a grid behind it.

A neutral primary with one teal and cyan accent: the accent means “look here” precisely because nothing else is coloured. The page itself is neutral.

Type

One voice throughout: system sans (the device’s own typeface). Headings are semibold, which reads as confident without shouting. Native, familiar, efficient. It disappears, which is the point: the product feels like part of the device.

Personality

Reads as neutral, minimal, clean, modern, quiet. Intensity 1 of 5. Brand dimension: competence.

Suits

ai products, assistants and chat, consumer apps, saas, productivity. Less suited to editorial, heritage brands, children.

Tone of voice

Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading.

Logo

Round marks fit: a circular symbol or a soft, lowercase wordmark.

Inspired by the noodle

  • A plain tube, nothing addedno borders on fields, no decoration, grey and white only
  • Cut once, on the diagonalone decisive element per screen: a single black button
  • Smooth (lisce), not ridgedsoft pill shapes and large, even corner radii
  • Holds whatever sauce it is givena neutral frame that lets the content be the colour

Specimen

The same markup as every other noodle. Press, hover, open the menu and the dialog: shape, depth, texture and motion all change.

Try your brand colour
Open in the studio
Light

Buttons

Fields

Choices

Status

NewPaidPendingDraftTag
72
AP

Tabs

Overview panel.
Activity panel.
Settings panel.

Bars

Line & donut

Table

InvoiceStatusAmount
INV-001Paid€250.00
INV-002Pending€150.00
INV-003Overdue€350.00

Feedback & motion

Deployed

Your site is live.


  1. Cart
  2. Pay
  3. Done

A dialog

Each noodle has its own entrance.
Dark

Buttons

Fields

Choices

Status

NewPaidPendingDraftTag
72
AP

Tabs

Overview panel.
Activity panel.
Settings panel.

Bars

Line & donut

Table

InvoiceStatusAmount
INV-001Paid€250.00
INV-002Pending€150.00
INV-003Overdue€350.00

Feedback & motion

Deployed

Your site is live.


  1. Cart
  2. Pay
  3. Done

A dialog

Each noodle has its own entrance.

Use it

<!-- everything -->
<link rel="stylesheet" href="https://mian.ro/dist/mian.css">
<html data-noodle="penne">

<!-- or only this noodle -->
<link rel="stylesheet" href="https://mian.ro/dist/mian-core.css">
<link rel="stylesheet" href="https://mian.ro/dist/noodles/penne.css">

<!-- or scope it to one element -->
<section data-noodle="penne" data-mode="dark">…</section>

Palette

Left half light, right half dark. Every text pair is verified for WCAG AA contrast when the site is built.

Background#ffffff
Surface#ffffff
Muted surface#f4f4f4
Foreground#0d0d0d
Muted text#5d5d5d
Border#ececec
Input border#d0d0d0
Primary#0d0d0d
On primary#ffffff
Secondary#f4f4f4
Accent#0f6e58
Success#15803d
Warning#b45309
Danger#dc2626
Info#0369a1
Focus ring#0d0d0d

Typography & shape

--mn-font-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif
--mn-font-heading-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif
--mn-radius-field / box / badge24px · 20px · 999px
densitycomfortable
shadowsnone
Choose a noodle

Minimal

Flat

Pixel

Linear

Thin

Glass

Textured

Bold

Elegant

Rounded

On this page