Skip to content

Sanuki

Square-cut, firm, exact. Sanuki udon from Kagawa is cut square, with sharp edges and a firm, springy bite. Sanuki is a rigid, square system: no radius anywhere, 2px straight lines, chunky square controls and a snap to every movement.

LinearJapan · Kagawaradius 0px / 0pxdefault densitynone shadows

Design language

Sanuki is cut square and has a firm bite. The interface has no radius anywhere, not on buttons, checkboxes, switches, avatars or charts, and is drawn with 2px ink lines and chunky square blocks with hard 4px offset shadows. Motion snaps into place with no easing tail, like a firm noodle springing back.

Principles

  • Zero radius, always.
  • 2px ink lines everywhere (--mn-border-w: 2px; borders in var(--mn-fg)).
  • Blocks with hard shadows (4px 4px 0 ink) that press flat when clicked.
  • Snap motion: 90ms, cubic-bezier(.9,0,.1,1) or steps().
  • Heavy (800) type, uppercase table headers.

Shape

Square everything; square switch knob and slider thumb; square radial.

Surface

Wheat-white surfaces with 2px ink borders and 4–6px hard offset shadows.

Colour

Indigo primary, amber accent, ink and wheat.

Type

Sans at 800, tight tracking; uppercase table headers.

Motion

sanuki-in: a stepped reveal (steps(4)) in 140ms; presses translate 4px into the shadow.

Data

Square outlined bars packed tight; square legend keys.

Designing new components in Sanuki

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

Do

  • border: 2px solid var(--mn-fg); border-radius: 0; box-shadow: 4px 4px 0 var(--mn-fg).
  • Press: transform: translate(4px, 4px); box-shadow: none, in 90ms.
  • Selected = inverted (ink fill, paper text).

Avoid

  • Any border-radius
  • Soft or blurred shadows
  • Thin 1px lines
  • Eased or springy motion

Recipe: a selectable tile

[data-noodle="sanuki"] .tile {
  padding: 14px 16px; border: 2px solid var(--mn-fg); border-radius: 0;
  background: var(--mn-surface); box-shadow: 4px 4px 0 var(--mn-fg); font-weight: 800;
  transition: transform 90ms cubic-bezier(.9, 0, .1, 1), box-shadow 90ms cubic-bezier(.9, 0, .1, 1);
}
[data-noodle="sanuki"] .tile:active { transform: translate(4px, 4px); box-shadow: 0 0 0 var(--mn-fg); }
[data-noodle="sanuki"] .tile[aria-selected="true"] { background: var(--mn-fg); color: var(--mn-bg); }

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

Colour, type and brand

What Sanuki 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 · Blue

#1e3a8a · mid

Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks.

Watch for: The safest choice is also the least memorable. A blue brand is told apart by its typography, shape and tone of voice, not by its blue.

Accent · Brown and terracotta

#b45309 · mid, saturated

Earth, craft, reliability, age. Feels made by hand and unhurried.

Watch for: Looks dull on screens unless the neutrals around it are warm too.

Page · Yellow and gold

#f7f6f2 · pale, muted

Optimism, attention, caution. Gold tones add value and ceremony.

Watch for: The lightest hue: white text on yellow fails, so yellow always carries dark text. Large yellow areas tire the eye.

Blue against brown and terracotta, close to complementary: strong contrast, so the accent must stay rare. The page itself is warm.

Type

One voice throughout: neutral sans. Headings are heavy, which reads as loud and direct. Clear, modern, impartial. The voice of software and signage.

Personality

Reads as square, firm, exact, industrial, serious. Intensity 2 of 5. Brand dimension: ruggedness.

Suits

engineering, architecture, industrial, b2b tools. Less suited to soft consumer, wellness.

Tone of voice

Calm and clear. Short sentences, one idea each, a friendly but not chatty register.

Logo

Square and angular marks fit: a wordmark in capitals or a solid block symbol. Use a heavy wordmark; a thin one would vanish beside these headings.

Inspired by the noodle

  • Cut square with sharp edgeszero radius on everything, including checkboxes, switches and avatars
  • Thick and firm2px lines, heavy square blocks, chunky controls
  • A firm bite (koshi)motion that snaps into place with no easing tail
  • Kagawa indigo norendeep indigo primary on wheat white

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="sanuki">

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

<!-- or scope it to one element -->
<section data-noodle="sanuki" 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#f7f6f2
Surface#ffffff
Muted surface#eeece6
Foreground#121212
Muted text#595650
Border#121212
Input border#121212
Primary#1e3a8a
On primary#ffffff
Secondary#eeece6
Accent#b45309
Success#15803d
Warning#b45309
Danger#dc2626
Info#0369a1
Focus ring#1e3a8a

Typography & shape

--mn-fontui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif
--mn-font-headingui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif
--mn-radius-field / box / badge0px · 0px · 0px
densitydefault
shadowsnone
Choose a noodle

Minimal

Flat

Pixel

Linear

Thin

Glass

Textured

Bold

Elegant

Rounded

On this page