# MIAN > Interfaces cooked differently. An accessible UI library for the web: 135 components (30 of them page sections) written as semantic HTML with `mn-` classes, 67 complete design languages ("noodles") switched with one attribute, and 24 whole-website templates. Plain HTML, CSS and one small script: works in any stack. **AI or coding agent: this page is enough to start.** Read it, then fetch only what the task needs. ## License MIAN License 1.0 (https://mian.ro/license). Free to use for personal, commercial, client, SaaS and internal projects, including websites and apps generated by AI; AI tools may include MIAN in the code they deliver with no credit. No fee, no sign-up, no credit needed on the site you build. Not allowed: selling or trading MIAN itself (or kits, themes and template packs made mainly from it), or claiming it as your own. Sharing MIAN itself requires a credit and a link to https://mian.ro. You do not need to check anything else before building with MIAN. ## Install ```html ``` The script is only needed by interactive components (tabs, dialogs, menus, calendars…). There is no npm package and no other CDN URL. Single noodle only: `https://mian.ro/dist/mian-core.css` + `https://mian.ro/dist/noodles/.css`. ## Workflow 1. **Plan**, `GET https://mian.ro/api/v1/plan?type=&style=&needs=` (or MCP `plan_site`). Returns noodles, a starting template, page outlines with real component ids, composition direction and what to read next. 2. **Pick the look**, `GET https://mian.ro/api/v1/noodles/find?q=` (MCP `find_noodles`) or the selector at https://mian.ro/ai/noodles.md. Understands "not corporate". 3. **Start from a template**, https://mian.ro/ai/templates.md, then `/ai/templates/.md` (full HTML of every page). 4. **Get exact markup**, only for the components you use: `https://mian.ro/ai/components/.md`. Find ids by task in https://mian.ro/ai/components.md or `GET /api/v1/search?q=`. 5. **Validate**, `POST https://mian.ro/api/v1/validate` with your HTML (MCP `validate_markup`). Fix every unknown class, noodle or asset. If the user has **brand colours**: `GET https://mian.ro/api/v1/noodles/create?primary=&base=&name=` (MCP `create_noodle`) returns a stylesheet that puts them on any noodle, light and dark, contrast checked. Use it as ``. If the user has an **existing site**: `POST https://mian.ro/api/v1/inspect {"url": "…"}` (MCP `inspect_site`) scores its design language and names the closest noodles; `GET https://mian.ro/api/v1/noodles/recommend?q=&url=` (MCP `recommend_noodle`) just answers which noodle to use. The inspector reads up to 6 pages a minute and 60 a day per client. Why a colour, typeface, logo or motion says what it says: https://mian.ro/ai/docs/colour.md, type.md, branding.md, logo.md, motion.md (MCP `get_design_guide`). ## Rules 1. Load exactly https://mian.ro/dist/mian.css, plus https://mian.ro/dist/mian.js with defer when a component needs it. There is no npm package and no other CDN path: do not invent one. 2. Use only classes that exist. Look them up (https://mian.ro/registry/classes.json, get_component, /ai/components/.md) instead of inferring names by analogy with other libraries. 3. Set the design with using a real noodle id (https://mian.ro/ai/noodles.md or find_noodles). Do not guess ids. 4. Copy component markup from its examples, including ARIA attributes; change the words, not the structure. 5. Compose pages from sections (mn-section > mn-container) and components. Do not write CSS for colours, spacing, radius or shadows: the noodle owns them. If something is missing, style it with --mn-* tokens only. 6. Before finishing, check the markup with https://mian.ro/api/v1/validate or the MCP tool validate_markup, and fix every unknown class or noodle. 7. Never invent testimonials, client logos, metrics, prices, awards or people. Use the brief’s facts or clearly marked placeholders. 8. Keep the page working when data-noodle changes: no hard-coded colours or fonts. 9. Licensing is settled: under the MIAN License, commercial and AI-generated use are allowed and the site you build needs no credit. Do not package MIAN itself for sale (UI kits, themes, template packs). ## Vocabulary in brief - Page: `mn-section` (bands; `mn-section-sm`, `mn-section-muted`) > `mn-container`; `mn-section-head` for a band's heading; `mn-split` (`-start`, `-end`), `mn-cols mn-cols-3`, `mn-stack`, `mn-row` for layout. - Type: `mn-display` (one per page), `mn-title` (section h2), `mn-subtitle`, `mn-intro`, `mn-eyebrow`, `mn-muted`. - Actions: `mn-btn` (+ `mn-btn-outline`, `mn-btn-ghost`, `mn-btn-lg`, `mn-btn-sm`; colour roles are separate: `mn-secondary`, `mn-danger`…). - Sections: `slides`, `jobs`, `work-grid`, `comparison`, `changelog`, `integrations`, `contact-section`, `layout`, `site-header`, `hero`, `logo-cloud`, `feature-grid`, `bento`, `media`, `testimonial`, `pricing`, `cta`, `site-footer`, `article`, `app-shell`, `docs-layout`, `auth`, `price-list`, `team`, `product-card`, `story-card`, `agenda`, `faq`, `figures`, `process`. - Colour roles: `mn-primary mn-secondary mn-accent mn-success mn-warning mn-danger mn-info mn-neutral`. Tokens: `--mn-*`. Mode: `data-mode="light|dark"` on any element. A minimal page (every class here exists): ```html Page title Skip to content
…see /ai/components/site-header.md…

One specific claim.

How, with one concrete detail.

How it works

    …see /ai/components/process.md…
…see /ai/components/site-footer.md…
``` ## Level 2: choose - [Components by task](https://mian.ro/ai/components.md): every component with what people use it for. - [Choose a noodle](https://mian.ro/ai/noodles.md): all 67 design languages with mood, intensity, contrast, density and what they suit. - [Templates](https://mian.ro/ai/templates.md): 24 whole websites, by kind. - [Designing websites](https://mian.ro/ai/docs/web-design.md): composition, anti-patterns of generated sites, page outlines, UI principles, launch checklist. ## Level 3: exact details - Component: `https://mian.ro/ai/components/.md` · JSON `https://mian.ro/api/v1/components/` - Noodle design language: `https://mian.ro/ai/noodles/.md` - Every valid class, attribute and asset: https://mian.ro/registry/classes.json - API: https://mian.ro/api/v1 · OpenAPI 3.1: https://mian.ro/openapi.json · API catalog (RFC 9727): https://mian.ro/.well-known/api-catalog · Registry: https://mian.ro/registry/index.json · Registry items: https://mian.ro/r/registry.json - MCP (Streamable HTTP, no key): `{ "mcpServers": { "mian": { "type": "http", "url": "https://mian.ro/mcp" } } }` - Everything in one file (large, for reference only): https://mian.ro/llms-full.txt ## Docs - [Introduction](https://mian.ro/ai/docs/introduction.md): A complete, accessible UI library for the web, one set of components, many design systems. - [Installation](https://mian.ro/ai/docs/installation.md): Two tags, no build step. Or copy the files into your project. - [Theming & noodles](https://mian.ro/ai/docs/theming.md): 67 design systems, light and dark, scoped anywhere, overridable everywhere. - [Frameworks](https://mian.ro/ai/docs/frameworks.md): Classes on HTML work everywhere. Here is how to wire them into common stacks. - [Accessibility](https://mian.ro/ai/docs/accessibility.md): Native elements first, WAI-ARIA patterns where the platform has none, and contrast verified at build time. - [Designing websites](https://mian.ro/ai/docs/web-design.md): An end-to-end guide to whole websites with MIAN: brief, noodle, pages, sections, words, images and a launch checklist, for designers, developers and AI. - [Colour psychology](https://mian.ro/ai/docs/colour.md): Colour is the fastest thing a brand says. People decide whether something looks trustworthy, cheap, calm or exciting before they read a word, and much of that judgement is colour. This page explains what each hue tends to communicate, how to build a palette that works as an interface rather than as a mood board, and what each MIAN noodle is saying with the colours it uses. - [Type psychology](https://mian.ro/ai/docs/type.md): A typeface is a tone of voice. The same sentence set in a geometric sans, a book serif and a monospace is three different speakers. This page explains what the main kinds of type say, how weight, size and spacing change the message, how to pair typefaces, and which voice each MIAN noodle speaks in. - [Branding](https://mian.ro/ai/docs/branding.md): A brand is what people expect from you before you speak, and whether you then keep that promise. The visible part (colour, type, logo, shape, motion, words) only works when every part says the same thing. This page is a short method for deciding what that thing is, and for choosing a MIAN noodle that says it. - [Logo design](https://mian.ro/ai/docs/logo.md): A logo does not explain a company; it identifies it. Its job is to be recognised quickly, at any size, in one colour, by someone who is not paying attention. This page covers the kinds of logo, what basic shapes communicate, the principles that make a mark last, and how to use a logo inside a MIAN interface. - [Motion](https://mian.ro/ai/docs/motion.md): Motion in an interface has one job: to explain what just changed. Something arrived, something left, something moved from here to there, something was pressed. Motion that does not explain a change is decoration, and decoration that moves is the most tiring kind. This page is the motion system MIAN uses, and the rules for adding your own. - [Noodle studio](https://mian.ro/ai/docs/studio.md): Turn brand guidelines into a MIAN noodle: enter your brand colour, choose a noodle for shape and character, set corners, density and type, and get a stylesheet with every text pair checked for contrast. - [Site inspector](https://mian.ro/ai/docs/inspect.md): Paste a URL: MIAN scores the page’s design language (colour, type, consistency, structure, originality), finds the closest noodles and shows the page’s own content in any of them. - [MIAN for AI agents](https://mian.ro/ai/docs/ai.md): Start here if you are an AI agent: install, rules, a deterministic site planner, a noodle finder, a markup validator, the registry, the HTTP API and the MCP server. Free to use. - [About, privacy and licence](https://mian.ro/ai/docs/about.md): Why MIAN is named after the Chinese word for noodle, who makes it (BTN GROUP SRL), its licence, and how the site handles privacy. - [License](https://mian.ro/ai/docs/license.md): The MIAN License: free for personal, commercial, client, SaaS and AI-generated projects, no credit needed on your site. MIAN itself may not be sold or traded; sharing it requires a credit and a link. ## About MIAN 1.7.0 is made by BTN GROUP SRL (https://mian.ro). Contact: https://mian.ro/contact. --- # MIAN components by task Every component, with what people use it for. Fetch `https://mian.ro/ai/components/.md` for exact classes and markup. Sections are whole page bands; the rest are controls and displays. License: MIAN License, free to use, not for resale. ## Actions - `button`: [Button](https://mian.ro/ai/components/button.md): Triggers an action. Six colour roles, five variants, four sizes, icon-only, loading and disabled states. Use for: button, call to action button, submit button, icon button, loading button. - `button-group`: [Button group](https://mian.ro/ai/components/button-group.md): Joins related buttons into one control, horizontally or vertically. Use for: joined buttons, segmented buttons, split button, toolbar buttons. - `toggle-group`: [Toggle group](https://mian.ro/ai/components/toggle-group.md) (needs mian.js): A set of pressable buttons, single choice like a segmented control, or multiple like a formatting toolbar. Use for: segmented control, view switcher, formatting toolbar, choose one option inline, grid list toggle. - `dropdown`: [Dropdown menu](https://mian.ro/ai/components/dropdown.md) (needs mian.js): A menu of actions anchored to a trigger. Built on the native Popover API: top layer, light dismiss and Escape are free. Use for: dropdown menu, more actions menu, kebab menu, user menu, overflow menu. - `copy-button`: [Copy button](https://mian.ro/ai/components/copy-button.md) (needs mian.js): Copies text to the clipboard and confirms it in place, visually and for screen readers. Use for: copy to clipboard, copy code, copy link, share link. - `swap`: [Swap](https://mian.ro/ai/components/swap.md): An icon toggle that swaps between two states with a small rotation, menu/close, play/pause, sun/moon. Use for: icon toggle, play pause, hamburger to close, favourite toggle. - `hold-button`: [Hold to confirm](https://mian.ro/ai/components/hold-button.md) (needs mian.js): A button that must be held for a moment before it acts. For actions that are hard to undo, without a second dialog. Use for: hold to delete, press and hold to confirm, safe destructive action. Avoid: Not for everyday actions: holding is slow on purpose. ## Forms - `field`: [Field](https://mian.ro/ai/components/field.md): Label, control, hint and error message wired together, plus form and fieldset layout. Use for: form field, label and hint, form layout, validation error, fieldset. - `input`: [Input](https://mian.ro/ai/components/input.md): Single-line text entry. Styles every native input type: text, email, password, search, number, date, time, color. Use for: text input, email field, search field, date input, form input. - `textarea`: [Textarea](https://mian.ro/ai/components/textarea.md): Multi-line text. Grows with its content in browsers that support field-sizing. Use for: message box, multi-line text, comment field, description field. - `select`: [Select](https://mian.ro/ai/components/select.md): A styled native select. Keeps the platform picker on mobile and full keyboard support everywhere. Use for: dropdown select, choose from list, country select, native select. - `checkbox`: [Checkbox](https://mian.ro/ai/components/checkbox.md): Native checkbox, restyled. Checked, indeterminate, disabled and invalid states; any colour role. Use for: checkbox, agree to terms, multiple choice, select all rows. - `radio`: [Radio](https://mian.ro/ai/components/radio.md): Native radio button, restyled. Use for one choice from a short list. Use for: radio buttons, single choice, choose one. - `switch`: [Switch](https://mian.ro/ai/components/switch.md): An on/off toggle for settings that apply immediately. A native checkbox with role="switch". Use for: toggle switch, on off setting, enable feature, settings toggle. - `slider`: [Slider](https://mian.ro/ai/components/slider.md) (needs mian.js): A styled native range input with a filled track. Works without JS; mian.js paints the fill in WebKit. Use for: range slider, price range, volume, numeric range input. - `file-input`: [File input](https://mian.ro/ai/components/file-input.md) (needs mian.js): A styled native file picker, and a drag-and-drop zone that wraps one. Use for: file upload, drag and drop upload, attach file, image upload. - `input-group`: [Input group](https://mian.ro/ai/components/input-group.md): An input with leading or trailing addons, text, icons or buttons, inside one border. Use for: input with prefix, url field, currency input, search with button. - `number-input`: [Number input](https://mian.ro/ai/components/number-input.md) (needs mian.js): A stepper: a numeric input between decrement and increment buttons. Respects min, max and step; hold to repeat. Use for: quantity stepper, plus minus quantity, number of guests, cart quantity. - `otp-input`: [OTP input](https://mian.ro/ai/components/otp-input.md) (needs mian.js): One-time-code entry. Auto-advances, handles backspace and paste, supports SMS autofill on the first box. Use for: verification code, one time password, 2fa code, pin entry. - `rating`: [Rating](https://mian.ro/ai/components/rating.md): Star rating built from radio buttons, so it submits with a form and needs no JavaScript. Use for: star rating input, rate a product, review stars. - `combobox`: [Combobox](https://mian.ro/ai/components/combobox.md) (needs mian.js): Autocomplete: a text input that filters a listbox as you type. Keyboard navigation and aria-activedescendant included. Use for: autocomplete, searchable select, typeahead, filter as you type. - `calendar`: [Calendar](https://mian.ro/ai/components/calendar.md) (needs mian.js): A month grid for picking a date, on its own or in a popover as a date field. Full keyboard support and locale-aware names. Use for: date picker, booking calendar, date range picker, check-in check-out, choose a day. - `tag-input`: [Tag input](https://mian.ro/ai/components/tag-input.md) (needs mian.js): Type to add tags as removable chips. Enter or comma adds, Backspace removes, pasted lists are split. Use for: tags input, add keywords, multi value input, email recipients. - `password-input`: [Password field](https://mian.ro/ai/components/password-input.md) (needs mian.js): A password input with a show/hide toggle and an optional four-step strength meter. Use for: password field, show password, password strength, new password. - `swatch-picker`: [Swatch picker](https://mian.ro/ai/components/swatch-picker.md): Pick a colour (or any visual option) from round swatches. Real radio buttons underneath. Use for: colour picker, product colour options, variant swatches, theme colour choice. - `time-slots`: [Time slots](https://mian.ro/ai/components/time-slots.md): A grid of bookable times, available, nearly full or taken, built on radio buttons. Use for: appointment times, book a time, available slots, booking module, reservation time. - `seat-map`: [Seat map](https://mian.ro/ai/components/seat-map.md): Pick seats for a cinema, theatre, bus or venue: rows, an aisle, taken and accessible seats, and a legend. Use for: seat selection, cinema seats, theatre booking, bus seats, venue map. - `radio-card`: [Option cards](https://mian.ro/ai/components/radio-card.md): Selectable cards for shipping, plans or payment, and pill options for sizes and variants. Use for: shipping options, choose a plan, payment method, size picker, option cards. - `date-range`: [Date range](https://mian.ro/ai/components/date-range.md) (needs mian.js): Pick a period for a report: presets for the common ranges and two dates for anything else. Use for: date range picker, report period, last 30 days filter, from and to dates. - `task-list`: [Task list](https://mian.ro/ai/components/task-list.md): A checklist where a finished task is struck through as the box is ticked. Use for: todo list, checklist with strike through, tasks, launch checklist. - `duration-picker`: [Duration picker](https://mian.ro/ai/components/duration-picker.md) (needs mian.js): Hours, minutes and seconds as three small fields that move on as you type. Use for: duration input, hours minutes seconds, timer length, time span. ## Data display - `typography`: [Typography](https://mian.ro/ai/components/typography.md): Headings, lead, body, links, quotes and lists that follow the noodle's heading and body fonts. Use for: headings, text styles, prose, rich text, lists and quotes. - `avatar`: [Avatar](https://mian.ro/ai/components/avatar.md): An image, initials or icon representing a person or entity. Sizes, shapes, presence and stacked groups. Use for: user picture, initials, profile image, avatar group, presence dot. - `badge`: [Badge](https://mian.ro/ai/components/badge.md): A compact label for status, counts and categories. Use for: status label, count badge, tag, new label, category label. Avoid: Badges on everything, keep them for status and counts. - `chip`: [Chip](https://mian.ro/ai/components/chip.md) (needs mian.js): Removable tags and toggleable filter chips. Use for: filter chips, removable tags, selected filters, toggle filters. - `card`: [Card](https://mian.ro/ai/components/card.md): A surface for grouped content: header, body, footer, media and actions. Use for: card, content box, panel, settings card, summary card. Avoid: Cards only to create visual separation. Use whitespace and rules; cards are for objects (a plan, a product, a message). - `table`: [Table](https://mian.ro/ai/components/table.md) (needs mian.js): Data tables with hover, striping, compact density, selection, numeric alignment and sortable columns. Use for: data table, sortable table, admin table, transactions list, comparison table. - `list`: [List](https://mian.ro/ai/components/list.md): Bordered lists of rows with titles, descriptions, avatars and trailing content, or links. Use for: list of items, members list, settings list, link list, inbox rows. - `kbd`: [Kbd](https://mian.ro/ai/components/kbd.md): Keyboard keys and shortcuts. Use for: keyboard shortcut, key hint, hotkey. - `code`: [Code](https://mian.ro/ai/components/code.md): Inline code and code blocks in the noodle's monospace font. Use for: code block, inline code, snippet, terminal command. - `stat`: [Stat](https://mian.ro/ai/components/stat.md): Key metrics with labels and trend deltas, alone or in a joined row. Use for: kpi, metric card, dashboard numbers, revenue stat, trend delta. - `chart`: [Chart](https://mian.ro/ai/components/chart.md) (needs mian.js): Bar, horizontal bar, line/area and donut charts from plain markup. Each noodle draws them in its own style. Use for: bar chart, line chart, donut chart, graph, analytics chart. - `timeline`: [Timeline](https://mian.ro/ai/components/timeline.md): A vertical sequence of events with markers, titles, times and content. Use for: timeline, order tracking, history, activity log, company history. - `accordion`: [Accordion](https://mian.ro/ai/components/accordion.md): Stacked disclosure sections. Native
; give them the same name for exclusive open. Use for: collapsible sections, expand collapse, details list, product details accordion. - `description-list`: [Description list](https://mian.ro/ai/components/description-list.md): Key–value pairs for detail views and summaries. Use for: key value pairs, specs, order details, fact box, properties. - `divider`: [Divider](https://mian.ro/ai/components/divider.md): A horizontal or vertical rule, optionally with a label. Use for: separator, horizontal rule, or divider. - `skeleton`: [Skeleton](https://mian.ro/ai/components/skeleton.md): Loading placeholders shaped like the content that is coming. Use for: loading placeholder, content loading, shimmer. - `empty-state`: [Empty state](https://mian.ro/ai/components/empty-state.md): What to show when there is nothing to show, with a next step. Use for: no results, nothing here yet, first use, empty inbox, zero state. - `indicator`: [Indicator](https://mian.ro/ai/components/indicator.md): A count or status dot pinned to the corner of any element, avatars, icons, buttons. Use for: notification dot, unread count, status dot on avatar. - `chat`: [Chat](https://mian.ro/ai/components/chat.md): Message bubbles for conversations and assistants, with avatars, timestamps and a typing state. Use for: chat, messages, ai assistant conversation, support chat, message bubbles. - `tree`: [Tree view](https://mian.ro/ai/components/tree.md): Nested, collapsible lists, file trees, navigation and outlines, built on native
. Use for: file tree, nested navigation, folder structure, outline. - `kanban`: [Kanban board](https://mian.ro/ai/components/kanban.md): Columns of cards for a pipeline, sprint or sales process, counts, colour dots and card meta. Use for: kanban board, deals pipeline, task board, sprint board, columns of cards. - `usage-meter`: [Usage meter](https://mian.ro/ai/components/usage-meter.md): Plan usage against limits, seats, storage, API calls, with warning and over-limit states. Use for: plan usage, quota, storage used, seats used, billing limits. - `notifications`: [Notification list](https://mian.ro/ai/components/notifications.md): An inbox of notifications with unread markers, icons or avatars, times and inline actions. Use for: notifications list, inbox, activity feed, alerts center. - `invoice`: [Invoice](https://mian.ro/ai/components/invoice.md): A printable invoice or receipt: parties, line items, totals with tax, and payment notes. Use for: invoice, receipt, bill, order summary, printable document. - `funnel`: [Funnel](https://mian.ro/ai/components/funnel.md): Conversion through the stages of a funnel, visits to signups to paid, with the rate between steps. Use for: conversion funnel, sales funnel, drop-off, signup funnel. - `leaderboard`: [Leaderboard](https://mian.ro/ai/components/leaderboard.md): A ranked list, top sellers, customers, contributors, with medals for the top three and a trend. Use for: ranking, top sellers, leaderboard, top customers. - `product-gallery`: [Product gallery](https://mian.ro/ai/components/product-gallery.md): A main image with clickable thumbnails, pure CSS, keyboard-friendly, up to six images. Use for: product images, image gallery, thumbnails, product photos. - `review-summary`: [Review summary](https://mian.ro/ai/components/review-summary.md): An average rating with stars, the number of reviews and a distribution of 5 to 1 stars. Use for: reviews summary, average rating, rating distribution, customer reviews. - `post`: [Social post](https://mian.ro/ai/components/post.md) (needs mian.js): A post in a feed: author, time, text, media and like / reply / repost / share actions with counts. Use for: social post, feed item, like and share, status update. - `profile-header`: [Profile header](https://mian.ro/ai/components/profile-header.md): The top of a profile page: cover, avatar, name, bio, details, stats and a follow button. Use for: profile page, user profile, account header, creator profile. - `comment-thread`: [Comment thread](https://mian.ro/ai/components/comment-thread.md): Nested comments with replies, times and reply / like actions. Use for: comments, replies, discussion, nested comments. - `filter-bar`: [Filter bar](https://mian.ro/ai/components/filter-bar.md): The toolbar above a list or table: search, quick filter chips, sort, a view switch and the result count. Use for: filters, filter toolbar, search and filter, table toolbar, sort and filter results. - `bulk-actions`: [Bulk actions](https://mian.ro/ai/components/bulk-actions.md) (needs mian.js): A bar that appears when rows are selected, the count, actions for the selection, and a way out, with select-all. Use for: bulk actions, select rows, batch edit, archive selected, selection toolbar. - `curriculum`: [Curriculum](https://mian.ro/ai/components/curriculum.md): Modules and lessons of a course with durations, lesson type, done and locked states, each module a native disclosure. Use for: course curriculum, syllabus, lesson list, course modules, training outline. - `listing-card`: [Listing card](https://mian.ro/ai/components/listing-card.md) (needs mian.js): A property, rental or venue in a results grid: photo, price, key facts, address and a save toggle, the title is the link. Use for: property listing, real estate card, rental listing, apartment card, marketplace listing. - `kpi`: [KPI card](https://mian.ro/ai/components/kpi.md) (needs mian.js): One number that matters, with its change, a sparkline you can hover and a line of context. Use for: kpi card, metric with sparkline, number with trend, dashboard headline numbers, revenue card. - `heatmap`: [Heatmap](https://mian.ro/ai/components/heatmap.md): Activity by day, or by hour and weekday, as a grid of cells whose depth of colour is the value. Hover a cell for the exact number. Use for: activity heatmap, calendar heatmap, contribution graph, busiest days, usage by hour. - `gauge`: [Gauge](https://mian.ro/ai/components/gauge.md): A half-circle meter for one value against a known range: a score, a quota, a target. Use for: gauge, score dial, meter, health score, quota dial. - `breakdown`: [Breakdown](https://mian.ro/ai/components/breakdown.md): How a total splits into parts: one stacked bar and a list with each part’s value and share. Use for: stacked bar with legend, share by category, traffic sources, sales by channel, budget split. - `uptime`: [Uptime](https://mian.ro/ai/components/uptime.md): A status page row: a service, its state today and one bar per day of history. Hover a day for what happened. Use for: status page, service uptime, incident history, system status, availability bars. - `voice-note`: [Voice note](https://mian.ro/ai/components/voice-note.md) (needs mian.js): An audio message as a waveform: play, pause, see where you are and drag to seek. Use for: voice message, audio waveform player, voice memo, audio clip in chat. ## Feedback - `alert`: [Alert](https://mian.ro/ai/components/alert.md): Inline messages for information, success, warnings and errors, with optional actions and dismiss. Use for: alert message, warning box, error message, success message, info notice. - `toast`: [Toast](https://mian.ro/ai/components/toast.md) (needs mian.js): Temporary notifications. Mian.toast() from script, or data-mn-toast on a button. Pause on hover, stack, dismiss. Use for: toast notification, snackbar, saved message, temporary notification. - `progress`: [Progress](https://mian.ro/ai/components/progress.md) (needs mian.js): Linear progress, determinate from aria-valuenow, or indeterminate without it. Use for: progress bar, upload progress, loading bar, completion. - `radial-progress`: [Radial progress](https://mian.ro/ai/components/radial-progress.md) (needs mian.js): Circular progress with a centred value. Use for: circular progress, score ring, percentage circle, goal progress. - `spinner`: [Spinner](https://mian.ro/ai/components/spinner.md): Indeterminate loading indicators: ring and dots. Use for: spinner, loading indicator, busy. - `banner`: [Banner](https://mian.ro/ai/components/banner.md): A full-width announcement bar for launches, maintenance notices or cookie-free notes. Dismissible. Use for: announcement bar, maintenance notice, top banner, launch announcement. - `onboarding`: [Onboarding checklist](https://mian.ro/ai/components/onboarding.md): The first steps of a new account, with progress, done states and one action per step. Use for: onboarding checklist, getting started steps, setup progress, first run. - `loader`: [Loader](https://mian.ro/ai/components/loader.md): Eight loading indicators, dots, bars, wave, grid, pulse, orbit, ring and a top-of-page line, in the current colour. Use for: loading animation, page loader, loading dots, progress line. - `cookie-consent`: [Cookie consent](https://mian.ro/ai/components/cookie-consent.md): A consent notice with equal-weight Accept and Reject, and per-purpose switches, honest by default, dismissible. Use for: cookie banner, cookie consent, gdpr consent, privacy choices, tracking consent. ## Overlays - `modal`: [Modal](https://mian.ro/ai/components/modal.md) (needs mian.js): A dialog on the native element: focus trap, Escape, inert background and focus return from the platform. Use for: dialog, popup, confirm dialog, modal form, lightbox. - `drawer`: [Drawer](https://mian.ro/ai/components/drawer.md) (needs mian.js): A panel that slides in from the right, left or bottom. Also a native . Use for: side panel, slide over, filter drawer, mobile menu panel, bottom sheet. - `popover`: [Popover](https://mian.ro/ai/components/popover.md) (needs mian.js): Rich, non-modal content anchored to a trigger, on the native Popover API. Use for: popover, floating panel, date picker popup, info bubble. - `tooltip`: [Tooltip](https://mian.ro/ai/components/tooltip.md): Short labels on hover and focus. Pure CSS; the text is a real element referenced by aria-describedby. Use for: tooltip, hover hint, icon label. - `command`: [Command palette](https://mian.ro/ai/components/command.md) (needs mian.js): Search-and-run: filterable, grouped, keyboard-driven. Inline or in a dialog opened with ⌘K. Use for: command palette, search dialog, cmd k, quick actions, spotlight search. - `hover-card`: [Hover card](https://mian.ro/ai/components/hover-card.md): A preview card that appears when hovering or focusing a link, profiles, link previews, definitions. Use for: link preview, profile preview on hover, definition popup. - `context-menu`: [Context menu](https://mian.ro/ai/components/context-menu.md) (needs mian.js): A menu that opens at the pointer on right-click, or from the keyboard with Shift+F10. Use for: right click menu, context menu. ## Navigation - `navbar`: [Navbar](https://mian.ro/ai/components/navbar.md) (needs mian.js): A top bar with brand, links and actions. Sticky and translucent; collapses behind a menu button on small screens. Use for: app top bar, navigation bar, sticky header. - `tabs`: [Tabs](https://mian.ro/ai/components/tabs.md) (needs mian.js): Switch between views. Underlined, boxed (segmented), pill and vertical variants; full WAI-ARIA keyboard support. Use for: tabs, switch views, segmented tabs, settings sections. - `breadcrumbs`: [Breadcrumbs](https://mian.ro/ai/components/breadcrumbs.md): Where you are in a hierarchy, with links back up. Use for: breadcrumbs, where am i, category path. - `pagination`: [Pagination](https://mian.ro/ai/components/pagination.md): Move between pages of results. Use for: pagination, next previous, page numbers, results pages. - `steps`: [Steps](https://mian.ro/ai/components/steps.md): Progress through a multi-step flow, horizontal or vertical. Use for: checkout steps, wizard progress, multi-step form, stepper. - `sidebar`: [Sidebar](https://mian.ro/ai/components/sidebar.md): Vertical application navigation with groups, icons and badges. Use for: app sidebar, side navigation, admin menu, docs navigation. - `dock`: [Dock](https://mian.ro/ai/components/dock.md): A bottom navigation bar for mobile apps and compact layouts, floating or in the page. Use for: bottom navigation, mobile tab bar, app dock. - `stories-bar`: [Stories bar](https://mian.ro/ai/components/stories-bar.md): A scrolling row of avatars with a ring for new stories and a grey ring for seen ones. Use for: stories, story avatars, social stories row. - `page-header`: [Page header](https://mian.ro/ai/components/page-header.md): The top of an application page: where you are, what this is, its facts and the actions you can take. Use for: app page header, page title with actions, detail page heading, title and buttons, record header. ## Layout & utilities - `collapse`: [Collapse](https://mian.ro/ai/components/collapse.md): A single show/hide section. Native
, no JavaScript. Use for: show more, expandable section, read more. - `carousel`: [Carousel](https://mian.ro/ai/components/carousel.md) (needs mian.js): A horizontally scrolling, snapping track. Swipe, trackpad and keyboard; optional arrows and dots. Use for: carousel, slider of cards, horizontal scroll, image slider. Avoid: As the only way to reach content, carousels hide things. - `theme-controller`: [Theme controller](https://mian.ro/ai/components/theme-controller.md) (needs mian.js): Switch noodle and light/dark mode for a page, or scope a noodle to any element. Use for: theme switcher, dark mode toggle, change noodle, appearance setting. - `scroll-area`: [Scroll area](https://mian.ro/ai/components/scroll-area.md): A scrolling region with thin scrollbars and shadows that appear only where more content is hidden. Use for: scrollable panel, overflow region, scroll shadows. - `mockup`: [Mockup](https://mian.ro/ai/components/mockup.md): Browser, window and phone frames for screenshots, demos and landing pages. Use for: browser frame, phone mockup, app screenshot frame, device frame. - `dashboard`: [Dashboard grid](https://mian.ro/ai/components/dashboard.md): A twelve-track grid for dashboards and a widget frame: title, period, body, footer. It lays out for the width it gets, so it works beside a sidebar. Use for: dashboard layout, dashboard grid, widget panel, admin overview page, analytics overview. - `gradient`: [Gradient backdrop](https://mian.ro/ai/components/gradient.md): Soft mesh gradients for a band, a hero or a media frame. By default they are mixed from the noodle’s own colours, so they follow the noodle and the mode; eight named palettes are there when you want a fixed mood. Use for: gradient background, mesh gradient, hero backdrop, colour wash, grain texture. Avoid: Never a purple-to-blue wash behind a centred headline, and never gradient-filled text. One gradient per page, as a backdrop or a media frame. - `motion`: [Motion](https://mian.ro/ai/components/motion.md) (needs mian.js): A small motion system: three durations, three curves, the noodle’s own entrance for anything you add, staggered lists, press and lift feedback, drawn lines, counted numbers and cross-faded changes. All of it stops under reduced motion. Use for: animation, entrance animation, staggered list, hover lift, count up number. Avoid: Do not fade sections in on scroll and do not animate everything. Motion explains a change: something arrived, moved or was pressed. ## Sections - `slides`: [Slides](https://mian.ro/ai/components/slides.md) (needs mian.js): A presentation website: full-height slides that snap, with arrow-key navigation, a counter and progress. Use for: presentation website, pitch deck, keynote, slides, investor deck. Avoid: Paragraphs on slides; decks that only work with a clicker. - `jobs`: [Jobs list](https://mian.ro/ai/components/jobs.md): Open roles for a careers page: title, team, location and type, the whole row one link. Use for: careers page, open positions, job listings, we are hiring, vacancies. Avoid: Roles without location, remote policy or team. - `work-grid`: [Work grid](https://mian.ro/ai/components/work-grid.md): Selected projects for an agency or portfolio in mixed sizes: the image, client, what was made and the outcome, each tile one link. Use for: portfolio projects, show four portfolio projects, case studies grid, selected work, agency work. Avoid: Twelve small thumbnails, or tiles without client and outcome. Four to six projects, mixed sizes. - `comparison`: [Comparison table](https://mian.ro/ai/components/comparison.md): Plans or products side by side: grouped feature rows, included and not-included marks, a highlighted column and a sticky header. Use for: compare plans, feature comparison table, plan matrix, versus competitors, which plan. Avoid: Comparing against named competitors without facts you can back up. - `changelog`: [Changelog](https://mian.ro/ai/components/changelog.md): Release notes by date: version, a headline, and changes tagged New, Improved or Fixed. Use for: release notes, changelog, what is new, product updates, version history. Avoid: Marketing copy instead of what changed. - `integrations`: [Integrations](https://mian.ro/ai/components/integrations.md): A directory of integrations or partners: mark, name, category and one line on what it does, each tile one link. Use for: integrations directory, works with, app marketplace, connectors, partners grid. Avoid: Listing integrations that do not exist yet as if they did. - `contact-section`: [Contact section](https://mian.ro/ai/components/contact-section.md): The end of a company or agency page: what happens after you write, direct details, and a short form, side by side. Use for: contact form section, get in touch, start a project, enquiry form, request a quote. Avoid: Long forms. Ask for name, email and a few lines; say when you will reply. - `layout`: [Page layout](https://mian.ro/ai/components/layout.md): Containers, section rhythm, display type and grids, the frame every page is built in. Use for: page structure, section spacing, two column split, content width, grid columns. Avoid: Do not add your own container, max-width or section padding CSS, mn-section and mn-container already set the rhythm. - `site-header`: [Site header](https://mian.ro/ai/components/site-header.md): A website header: brand, navigation, actions, and a menu that works without JavaScript on small screens. Use for: website navigation, top menu, logo and links, mobile menu, header with call to action. Avoid: More than five or six links, or more than one primary button. - `hero`: [Hero](https://mian.ro/ai/components/hero.md): The opening section of a page: a display headline, an intro, actions and optional media, stacked, split or centred. Use for: landing page opening, above the fold, headline and call to action, product introduction, homepage top. Avoid: Do not default to badge + giant headline + paragraph + two buttons. A statement headline alone, a split with the real product, or a figure can open better. One primary action only. - `logo-cloud`: [Logo cloud](https://mian.ro/ai/components/logo-cloud.md): A quiet row of customer or partner wordmarks, with an optional caption. Use for: client logos, trusted by, partners, customer wordmarks, press mentions. Avoid: Never invent client or press logos. Leave it out until real, permitted names exist. - `feature-grid`: [Feature grid](https://mian.ro/ai/components/feature-grid.md): Features as a ruled editorial grid or with icons, plus a check list for plans and specs. Use for: features list, services list, what we do, capabilities, benefits. Avoid: Three identical icon cards with adjectives. Use the ruled variant with specific claims, and do not follow another grid with it. - `bento`: [Bento grid](https://mian.ro/ai/components/bento.md): A grid of tiles in mixed sizes for showing several product details at once. Use for: showcase product features, show product capabilities, portfolio highlights, mixed size tiles, product tour. Avoid: Tiles with only an icon and a sentence. Each tile should show a real state of the product or a real piece of work. One bento per page. - `media`: [Media](https://mian.ro/ai/components/media.md): Images, video and illustrations in a fixed aspect ratio, with captions and a labelled placeholder for photos still to come. Use for: large image, video, photo with caption, image placeholder, screenshot. Avoid: Stock photos of people at laptops. Use the product, real photography or a described placeholder. - `testimonial`: [Testimonial](https://mian.ro/ai/components/testimonial.md): One large pull quote, or a wall of short customer quotes. Use for: customer quote, testimonials, reviews, social proof, pull quote. Avoid: Never invent quotes, names or roles. One specific, attributed quote beats a wall of vague ones. - `pricing`: [Pricing](https://mian.ro/ai/components/pricing.md): Plan tiers with a featured plan, feature lists and a monthly/yearly switch in pure CSS. Use for: saas pricing, pricing plans, subscription tiers, monthly yearly toggle, compare plans. Avoid: More than four tiers, or hiding every price behind “Contact us”. - `cta`: [Call to action](https://mian.ro/ai/components/cta.md): A closing band that asks for one thing, sign up, book, subscribe, with an optional inline email form. Use for: call to action, sign up band, newsletter signup, book a demo, final section. Avoid: A CTA band after every section. Once, near the end, asking for the same action as the hero. - `site-footer`: [Site footer](https://mian.ro/ai/components/site-footer.md): A website footer: brand, link columns, legal line and an optional giant wordmark. Use for: website footer, footer links, legal line, sitemap links, giant wordmark footer. Avoid: Links to pages that do not exist. - `article`: [Article](https://mian.ro/ai/components/article.md): A long-read layout: headline, byline, a comfortable reading column, wide figures, drop cap and pull quotes. Use for: blog post, long read, case study text, editorial article, essay. Avoid: Lines wider than about 75 characters; ads inside the text. - `app-shell`: [App shell](https://mian.ro/ai/components/app-shell.md): The frame of a web app: a sidebar, a top bar and a content area that becomes a drawer layout on small screens. Use for: admin dashboard layout, web app frame, sidebar and top bar, saas app, back office. Avoid: Marketing sections (hero, bento) inside an app, apps are built from stats, tables, forms and charts. - `docs-layout`: [Docs layout](https://mian.ro/ai/components/docs-layout.md): A documentation page: navigation on the left, the reading column, and an “on this page” list on the right, collapsing to a menu on small screens. Use for: documentation site, developer docs, knowledge base, help center, guide with table of contents. Avoid: Code as screenshots; walls of text without headings. - `auth`: [Sign-in page](https://mian.ro/ai/components/auth.md): A split sign-in or sign-up page: the form on one side, the brand and a quote or image on the other. Use for: sign in page, login, sign up page, register, create account. Avoid: Asking for more than you need; blocking paste in password fields. - `price-list`: [Price list](https://mian.ro/ai/components/price-list.md): A menu-style list of items with dotted leaders to the price, for restaurants, salons, studios and services. Use for: restaurant menu, service prices, salon price list, menu with prices, rates. Avoid: Menus as images or PDFs. - `team`: [Team](https://mian.ro/ai/components/team.md): A grid of people with a portrait, name and role. Use for: team members, our people, staff, speakers, founders. Avoid: Invented people. Use real names and roles, or leave it out. - `product-card`: [Product card](https://mian.ro/ai/components/product-card.md): Products in a shop grid: image, name, variant, price and a badge, the whole card is one link. Use for: product grid, shop listing, ecommerce products, catalogue, collection page. Avoid: Fake scarcity badges and struck-through prices that were never real. - `story-card`: [Story card](https://mian.ro/ai/components/story-card.md): Articles and posts in a grid or as a lead story: image, kicker, headline, excerpt and byline, the headline is the link. Use for: blog index, articles grid, news list, latest posts, magazine front page. Avoid: Every story the same size, make the lead story larger. - `agenda`: [Agenda](https://mian.ro/ai/components/agenda.md): A schedule of times, sessions, speakers and tracks, for events, courses and programmes. Use for: event schedule, conference agenda, timetable, programme, course schedule. Avoid: Sessions without times or rooms. - `faq`: [FAQ section](https://mian.ro/ai/components/faq.md): Questions and answers beside a sticky heading, built on the accordion. Use for: faq, frequently asked questions, questions and answers, objections, help questions. Avoid: Questions nobody asks. Answer real objections (price, risk, effort, lock-in) in one or two sentences. - `figures`: [Figures](https://mian.ro/ai/components/figures.md): Large numbers with a line of context each, results, scale or specs, set in display type. Use for: key numbers, statistics band, results, metrics, impact numbers. Avoid: Numbers without context or real source. Do not add metrics that are not in the brief. - `process`: [Process](https://mian.ro/ai/components/process.md): Numbered steps in a row, how it works, how to order, what happens next. Use for: how it works, our process, steps, onboarding steps, what happens next. Avoid: More than five steps, or steps that are really features. --- # Choose a MIAN noodle A noodle is a complete design language (palette, shape, type, depth, texture, motion and how controls, charts and tables are drawn) over the same markup. Set it with ``; any element can carry its own. Pick from the character of the brief, not the colour. To match a brief automatically: `GET https://mian.ro/api/v1/noodles/find?q=` or MCP `find_noodles`. Intensity: 1 quiet … 5 loud. Contrast is the visual contrast of the design (all noodles meet WCAG AA text contrast). Density: compact, default or comfortable. ## Minimal The plainest bowls: neutral, quiet, nothing extra. Let type and space carry everything. Large display headlines, generous section spacing, hairline rules instead of boxes, product UI as the only imagery. One accent at most. Good for software, finance, tools and studios. - `mian`: [Mian](https://mian.ro/ai/noodles/mian.md): The noodle itself. Black, white, nothing else. Mood: neutral, precise, calm, timeless, serious, minimal. Intensity 1/5 · contrast high · density default. Good for: saas, developer tools, documentation, dashboards, studios, any brand that will add its own colour. Less for: children, festive campaigns. - `yangchun`: [Yangchun](https://mian.ro/ai/noodles/yangchun.md): Clear broth, quietly refined. Mood: refined, friendly, clean, trustworthy, polished. Intensity 2/5 · contrast medium · density comfortable. Good for: consumer apps, settings, productivity, health, fintech. Less for: editorial, raw or brutal brands. - `linguine`: [Linguine](https://mian.ro/ai/noodles/linguine.md): Warm paper, a serif voice, one clay colour. Mood: warm, literate, calm, thoughtful, refined, minimal, human, conversational. Intensity 1/5 · contrast medium · density comfortable. Good for: ai products, assistants and chat, writing tools, research, publications, documentation, studios, reading apps. Less for: dense admin, games, loud campaigns. - `penne`: [Penne](https://mian.ro/ai/noodles/penne.md): Plain, neutral, cut once. Mood: neutral, minimal, clean, modern, quiet, soft, product-first. Intensity 1/5 · contrast high · density comfortable. Good for: ai products, assistants and chat, consumer apps, saas, productivity, developer tools, search. Less for: editorial, heritage brands, children. - `chitarra`: [Chitarra](https://mian.ro/ai/noodles/chitarra.md): Black, white, one blue. Cut on steel strings. Mood: stark, bold, fast, direct, minimal, high-contrast, social. Intensity 3/5 · contrast high · density default. Good for: social apps, feeds and timelines, news, communities, media apps, messaging, sport. Less for: luxury, wellness, children. - `shio`: [Shio](https://mian.ro/ai/noodles/shio.md): The clearest broth. Light, airy, afloat. Mood: airy, light, calm, optimistic, gentle. Intensity 1/5 · contrast low · density comfortable. Good for: wellness, onboarding, landing pages, personal sites. Less for: dense admin, financial data. - `spaghetti`: [Spaghetti](https://mian.ro/ai/noodles/spaghetti.md): Pasta, tomato, a poster. Mood: italian, poster, confident, minimal, graphic, european. Intensity 3/5 · contrast high · density default. Good for: creative studios, agencies, restaurants, design portfolios, cultural events. Less for: soft consumer apps, children. - `bucatini`: [Bucatini](https://mian.ro/ai/noodles/bucatini.md): A strand with a hole through it. Mood: hollow, outlined, crafted, minimal, precise. Intensity 2/5 · contrast high · density default. Good for: design tools, studios, architecture, portfolios. Less for: data-dense admin. - `hofun`: [Hofun](https://mian.ro/ai/noodles/hofun.md): Wide, flat, silky. Mood: silky, soft, tonal, calm, modern. Intensity 2/5 · contrast low · density comfortable. Good for: consumer saas, productivity, messaging, personal finance. Less for: high-contrast brands, print-like editorial. - `hiyamugi`: [Hiyamugi](https://mian.ro/ai/noodles/hiyamugi.md): White, cold, one coloured strand. Mood: quiet, white, fresh, delicate, japanese, minimal. Intensity 1/5 · contrast medium · density comfortable. Good for: studios, product sites, portfolios, minimal shops. Less for: loud campaigns. - `ramyeon`: [Ramyeon](https://mian.ro/ai/noodles/ramyeon.md): Three minutes, a terminal and a timer. Mood: technical, terminal, nerdy, raw, fast. Intensity 2/5 · contrast high · density compact. Good for: developer tools, cli products, hacker events, changelogs, infrastructure. Less for: luxury, children, wellness. ## Flat Solid colour, no gradients, no blur: flat sheets and ribbons. Solid colour does the structuring: tonal bands instead of borders, wide ribbons for navigation and progress, no gradients, blur or soft shadows. Keep illustrations flat too. Good for consumer products, education, public services, food and playful brands. - `fettuccine`: [Fettuccine](https://mian.ro/ai/noodles/fettuccine.md): One sheet, many ribbons. Tonal and friendly. Mood: tonal, friendly, modern, approachable, clean, trustworthy, flat. Intensity 2/5 · contrast medium · density comfortable. Good for: consumer apps, mobile, productivity, education, public services, saas, android apps. Less for: luxury, editorial, raw or brutal brands. - `lasagne`: [Lasagne](https://mian.ro/ai/noodles/lasagne.md): Flat sheets, stacked in layers. Mood: flat, layered, structured, warm, playful. Intensity 3/5 · contrast medium · density default. Good for: education, food, public services, consumer brands. Less for: quiet luxury, dense data. - `pappardelle`: [Pappardelle](https://mian.ro/ai/noodles/pappardelle.md): Wide ribbons of flat colour. Mood: bold, flat, wide, confident, warm, european. Intensity 4/5 · contrast high · density comfortable. Good for: presentations, campaigns, agencies, non-profits, events. Less for: dense admin, subtle luxury. - `paccheri`: [Paccheri](https://mian.ro/ai/noodles/paccheri.md): Big flat tubes. Primary colours. Mood: flat, geometric, bold, primary colours, bauhaus, playful, confident, european. Intensity 4/5 · contrast high · density default. Good for: creative agencies, education, museums, events, design portfolios, public services. Less for: quiet luxury, healthcare. - `farfalle`: [Farfalle](https://mian.ro/ai/noodles/farfalle.md): Butterflies in pastel. Mood: playful, pastel, friendly, social, light-hearted. Intensity 3/5 · contrast medium · density comfortable. Good for: social apps, communities, kids and families, consumer onboarding. Less for: finance, legal, enterprise. ## Pixel Dots, squares and grids: interfaces drawn on a matrix. Everything sits on a matrix: dots, squares and cells. Use a visible grid or dot screen sparingly behind content, draw numbers and progress in cells, and let motion step rather than glide. Good for hardware, developer and data products, games and anything with a technical personality. - `yinzhen`: [Yinzhen](https://mian.ro/ai/noodles/yinzhen.md): Silver needles. A system made of dots. Mood: dotted, digital, hardware, minimal, technical. Intensity 3/5 · contrast high · density default. Good for: hardware products, gadgets, developer tools, music tech. Less for: traditional brands, wellness. - `quadretti`: [Quadretti](https://mian.ro/ai/noodles/quadretti.md): Little squares, graph paper, pixels. Mood: grid, pixel, playful, technical, retro. Intensity 3/5 · contrast high · density compact. Good for: games, developer tools, data products, education, creative tools. Less for: luxury, wellness. - `acini`: [Acini di pepe](https://mian.ro/ai/noodles/acini.md): Peppercorn dots and halftone. Mood: halftone, dotted, print, playful, editorial. Intensity 3/5 · contrast medium · density default. Good for: magazines, music, culture, creative studios. Less for: dense admin. ## Linear Straight cuts, rules and strands. Build on a visible grid: aligned edges, rules, tabular figures, mono labels. Denser sections are welcome; splits and tables fit naturally. Good for developer tools, data products, logistics and engineering. - `kalguksu`: [Kalguksu](https://mian.ro/ai/noodles/kalguksu.md): Knife-cut, precise, clean. Mood: precise, structured, monochrome, dependable, engineered. Intensity 2/5 · contrast high · density default. Good for: finance, admin dashboards, b2b saas, analytics, logistics. Less for: children, playful consumer. - `sanuki`: [Sanuki](https://mian.ro/ai/noodles/sanuki.md): Square-cut, firm, exact. Mood: square, firm, exact, industrial, serious. Intensity 2/5 · contrast high · density default. Good for: engineering, architecture, industrial, b2b tools. Less for: soft consumer, wellness. - `hakata`: [Hakata](https://mian.ro/ai/noodles/hakata.md): Thin, straight, fast. Mood: fast, thin, efficient, technical, dense. Intensity 2/5 · contrast medium · density compact. Good for: dashboards, fitness and tracking apps, data-heavy tools, trading. Less for: editorial storytelling. - `ditalini`: [Ditalini](https://mian.ro/ai/noodles/ditalini.md): Tiny tubes. A dense, calm ledger. Mood: dense, conservative, sober, precise, calm, trustworthy, serious. Intensity 1/5 · contrast medium · density compact. Good for: admin dashboards, finance, accounting, back office, data-heavy tools, b2b saas, analytics. Less for: marketing sites, children, luxury. - `juksing`: [Juksing](https://mian.ro/ai/noodles/juksing.md): Bamboo-pole noodles. Straight, jointed, springy. Mood: springy, jointed, crafted, natural, structured. Intensity 2/5 · contrast medium · density default. Good for: logistics, outdoor, timelines, process-heavy sites. Less for: luxury. - `kishimen`: [Kishimen](https://mian.ro/ai/noodles/kishimen.md): Wide, flat, glossy, with dancing flakes. Mood: wide, glossy, low, calm, modern. Intensity 2/5 · contrast medium · density compact. Good for: media apps, dashboards, consumer tools. Less for: print-like editorial. - `lamian`: [LaMian](https://mian.ro/ai/noodles/lamian.md): Long, smooth, dependable. Mood: familiar, balanced, modern, trustworthy, corporate. Intensity 2/5 · contrast medium · density default. Good for: saas, b2b, startups, admin panels. Less for: brands that must look distinctive, editorial. ## Thin Fine threads and hairlines. Everything light and exact: thin rules, light weights, lots of air, small type used with confidence. Few, large images. Good for studios, architecture, research, fashion and quiet luxury. - `somen`: [Somen](https://mian.ro/ai/noodles/somen.md): Hair-thin, white, served on ice. Mood: hairline, delicate, cool, quiet, refined, japanese. Intensity 1/5 · contrast medium · density compact. Good for: architecture, research, fashion, studios, quiet luxury. Less for: loud campaigns, children. - `capellini`: [Capellini](https://mian.ro/ai/noodles/capellini.md): Angel hair: light as air. Mood: airy, delicate, light, elegant, italian. Intensity 1/5 · contrast low · density comfortable. Good for: wellness, beauty, weddings, personal brands. Less for: dense admin, data. - `longxu`: [Longxu](https://mian.ro/ai/noodles/longxu.md): Folded, pulled, doubled, engraved in hairlines. Mood: engraved, intricate, crafted, precise, heritage. Intensity 2/5 · contrast medium · density default. Good for: banking, certificates, heritage brands, premium tools. Less for: playful consumer. - `misua`: [Misua](https://mian.ro/ai/noodles/misua.md): Finest thread, never cut. Mood: fine, continuous, celebratory, gentle, thread-like. Intensity 2/5 · contrast medium · density default. Good for: events, weddings, cultural sites, timelines. Less for: dense admin. - `bun`: [Bún](https://mian.ro/ai/noodles/bun.md): Delicate, rosy, light. Mood: rosy, delicate, light, friendly, lifestyle. Intensity 2/5 · contrast low · density default. Good for: beauty, lifestyle, events, salons. Less for: finance, engineering. ## Glass Clear, frosted, liquid and tinted glass. Glass needs something behind it: the noodle’s background image, a photograph or colour. Keep text on the more opaque surfaces, use blur for floating layers, and show the app or product through the glass. Good for consumer apps, weather, audio, wellness and media. - `kuzukiri`: [Kuzukiri](https://mian.ro/ai/noodles/kuzukiri.md): Clear glass in ice water. Black and white. Mood: glass, clear, monochrome, cool, premium. Intensity 2/5 · contrast high · density default. Good for: premium apps, hardware, media, portfolios. Less for: print-like editorial, dense tables. - `sotanghon`: [Sotanghon](https://mian.ro/ai/noodles/sotanghon.md): Real transparency. You see what is behind. Mood: glass, transparent, airy, premium, modern, light, futuristic. Intensity 3/5 · contrast medium · density comfortable. Good for: consumer apps, media apps, product launches, weather, music, portfolios, operating-system style interfaces. Less for: dense admin, financial data, print, long-form reading. - `harusame`: [Harusame](https://mian.ro/ai/noodles/harusame.md): Clear, cool, layered. Mood: glass, cool, layered, modern, calm. Intensity 2/5 · contrast medium · density default. Good for: dashboards, media apps, weather, consumer apps. Less for: serious finance, legal. - `fensi`: [Fensi](https://mian.ro/ai/noodles/fensi.md): Liquid glass. Mood: liquid, glossy, futuristic, fluid, premium. Intensity 3/5 · contrast medium · density comfortable. Good for: consumer apps, audio, product launches, mobile. Less for: dense admin, print. - `tokoroten`: [Tokoroten](https://mian.ro/ai/noodles/tokoroten.md): Pressed through a grid. Glass tiles. Mood: glass, grid, tiled, cool, structured. Intensity 2/5 · contrast medium · density default. Good for: dashboards, productivity, smart home. Less for: editorial. - `nagashi`: [Nagashi](https://mian.ro/ai/noodles/nagashi.md): Down a bamboo chute in running water. Mood: flowing, fresh, summer, glass, lively. Intensity 3/5 · contrast medium · density comfortable. Good for: travel, summer events, consumer apps, drinks. Less for: serious b2b. - `liangfen`: [Liangfen](https://mian.ro/ai/noodles/liangfen.md): Thick glass bricks. Cool, chunky, clear. Mood: chunky, glass, cool, solid, bold. Intensity 3/5 · contrast medium · density default. Good for: consumer apps, games, food. Less for: quiet luxury. - `dangmyeon`: [Dangmyeon](https://mian.ro/ai/noodles/dangmyeon.md): Smoked glass, sesame gloss. Mood: smoked, glossy, moody, premium, dark. Intensity 3/5 · contrast medium · density default. Good for: nightlife, music, premium apps, bars and restaurants. Less for: children, public services. - `woonsen`: [Woonsen](https://mian.ro/ai/noodles/woonsen.md): Crystal clear, a prism at the edge. Mood: crystal, bright, faceted, fresh, sparkling. Intensity 3/5 · contrast medium · density default. Good for: jewellery, beauty, launches, drinks. Less for: dense admin. - `shirataki`: [Shirataki](https://mian.ro/ai/noodles/shirataki.md): Translucent, jelly-soft, bouncy. Mood: bouncy, jelly, playful, soft, fun. Intensity 3/5 · contrast low · density comfortable. Good for: games, kids, consumer apps, social. Less for: finance, legal, enterprise. ## Textured Grain, fibre, metal and hand-cut surfaces. Texture is the brand: let it show on large surfaces and keep content areas calmer. Photography with natural materials suits it; illustrations should be drawn, not rendered. Good for crafts, food, outdoor, publishing and heritage. - `chasoba`: [Cha Soba](https://mian.ro/ai/noodles/chasoba.md): Matcha, calm, considered. Mood: calm, natural, considered, bookish, wellness. Intensity 2/5 · contrast medium · density default. Good for: wellness, writing, reading apps, tea and food, sustainability. Less for: loud campaigns, gaming. - `daoxiao`: [Daoxiao](https://mian.ro/ai/noodles/daoxiao.md): Shaved from the block. Rough-hewn. Mood: rough, hand-made, rugged, crafted, honest. Intensity 3/5 · contrast medium · density default. Good for: craft brands, outdoor, food, workshops. Less for: fintech, precise tools. - `pici`: [Pici](https://mian.ro/ai/noodles/pici.md): Hand-rolled, uneven, honest. Mood: hand-made, rustic, warm, honest, crafted, earthy. Intensity 2/5 · contrast medium · density comfortable. Good for: food, restaurants, crafts, farms, bakeries, local businesses. Less for: fintech, developer tools, enterprise. - `naengmyeon`: [Naengmyeon](https://mian.ro/ai/noodles/naengmyeon.md): Ice-cold, in a brushed-steel bowl. Mood: metallic, cold, industrial, crisp, engineered. Intensity 2/5 · contrast medium · density default. Good for: hardware, industrial, automotive, engineering. Less for: soft lifestyle. - `hoto`: [Hōtō](https://mian.ro/ai/noodles/hoto.md): Rustic, earthy, simmered. Mood: rustic, earthy, warm, homely, traditional. Intensity 2/5 · contrast medium · density comfortable. Good for: food, farms, crafts, local businesses, hospitality. Less for: tech startups, fintech. ## Bold Heavy type, strong colour, loud shapes. Type is the artwork: huge headlines, heavy weights, strong colour bands, thick rules. Fewer, louder sections; one idea shouted clearly. Good for events, campaigns, youth brands, sport and music. - `ramen`: [Ramen](https://mian.ro/ai/noodles/ramen.md): Bold, loud, high contrast. Mood: bold, loud, energetic, confident, noticeable. Intensity 4/5 · contrast high · density default. Good for: campaigns, product launches, agencies, sport, youth brands. Less for: quiet luxury, healthcare. - `biangbiang`: [Biangbiang](https://mian.ro/ai/noodles/biangbiang.md): Belt-wide, slapped, loud. Mood: loud, brutal, energetic, unusual, raw, expressive. Intensity 5/5 · contrast high · density comfortable. Good for: creative agencies, festivals, events, youth brands, indie products. Less for: finance, legal, healthcare, dense admin. - `maccheroni`: [Maccheroni](https://mian.ro/ai/noodles/maccheroni.md): Thick ink line, cut-out shadow, sweet colours. Mood: brutal, playful, bold, cheerful, loud, pastel, honest, indie. Intensity 4/5 · contrast high · density default. Good for: indie products, creator tools, creative agencies, education, communities, landing pages, events. Less for: finance, healthcare, luxury, dense admin. - `rigatoni`: [Rigatoni](https://mian.ro/ai/noodles/rigatoni.md): Ridged tubes. Poster stripes. Mood: bold, ridged, poster, confident, industrial, european, energetic. Intensity 4/5 · contrast high · density default. Good for: creative agencies, studios, campaigns, restaurants, events, sport. Less for: healthcare, quiet luxury, dense admin. - `fusilli`: [Fusilli](https://mian.ro/ai/noodles/fusilli.md): Twisted, springy, a little off-axis. Mood: expressive, playful, energetic, unusual, springy, creative. Intensity 4/5 · contrast medium · density default. Good for: creative agencies, studios, portfolios, startups, communities, product launches. Less for: finance, legal, healthcare, dense admin. - `jjajang`: [Jjajang](https://mian.ro/ai/noodles/jjajang.md): Glossy black, bold and rich. Mood: glossy, rich, dark, bold, premium. Intensity 4/5 · contrast high · density comfortable. Good for: nightlife, music, gaming, premium brands. Less for: public services, children. - `laksa`: [Laksa](https://mian.ro/ai/noodles/laksa.md): Spicy, creamy, layered colour. Mood: spicy, warm, colourful, layered, vibrant. Intensity 4/5 · contrast medium · density comfortable. Good for: food, festivals, travel, culture. Less for: enterprise, legal. ## Elegant Restraint, fine type and precious details. Restraint and fine detail: serif or small-caps headings, narrow measures, centred statements used sparingly, gold or ink accents as punctuation. Good for law, hospitality, publishing, jewellery and culture. - `soba`: [Soba](https://mian.ro/ai/noodles/soba.md): Earthy, editorial, restrained. Mood: editorial, earthy, restrained, literary, calm. Intensity 1/5 · contrast medium · density default. Good for: publications, documentation, law, research, calm tools. Less for: games, campaigns. - `tagliatelle`: [Tagliatelle](https://mian.ro/ai/noodles/tagliatelle.md): Egg ribbons, cut by hand. Editorial. Mood: editorial, elegant, literary, warm, refined, italian, european. Intensity 2/5 · contrast medium · density comfortable. Good for: publications, magazines, studios, hospitality, fine dining, cultural sites, online courses. Less for: dense admin, games. - `tajarin`: [Tajarin](https://mian.ro/ai/noodles/tajarin.md): Forty yolks and shaved truffle. Mood: luxury, refined, golden, italian, exclusive, elegant. Intensity 2/5 · contrast medium · density comfortable. Good for: luxury, hospitality, fine dining, fashion, wine. Less for: dense admin, children. - `mafaldine`: [Mafaldine](https://mian.ro/ai/noodles/mafaldine.md): Royal ribbons with ruffled edges. Mood: regal, ornate, romantic, elegant, expressive. Intensity 3/5 · contrast medium · density comfortable. Good for: weddings, culture, fashion, perfume, theatre. Less for: developer tools, finance. - `corzetti`: [Corzetti](https://mian.ro/ai/noodles/corzetti.md): Pasta coins, stamped by hand. Mood: stamped, crafted, heritage, tactile, elegant. Intensity 2/5 · contrast medium · density default. Good for: heritage brands, wine, bakeries, crafts, museums. Less for: developer tools. - `inaniwa`: [Inaniwa](https://mian.ro/ai/noodles/inaniwa.md): Silken, ivory, courtly. Mood: silken, courtly, refined, serene, elegant. Intensity 1/5 · contrast low · density comfortable. Good for: hospitality, spa, tea, luxury retail. Less for: dense admin, loud campaigns. - `yifu`: [Yifu](https://mian.ro/ai/noodles/yifu.md): Lacquer red and gold, for celebrations. Mood: celebratory, festive, lacquer, gold, rich. Intensity 4/5 · contrast high · density comfortable. Good for: celebrations, restaurants, cultural events, gifts. Less for: saas, healthcare. ## Rounded Soft, plump and round: cushions, clay and pressed surfaces. Soft and friendly: plump buttons, round images, warm colour, playful but clear copy. Keep layouts simple and spacing generous. Good for education, family, pets, food delivery and consumer onboarding. - `udon`: [Udon](https://mian.ro/ai/noodles/udon.md): Thick, soft, warm. Mood: warm, friendly, soft, tactile, cosy. Intensity 2/5 · contrast medium · density comfortable. Good for: consumer products, food, home, onboarding. Less for: enterprise data, legal. - `gnocchi`: [Gnocchi](https://mian.ro/ai/noodles/gnocchi.md): Soft pillows. Clay you want to press. Mood: clay, soft, playful, friendly, puffy, cheerful, tactile, 3d. Intensity 3/5 · contrast medium · density comfortable. Good for: kids, education, consumer onboarding, games, wellness, food, landing pages. Less for: finance, legal, enterprise, dense admin. - `cavatelli`: [Cavatelli](https://mian.ro/ai/noodles/cavatelli.md): One material, pressed in and pushed out. Mood: soft, monochrome, calm, tactile, quiet, embossed, minimal. Intensity 2/5 · contrast low · density comfortable. Good for: smart home, audio, calculators and tools, wellness, hardware companions, personal dashboards. Less for: dense admin, content-heavy sites, e-commerce, data tables. - `orecchiette`: [Orecchiette](https://mian.ro/ai/noodles/orecchiette.md): Little ears, pressed with a thumb. Mood: warm, friendly, soft, rounded, natural, calm. Intensity 2/5 · contrast low · density comfortable. Good for: food, wellness, consumer apps, onboarding, local businesses, education. Less for: dense admin, developer tools. - `mee`: [Mee](https://mian.ro/ai/noodles/mee.md): Golden, round, cheerful. Mood: cheerful, golden, playful, bright, kid-friendly. Intensity 3/5 · contrast medium · density comfortable. Good for: kids, education, consumer apps, onboarding. Less for: finance, luxury. - `mixian`: [Mixian](https://mian.ro/ai/noodles/mixian.md): Round, soft, served on small plates. Mood: round, soft, tidy, friendly, modular. Intensity 2/5 · contrast low · density comfortable. Good for: food delivery, menus, modular dashboards, consumer apps. Less for: editorial. - `pho`: [Pho](https://mian.ro/ai/noodles/pho.md): Fresh, herbal, clean. Mood: fresh, herbal, clean, optimistic, healthy. Intensity 2/5 · contrast medium · density default. Good for: health, food, sustainability, finance for consumers. Less for: nightlife, luxury. --- # MIAN website templates 24 complete, multi-page websites built only from MIAN sections and components. Each works in every noodle. Start from the closest kind; `https://mian.ro/ai/templates/.md` has the design notes and the full HTML of every page. Brands and people are fictional. License: MIAN License, free to use, not for resale. - `ledger`: [Ledger](https://mian.ro/ai/templates/ledger.md) · SaaS product · noodle `mian` (also `kuzukiri`, `shio`, `kalguksu`) · pages: index, pricing, signin. A B2B software site: product home, pricing with a plan comparison, and sign-in. - `pipeline`: [Pipeline](https://mian.ro/ai/templates/pipeline.md) · CRM & sales app · noodle `spaghetti` (also `quadretti`, `mian`, `kalguksu`) · pages: index, deals, invoice. A sales app: a dashboard with target, funnel, leaderboard and revenue, a deals board, and an invoice with its history. - `quanta`: [Quanta](https://mian.ro/ai/templates/quanta.md) · Finance admin · noodle `ditalini` (also `kalguksu`, `mian`, `hakata`) · pages: index, invoice. A conservative back-office app: an invoice list with a filter bar, bulk actions, a dense table and pagination, and an invoice page with its activity. - `beacon`: [Beacon](https://mian.ro/ai/templates/beacon.md) · Analytics dashboard · noodle `fettuccine` (also `ditalini`, `penne`, `chitarra`) · pages: index, status. An analytics dashboard and a status page: KPI cards with sparklines, a chart you can inspect, a gauge, a breakdown, a heatmap and uptime bars. - `relay`: [Relay](https://mian.ro/ai/templates/relay.md) · Developer platform · noodle `kalguksu` (also `ramyeon`, `mian`, `tokoroten`) · pages: index, docs. An API product site with code in the hero, SDK tabs, usage pricing, and a three-column docs page. - `forma`: [Forma](https://mian.ro/ai/templates/forma.md) · Agency · noodle `rigatoni` (also `fusilli`, `spaghetti`, `paccheri`) · pages: index, case. A small digital agency: a statement headline, selected work in mixed sizes, services, a dark process band, one quote, FAQ and a brief form, plus a case study. - `tessera`: [Tessera](https://mian.ro/ai/templates/tessera.md) · Bento studio site · noodle `penne` (also `linguine`, `cavatelli`, `maccheroni`) · pages: index, contact. A studio or personal site laid out as a bento: the headline, the numbers, the availability and the work are tiles of different sizes in one grid. - `noir`: [Noir](https://mian.ro/ai/templates/noir.md) · Cinematic studio site · noodle `chitarra` (also `tajarin`, `spaghetti`, `somen`) · pages: index, contact. A dark, cinematic site for a film or photography studio: a poster-sized headline over a slowly moving gradient, large stills, and almost no interface. - `orsola`: [Villa Orsola](https://mian.ro/ai/templates/orsola.md) · Hotel booking · noodle `tajarin` (also `mafaldine`, `corzetti`, `soba`) · pages: index, rooms, book. A boutique hotel: home with a booking bar and date-range calendar, rooms, and a three-step reservation with a live summary. - `nido`: [Nido](https://mian.ro/ai/templates/nido.md) · Appointment booking · noodle `capellini` (also `shio`, `farfalle`, `hiyamugi`) · pages: index, book. A studio or clinic: a calm home page with services, prices and team, and a three-step booking with a calendar and time slots. - `casa`: [Casa](https://mian.ro/ai/templates/casa.md) · Real estate · noodle `hiyamugi` (also `tagliatelle`, `orecchiette`, `sanuki`) · pages: index, listing. A property site: search, quick filters and a results grid of listings with price, size, rooms and energy class, and a listing page with photos, facts and viewing slots. - `hana`: [Hana](https://mian.ro/ai/templates/hana.md) · Restaurant · noodle `hiyamugi` (also `soba`, `somen`, `shio`) · pages: index, menu, reserve. A small restaurant: home with the story and hours, a printed-style menu, and a reservation form with a calendar. - `kiln`: [Kiln](https://mian.ro/ai/templates/kiln.md) · Online shop · noodle `shio` (also `hiyamugi`, `hoto`, `mian`) · pages: index, product, cart. A small shop: a home page with the collection and story, a product page with gallery and options, and a cart. - `nove`: [Nove](https://mian.ro/ai/templates/nove.md) · Fashion shop · noodle `bucatini` (also `tajarin`, `spaghetti`, `mian`) · pages: index, product, checkout. A fashion store: a category page with quick filters and a filter drawer, a product page with gallery, sizes and reviews, and checkout. - `circle`: [Circle](https://mian.ro/ai/templates/circle.md) · Social network · noodle `farfalle` (also `acini`, `udon`, `yangchun`) · pages: index, profile. A social app: a feed with stories, a composer and posts with working like and repost toggles, and a profile with replies. - `fieldnotes`: [Field Notes](https://mian.ro/ai/templates/fieldnotes.md) · Magazine · noodle `soba` (also `longxu`, `inaniwa`, `somen`) · pages: index, article. An editorial site: a front page with a lead story, latest and most-read, and a long-read article page. - `lumen`: [Lumen](https://mian.ro/ai/templates/lumen.md) · Online course · noodle `tagliatelle` (also `orecchiette`, `mee`, `soba`) · pages: index, learn. An online course: the outcome and length up front, who it is for, a curriculum with durations, the teacher, one price with a refund and an FAQ, plus the learner area with progress and notes. - `pace`: [Pace](https://mian.ro/ai/templates/pace.md) · Web app dashboard · noodle `hakata` (also `kalguksu`, `mian`, `naengmyeon`) · pages: index, activities, settings. An app shell with a sidebar and a mobile drawer: an overview dashboard, an activity table with filters, and tabbed settings. - `aldini`: [Aldini](https://mian.ro/ai/templates/aldini.md) · Company website · noodle `corzetti` (also `tajarin`, `spaghetti`, `kalguksu`) · pages: index, about, careers, contact. A company website: a home page with work and services, an about page with history and partners, careers with open roles, and contact with offices. - `ito`: [Studio Ito](https://mian.ro/ai/templates/ito.md) · Portfolio · noodle `somen` (also `mian`, `longxu`, `soba`) · pages: index, work. A studio portfolio: an editorial hero, large work tiles, services, results, team and a contact line; plus a case study. - `orto`: [Orto](https://mian.ro/ai/templates/orto.md) · Presentation · noodle `pappardelle` (also `spaghetti`, `biangbiang`, `lasagne`) · pages: index. A presentation website: a seven-slide pitch deck with full-height snapping slides, keyboard navigation, a counter and progress. - `dot`: [Dot One](https://mian.ro/ai/templates/dot.md) · Hardware launch · noodle `yinzhen` (also `mian`, `kuzukiri`, `ramyeon`) · pages: index, specs. A product launch for a physical device: centred hero, figures, bento, repair story, pre-order and a specs page. - `mist`: [Mist](https://mian.ro/ai/templates/mist.md) · Mobile app · noodle `kuzukiri` (also `yangchun`, `fensi`, `harusame`) · pages: index. A one-page app launch: split hero with the app on a phone, a bento of features, a privacy promise, reviews and store buttons. - `signal`: [Signal 26](https://mian.ro/ai/templates/signal.md) · Event · noodle `biangbiang` (also `ramen`, `hakata`, `laksa`) · pages: index, schedule. A conference site: a huge-type hero, figures, speakers, the day at a glance, tickets, venue and partners; plus a tabbed programme. --- # Introduction A complete, accessible UI library for the web, one set of components, many design systems. ## What MIAN is MIAN is a complete set of 135 UI components, buttons and inputs through tables, charts, dialogs, command palettes and carousels, written as semantic HTML with CSS classes. On top of that one component set sit **67 noodles** in 10 families. A noodle is a whole design language: colours for light and dark, shape, depth, texture, motion and the way every control, table and chart is drawn, each inspired by a real noodle and written down as a philosophy you can extend. Change `data-noodle` and every component changes with it. The default, Mian, is the plain black-and-white base the others vary. ## Principles - **The platform first.** Dialogs are ``, menus use the Popover API, accordions are `
`, form controls are real inputs. You get accessibility and keyboard behaviour the browser already knows. - **Classes, not components.** No framework runtime. It works the same in plain HTML, React, Vue, Svelte, Laravel, Rails or WordPress. - **Small and optional JavaScript.** 99 of 135 components need no JavaScript at all. The rest share one 22.3 KB script that initialises itself. - **Override-friendly.** Everything lives in CSS cascade layers, so any rule you write wins. - **Readable by machines.** Every component, noodle and design language is published as JSON, Markdown, a registry item and through MCP. ## Where next [Installation](https://mian.ro/docs/installation)Two tags, or copy the files into your project. [Components](https://mian.ro/components)All 135, each with live examples you can switch between noodles. [Noodles](https://mian.ro/noodles)Pick a design language, and read why it looks the way it does. [Noodle studio](https://mian.ro/studio)Put your own brand colours and type on any noodle. [Designing websites](https://mian.ro/docs/web-design)How to compose whole pages that do not look generated. Source: https://mian.ro/docs --- # Installation Two tags, no build step. Or copy the files into your project. ## Link the files Add the stylesheet and the script. That is the whole installation. ``` ``` ## Self-host Download [mian.css](https://mian.ro/dist/mian.css) (or [mian.min.css](https://mian.ro/dist/mian.min.css)) and [mian.js](https://mian.ro/dist/mian.js) and serve them yourself. There are no other files: no fonts, no icons, no images. ## CSS only If you only need the 99 CSS-only components, leave out the script. Components that use it are marked CSS + mian.js on their page. ## Copy into your project Every component and noodle is also a registry item, a JSON file with its CSS, example markup and metadata, in the open registry-item format, so you can keep your own copy: ``` curl -O https://mian.ro/r/button.json # a component curl -O https://mian.ro/r/noodle-fensi.json # a noodle (tokens + skin) ``` The full list is at [/r/registry.json](https://mian.ro/r/registry.json). ## Remember the reader's theme The theme controller stores the chosen noodle and mode in `localStorage`. Put this in ``, before the stylesheet, to apply it before first paint: ``` ``` Source: https://mian.ro/docs/installation --- # Theming & noodles 67 design systems, light and dark, scoped anywhere, overridable everywhere. ## Choosing a noodle Set `data-noodle` on ``. Without it you get Mian, the black-and-white base every other noodle varies. ``` ``` ## Light and dark Every noodle has a light and a dark palette. By default the page follows the operating system. Force a mode with `data-mode`: ``` ``` Under the hood each token is a `light-dark()` pair and `data-mode` sets `color-scheme`, which inherits, so modes nest correctly. ## Scoping Both attributes work on any element, and they nest. A marketing section can use Mee while the app shell uses Mian, and a code sample can be forced dark: ```
…
``` Switchers can be scoped too. Add `data-mn-target` to any theme control and it changes only that element: this is how the previews on this site work while the site itself stays Mian: ```
…
``` ## Families The 67 noodles are grouped by what they share: **Minimal** (11), **Flat** (5), **Pixel** (3), **Linear** (7), **Thin** (5), **Glass** (10), **Textured** (5), **Bold** (7), **Elegant** (7), **Rounded** (7). Each noodle page opens with its written design language, philosophy, principles, the rules for shape, surface, colour, type, motion and data, and a section on designing new components in that language. ## Tokens Components only read these custom properties. Override any of them on any selector. - --mn-bg · --mn-surface · --mn-surface-2: Page, card and muted surfaces. - --mn-fg · --mn-muted: Text and secondary text. - --mn-border · --mn-input · --mn-ring: Dividers, form borders, focus ring. - --mn-primary · --mn-secondary · --mn-accent: Brand roles, each with a matching -fg and -text. - --mn-success · --mn-warning · --mn-danger · --mn-info: Status roles, each with -fg and -text. - --mn-radius-field · --mn-radius-box · --mn-radius-badge: Controls, containers, small labels. - --mn-size-xs … --mn-size-lg · --mn-text-sm: Control heights and control text size (density). - --mn-shadow-sm · -md · -lg: Depth. - --mn-font · --mn-font-heading · --mn-font-mono: Typography. ## Noodles are design languages, not themes A noodle has three parts. **Tokens**: colours, radii, fonts, density, shadows. A **skin**: rules in the `mian.noodles` cascade layer that change how components are built: Udon buttons have a thickness edge that compresses, Fensi surfaces are liquid glass with lens rims, Yinzhen draws everything in dots, Sanuki has no radius anywhere, every noodle has its own entrance animation. And a written **design language**: the philosophy, principles and rules behind the skin, so new components can be designed in the same language. Skins are written with `@scope ([data-noodle="…"]) to ([data-noodle]:not([data-noodle="…"]))`. The lower boundary is what makes nesting safe: a Shirataki section inside an Udon page gets none of Udon's rules. Load everything with `mian.css`, or only what you use: ``` ``` ## Make your own noodle A noodle is a selector that sets the tokens, plus (optionally) a scoped skin. Start from one of the [noodle JSON files](https://mian.ro/registry/noodles/mian.json) or write it by hand: ``` [data-noodle="tonkotsu"] { --mn-bg: light-dark(#fffaf5, #140f0b); --mn-surface: light-dark(#ffffff, #1c1611); --mn-surface-2: light-dark(#f6ede3, #271f18); --mn-fg: light-dark(#24170e, #f6ede3); --mn-muted: light-dark(#6d5a4a, #b39f8b); --mn-border: light-dark(#eadccd, #382d23); --mn-input: light-dark(#d9c6b1, #4a3c2f); --mn-primary: light-dark(#9a3412, #fdba74); --mn-primary-fg: light-dark(#ffffff, #2a1206); --mn-primary-text: light-dark(#9a3412, #fdba74); --mn-ring: light-dark(#9a3412, #fdba74); --mn-radius-field: 10px; --mn-radius-box: 14px; } /* Optional skin: change how things are built, not just their colour. */ @layer mian.noodles { @scope ([data-noodle="tonkotsu"]) to ([data-noodle]:not([data-noodle="tonkotsu"])) { :scope { --mn-enter: my-simmer; --mn-bar-radius: 999px; } .mn-btn { border-radius: 999px; box-shadow: 0 4px 0 color-mix(in oklab, var(--_bg), #000 25%); } .mn-card { border-width: 2px; } } } @keyframes my-simmer { from { opacity: 0; transform: translateY(6px) scale(.98); } } ``` Any token you leave out falls back to Mian. Check your text pairs reach 4.5:1 contrast, MIAN's own noodles are verified by the build. ## Designing components MIAN does not ship Every noodle page has a Designing new components section: concrete do and avoid rules and a CSS recipe. The same guide is published for AI tools at `/ai/noodles/.md` and through the MCP tool `get_design_language`. The pattern is always the same: ``` /* 1. Build from tokens, scoped to the noodle */ [data-noodle="kalguksu"] .pricing-tier { border: 1px solid var(--mn-border); background: var(--mn-surface); color: var(--mn-fg); } /* 2. Apply the noodle's own rules (here: knife-cut corner, mono labels) */ [data-noodle="kalguksu"] .pricing-tier { clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 0 100%); } ``` ## Colour roles Components that take colour accept a role class next to them: `mn-primary`, `mn-secondary`, `mn-accent`, `mn-success`, `mn-warning`, `mn-danger`, `mn-info`, `mn-neutral`. Roles do not inherit, so a red alert does not turn the buttons inside it red. primarysecondaryaccentsuccesswarningdangerinfoneutral Source: https://mian.ro/docs/theming --- # Frameworks Classes on HTML work everywhere. Here is how to wire them into common stacks. ## Any stack MIAN is markup plus classes, so there is nothing framework-specific to install. The only rule: if your framework renders content after load, `mian.js` notices on its own (it watches the DOM), and you can also call `Mian.init(element)`. ## React / Next.js ``` class="hl-c">// app/layout.tsx import Script from 'next/script'; export default function RootLayout({ children }) { return ( "en" data-noodle=class="hl-s">"lamian"> "stylesheet" href=class="hl-s">"https:class="hl-c">//mian.ro/dist/mian.css" /> {children} ``` - Put `data-brand` on the same element as `data-noodle`. It works on any element, so a section can carry another brand. - Your stylesheet only sets tokens, so every component, in light and dark, follows it. - AI agents can make the same noodle with `POST /api/v1/noodles/create` or the MCP tool `create_noodle`. - Mode: Pair: Ratio: Needs: Result Source: https://mian.ro/studio --- # Site inspector Paste the address of a public web page. MIAN reads its HTML and stylesheets, scores its design language, finds the noodles closest to it, and shows it restyled in any of them. Inspect One public page at a time. The page is read once and not kept; MIAN records only its host name and score. Pages that are built entirely in the browser by JavaScript give less to read. [What is checked](#how) 00100 ## ## Score by area Each area is scored from what can be read in the page’s HTML and CSS. ## Findings ## Its design language ### Colours ### Type ### Shape ## The closest noodles Matched on colour, corners, type and the words on the page. ## Your site, in a noodle A static copy of the page as it is, with the noodle’s typefaces, colours, buttons, fields and corners laid over it. Change the noodle with the picker at the bottom of the screen. Scripts are switched off in the copy, so menus, sliders and animations do not run. In the noodleOriginal Keep the page’s own brand colour [Open in the studio](https://mian.ro/studio) This page is too large, or gave too little HTML, to show as a copy. The MIAN version below uses its words. ## The same content, rebuilt with MIAN The page’s own headings and text set with MIAN sections, the way a new site would start. This is your content in MIAN, not a copy of your layout. ## What is checked - Area: What the inspector looks at - Colour: How many distinct hues are used, whether neutrals are tinted, whether there is a dark palette, gradients, and the contrast of the main text pair. - Type: How many font families and sizes, whether the size scale is consistent, the body size and line height. - Consistency: How many different corner radii, shadows and spacing values are in use. A design language uses few and repeats them. - Structure: One h1, heading order, landmarks, a language, a viewport, image alternatives, labelled fields. - Originality: The marks of a generated page: purple-to-blue gradients, glowing blobs and “aurora” backgrounds; every section centred; three identical cards with an icon; emoji and mismatched icons as decoration, and others from the [design guide](https://mian.ro/docs/web-design#tells). The score is a reading of the code, not a judgement of taste: it cannot see images, and it cannot run JavaScript. Use it to find things worth a second look. AI agents can call the same check at `POST /api/v1/inspect` or with the MCP tool `inspect_site`. Source: https://mian.ro/inspect --- # MIAN for AI agents Start here. Everything a coding agent needs to build with MIAN, in the order it needs it, and no more. MIAN is free to use under the [MIAN License](https://mian.ro/license): commercial and AI-generated projects included, no credit needed on the site you build; MIAN itself may not be resold. Short on context? Read [/llms.txt](https://mian.ro/llms.txt) (about 2,000 tokens) and nothing else until you need a specific component. ## 1 · Start MIAN is an accessible UI library: 135 components written as semantic HTML with `mn-` classes (30 of them page sections), 67 complete design languages called noodles, and 24 whole-website templates. Use it for websites and web apps in any stack. Install: ``` ``` There is no npm package and no other CDN URL. The script is only needed by interactive components. ### Rules - Load exactly https://mian.ro/dist/mian.css, plus https://mian.ro/dist/mian.js with defer when a component needs it. There is no npm package and no other CDN path: do not invent one. - Use only classes that exist. Look them up (https://mian.ro/registry/classes.json, get_component, /ai/components/.md) instead of inferring names by analogy with other libraries. - Set the design with using a real noodle id (https://mian.ro/ai/noodles.md or find_noodles). Do not guess ids. - Copy component markup from its examples, including ARIA attributes; change the words, not the structure. - Compose pages from sections (mn-section > mn-container) and components. Do not write CSS for colours, spacing, radius or shadows: the noodle owns them. If something is missing, style it with --mn-* tokens only. - Before finishing, check the markup with https://mian.ro/api/v1/validate or the MCP tool validate_markup, and fix every unknown class or noodle. - Never invent testimonials, client logos, metrics, prices, awards or people. Use the brief’s facts or clearly marked placeholders. - Keep the page working when data-noodle changes: no hard-coded colours or fonts. - Licensing is settled: under the MIAN License, commercial and AI-generated use are allowed and the site you build needs no credit. Do not package MIAN itself for sale (UI kits, themes, template packs). ## 2 · Choose Describe the task in your own words; MIAN maps it to its vocabulary. - To…: HTTP: MCP · file - Plan a whole site: `GET /api/v1/plan?type=agency&style=bold&needs=portfolio,faq`: `plan_site` - Pick a noodle from a brief: `GET /api/v1/noodles/find?q=calm+editorial`: `find_noodles` · [/ai/noodles.md](https://mian.ro/ai/noodles.md) - Find a component by task: `GET /api/v1/search?q=bulk+actions`: `search_components` · [/ai/components.md](https://mian.ro/ai/components.md) - Start from a template: `GET /api/v1/templates/{id}`: `get_template` · [/ai/templates.md](https://mian.ro/ai/templates.md) - Use the brand’s own colours: `GET /api/v1/noodles/create?primary=1f4fd6&base=udon&name=Acme`: `create_noodle` · [/studio](https://mian.ro/studio) - Ask which noodle to use: `GET /api/v1/noodles/recommend?q=calm+editorial&url=example.com`: `recommend_noodle` - Match or improve an existing site: `POST /api/v1/inspect {"url": "…"}`: `inspect_site` · [/inspect](https://mian.ro/inspect) - Understand colour, type, brand, logo, motion: `GET /api/v1/guide/design`: `get_design_guide` · [/ai/docs/colour.md](https://mian.ro/ai/docs/colour.md) - Compose well: `GET /api/v1/guide`: `get_site_guide` · [/ai/docs/web-design.md](https://mian.ro/ai/docs/web-design.md) The planner and the noodle finder are deterministic: they match against written metadata, what each component is for, where it sits on a page, each noodle’s mood, intensity, contrast and density, so the same brief gets the same answer. Composition controls (`cards`, `repetition`, `asymmetry`, `rhythm`, `surprise`, `density`) change the direction the planner gives, so two different art directions produce different pages. ## 3 · Exact details - `/ai/components/.md`: One component: when to use it, classes, accessibility, copy-paste examples. - `/ai/noodles/.md`: One noodle’s design language: philosophy, principles, rules for new components, a CSS recipe. - `/ai/templates/.md`: One template: design notes and the HTML of every page. - [/registry/classes.json](https://mian.ro/registry/classes.json): Every valid class, `data-mn-*` attribute, noodle id, template id and asset URL. - [/registry/index.json](https://mian.ro/registry/index.json): Catalogue with licence, rules and endpoints. Per item: `/registry/components|noodles|templates/.json`. - [/r/registry.json](https://mian.ro/r/registry.json): Registry items in the open registry-item format (components, noodles as themes, templates as blocks). - [/llms-full.txt](https://mian.ro/llms-full.txt): Everything in one file, including source CSS. Large, for reference, not for routine work. ## Validate before you finish Send your HTML; get back every unknown class, noodle id, `data-mn-*` attribute and asset path, with suggestions (“Sizes are abbreviated: use mn-btn-lg”), plus warnings for a missing stylesheet or script and hard-coded colours. ``` curl -X POST https://mian.ro/api/v1/validate --data-binary @index.html ``` ## HTTP API JSON, no key, CORS open. Everything is read-only except the routes that do work for you: `/noodles/create`, `/noodles/recommend` and `/inspect`. Limits: 240 requests a minute overall; the inspector reads up to 6 pages a minute and 60 a day per client. `/api/…` without a version is the same as `/api/v1/…`. Described in OpenAPI 3.1 at [/openapi.json](https://mian.ro/openapi.json) and listed in the API catalog at [/.well-known/api-catalog](https://mian.ro/.well-known/api-catalog) (RFC 9727). ``` GET /api/v1 index: licence, rules, routes GET /api/v1/plan?type=&style=&needs= deterministic site plan GET /api/v1/noodles/find?q= noodles for a style brief GET /api/v1/noodles/create?primary=&base= a custom noodle from brand colours (also POST) GET /api/v1/noodles/recommend?q=&url= which noodle: from a brief, a site, or both POST /api/v1/inspect score a public page, find its closest noodles GET /api/v1/guide/design colour, type, branding, logo and motion guides GET /api/v1/search?q= components, noodles and templates by intent GET /api/v1/components?category=&q= list and filter GET /api/v1/components/{id} one component, with intents and composition GET /api/v1/components/{id}/source its CSS, JS and example HTML GET /api/v1/noodles/{id} one noodle: traits, tokens, design language GET /api/v1/templates/{id} one template, with the HTML of every page GET /api/v1/guide the web design guide as data GET /api/v1/classes the vocabulary POST /api/v1/validate check markup GET /api/v1/license the licence as data GET /api/v1/health health (application/health+json) ``` ## MCP A Model Context Protocol server over Streamable HTTP at `https://mian.ro/mcp`, no key. It speaks the current revision (per-request versioning and `server/discover`) and the older `initialize` handshake. ``` { "mcpServers": { "mian": { "type": "http", "url": "https://mian.ro/mcp" } } } ``` - plan_site: Brief → noodles, template, page outlines with component ids, direction, rules, what to read next. - find_noodles: Style brief → ranked noodles with traits and why they match. - create_noodle: Brand colour and a base noodle → a stylesheet for light and dark, with a contrast report. - recommend_noodle: A brief, a site address, or both → up to four noodles and why they match. - inspect_site: A public URL → a design-language score with findings, its palette, type and shape, and the closest noodles. - get_design_guide: What colour, type, brand, logo and motion choices say, and the rules for making them. - validate_markup: HTML → unknown classes, noodles, attributes and assets, with suggestions. - search_components · list_components · get_component: Components by intent; classes, composition, accessibility and examples. - get_component_source · get_example: CSS/JS, and a runnable page in any noodle and mode. - list_noodles · get_noodle · get_design_language · get_noodle_css: Design systems, their tokens and full design language. - list_templates · get_template: Whole websites, the HTML of any page in any noodle. - get_site_guide · get_setup: Design guide (optionally for one page type and noodle); install instructions per stack. ## Licence MIAN is free to use for personal, commercial, client, SaaS and internal projects, including websites and apps generated by AI, with no credit needed on your site. MIAN itself may not be sold or traded, and sharing it requires a credit and a link to mian.ro. The same answer is in every machine surface as data (`license` in the registry and API, the MCP instructions, llms.txt). [Details](https://mian.ro/license). Source: https://mian.ro/ai --- # About MIAN A few ingredients, endless noodles. A few primitives, endless interfaces. ## The story of 面 面: miàn, is the Chinese word for noodle. Written the same way, it also means face, surface, side. And when a computer shows you its face, Chinese calls it 界面 (jièmiàn): an interface, literally a bounded surface. We could not have asked for a better word. The oldest noodles ever found are about four thousand years old: a bowl of millet noodles preserved at Lajia, on the upper Yellow River. Since then, a handful of ingredients has become thousands of noodles: flour, water and salt; sometimes egg or alkali; sometimes rice, buckwheat, mung bean, sweet potato or konjac instead of wheat. What changes everything is the hands. Pulled into a single strand. Cut with a knife. Shaved off a block. Rolled, pressed, stretched over days, dried in the sun. Served in clear broth, in curry, on ice, from a wok, at a birthday for long life. Interfaces are made the same way. A button, a field, a table, a chart: a few primitives, colour, shape, type, space, motion, that every product reuses. What makes one interface feel nothing like another is how those primitives are shaped. So MIAN is one dough and many noodles. One set of 135 accessible components; 67 complete design languages in 10 families. **Mian** itself is the plain strand, black, white, exact, the base the others vary. Every other noodle takes something real from its namesake: the thickness of udon, the liquid glass of fensi, the knife cut of kalguksu, the square edge of sanuki, the dots of yinzhen, the steam of ramen, the red thread of misua. Each is written down as a philosophy, so you, or an AI working beside you, can cook new dishes in the same style. ## Who makes MIAN MIAN is made by BTN GROUP SRL. To reach us, use the [contact form](https://mian.ro/contact). ## Status Version 1.7.0: 135 components, 67 noodles. Registry schema 2.0.0. ## Using MIAN MIAN is free to use under the [MIAN License](https://mian.ro/license): for personal, commercial, client, SaaS and internal projects, including sites and apps generated by AI, with no fee, no sign-up and no credit needed on your site. MIAN itself, its components, noodles, templates and designs, stays the property of BTN GROUP SRL: it may not be sold or traded, nobody may claim it as their own, and sharing it requires a credit and a link to mian.ro. [What the licence allows](https://mian.ro/license). ## Privacy mian.ro counts its own traffic with first-party, cookieless analytics. No third-party trackers, no ad networks, no fingerprinting scripts. - Requests are logged on the server: the page or file, status, a coarse client type (browser, AI agent, search bot, script), browser family, device class and referring site. - IP addresses are never stored. Unique visitors are counted with a hash salted with a value that rotates every day, so nobody can be followed from one day to the next. - A small beacon records a few in-page actions, choosing a noodle or mode for a preview, copying code, opening search, with no identifiers. It is not sent at all if your browser signals Do Not Track or Global Privacy Control. - Messages sent through the contact form (name, email, message) are kept only to reply, and are visible only to the site owner. - When you copy, download or share a noodle from the studio, or make one through the API or MCP, its recipe is recorded: the brand name you typed, the colours and the options. Nothing else. - When you inspect a site, the page is fetched once, analysed and discarded. Its host name, score and closest noodle are recorded; the page itself is not kept. - Analytics data is kept for at most 400 days and is visible only to the site owner. - For a privacy request, to see, correct or delete what we hold about you, write to hello@mian.ro. Source: https://mian.ro/about --- # License MIAN is free to use for personal, commercial, client, SaaS and internal projects, including websites and apps generated by AI, with no credit needed on your site. MIAN itself may not be sold or traded, and sharing it requires a credit and a link to mian.ro. ## Can I use MIAN for… - Use: Answer - Personal projects: Yes. - Commercial websites and applications: Yes. - SaaS products and internal company tools: Yes. - Client and agency work: charging for the site you build: Yes. - Websites and apps generated by AI: Yes. Coding agents, AI app builders and automated website builders may use MIAN and include it in the code they deliver, with no credit needed. - Commercial AI products that generate interfaces with MIAN: Yes: charging for your product is fine, as long as you are not selling MIAN itself. - Modifying MIAN: Yes. - Sharing MIAN or a modified version for free: Yes: keep the licence and credit MIAN with a visible link to https://mian.ro. - Selling or trading MIAN, a modified MIAN, or UI kits, themes and template packs made mainly from its components, noodles or templates: No. - Claiming MIAN, or any of its components, noodles, templates or designs, as your own: No. - Owning what I build with MIAN: Yes. Your sites, apps, content and code are yours (or your client’s). - A credit on my website: Not required. - A fee, key or sign-up: None. ## The conditions Keep the notice that mian.css and mian.js carry. When you share MIAN itself (a repository, kit or package), keep the licence and credit MIAN with a visible link to https://mian.ro. Do not sell or trade MIAN or products made mainly of it. Websites, apps, content and code you create with MIAN are yours (or your client’s). MIAN, its code, components, noodles, templates and designs, remains the property of BTN GROUP SRL. Nobody may claim ownership or authorship of it. The licence does not grant rights to the MIAN name or logo, except to credit MIAN. Formal notices about this licence can be sent to hello@mian.ro. For anything else, please use the [contact form](https://mian.ro/contact). ## For AI agents and tools The same answer is published as data in [/registry/index.json](https://mian.ro/registry/index.json), the [API](https://mian.ro/api/v1), the MCP server’s instructions and [llms.txt](https://mian.ro/llms.txt), so an agent never needs to stop and ask. The identifier is `LicenseRef-MIAN-1.0`. ``` { "license": { "spdx": "LicenseRef-MIAN-1.0", "commercialUse": true, "clientAndAgencyWork": true, "aiGeneratedOutput": true, "aiAgentsMayDistribute": true, "modification": true, "sellingOrTradingMian": false, "redistribution": "free of charge only, with the licence kept and a visible credit linking to https://mian.ro", "attributionRequiredOnYourSite": false, "url": "https://mian.ro/license" } } ``` ## Licence text Also at [/LICENSE.txt](https://mian.ro/LICENSE.txt). MIAN License 1.0 Copyright (c) 2026 BTN GROUP SRL. All rights not granted below are reserved. "MIAN" (the "Software") means the MIAN code, components, design languages ("noodles"), website templates, documentation and other materials published at https://mian.ro, and any modified version of them. 1. Use. Free of charge, anyone may use, copy and modify the Software to create websites, applications and other works, for any purpose, including commercial projects, SaaS, internal tools and paid client work. 2. What you build is yours. Websites, applications, content and code that you create with the Software belong to you (or your client). BTN GROUP SRL claims no rights over them, other than its rights in the Software itself. 3. No selling or trading of MIAN. You may not sell, rent, license for a fee or otherwise commercially trade the Software itself, modified or not, or any product or service whose value derives entirely or substantially from the Software — for example UI kits, component libraries, theme or template packs, or paid access to MIAN's components, noodles or templates. Charging for a website, application or service that you build with MIAN is allowed. 4. Free redistribution, with credit. You may redistribute the Software, modified or not, free of charge, provided that you keep this licence and the copyright notice with it, and credit MIAN with a visible link to https://mian.ro wherever you make it available (for example a README, project page or listing). Including MIAN's files inside a website or application that you build is not redistribution for this purpose and needs no visible credit; keep the notice that mian.css and mian.js carry. 5. Ownership. The Software, including every component, noodle, template and design, remains the property of BTN GROUP SRL. You may not claim ownership or authorship of the Software or of any part of it. 6. AI systems. AI assistants, coding agents, AI website builders and other AI systems may read and use the Software, and include it in the code and works they generate and deliver, without credit or backlink. Sections 3 and 5 still apply to the Software itself. 7. Name. This licence does not grant rights to the MIAN name or logo, except to credit MIAN as described in section 4. 8. Termination. If you do not comply with this licence, the permissions it grants you end. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Source: https://mian.ro/license --- # Mian: a MIAN design language The noodle itself. Black, white, nothing else. Miàn (面) means noodle, and also face, surface. Before any sauce, shape or region, a noodle is flour, water and a pair of hands. Mian is that base: black on white, one-pixel lines, clear type and quick, quiet motion. Every other noodle is a variation of it. - Family: Minimal · Origin: China · 面 · License: MIAN License (free to use) - Traits: neutral, precise, calm, timeless, serious, minimal · intensity 1/5 · contrast high · density default. Good for: saas, developer tools, documentation, dashboards, studios, any brand that will add its own colour. Less for: children, festive campaigns. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/mian.css - Page: https://mian.ro/noodles/mian ## Design philosophy Mian is the noodle before any recipe, flour, water and a pair of hands, and the interface before any style. It is black on white, drawn with one-pixel edges and clear type, with a soft shadow only when something floats above the page. Every other noodle in MIAN starts here and changes one thing at a time: the material, the shape, the weight, the motion. When in doubt, Mian does the obvious thing, precisely. ## Principles - Two colours: ink and paper. Greys are the only in-between; colour is reserved for status (success, warning, danger, info). - Edges, not boxes: a 1px border in var(--mn-border) separates things; depth appears only when something floats (menus, dialogs, hovered cards). - Clear type: one clean sans in two weights (400 and 600), headings tracked tight (−0.035em). - Quiet and quick: 150–160ms, a 3px rise on entry, no bounce, no decoration. - Obvious states: hover changes tone, focus draws a clear ring, selected is solid ink. ## The language - **Shape.** 6px fields and buttons, 10px containers, pill badges. Nothing is rounder or sharper than it needs to be. - **Surface.** White page and white surfaces separated by 1px #eaeaea edges (dark: #262626). The one shadow, --m-float, is a 1px ring plus a soft two-step drop, used for menus, dialogs, toasts and hovered cards. - **Colour.** Primary is ink (#0a0a0a / #ededed). Accent is a mid grey. Status colours are the only hues. - **Type.** The system UI font; controls at 500, titles at 600; numbers tabular. - **Motion.** mian-in: 3px rise and fade in 160ms, cubic-bezier(.2,0,0,1). Buttons scale to .98 while pressed. - **Data.** The highlighted bar is solid ink, the rest are 12% ink; lines are 2px ink with a 6% area; the donut is ink and grey. ## Colour, type and brand - **Primary** #0a0a0a: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #525252: grey (mid, muted). Neutrality, technology, restraint. - **Page** #ffffff: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A monochrome scheme: no hue competes with the content, so status colours and images carry all the colour. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** neutral, precise, calm, timeless, serious (brand dimension: competence). - **Tone of voice.** Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "mian"). ## Inspired by the noodle - Flour and water → only two colours, black and white, with greys in between - The plain strand before any recipe → a neutral base every other noodle builds on - 面 is also “surface” → surfaces carry the design: a clean 1px edge, a soft shadow only when something floats - Made every day → fast, predictable motion and controls that never surprise ## Designing new components in Mian Build new components from `--mn-*` tokens, scoped with `[data-noodle="mian"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Start from the plain structure: var(--mn-surface), 1px solid var(--mn-border), radius var(--mn-radius-box) (10px), padding 16–20px. - Hover: change the background to var(--mn-surface-2) or deepen the border to var(--mn-input). Never move things on hover. - Selected / on: solid var(--mn-fg) with var(--mn-bg) text, or a 2px ink underline. - If it floats, give it --m-float and drop the border colour; if it does not float, it has no shadow. - Use colour only to say something (success, warning, danger, info). Avoid: - Gradients, textures and glass - Coloured primary buttons - Shadows on resting cards - Bouncy or slow motion - Heavy (700+) type outside headings Recipe: a selectable tile in this language: ```css [data-noodle="mian"] .tile { padding: 16px; border: 1px solid var(--mn-border); border-radius: 10px; background: var(--mn-surface); color: var(--mn-fg); transition: background-color 150ms cubic-bezier(.2, 0, 0, 1), border-color 150ms; } [data-noodle="mian"] .tile:hover { background: var(--mn-surface-2); border-color: var(--mn-input); } [data-noodle="mian"] .tile[aria-selected="true"] { background: var(--mn-fg); color: var(--mn-bg); border-color: var(--mn-fg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Radius: field 6px, box 10px, badge 999px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #ffffff | #0a0a0a | | surface | #ffffff | #111111 | | surface2 | #f5f5f5 | #1a1a1a | | fg | #0a0a0a | #ededed | | muted | #666666 | #a1a1a1 | | border | #eaeaea | #262626 | | input | #d4d4d4 | #3f3f3f | | primary | #0a0a0a | #ededed | | primaryFg | #ffffff | #0a0a0a | | secondary | #f5f5f5 | #1a1a1a | | secondaryFg | #0a0a0a | #ededed | | accent | #525252 | #a1a1a1 | | accentFg | #ffffff | #0a0a0a | | ring | #0a0a0a | #ededed | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0a0a0a | #ededed | | secondaryText | #767676 | #7f7f7f | | accentText | #525252 | #a1a1a1 | | successText | #14793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c72323 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0a0a0a | #ededed | --- # Yangchun: a MIAN design language Clear broth, quietly refined. Yangchun mian is Shanghai’s plain noodle in a clear broth with a little lard and scallion, nothing extra, everything exactly in place. Yangchun is a native-feeling system: grouped inset surfaces, segmented controls, pill switches, round checkmarks, frosted menus and spring motion. - Family: Minimal · Origin: China · Shanghai · License: MIAN License (free to use) - Traits: refined, friendly, clean, trustworthy, polished · intensity 2/5 · contrast medium · density comfortable. Good for: consumer apps, settings, productivity, health, fintech. Less for: editorial, raw or brutal brands. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/yangchun.css - Page: https://mian.ro/noodles/yangchun ## Design philosophy Yangchun is Shanghai’s plain noodle in clear broth, and the interface that feels like the device it runs on: familiar controls in their expected places, grouped on quiet surfaces, with nothing added for decoration. Hierarchy comes from grouping, weight and spacing rather than from lines and colour. Every interaction answers instantly and settles with a soft spring. ## Principles - Group, don’t box: related things sit together on one white surface on a grey page, separated by hairlines that start where the text starts. - Familiar beats clever: switches, segmented controls, round checkmarks and sheets behave exactly as people expect on their phone. - One accent colour, used for what can be tapped. Everything else is black, grey and white. - Touch-sized: controls are at least 42px tall and generously padded. - Pressing dims, it does not move: the highlight is instant, the release fades. ## The language - **Shape.** Continuous rounded corners: 10px fields, 12px buttons, 16px grouped cards, full pills for small buttons and badges. Checkboxes are circles. - **Surface.** Grey page (surface-2 family), white grouped surfaces, no borders, no card shadows. Overlays (menus, popovers, toasts) are frosted: 80% surface with a strong backdrop blur and a hairline edge. - **Colour.** A single blue for interactive elements, green for “on”, red for destructive. Tinted variants are the accent at 12–16% over the surface. - **Type.** The system font. Semibold (600) for controls and titles, bold (700) large titles with slightly tight tracking (−0.022em). Section headers are small, uppercase, muted. - **Motion.** Spring curve cubic-bezier(.32,.72,0,1). Entrances scale up from 96.5% and fade; dialogs settle in from 112%; sheets slide with the same spring. 200–380ms. - **Data.** Rounded 5px bars on a hairline grid, the highlighted bar solid and the rest a 28% tint; a 2.5px line with a soft area beneath; thick activity-ring donuts; tooltips are frosted pills. ## Colour, type and brand - **Primary** #0071e3: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #5856d6: blue (mid). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Page** #f2f2f7: blue (pale, muted). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Scheme.** Two tones of blue: harmonious and calm, with little contrast between brand and accent. The page is cool. - **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. - **Reads as** refined, friendly, clean, trustworthy, polished. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "yangchun"). ## Inspired by the noodle - A clear broth you can see to the bottom of → quiet grouped surfaces, nothing decorative, hierarchy by grouping - Noodles folded neatly into the bowl → inset lists whose hairline separators start where the text starts - An everyday bowl eaten every morning → controls people already know: segmented tabs, 51×31 switches, round checkmarks, sheets with a grabber - Soft wheat in warm broth → continuous rounded corners, springy sheets, dialogs that settle in from slightly larger ## Designing new components in Yangchun Build new components from `--mn-*` tokens, scoped with `[data-noodle="yangchun"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Put the new component on a white grouped surface (var(--mn-surface), radius 12–16px, no border) and separate rows with 1px var(--yc-sep) lines inset 1rem from the leading edge. - Use a gray fill (color-mix(in oklab, #787880 16%, transparent)) for wells, inputs and unselected segments, never an outline. - Selected state = a white “thumb” with the lift shadow (0 3px 8px rgb(0 0 0/.12), 0 3px 1px rgb(0 0 0/.04)) inside a gray track, or the accent colour for text. - Pressed state: opacity .55 with no transition; release fades back over ~260ms. - Anything that floats is frosted and enters with scale(.965) → 1 on the spring curve. Avoid: - Visible borders around controls or cards - More than one accent colour on screen - Bouncy or playful overshoot - Transform-based press effects - Decorative gradients or textures Recipe: a selectable tile in this language: ```css [data-noodle="yangchun"] .tile { padding: 14px 16px; border: 0; border-radius: 12px; background: var(--mn-surface); color: var(--mn-fg); transition: opacity 260ms ease-out; } [data-noodle="yangchun"] .tile:active { opacity: .55; transition-duration: 0ms; } [data-noodle="yangchun"] .tile[aria-selected="true"] { color: var(--mn-primary-text); font-weight: 600; } [data-noodle="yangchun"] .tile + .tile { box-shadow: inset 1rem 0 0 var(--mn-surface), inset 0 1px 0 color-mix(in oklab, var(--mn-fg) 14%, transparent); } ``` ## Tokens - Fonts: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 10px, box 16px, badge 999px - Density: comfortable · Shadows: subtle | token | light | dark | |---|---|---| | bg | #f2f2f7 | #000000 | | surface | #ffffff | #1c1c1e | | surface2 | #e9e9ee | #2c2c2e | | fg | #1c1c1e | #f5f5f7 | | muted | #636366 | #a1a1a6 | | border | #dedee3 | #38383a | | input | #c7c7cc | #545458 | | primary | #0071e3 | #0071e3 | | primaryFg | #ffffff | #ffffff | | secondary | #e9e9ee | #2c2c2e | | secondaryFg | #1c1c1e | #f5f5f7 | | accent | #5856d6 | #7d7aff | | accentFg | #ffffff | #0b0a2e | | ring | #0071e3 | #409cff | | success | #1f7a35 | #30d158 | | successFg | #ffffff | #04210c | | warning | #b25000 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #d70015 | #ff6961 | | dangerFg | #ffffff | #2a0402 | | info | #0071a4 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0367cb | #3b91e8 | | secondaryText | #6e6e71 | #88888a | | accentText | #5856d6 | #8784fe | | successText | #1f7835 | #30d158 | | warningText | #ac4e01 | #fbbf24 | | dangerText | #cc0216 | #ff6961 | | infoText | #016fa1 | #38bdf8 | | link | #5856d6 | #7d7aff | --- # Linguine: a MIAN design language Warm paper, a serif voice, one clay colour. Linguine, “little tongues”, are flat narrow strands from Liguria, made to carry pesto and conversation. Linguine is a warm, literate system for products people read and talk to: paper-toned surfaces, a serif for what is said, a quiet sans for controls, hairline edges and a single clay colour kept for actions. - Family: Minimal · Origin: Italy · Liguria · License: MIAN License (free to use) - Traits: warm, literate, calm, thoughtful, refined, minimal, human, conversational · intensity 1/5 · contrast medium · density comfortable. Good for: ai products, assistants and chat, writing tools, research, publications, documentation, studios, reading apps. Less for: dense admin, games, loud campaigns. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/linguine.css - Page: https://mian.ro/noodles/linguine ## Design philosophy Linguine is for products people read and reply to. The page is warm paper rather than white, what is said is set in a serif at a comfortable measure, and the controls around it stay quiet in a plain sans. Edges are hairlines and nothing has a shadow until it floats. One clay colour appears only where something can be done, so the eye finds the action without being shouted at. ## Principles - Paper, not white: backgrounds are warm off-white (#faf9f5) and ink is a soft near-black (#1f1e1d). Pure #fff and #000 are never the page. - Two voices: a serif for content and headings, a sans for controls and labels. Never mix them inside one line. - One clay accent, reserved for the primary action, the focus ring and the chosen state. - Hairlines and tone separate things; shadows are only for menus, dialogs and toasts. - Calm motion: 180–240ms, a 2px rise, ease-out with no overshoot. ## The language - **Shape.** 8px fields and buttons, 14px containers and text areas, pill badges. Text inputs are generous: 0.8rem of padding and 1.55 line height. - **Surface.** Paper page, white surfaces, 1px warm-grey edges. Overlays lose the border and float on a warm-tinted shadow. - **Colour.** Clay (#ae5630 / #d97757) for actions; warm greys for everything else. Status colours stay standard. - **Type.** A book serif at weight 500 for headings, card titles and quotations, tracked −0.02em; the system sans at 400/500 for the interface. - **Motion.** linguine-in: 2px rise and fade over 240ms on cubic-bezier(.16,1,.3,1). Buttons scale to .985 while pressed. - **Data.** Bars in 13% ink with the highlighted one in clay; a 1.75px clay line over a faint area. ## Colour, type and brand - **Primary** #ae5630: brown and terracotta (mid). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #3d3d3a: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Page** #faf9f5: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** One hue (brown and terracotta) and neutrals: the brand colour is unmistakable and should be kept for actions. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, system sans (the device’s own typeface) for the interface. Headings are medium, which reads as calm and assured. Considered, literate, established. The voice of books and long reading. - **Reads as** warm, literate, calm, thoughtful, refined (brand dimension: sincerity). - **Tone of voice.** Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "linguine"). ## Inspired by the noodle - “Little tongues” → a system built around reading and replying: generous text measure, a serif for content - Flat, narrow strands → thin hairline edges, no shadows on resting surfaces - Trofie al pesto on a paper cloth → warm off-white paper, never pure white or pure black - One spoon of pesto → one clay accent, used only where something can be done ## Designing new components in Linguine Build new components from `--mn-*` tokens, scoped with `[data-noodle="linguine"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Start with var(--mn-surface) on the paper page, a 1px var(--mn-border) edge and radius 14px; no shadow. - Put prose in var(--mn-font-heading) (the serif) at 1.05–1.2rem with line-height 1.6; put labels and buttons in var(--mn-font). - Hover deepens the edge to var(--mn-input) or tints the surface with var(--mn-surface-2); nothing moves. - Selected: a 2px clay underline or a clay edge with a 3px clay ring at 18%. Never a clay fill behind long text. - Give text areas room: at least three lines tall, 14px radius, generous padding. Avoid: - Pure white pages and pure black text - A second accent colour - Shadows on resting cards - Italic serif used as decoration - Dense, compact layouts Recipe: a selectable tile in this language: ```css [data-noodle="linguine"] .tile { padding: 18px 20px; border: 1px solid var(--mn-border); border-radius: 14px; background: var(--mn-surface); color: var(--mn-fg); transition: border-color 180ms cubic-bezier(.16, 1, .3, 1), background-color 180ms; } [data-noodle="linguine"] .tile h3 { font: 500 1.125rem/1.3 var(--mn-font-heading); letter-spacing: -.01em; } [data-noodle="linguine"] .tile:hover { border-color: var(--mn-input); } [data-noodle="linguine"] .tile[aria-selected="true"] { border-color: var(--mn-primary); box-shadow: 0 0 0 3px color-mix(in oklab, var(--mn-primary) 18%, transparent); } ``` ## Tokens - Fonts: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Radius: field 8px, box 14px, badge 999px - Density: comfortable · Shadows: subtle | token | light | dark | |---|---|---| | bg | #faf9f5 | #1f1e1d | | surface | #ffffff | #262624 | | surface2 | #f0eee6 | #30302e | | fg | #1f1e1d | #f5f4ee | | muted | #5e5d59 | #b0aea5 | | border | #e8e6dc | #3b3a37 | | input | #d1cfc5 | #55534e | | primary | #ae5630 | #d97757 | | primaryFg | #ffffff | #1f1108 | | secondary | #f0eee6 | #30302e | | secondaryFg | #1f1e1d | #f5f4ee | | accent | #3d3d3a | #c2c0b6 | | accentFg | #ffffff | #1f1e1d | | ring | #ae5630 | #d97757 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #a3522e | #dc8669 | | secondaryText | #73716d | #8f8e8a | | accentText | #3d3d3a | #c2c0b6 | | successText | #16783a | #4ade80 | | warningText | #a84f0b | #fbbf24 | | dangerText | #c52525 | #f87474 | | infoText | #0369a1 | #38bdf8 | | link | #ae5630 | #d97757 | --- # Penne: a MIAN design language 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. - Family: Minimal · Origin: Italy · Campania · License: MIAN License (free to use) - Traits: neutral, minimal, clean, modern, quiet, soft, product-first · intensity 1/5 · contrast high · density comfortable. Good for: ai products, assistants and chat, consumer apps, saas, productivity, developer tools, search. Less for: editorial, heritage brands, children. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/penne.css - Page: https://mian.ro/noodles/penne ## Design philosophy 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. ## The language - **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. ## Colour, type and brand - **Primary** #0d0d0d: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #0f6e58: teal and cyan (deep, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #ffffff: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one teal and cyan accent: the accent means “look here” precisely because nothing else is coloured. The page 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. - **Reads as** neutral, minimal, clean, modern, quiet (brand dimension: competence). - **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. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "penne"). ## Inspired by the noodle - A plain tube, nothing added → no borders on fields, no decoration, grey and white only - Cut once, on the diagonal → one decisive element per screen: a single black button - Smooth (lisce), not ridged → soft pill shapes and large, even corner radii - Holds whatever sauce it is given → a neutral frame that lets the content be the colour ## Designing new components in Penne Build new components from `--mn-*` tokens, scoped with `[data-noodle="penne"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - 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 in this language: ```css [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); } ``` ## Tokens - Fonts: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 24px, box 20px, badge 999px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #ffffff | #1c1c1c | | surface | #ffffff | #262626 | | surface2 | #f4f4f4 | #303030 | | fg | #0d0d0d | #ececec | | muted | #5d5d5d | #b4b4b4 | | border | #ececec | #363636 | | input | #d0d0d0 | #4f4f4f | | primary | #0d0d0d | #f9f9f9 | | primaryFg | #ffffff | #0d0d0d | | secondary | #f4f4f4 | #303030 | | secondaryFg | #0d0d0d | #ececec | | accent | #0f6e58 | #6fd3b8 | | accentFg | #ffffff | #04241c | | ring | #0d0d0d | #f9f9f9 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0d0d0d | #f9f9f9 | | secondaryText | #737373 | #8e8e8e | | accentText | #0f6e58 | #6fd3b8 | | successText | #15793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c72424 | #f87676 | | infoText | #0369a1 | #38bdf8 | | link | #0d0d0d | #f9f9f9 | --- # Chitarra: a MIAN design language Black, white, one blue. Cut on steel strings. Spaghetti alla chitarra is pressed through a frame strung like a guitar, so every strand comes out square and identical. Chitarra is a stark system for feeds and timelines: true black or true white, hairline rules from edge to edge, heavy type, pill buttons and a single blue for what is live or chosen. - Family: Minimal · Origin: Italy · Abruzzo · License: MIAN License (free to use) - Traits: stark, bold, fast, direct, minimal, high-contrast, social · intensity 3/5 · contrast high · density default. Good for: social apps, feeds and timelines, news, communities, media apps, messaging, sport. Less for: luxury, wellness, children. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/chitarra.css - Page: https://mian.ro/noodles/chitarra ## Design philosophy Chitarra is a stark system for streams of content: feeds, timelines, inboxes. The page is true white or true black, items are separated by hairline rules that run from edge to edge rather than by cards, type is heavy, and every button is a pill. One blue marks what is live, linked or selected. It answers in 120ms and never decorates. ## Principles - Rules before boxes: separate rows with a 1px rule; use a card only when something must stand apart. - True black and true white. Greys are for secondary text and rules only. - One blue (#0f6cbd / #1d9bf0) for links, the selected tab, switches and focus. - Heavy hierarchy: 800 for headings, 700 for names, buttons and chosen states, 400 for text. - Instant: 120ms fades, opacity on press, no movement. ## The language - **Shape.** Pill buttons, chips and inputs (24px); 16px containers; tabs as equal columns with a short 4px blue bar under the chosen one. - **Surface.** Flat. No shadows on resting surfaces; overlays get a soft all-round glow of the ink colour instead of a drop shadow. - **Colour.** Ink buttons, blue for state and links. Hover is a 10% wash of the element’s own colour. - **Type.** The system font. Headings 800 at −0.03em; labels and buttons 700. - **Motion.** chitarra-in: a 120ms fade. Pressed buttons drop to 85% opacity. - **Data.** Thin 2px bars in grey with the highlighted bar in blue; a 2px blue line. ## Colour, type and brand - **Primary** #0f1419: blue (deep, muted). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #0f6cbd: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Page** #ffffff: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Two tones of blue: harmonious and calm, with little contrast between brand and accent. The page is neutral. - **Type.** One voice throughout: system sans (the device’s own typeface). Headings are heavy, which reads as loud and direct. Native, familiar, efficient. It disappears, which is the point: the product feels like part of the device. - **Reads as** stark, bold, fast, direct, minimal. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "chitarra"). ## Inspired by the noodle - Pressed through steel strings → hairline rules that run edge to edge and divide everything - Square, identical strands → rows of equal items: lists, feeds and timelines before cards - Semolina and egg, nothing else → two colours, black and white, with one blue - A firm bite → heavy 700–800 type and motion that answers in 120ms ## Designing new components in Chitarra Build new components from `--mn-*` tokens, scoped with `[data-noodle="chitarra"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Lay new content out as rows divided by 1px var(--mn-border) rules; pad rows 12–16px and let them span the full width. - Hover a row with a 3% ink wash; never lift or outline it. - Selected: 700 weight plus a 4px blue bar (border-radius 999px) under or beside the item. - Buttons are pills at 700; the main one is ink, secondary ones are outlined in var(--mn-input). - Counts and metadata use var(--mn-muted) at the same size as text, not smaller. Avoid: - Cards around every item - Drop shadows - A second accent colour - Light font weights - Slow or bouncy motion Recipe: a selectable tile in this language: ```css [data-noodle="chitarra"] .tile { padding: 14px 16px; border: 0; border-bottom: 1px solid var(--mn-border); border-radius: 0; background: var(--mn-bg); color: var(--mn-fg); transition: background-color 120ms ease-out; } [data-noodle="chitarra"] .tile:hover { background: color-mix(in oklab, var(--mn-fg) 3%, var(--mn-bg)); } [data-noodle="chitarra"] .tile[aria-selected="true"] { font-weight: 700; box-shadow: inset 4px 0 0 var(--mn-accent); } ``` ## Tokens - Fonts: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 24px, box 16px, badge 999px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #ffffff | #000000 | | surface | #ffffff | #0a0a0a | | surface2 | #eff3f4 | #16181c | | fg | #0f1419 | #e7e9ea | | muted | #536471 | #8b98a5 | | border | #e1e8ed | #2f3336 | | input | #cfd9de | #536471 | | primary | #0f1419 | #eff3f4 | | primaryFg | #ffffff | #0f1419 | | secondary | #eff3f4 | #16181c | | secondaryFg | #0f1419 | #e7e9ea | | accent | #0f6cbd | #1d9bf0 | | accentFg | #ffffff | #001523 | | ring | #0f6cbd | #1d9bf0 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0f1419 | #eff3f4 | | secondaryText | #727679 | #7a7c7f | | accentText | #0f6aba | #1d9bf0 | | successText | #15773a | #4ade80 | | warningText | #aa4f0a | #fbbf24 | | dangerText | #c82425 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0f1419 | #eff3f4 | --- # Shio: a MIAN design language The clearest broth. Light, airy, afloat. Shio ramen is seasoned only with salt, so its broth is the clearest and lightest of all ramen, you can see every noodle. Shio is an airy system with no visible borders: everything floats on soft, layered elevation over a pale page, with generous space, light type and a sea-slate ink. - Family: Minimal · Origin: Japan · salt ramen · License: MIAN License (free to use) - Traits: airy, light, calm, optimistic, gentle · intensity 1/5 · contrast low · density comfortable. Good for: wellness, onboarding, landing pages, personal sites. Less for: dense admin, financial data. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/shio.css - Page: https://mian.ro/noodles/shio ## Design philosophy Shio is the clearest broth. Nothing in it has an outline: every surface floats over a pale page on soft, layered elevation, and rises a little, casting a softer, wider shadow, when you reach for it. Space is generous, type is medium weight, and there is one sea-slate ink. ## Principles - No visible borders. Separate with elevation: --sh-1 (resting), --sh-2 (raised), --sh-3 (floating). - Touch lifts: hover raises by 1–2px and steps up one elevation level; press settles back. - One ink (sea slate) for action, kombu green as a quiet accent, pale neutrals for everything else. - Generous space: comfortable density, 16px containers, medium (500) headings with tight tracking. ## The language - **Shape.** 10px fields, 16px surfaces, pill badges; tabs are small floating cards in a pale track. - **Surface.** White on #fafaf9, separated only by layered, very soft shadows with a 1px 4–5% ring. - **Colour.** Sea-slate primary, kombu-green accent, warm pale greys. - **Type.** Clean sans; 500 for headings and controls. - **Motion.** shio-in: 6px rise with a 2px blur, 300ms; elevation transitions 260ms. - **Data.** Soft rounded bars that lift on hover; 2px lines; a slim donut. ## Colour, type and brand - **Primary** #1f3a5f: blue (deep). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #2f6b5a: green (mid). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #fafaf9: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Blue with green: a contrasting pair that needs one of the two to dominate. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are medium, which reads as calm and assured. Clear, modern, impartial. The voice of software and signage. - **Reads as** airy, light, calm, optimistic, gentle. - **Tone of voice.** Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "shio"). ## Inspired by the noodle - A broth clear enough to see through → no borders; surfaces are separated by soft, layered elevation alone - Seasoned only with salt → nothing added: pale neutrals, one sea-slate ink, a kombu-green accent - A light, delicate bowl → generous space, medium-weight type, comfortable density - Noodles lifted from the broth → things float up gently and cast softer shadows as they rise ## Designing new components in Shio Build new components from `--mn-*` tokens, scoped with `[data-noodle="shio"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - background: var(--mn-surface); border: 0; box-shadow: var(--sh-2); radius 16px. - Hover: transform: translateY(-2px); box-shadow: var(--sh-3). - Selected inside a group: a white card with --sh-1 on a --mn-surface-2 track. Avoid: - 1px borders as structure - Hard or dark shadows - Dense layouts Recipe: a selectable tile in this language: ```css [data-noodle="shio"] .tile { padding: 16px 18px; border: 0; border-radius: 16px; background: var(--mn-surface); box-shadow: var(--sh-2); transition: box-shadow 260ms cubic-bezier(.2, .7, .2, 1), transform 260ms cubic-bezier(.2, .7, .2, 1); } [data-noodle="shio"] .tile:hover { transform: translateY(-2px); box-shadow: var(--sh-3); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Radius: field 10px, box 16px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #fafaf9 | #0e1014 | | surface | #ffffff | #16191e | | surface2 | #f3f3f1 | #1e2228 | | fg | #14181f | #eef1f5 | | muted | #5d6470 | #9aa3ae | | border | #ececea | #262a31 | | input | #d5d6d4 | #3a404a | | primary | #1f3a5f | #a9c3e8 | | primaryFg | #ffffff | #0e1a2b | | secondary | #f3f3f1 | #1e2228 | | secondaryFg | #14181f | #eef1f5 | | accent | #2f6b5a | #8fd1bd | | accentFg | #ffffff | #06231b | | ring | #1f3a5f | #a9c3e8 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1f3a5f | #a9c3e8 | | secondaryText | #6d7073 | #82858a | | accentText | #2f6b5a | #8fd1bd | | successText | #15783b | #4ade80 | | warningText | #aa4f0a | #fbbf24 | | dangerText | #c82525 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1f3a5f | #a9c3e8 | --- # Spaghetti: a MIAN design language Pasta, tomato, a poster. Spaghetti al pomodoro is the whole of Italian cooking in one plate: few ingredients, nothing to hide. Spaghetti is Italian poster minimalism: a heavy grotesk, strict left alignment, thick black rules instead of boxes, flat black and one tomato red. - Family: Minimal · Origin: Italy · Naples · License: MIAN License (free to use) - Traits: italian, poster, confident, minimal, graphic, european · intensity 3/5 · contrast high · density default. Good for: creative studios, agencies, restaurants, design portfolios, cultural events. Less for: soft consumer apps, children. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/spaghetti.css - Page: https://mian.ro/noodles/spaghetti ## Design philosophy Spaghetti is Italian poster minimalism: three ingredients on a white plate. A heavy grotesk set flush left, thick black rules on top of things instead of boxes around them, flat black and one tomato red that marks the single most important thing on screen. Firm and fast, al dente. ## Principles - Rules, not boxes: a 3px black rule tops cards, tables, alerts and sections; nothing is enclosed. - One red thing per view: the primary hover, the focus ring, the chosen tab, the highlighted bar. - Type does the work: 800-weight grotesk headlines with −0.045em tracking, uppercase micro-labels. - No shadows, no radius beyond 2px, no gradients. ## The language - **Shape.** 2px corners; fields are a single 2px baseline; switches and checkboxes are squares. - **Surface.** White page, transparent surfaces topped by a 3px ink rule; floating panels get a flat offset shadow at 12% ink. - **Colour.** Ink black and tomato red (#c8001a); red appears once per view. - **Type.** Helvetica-class grotesk, 800 for headings, 700 for controls, uppercase 11px badges. - **Motion.** spaghetti-in: a 10px slide from the left in 160ms; hovers are instant colour swaps. - **Data.** Black square columns; the highlighted column and the progress fill are red; 3px lines, no area. ## Colour, type and brand - **Primary** #111111: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #c8001a: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #ffffff: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one red accent: the accent means “look here” precisely because nothing else is coloured. The page is neutral. - **Type.** One voice throughout: grotesque sans. Headings are heavy, which reads as loud and direct. Confident, graphic, European. A poster voice with a little warmth and irregularity. - **Reads as** italian, poster, confident, minimal, graphic. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "spaghetti"). ## Inspired by the noodle - Three ingredients on a white plate → white, black and one tomato red, nothing else - Long straight strands → strict horizontal rules: a 3px black rule tops every card, table and section - Printed on a trattoria menu → heavy grotesk headlines at 800, tight tracking, flush left - Al dente → firm, fast motion; everything snaps into place ## Designing new components in Spaghetti Build new components from `--mn-*` tokens, scoped with `[data-noodle="spaghetti"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border: 0; border-top: 3px solid var(--mn-fg); border-radius: 0; background: transparent. - Hover and selection swap to var(--mn-accent) (tomato), never add a second colour. - Headings: font-weight 800; letter-spacing: -.045em; line-height: .98. - Labels and badges: uppercase, 800, .6875rem, letter-spacing .02em. Avoid: - Rounded corners or pills - Soft shadows and gradients - More than one accent colour - Centred layouts Recipe: a selectable tile in this language: ```css [data-noodle="spaghetti"] .tile { padding: 12px 0 14px; border: 0; border-top: 3px solid var(--mn-fg); border-radius: 0; background: transparent; font-weight: 700; } [data-noodle="spaghetti"] .tile:hover { color: var(--mn-accent); } [data-noodle="spaghetti"] .tile[aria-selected="true"] { border-top-color: var(--mn-accent); } ``` ## Tokens - Fonts: "Helvetica Neue", Helvetica, "Nimbus Sans", Arial, ui-sans-serif, system-ui, sans-serif - Heading font: "Helvetica Neue", Helvetica, "Nimbus Sans", Arial, ui-sans-serif, system-ui, sans-serif - Radius: field 2px, box 2px, badge 2px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #ffffff | #0c0c0c | | surface | #ffffff | #141414 | | surface2 | #f4f4f2 | #1d1d1d | | fg | #111111 | #f2f2f0 | | muted | #5c5c5c | #a3a3a0 | | border | #e4e4e1 | #2a2a2a | | input | #cfcfcb | #444444 | | primary | #111111 | #f2f2f0 | | primaryFg | #ffffff | #111111 | | secondary | #f4f4f2 | #1d1d1d | | secondaryFg | #111111 | #f2f2f0 | | accent | #c8001a | #ff5a67 | | accentFg | #ffffff | #1a0003 | | ring | #c8001a | #ff5a67 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #111111 | #f2f2f0 | | secondaryText | #757574 | #7f7f7e | | accentText | #c8001a | #ff5a67 | | successText | #15793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c82424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #111111 | #f2f2f0 | --- # Bucatini: a MIAN design language A strand with a hole through it. Bucatini look like thick spaghetti, but each one is a tube with a hole running through the middle. Bucatini is a hollow system: everything is drawn in outline, tube-shaped pill buttons, ring switches, hollow checkboxes and outlined charts, and fills only when you press or choose. - Family: Minimal · Origin: Italy · Rome · License: MIAN License (free to use) - Traits: hollow, outlined, crafted, minimal, precise · intensity 2/5 · contrast high · density default. Good for: design tools, studios, architecture, portfolios. Less for: data-dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/bucatini.css - Page: https://mian.ro/noodles/bucatini ## Design philosophy Bucatini is hollow. Each strand is a tube with a hole through the middle, so every control is drawn as an outline: pill-shaped tubes, ring switches with a hollow knob, hollow checkboxes, outlined cards and charts, and fills from the inside only when you press, hover or choose it. Emptiness is the default state. ## Principles - Outline first: 1.5px ink strokes define everything; fills mean “chosen” or “pressed”. - Tubes: buttons, fields, tabs and badges are pills; containers have 18px corners. - The primary button is a filled tube with a thin inner gap, like the hole in the pasta. - One amatriciana red accent; everything else is ink and paper. ## The language - **Shape.** 999px pills for controls, 18px containers; checkboxes are circles. - **Surface.** Transparent surfaces with a 1.5px ink outline; floating panels add a second, detached outline ring. - **Colour.** Ink and paper with a sauce-red accent. - **Type.** Clean sans, 600 for headings and controls. - **Motion.** bucatini-in: a 3% scale-up in 200ms; hovers fill from the inside (inset shadow grows). - **Data.** Hollow capsule columns and a hollow progress tube with an inset fill; the highlight fills solid. ## Colour, type and brand - **Primary** #151515: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #b3261e: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #fcfcfb: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one red accent: the accent means “look here” precisely because nothing else is coloured. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** hollow, outlined, crafted, minimal, precise. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "bucatini"). ## Inspired by the noodle - A tube, not a rod → every control is an outline; the inside stays empty until it is chosen - Round in section → pill buttons and fields, ring switches with a hollow knob - Amatriciana on the side → ink outlines with one sauce red for the accent - Sucking up the sauce → hover fills the tube from the inside ## Designing new components in Bucatini Build new components from `--mn-*` tokens, scoped with `[data-noodle="bucatini"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border: 1.5px solid var(--mn-fg); background: transparent; border-radius: 999px (controls) or 18px (containers). - Selected / pressed: background var(--mn-fg); color var(--mn-bg). - Filled accents keep a 2.5px inner gap: box-shadow: inset 0 0 0 2.5px var(--mn-bg), inset 0 0 0 40px . Avoid: - Solid filled surfaces at rest - Square corners - Drop shadows Recipe: a selectable tile in this language: ```css [data-noodle="bucatini"] .tile { padding: 10px 18px; border: 1.5px solid var(--mn-fg); border-radius: 999px; background: transparent; } [data-noodle="bucatini"] .tile:hover { box-shadow: inset 0 0 0 1px var(--mn-fg); } [data-noodle="bucatini"] .tile[aria-selected="true"] { background: var(--mn-fg); color: var(--mn-bg); box-shadow: inset 0 0 0 2.5px var(--mn-bg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Radius: field 999px, box 18px, badge 999px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #fcfcfb | #111111 | | surface | #fcfcfb | #111111 | | surface2 | #f2f2f0 | #1b1b1b | | fg | #151515 | #f0f0ee | | muted | #5e5e5e | #a0a09c | | border | #d9d9d6 | #2c2c2c | | input | #8a8a86 | #6b6b67 | | primary | #151515 | #f0f0ee | | primaryFg | #fcfcfb | #111111 | | secondary | #f2f2f0 | #1b1b1b | | secondaryFg | #151515 | #f0f0ee | | accent | #b3261e | #f47c6c | | accentFg | #ffffff | #2a0500 | | ring | #151515 | #f0f0ee | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #151515 | #f0f0ee | | secondaryText | #727271 | #7d7d7c | | accentText | #b3261e | #f47c6c | | successText | #15773a | #4ade80 | | warningText | #a74e0a | #fbbf24 | | dangerText | #c42424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #151515 | #f0f0ee | --- # Hofun: a MIAN design language Wide, flat, silky. Shahe fen is steamed as a thin sheet of rice batter and cut into wide ribbons, smooth, pearly and slippery. Hofun is a borderless, tonal system: wide soft ribbons, sheets instead of boxes, and long gliding motion. - Family: Minimal · Origin: China (Guangdong) · License: MIAN License (free to use) - Traits: silky, soft, tonal, calm, modern · intensity 2/5 · contrast low · density comfortable. Good for: consumer saas, productivity, messaging, personal finance. Less for: high-contrast brands, print-like editorial. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/hofun.css - Page: https://mian.ro/noodles/hofun ## Design philosophy Hofun is rice batter steamed into one thin sheet and cut into wide, silky ribbons. The language has no borders: everything is a sheet, told apart from the sheet beneath it only by a slight change of tone. Controls are wide and flat, indicators are ribbons laid behind the text, and everything glides: long, smooth, never bouncing. ## Principles - No outlines. Separate things with tone (a 4–9% tint of the primary over the surface). - Wide and flat: generous horizontal padding, low contrast between neighbours, big soft radii. - The ribbon is the indicator: a tinted band behind the selected item, not a line under it. - Glide, don’t bounce: long ease-out (cubic-bezier(.22,1,.36,1)), 260–520ms. - A pearly sheen, never a shadow. ## The language - **Shape.** 14px fields, 24px sheets, 8px badges. Switches are flat ribbons (8px radius) with a wide flat knob; slider thumbs are narrow vertical ribbons. - **Surface.** Sheets are var(--mn-surface) tinted 4% with the primary and a faint iridescent sheen; fields are pure white ribbons with a 2px lower edge; no borders or shadows anywhere. - **Colour.** Soft celadon primary, a soy-brown accent, pearl-grey neutrals. Tones, not contrasts. - **Type.** Medium weight (500) headings with slightly tight tracking; nothing heavy. - **Motion.** hofun-glide: 16px slide from the left with fade, 480ms. Dialogs rise 20px. Tab ribbons travel 520ms. - **Data.** Bars almost touch (3px gap), 8px top radius; thick 4px lines; the table has no rules, rows are ribbons that tint on hover. ## Colour, type and brand - **Primary** #2c5f66: teal and cyan (deep). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Accent** #8a5a3c: brown and terracotta (mid). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #faf9fb: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Teal and cyan against brown and terracotta, close to complementary: strong contrast, so the accent must stay rare. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are medium, which reads as calm and assured. Clear, modern, impartial. The voice of software and signage. - **Reads as** silky, soft, tonal, calm, modern. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "hofun"). ## Inspired by the noodle - Steamed as one thin sheet → no borders anywhere; surfaces are separated by tone alone - Cut into wide ribbons → wide controls, ribbon-shaped tabs and bars laid edge to edge with no gaps - Silky and slippery → long, frictionless glides; nothing bounces, everything slides into place - Pearly, translucent rice → a faint pearl sheen on raised surfaces, a soft celadon primary ## Designing new components in Hofun Build new components from `--mn-*` tokens, scoped with `[data-noodle="hofun"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Build the component as a sheet: background var(--h-sheet) (primary 4% over surface), radius 16–24px, no border. - Selection is a ribbon: background var(--h-tone) behind the content, radius 12px, moving with the glide curve. - Inputs are white with box-shadow: inset 0 -2px 0 var(--mn-input), turning to var(--mn-ring) on focus. - On hover, lay a lighter layer across from the left (clip-path inset animation). Avoid: - Any 1px border - Drop shadows under sheets - Springy overshoot - Narrow, tall controls - High-contrast dividers Recipe: a selectable tile in this language: ```css [data-noodle="hofun"] .tile { padding: 14px 20px; border: 0; border-radius: 16px; background: color-mix(in oklab, var(--mn-primary) 4%, var(--mn-surface)); transition: background-color 360ms cubic-bezier(.22, 1, .36, 1); } [data-noodle="hofun"] .tile:hover, [data-noodle="hofun"] .tile[aria-selected="true"] { background: color-mix(in oklab, var(--mn-primary) 9%, var(--mn-surface)); color: var(--mn-primary-text); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 14px, box 24px, badge 8px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #faf9fb | #121116 | | surface | #ffffff | #19181e | | surface2 | #f1eff5 | #232029 | | fg | #1d1b22 | #f3f1f7 | | muted | #5f5b69 | #a8a3b3 | | border | #ebe8f0 | #2b2833 | | input | #dcd8e3 | #3e3a48 | | primary | #2c5f66 | #8fd0d6 | | primaryFg | #ffffff | #06262a | | secondary | #f1eff5 | #232029 | | secondaryFg | #1d1b22 | #f3f1f7 | | accent | #8a5a3c | #dcb392 | | accentFg | #ffffff | #231608 | | ring | #2c5f66 | #8fd0d6 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #2c5f66 | #8fd0d6 | | secondaryText | #727076 | #87848c | | accentText | #8a5a3c | #dcb392 | | successText | #16783b | #4ade80 | | warningText | #a84f0b | #fbbf24 | | dangerText | #c52526 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #2c5f66 | #8fd0d6 | --- # Hiyamugi: a MIAN design language White, cold, one coloured strand. Hiyamugi are white wheat noodles served cold, a bundle at a time; a few pink and green strands are mixed into every bundle. Hiyamugi is a quiet white system in which exactly one coloured strand marks what matters. - Family: Minimal · Origin: Japan · License: MIAN License (free to use) - Traits: quiet, white, fresh, delicate, japanese, minimal · intensity 1/5 · contrast medium · density comfortable. Good for: studios, product sites, portfolios, minimal shops. Less for: loud campaigns. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/hiyamugi.css - Page: https://mian.ro/noodles/hiyamugi ## Design philosophy Hiyamugi is a quiet white bundle with one coloured strand in it. The interface is almost entirely white, grey and charcoal; in each component, exactly one thin coloured line, the strand, marks what matters: the focused field, the active tab, the primary action, the current value. The restraint is the design: if everything had a strand, nothing would. ## Principles - One strand per component: a 2px line in the accent (pink), or green for success and a second series. - Everything else is neutral: white surfaces, 1px light borders, charcoal type. - Space over structure: comfortable density, generous padding, few lines. - Strands are laid, not faded: they draw in from the left (scaleX) over ~300–600ms. ## The language - **Shape.** 8px fields, 12px containers, 6px badges. Thin bars (≤10px wide) in charts. - **Surface.** White with 1px #e8e8e6 borders; a short strand (2.5rem × 2px) lies across the top edge of each card. - **Colour.** Charcoal primary, a pink strand (accent), a green strand (success). Nothing else is coloured. - **Type.** Clean sans, headings at 500 with slight negative tracking. - **Motion.** hiyamugi-in: 4px rise and fade, 320ms; hiyamugi-lay draws strands from the left. - **Data.** Grey strand-thin bars with a pink highlight; 1.5px lines; thin donut rings. ## Colour, type and brand - **Primary** #1b1b1d: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #c92a63: magenta and pink (mid). Play, tenderness, boldness. Pale pinks are gentle; hot magenta is loud and modern. - **Page** #fbfbfa: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one magenta and pink accent: the accent means “look here” precisely because nothing else is coloured. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are medium, which reads as calm and assured. Clear, modern, impartial. The voice of software and signage. - **Reads as** quiet, white, fresh, delicate, japanese. - **Tone of voice.** Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "hiyamugi"). ## Inspired by the noodle - A bundle of white strands → a calm white-and-grey interface with generous space - One pink strand in the bundle → a single 2px coloured line marks the active, focused or important thing, never more than one per component - Pink and green strands → the pink strand for action, the green for success and a second series - Served cold and still → slow, gentle motion; strands are laid across from the left ## Designing new components in Hiyamugi Build new components from `--mn-*` tokens, scoped with `[data-noodle="hiyamugi"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Build the component in white and grey first. Then decide which single element matters and give only it the strand: box-shadow: inset 0 -2px 0 var(--mn-accent) (or a 2px ::before line). - On hover, quiet elements may show the strand temporarily. - Use the green strand (var(--mn-success)) only for success or a second data series. Avoid: - More than one strand in a component - Coloured fills - Heavy borders or shadows - Dense layouts Recipe: a selectable tile in this language: ```css [data-noodle="hiyamugi"] .tile { padding: 16px 18px; border: 1px solid var(--mn-border); border-radius: 12px; background: var(--mn-surface); transition: box-shadow 300ms cubic-bezier(.25, .1, .25, 1); } [data-noodle="hiyamugi"] .tile:hover, [data-noodle="hiyamugi"] .tile[aria-selected="true"] { box-shadow: inset 0 -2px 0 var(--mn-accent); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 8px, box 12px, badge 6px - Density: comfortable · Shadows: subtle | token | light | dark | |---|---|---| | bg | #fbfbfa | #0e0e10 | | surface | #ffffff | #161618 | | surface2 | #f3f3f2 | #1f1f22 | | fg | #1b1b1d | #f4f4f5 | | muted | #616166 | #a1a1a8 | | border | #e8e8e6 | #2a2a2e | | input | #d3d3d1 | #44444a | | primary | #1b1b1d | #f4f4f5 | | primaryFg | #ffffff | #1b1b1d | | secondary | #f3f3f2 | #1f1f22 | | secondaryFg | #1b1b1d | #f4f4f5 | | accent | #c92a63 | #f27aa6 | | accentFg | #ffffff | #2a0715 | | ring | #c92a63 | #f27aa6 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1b1b1d | #f4f4f5 | | secondaryText | #717172 | #818183 | | accentText | #bf295f | #f27aa6 | | successText | #15783a | #4ade80 | | warningText | #a84f0b | #fbbf24 | | dangerText | #c52525 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1b1b1d | #f4f4f5 | --- # Ramyeon: a MIAN design language Three minutes, a terminal and a timer. Ramyeon comes in a packet with instructions: boil 550 ml, add noodles and soup, wait three minutes. Ramyeon is a terminal system: monospace everything, square corners, [ bracketed ] buttons, block-character progress, a text spinner and a blinking cursor, instructions, not decoration. - Family: Minimal · Origin: Korea · instant noodles · License: MIAN License (free to use) - Traits: technical, terminal, nerdy, raw, fast · intensity 2/5 · contrast high · density compact. Good for: developer tools, cli products, hacker events, changelogs, infrastructure. Less for: luxury, children, wellness. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/ramyeon.css - Page: https://mian.ro/noodles/ramyeon ## Design philosophy Ramyeon is a terminal. Its world is a packet of printed instructions and a three-minute wait, so the interface is plain monospaced text on a strict character grid: square corners, [ bracketed ] buttons and badges, selection shown in inverse video, progress and bars built from character blocks, a | /, \ spinner and a blinking cursor. Instructions, not decoration. ## Principles - Monospace everything; uppercase, tracked labels. - Brackets mark what you can press or read as a token: [ SAVE ], [NEW]. - Selection = inverse video (fg background, bg text). Hover on quiet buttons inverts too. - Blocks, not bars: progress and chart bars are rows of solid blocks with 2px gaps. - Steps, not easing: motion uses steps(), typing in, ticking spinners, stepped fills. ## The language - **Shape.** 0px radius everywhere; square knobs and checkboxes. - **Surface.** Paper white or true black, 1px solid or dashed rules, a faint offset shadow on floating panels. - **Colour.** Ink and paper; amber accent (cursor, focus, highlights). - **Type.** Monospace at 400/600/700; # before card titles, ! before alert titles. - **Motion.** ramyeon-type: clip-path reveal in 10 steps (220ms); ramyeon-tick spinner in 4 steps. - **Data.** Block-character bars (6px blocks, 2px gaps), square line joins, dashed grid lines. ## Colour, type and brand - **Primary** #111111: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #a34c05: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f7f7f4: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one brown and terracotta accent: the accent means “look here” precisely because nothing else is coloured. The page is neutral. - **Type.** One voice throughout: monospace. Headings are semibold, which reads as confident without shouting. Technical, exact, raw, honest. The voice of code, receipts and instruments. - **Reads as** technical, terminal, nerdy, raw, fast. - **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. A monospaced wordmark matches the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "ramyeon"). ## Inspired by the noodle - Printed instructions on the packet → monospace type, plain text first, uppercase labels - Three minutes on a timer → block-character progress bars and a | / - \ text spinner - A block of dried noodles → square corners and a strict character grid - Late-night screens → amber on black in dark mode, ink on paper in light ## Designing new components in Ramyeon Build new components from `--mn-*` tokens, scoped with `[data-noodle="ramyeon"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - font-family: var(--mn-font-mono); border-radius: 0; border: 1px solid var(--mn-fg) (or 1px dashed var(--mn-input) for quiet rules). - Wrap action labels in brackets with ::before / ::after content "[" "]". - Selected / hovered rows and items: background var(--mn-fg); color var(--mn-bg). - Show quantities as repeating-linear-gradient blocks (6px fill, 2px gap). Avoid: - Rounded corners - Proportional fonts - Smooth easing and fades - Gradients or glass Recipe: a selectable tile in this language: ```css [data-noodle="ramyeon"] .tile { padding: 8px 12px; border: 1px dashed var(--mn-input); border-radius: 0; font-family: var(--mn-font-mono); text-transform: uppercase; letter-spacing: .04em; } [data-noodle="ramyeon"] .tile::before { content: "[ ] "; } [data-noodle="ramyeon"] .tile[aria-selected="true"] { background: var(--mn-fg); color: var(--mn-bg); border-style: solid; } [data-noodle="ramyeon"] .tile[aria-selected="true"]::before { content: "[x] "; } ``` ## Tokens - Fonts: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace - Heading font: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace - Radius: field 0px, box 0px, badge 0px - Density: compact · Shadows: none | token | light | dark | |---|---|---| | bg | #f7f7f4 | #0b0b0a | | surface | #ffffff | #121211 | | surface2 | #eeeeea | #1b1b19 | | fg | #111111 | #e9e9e4 | | muted | #595955 | #9d9d97 | | border | #d9d9d4 | #2a2a27 | | input | #a9a9a3 | #55554f | | primary | #111111 | #e9e9e4 | | primaryFg | #f7f7f4 | #0b0b0a | | secondary | #eeeeea | #1b1b19 | | secondaryFg | #111111 | #e9e9e4 | | accent | #a34c05 | #fbbf24 | | accentFg | #ffffff | #1f1300 | | ring | #a34c05 | #fbbf24 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #111111 | #e9e9e4 | | secondaryText | #6e6e6c | #7e7e7a | | accentText | #a34c05 | #fbbf24 | | successText | #15793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c82424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #111111 | #e9e9e4 | --- # Fettuccine: a MIAN design language One sheet, many ribbons. Tonal and friendly. Fettuccine, “little ribbons”, are all cut from a single sheet of egg dough. Fettuccine is a tonal system: every surface is a tint of one seed colour, layers are told apart by tone instead of lines, buttons are pills and anything you touch answers with a soft layer of its own colour. - Family: Flat · Origin: Italy · Rome · License: MIAN License (free to use) - Traits: tonal, friendly, modern, approachable, clean, trustworthy, flat · intensity 2/5 · contrast medium · density comfortable. Good for: consumer apps, mobile, productivity, education, public services, saas, android apps. Less for: luxury, editorial, raw or brutal brands. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/fettuccine.css - Page: https://mian.ro/noodles/fettuccine ## Design philosophy Fettuccine is a tonal system. One seed colour tints every surface: the page barely, cards a little, menus more, the chosen item most. Because layers differ by tone, lines between regions are unnecessary. Buttons are pills, the main one filled with the seed colour, and anything touched answers with a translucent layer of its own colour. Movement starts fast and settles slowly. ## Principles - Tone is depth: page, card, menu and dialog are the surface mixed with 0, 5, 9 and 14% of the primary. - No divider lines between regions; use a step in tone or 16–24px of space. - State layers: hover and press add an 8–12% layer of the element’s content colour, they do not change its shape. - One filled button per view; next come tonal (secondary) buttons, then outlined, then text buttons. - Emphasised easing: cubic-bezier(.05,.7,.1,1), 200–260ms. ## The language - **Shape.** Pill buttons, 12px fields, 20px cards, 28px dialogs, 8px chips. The switch thumb grows when it is on. - **Surface.** Tinted, borderless cards (--ft-1); menus and dialogs a step deeper (--ft-2) with a small two-layer shadow. - **Colour.** A blue seed (#0b57d0 / #a8c7fa), a pale tonal container for secondary actions, green as the second hue. - **Type.** The system font; headings at 400, controls at 500 with +0.01em tracking. - **Motion.** fettuccine-in: 8px rise and fade over 260ms with emphasised easing. No scale on press. - **Data.** Bars in the 14% tone with the highlighted bar in the seed colour; a 2.5px line with a 14% area. ## Colour, type and brand - **Primary** #0b57d0: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #146c2e: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #f8fafd: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Blue with green: a contrasting pair that needs one of the two to dominate. The page is cool. - **Type.** One voice throughout: system sans (the device’s own typeface). Headings are light to regular, which reads as delicate and unhurried. Native, familiar, efficient. It disappears, which is the point: the product feels like part of the device. - **Reads as** tonal, friendly, modern, approachable, clean. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. Use a light or regular wordmark; a heavy one would overpower this interface. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "fettuccine"). ## Inspired by the noodle - Ribbons cut from one sheet → every surface is a tint of the same seed colour - Layered on the plate → depth shown by tone: the higher the layer, the more colour it carries - Soft egg dough → pill buttons, large radii, no hard lines between regions - Tossed, not arranged → emphasised easing: things arrive quickly and settle slowly ## Designing new components in Fettuccine Build new components from `--mn-*` tokens, scoped with `[data-noodle="fettuccine"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Fill the new surface with color-mix(in oklab, var(--mn-primary) 5%, var(--mn-surface)) and remove its border. - Hover: step to the 9% tone and add var(--ft-lift). Press: 12% tone, no movement. - Selected: var(--mn-secondary) fill with var(--mn-secondary-fg) text, the same pair used by tonal buttons. - Use an outline (1px var(--mn-input)) only for inputs and chips. - Round by size: 8px for small things, 12px medium, 20px large, 28px for dialogs. Avoid: - Divider lines between sections - More than one filled button in a view - Hard shadows - Square corners - Untinted grey surfaces Recipe: a selectable tile in this language: ```css [data-noodle="fettuccine"] .tile { padding: 16px; border: 0; border-radius: 20px; background: color-mix(in oklab, var(--mn-primary) 5%, var(--mn-surface)); color: var(--mn-fg); transition: background-color 200ms cubic-bezier(.05, .7, .1, 1), box-shadow 200ms; } [data-noodle="fettuccine"] .tile:hover { background: color-mix(in oklab, var(--mn-primary) 9%, var(--mn-surface)); box-shadow: 0 1px 2px rgb(0 0 0 / .18), 0 2px 6px 2px rgb(0 0 0 / .09); } [data-noodle="fettuccine"] .tile[aria-selected="true"] { background: var(--mn-secondary); color: var(--mn-secondary-fg); } ``` ## Tokens - Fonts: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 12px, box 20px, badge 8px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #f8fafd | #131314 | | surface | #ffffff | #1e1f20 | | surface2 | #e9eef6 | #282a2c | | fg | #1f1f1f | #e3e3e3 | | muted | #444746 | #c4c7c5 | | border | #dde3ea | #333537 | | input | #747775 | #8e918f | | primary | #0b57d0 | #a8c7fa | | primaryFg | #ffffff | #062e6f | | secondary | #d3e3fd | #004a77 | | secondaryFg | #041e49 | #c2e7ff | | accent | #146c2e | #6dd58c | | accentFg | #ffffff | #0a3818 | | ring | #0b57d0 | #a8c7fa | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0b57d0 | #a8c7fa | | secondaryText | #6b717c | #6890a9 | | accentText | #146c2e | #6dd58c | | successText | #16783b | #4ade80 | | warningText | #a84f0b | #fbbf24 | | dangerText | #c52525 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0b57d0 | #a8c7fa | --- # Lasagne: a MIAN design language Flat sheets, stacked in layers. Lasagne are the flattest pasta there is, and the dish is built by stacking them: sheet, ragù, béchamel, sheet. Lasagne is a flat, layered system: solid colours with no gradients or blur, and surfaces stacked on visible offset layers of pasta yellow and ragù red. - Family: Flat · Origin: Italy · Emilia-Romagna · License: MIAN License (free to use) - Traits: flat, layered, structured, warm, playful · intensity 3/5 · contrast medium · density default. Good for: education, food, public services, consumer brands. Less for: quiet luxury, dense data. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/lasagne.css - Page: https://mian.ro/noodles/lasagne ## Design philosophy Lasagne is flat and layered. The dish is built by stacking flat sheets, pasta, ragù, béchamel, pasta, so surfaces are flat solid colour with a 2px ink edge, sitting on offset layers you can count: pasta yellow, then ragù red. Pressing a button drops it onto its layer. No gradients, no blur, no soft shadows. ## Principles - Flat colour only; depth is made of offset solid layers (--ls-layers), never blur. - Two layers for containers (yellow 4px, red 8px), one layer for controls (yellow 3px). - A 2px ink edge on everything you can touch. - Press = the element moves onto its layer and the layer disappears. ## The language - **Shape.** 6px controls, 10px containers; square-ish, cut from a tray. - **Surface.** Cream sheets with 2px ink edges on stacked yellow and red offset layers. - **Colour.** Béchamel cream, ragù red, pasta yellow, basil green. - **Type.** Sans at 700–800 for headings, controls and table heads. - **Motion.** lasagne-in: layers slide in from the top left with a small overshoot; presses take 90ms. - **Data.** Columns stacked from sheets (repeating 10px bands), a red highlight, a thick 30% donut. ## Colour, type and brand - **Primary** #b8322a: red (mid). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #2e6b3a: green (mid). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #fbf4e4: orange (pale, saturated). Warmth, friendliness, appetite, affordability. Active like red, without the alarm. - **Scheme.** Red with green: a contrasting pair that needs one of the two to dominate. The page 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. - **Reads as** flat, layered, structured, warm, playful. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "lasagne"). ## Inspired by the noodle - Flat sheets → flat solid colour: no gradients, no blur, no soft shadows - Built in layers → cards and buttons sit on offset layers of pasta yellow and ragù red that you can count - Béchamel, ragù, basil → a cream page, tomato-red action and basil-green accent - Cut into squares from the tray → firm 6px corners and a press that drops a layer ## Designing new components in Lasagne Build new components from `--mn-*` tokens, scoped with `[data-noodle="lasagne"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border: 2px solid var(--mn-fg); box-shadow: var(--ls-layers) for containers, var(--ls-layer) for controls. - Selected: background var(--ls-sheet); color #2a160f; inset 0 0 0 2px var(--mn-fg). - :active { transform: translate(3px, 3px); box-shadow: none; } Avoid: - Gradients or blur - Soft shadows - Hairline borders Recipe: a selectable tile in this language: ```css [data-noodle="lasagne"] .tile { padding: 12px 16px; border: 2px solid var(--mn-fg); border-radius: 10px; background: var(--mn-surface); box-shadow: var(--ls-layer); transition: transform 90ms, box-shadow 90ms; } [data-noodle="lasagne"] .tile:active { transform: translate(3px, 3px); box-shadow: none; } [data-noodle="lasagne"] .tile[aria-selected="true"] { background: var(--ls-sheet); color: #2a160f; box-shadow: var(--ls-layers); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 6px, box 10px, badge 6px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #fbf4e4 | #1a110c | | surface | #fffaf0 | #22160f | | surface2 | #f3e7cc | #2e1e15 | | fg | #2a160f | #fbefdc | | muted | #6e5446 | #c3a993 | | border | #ead9b8 | #3a281d | | input | #d8c29a | #5a4130 | | primary | #b8322a | #ef6b5f | | primaryFg | #ffffff | #2a0703 | | secondary | #f3e7cc | #2e1e15 | | secondaryFg | #2a160f | #fbefdc | | accent | #2e6b3a | #7cc48a | | accentFg | #ffffff | #0b2410 | | ring | #b8322a | #ef6b5f | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #b8322a | #ef6b5f | | secondaryText | #7a6a5b | #908275 | | accentText | #2e6b3a | #7cc48a | | successText | #177538 | #4ade80 | | warningText | #a64d0a | #fbbf24 | | dangerText | #c32423 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #b8322a | #ef6b5f | --- # Pappardelle: a MIAN design language Wide ribbons of flat colour. Pappardelle are the widest ribbons of egg pasta, cut by hand and served with slow Tuscan ragù. Pappardelle is a bold flat system: broad bands of solid colour, wide ribbons for tabs and progress, tall flat buttons, and no borders, gradients or shadows anywhere. - Family: Flat · Origin: Italy · Tuscany · License: MIAN License (free to use) - Traits: bold, flat, wide, confident, warm, european · intensity 4/5 · contrast high · density comfortable. Good for: presentations, campaigns, agencies, non-profits, events. Less for: dense admin, subtle luxury. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/pappardelle.css - Page: https://mian.ro/noodles/pappardelle ## Design philosophy Pappardelle is wide, flat colour. The broadest ribbons of egg pasta become broad bands of solid colour: tall flat buttons, tabs as ribbons, a green ribbon across the top of every card, tonal fields with a thick underline, and no borders, gradients, shadows or blur anywhere. Confident and generous, like a Tuscan table. ## Principles - Tone, not line: separate things with flat tonal fills and 2–6px bands of colour, never 1px borders. - Ribbons: tabs, progress and card tops are wide bands; the chosen one is solid green. - Tall controls (+4px) and comfortable density. - Yolk yellow is the ribbon’s edge, on progress, the switch knob and slider thumb. ## The language - **Shape.** 4px controls, 8px containers; rectangles cut from a sheet. - **Surface.** Flat white and tonal surfaces; a 6px inset band of primary across the top of cards and dialogs. - **Colour.** Cypress green (#1f5f4a), yolk yellow (#e9b949), warm neutrals. - **Type.** Clean sans at 650–750. - **Motion.** pappardelle-in: a ribbon wiping in from the left (clip-path) in 260ms. - **Data.** Square flat columns; zebra tables with a solid green header; a thick 34% donut. ## Colour, type and brand - **Primary** #1f5f4a: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Accent** #e9b949: yellow and gold (mid, saturated). Optimism, attention, caution. Gold tones add value and ceremony. - **Page** #f6f4ef: yellow and gold (pale, muted). Optimism, attention, caution. Gold tones add value and ceremony. - **Scheme.** Green with yellow and gold: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** bold, flat, wide, confident, warm. - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "pappardelle"). ## Inspired by the noodle - The widest ribbon → broad flat bands of colour; tabs and progress are wide ribbons - Cut by hand from a sheet → flat rectangles with small 4px corners - Tuscan hills and egg yolk → a deep cypress green with a ribbon of yolk yellow - Pappare, “to gobble” → generous sizes and confident colour ## Designing new components in Pappardelle Build new components from `--mn-*` tokens, scoped with `[data-noodle="pappardelle"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border: 0; background: var(--mn-surface-2); border-radius: 4px. - Top ribbon: box-shadow: inset 0 6px 0 var(--mn-primary). - Selected: background var(--mn-primary); color var(--mn-primary-fg). Avoid: - Borders and hairlines - Any shadow or blur - Thin, timid controls Recipe: a selectable tile in this language: ```css [data-noodle="pappardelle"] .tile { padding: 14px 18px; border: 0; border-radius: 4px; background: var(--mn-surface-2); font-weight: 650; } [data-noodle="pappardelle"] .tile:hover { background: var(--pp-band); } [data-noodle="pappardelle"] .tile[aria-selected="true"] { background: var(--mn-primary); color: var(--mn-primary-fg); box-shadow: inset 0 -4px 0 var(--mn-accent); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Radius: field 4px, box 8px, badge 4px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #f6f4ef | #10130f | | surface | #ffffff | #181c16 | | surface2 | #ece8de | #22271f | | fg | #1c1f1a | #eef1ea | | muted | #5d6158 | #a3aa9c | | border | #e2ddd1 | #2b3127 | | input | #cbc5b6 | #465040 | | primary | #1f5f4a | #6fcfae | | primaryFg | #ffffff | #04241a | | secondary | #ece8de | #22271f | | secondaryFg | #1c1f1a | #eef1ea | | accent | #e9b949 | #f1c95e | | accentFg | #2b1f00 | #2b1f00 | | ring | #1f5f4a | #6fcfae | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1f5f4a | #6fcfae | | secondaryText | #6f6f68 | #848880 | | accentText | #826c32 | #f1c95e | | successText | #16783a | #4ade80 | | warningText | #a84f0a | #fbbf24 | | dangerText | #c52525 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1f5f4a | #6fcfae | --- # Paccheri: a MIAN design language Big flat tubes. Primary colours. Paccheri are the widest tubes in the drawer; cooked, they collapse into big flat ribbons. Paccheri is a flat, geometric system in the spirit of the Bauhaus: solid blue, red and yellow blocks, circles and squares, no shadows or gradients, and bold grotesk type. - Family: Flat · Origin: Italy · Naples · License: MIAN License (free to use) - Traits: flat, geometric, bold, primary colours, bauhaus, playful, confident, european · intensity 4/5 · contrast high · density default. Good for: creative agencies, education, museums, events, design portfolios, public services. Less for: quiet luxury, healthcare. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/paccheri.css - Page: https://mian.ro/noodles/paccheri ## Design philosophy Paccheri is flat geometry in three colours: blue, red and yellow blocks on off-white, circles and squares, bold grotesk type, no shadows or gradients. Structure comes from colour fields, not lines. It is confident, clear and a little playful: Bauhaus on a plate. ## Principles - Colour fields structure the page: solid blocks instead of borders. - Circles and squares: round things are fully round, square things fully square. - Three colours, three jobs: blue acts, red alerts, yellow highlights. - Flat means flat: no shadow, blur or gradient anywhere. ## The language - **Shape.** Square fields and cards (0 radius), round badges, round switch knobs and avatars. - **Surface.** Off-white page; blocks of solid colour; 2px ink outlines for controls. - **Colour.** Blue (#1d4ed8), red (#c92a1c), yellow (#f3c623), ink. - **Type.** Bold grotesk at 800; uppercase small labels. - **Motion.** paccheri-in: a quick slide; hovers swap colour fields. - **Data.** Square columns in blue, highlight in red, yellow markers. ## Colour, type and brand - **Primary** #1d4ed8: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #c92a1c: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #f5f1e8: brown and terracotta (pale). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** Blue against red, close to complementary: strong contrast, so the accent must stay rare. The page is warm. - **Type.** One voice throughout: grotesque sans. Headings are heavy, which reads as loud and direct. Confident, graphic, European. A poster voice with a little warmth and irregularity. - **Reads as** flat, geometric, bold, primary colours, bauhaus. - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **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. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "paccheri"). ## Inspired by the noodle - Wide tubes that fall flat → large flat blocks of solid colour - Circles and slabs → round badges and indicators, square fields and cards - A plate of three colours → a strict blue, red and yellow palette on off-white - Named after a slap (pacca) → direct, confident motion ## Designing new components in Paccheri Build new components from `--mn-*` tokens, scoped with `[data-noodle="paccheri"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Fill blocks with var(--mn-primary), var(--mn-accent) or var(--mn-secondary) (yellow), never mix two on one small element. - Outlines: 2px solid var(--mn-fg); radius 0 for rectangles, 999px for circles. - No box-shadow, no gradients. Avoid: - Soft shadows - Rounded rectangles - Pastel tints - More than three colours Recipe: a selectable tile in this language: ```css [data-noodle="paccheri"] .tile { padding: 14px; border: 2px solid var(--mn-fg); border-radius: 0; background: var(--mn-surface); font-weight: 800; } [data-noodle="paccheri"] .tile[aria-selected="true"] { background: var(--mn-secondary); color: var(--mn-secondary-fg); } ``` ## Tokens - Fonts: "Helvetica Neue", Helvetica, "Nimbus Sans", Arial, ui-sans-serif, system-ui, sans-serif - Heading font: "Helvetica Neue", Helvetica, "Nimbus Sans", Arial, ui-sans-serif, system-ui, sans-serif - Radius: field 0px, box 0px, badge 999px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #f5f1e8 | #101010 | | surface | #fffdf8 | #181818 | | surface2 | #ebe5d7 | #222222 | | fg | #141414 | #f5f1e8 | | muted | #545454 | #aeaaa0 | | border | #ddd6c6 | #333333 | | input | #bdb5a4 | #555555 | | primary | #1d4ed8 | #8fb0ff | | primaryFg | #ffffff | #07153d | | secondary | #f3c623 | #f3c623 | | secondaryFg | #141414 | #141414 | | accent | #c92a1c | #ff7a6e | | accentFg | #ffffff | #2b0501 | | ring | #1d4ed8 | #8fb0ff | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1d4ed8 | #8fb0ff | | secondaryText | #7f691b | #f3c623 | | accentText | #c2291c | #ff7a6e | | successText | #15773a | #4ade80 | | warningText | #a74e0a | #fbbf24 | | dangerText | #c42424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1d4ed8 | #8fb0ff | --- # Farfalle: a MIAN design language Butterflies in pastel. Farfalle, butterflies, or bow ties, are pinched in the middle from a small rectangle with crimped edges. Farfalle is a playful flat system in pastels: soft flat fills with no shadows, pinched bow-tie badges and tabs, crimped edges on dividers, and a springy flutter when things appear. - Family: Flat · Origin: Italy · Lombardy · License: MIAN License (free to use) - Traits: playful, pastel, friendly, social, light-hearted · intensity 3/5 · contrast medium · density comfortable. Good for: social apps, communities, kids and families, consumer onboarding. Less for: finance, legal, enterprise. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/farfalle.css - Page: https://mian.ro/noodles/farfalle ## Design philosophy Farfalle is playful and flat. Butterflies, or bow ties, are pinched in the middle from a small crimped rectangle, so badges and the chosen tab are pinched at the waist, dividers are crimped zig-zags, colour is flat pastel (raspberry, mint, lilac, butter) with no shadows, and things arrive with a springy, slightly tilted flutter. ## Principles - Pinch the important thing: clip-path: var(--ff-pinch) on badges and the selected tab. - Flat pastels do the separating: mint, lilac and butter surfaces; no shadows. - Crimped, not ruled: zig-zag dividers and step connectors (--ff-crimp). - Springy motion with a 1–2° tilt. ## The language - **Shape.** 12px controls, 18px containers, pill tabs; bow-tie badges. - **Surface.** White cards with a 2px pastel ring; butter footers; mint and lilac fills. - **Colour.** Raspberry primary, lilac accent, mint and butter tints on warm white. - **Type.** Rounded sans at 700–750. - **Motion.** farfalle-in: rise, tilt and settle with an overshoot (380ms); the spinner is a butterfly flapping. - **Data.** Lilac pill columns with a raspberry highlight; striped progress; a 30% donut. ## Colour, type and brand - **Primary** #b5305e: magenta and pink (mid). Play, tenderness, boldness. Pale pinks are gentle; hot magenta is loud and modern. - **Accent** #6f4fcf: indigo and violet (mid). Imagination, luxury, spirituality, the unusual. - **Page** #fff8f5: white and paper (pale, saturated). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Magenta and pink with indigo and violet: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** One voice throughout: rounded sans. Headings are semibold, which reads as confident without shouting. Friendly, soft, safe, young. - **Reads as** playful, pastel, friendly, social, light-hearted. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "farfalle"). ## Inspired by the noodle - Pinched in the middle → badges and the selected tab are pinched at the waist like a bow tie - Crimped edges → zig-zag dividers and the edge of the selected tab - Served in summer salads → raspberry, mint and lilac pastels on a warm white page - A butterfly → a springy, slightly tilted flutter on entrance ## Designing new components in Farfalle Build new components from `--mn-*` tokens, scoped with `[data-noodle="farfalle"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - background: var(--ff-mint) or var(--ff-lilac); border: 0; border-radius: 18px; no box-shadow. - Emphasis: clip-path: var(--ff-pinch) with extra inline padding. - Dividers: background: var(--ff-crimp); height: 6px. Avoid: - Drop shadows - Dark, heavy colour - Hairline grey borders Recipe: a selectable tile in this language: ```css [data-noodle="farfalle"] .tile { padding: 12px 18px; border: 0; border-radius: 18px; background: var(--ff-mint); font-weight: 700; } [data-noodle="farfalle"] .tile[aria-selected="true"] { background: var(--mn-primary); color: var(--mn-primary-fg); border-radius: 8px; clip-path: var(--ff-pinch); padding-inline: 24px; } ``` ## Tokens - Fonts: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Heading font: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Radius: field 12px, box 18px, badge 999px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #fff8f5 | #17121a | | surface | #ffffff | #1f1823 | | surface2 | #fdebe6 | #2a2130 | | fg | #2a1f2d | #fbeff5 | | muted | #6d5f70 | #bca9c1 | | border | #f3dcd6 | #352a3b | | input | #e3c3bb | #52435a | | primary | #b5305e | #ff8db4 | | primaryFg | #ffffff | #3a0418 | | secondary | #e5f5ee | #1e3329 | | secondaryFg | #1f3a2e | #d9f5e7 | | accent | #6f4fcf | #b8a4ff | | accentFg | #ffffff | #1c0f4a | | ring | #b5305e | #ff8db4 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #b5305e | #ff8db4 | | secondaryText | #717076 | #7f8683 | | accentText | #6f4fcf | #b8a4ff | | successText | #17783c | #4ade80 | | warningText | #a94f0c | #fbbf24 | | dangerText | #c72527 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #b5305e | #ff8db4 | --- # Yinzhen: a MIAN design language Silver needles. A system made of dots. Yinzhen fen, “silver needle noodles”, are rolled by hand one at a time into short strands tapered to a point at each end, a noodle that is almost a dot. Yinzhen is a dot-matrix system: dotted outlines that join into lines on focus, LED-dot progress and bars, dotted chart lines, big numbers drawn in dots and a single red indicator dot. - Family: Pixel · Origin: China · Guangdong · License: MIAN License (free to use) - Traits: dotted, digital, hardware, minimal, technical · intensity 3/5 · contrast high · density default. Good for: hardware products, gadgets, developer tools, music tech. Less for: traditional brands, wellness. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/yinzhen.css - Page: https://mian.ro/noodles/yinzhen ## Design philosophy Yinzhen is a system drawn in points. Its noodle is almost a dot, so the dot is the unit of everything: outlines are dotted and join into a solid line when focused, progress and sliders are rows of LEDs, bars are dot-matrix columns, chart lines are dotted, and big numbers are drawn in dots. It is monochrome, with a single red dot marking the current thing. ## Principles - The dot is the unit: 2px dotted borders, LED rows at a 7px pitch, dot-matrix bars at 8px. - Dotted means idle, solid means active: focus and selection turn dots into a line or a filled pill. - Monochrome plus one red dot for the current state (tab, slider thumb, highlighted bar, default action). - Machine type: mono for labels, tabs and numbers, uppercase with 0.06–0.08em tracking. - Switch on like an LED: a short flicker (yinzhen-on) instead of a slide. ## The language - **Shape.** Pills (999px) for controls, 20px containers, circles for checkboxes and switch knobs. - **Surface.** Paper grey page, white surfaces, 1px borders on cards; dotted borders on controls. - **Colour.** Black and white; red (#c8102e / #ff4545) for the one current thing. - **Type.** Mono headings and labels; large numbers filled with a dot pattern (background-clip: text). - **Motion.** yinzhen-on: opacity flicker 280ms linear; the spinner steps through eight dots. - **Data.** Dot-matrix bars (radial-gradient dots at 8px), the highlight lit red; dotted lines (stroke-dasharray: 0 7, round caps); segmented dotted donut. ## Colour, type and brand - **Primary** #0d0d0d: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #c8102e: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #f4f4f2: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one red accent: the accent means “look here” precisely because nothing else is coloured. The page is neutral. - **Type.** Two voices: monospace for headings, neutral sans for the interface. Headings are medium, which reads as calm and assured. Technical, exact, raw, honest. The voice of code, receipts and instruments. - **Reads as** dotted, digital, hardware, minimal, technical. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. A monospaced wordmark matches the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "yinzhen"). ## Inspired by the noodle - Tapered to a point → the dot is the unit: outlines, dividers, progress and bars are drawn as rows of dots - Rolled one at a time → dot-matrix numbers and LED rows, as if each point were placed by hand - Short strands in a pile → monochrome black and white, a single red dot marks the current thing - A quick toss in the wok → components switch on like LEDs, with a brief flicker ## Designing new components in Yinzhen Build new components from `--mn-*` tokens, scoped with `[data-noodle="yinzhen"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Outline new controls with 2px dotted var(--mn-input); on focus/selection switch border-style to solid and colour to var(--mn-fg). - Draw quantities as rows of dots: radial-gradient(circle, transparent 0 2.2px, var(--y-base) 2.8px) 0 50% / 7px 7px over a solid fill punches LED holes; keep --y-base equal to the surface behind. - Mark the current item with a 6px red dot, not a colour fill. - Label in uppercase mono at 11px. Avoid: - Solid lines for idle states - More than one red element - Gradients and shadows - Rounded-rectangle shapes between pill and square Recipe: a selectable tile in this language: ```css [data-noodle="yinzhen"] .tile { padding: 14px 18px; border: 2px dotted var(--mn-input); border-radius: 20px; background: var(--mn-surface); font: 500 .75rem/1.2 var(--mn-font-mono); text-transform: uppercase; letter-spacing: .06em; } [data-noodle="yinzhen"] .tile[aria-selected="true"] { border-style: solid; border-color: var(--mn-fg); } [data-noodle="yinzhen"] .tile[aria-selected="true"]::before { content: ""; display: inline-block; width: 6px; height: 6px; margin-inline-end: 8px; border-radius: 50%; background: var(--mn-accent); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace - Radius: field 999px, box 20px, badge 999px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #f4f4f2 | #000000 | | surface | #ffffff | #0f0f0f | | surface2 | #ebebe8 | #1a1a1a | | fg | #0d0d0d | #f2f2f2 | | muted | #5c5c5a | #9e9e9e | | border | #dcdcd8 | #262626 | | input | #b3b3ad | #4a4a4a | | primary | #0d0d0d | #f2f2f2 | | primaryFg | #ffffff | #000000 | | secondary | #ebebe8 | #1a1a1a | | secondaryFg | #0d0d0d | #f2f2f2 | | accent | #c8102e | #ff4545 | | accentFg | #ffffff | #000000 | | ring | #c8102e | #ff4545 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0d0d0d | #f2f2f2 | | secondaryText | #6f6f6d | #7d7d7d | | accentText | #c8102e | #ff4545 | | successText | #15793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c72424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0d0d0d | #f2f2f2 | --- # Quadretti: a MIAN design language Little squares, graph paper, pixels. Quadretti are tiny squares of egg pasta cut from a sheet with a knife in both directions and cooked in broth. Quadretti is a pixel system on graph paper: square everything, stepped pixel corners, square knobs and checkboxes, progress and charts built from squares, and a spinner of four squares. - Family: Pixel · Origin: Italy · “little squares” · License: MIAN License (free to use) - Traits: grid, pixel, playful, technical, retro · intensity 3/5 · contrast high · density compact. Good for: games, developer tools, data products, education, creative tools. Less for: luxury, wellness. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/quadretti.css - Page: https://mian.ro/noodles/quadretti ## Design philosophy Quadretti is drawn on graph paper. Little squares of pasta cut in both directions become a pixel system: a faint blue grid behind every surface, square controls, pixel-stepped corners instead of curves, progress and charts built from square cells, and a spinner of four squares stepping round. Things step into place: nothing slides. ## Principles - Square everything: 0 radius; corners are stepped with clip-path (--qd-step) rather than rounded. - The grid shows: surfaces carry a 12px graph-paper grid (--qd-grid). - Cells, not bars: progress, sliders, switches and chart columns are divided into square cells. - Motion uses steps(); focus is a vermilion square outline. ## The language - **Shape.** 0px radius, pixel-stepped corners on buttons, badges, tabs and avatars. - **Surface.** Graph paper: a 12px blue grid on white; floating panels cast a square offset shadow. - **Colour.** Graph blue ink (#1d3fbf) with a vermilion accent. - **Type.** System sans 600–700; mono for labels and table heads. - **Motion.** quadretti-in: revealed in three steps; the switch knob steps across three cells. - **Data.** Columns made of 8px cells on the grid; square line points; a square radial. ## Colour, type and brand - **Primary** #1d3fbf: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #c7381a: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #fbfcff: white and paper (pale, saturated). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Blue against red, close to complementary: strong contrast, so the accent must stay rare. The page is cool. - **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. - **Reads as** grid, pixel, playful, technical, retro. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Square and angular marks fit: a wordmark in capitals or a solid block symbol. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "quadretti"). ## Inspired by the noodle - Cut into squares in both directions → a graph-paper grid behind everything and square controls - Tiny squares → pixel-stepped corners on buttons and cards instead of curves - Floating in broth → squares that step into place, never slide - Blue-lined exercise books → graph blue ink with a vermilion accent ## Designing new components in Quadretti Build new components from `--mn-*` tokens, scoped with `[data-noodle="quadretti"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border-radius: 0; clip-path: var(--qd-step); background: var(--qd-grid), var(--mn-surface). - Quantities as cells: background: var(--qd-cells), . - Transitions: steps(2–4, end); focus: outline 2px solid var(--mn-accent); outline-offset: 2px. Avoid: - Rounded corners - Smooth easing - Gradients and blur Recipe: a selectable tile in this language: ```css [data-noodle="quadretti"] .tile { padding: 10px 14px; border: 1px solid var(--mn-input); border-radius: 0; background: var(--qd-grid), var(--mn-surface); clip-path: var(--qd-step); } [data-noodle="quadretti"] .tile[aria-selected="true"] { background: var(--mn-primary); color: var(--mn-primary-fg); } [data-noodle="quadretti"] .tile:focus-visible { outline: 2px solid var(--mn-accent); outline-offset: 2px; clip-path: none; } ``` ## Tokens - Fonts: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 0px, box 0px, badge 0px - Density: compact · Shadows: none | token | light | dark | |---|---|---| | bg | #fbfcff | #0a0f1f | | surface | #ffffff | #0f1630 | | surface2 | #eef2fb | #16203f | | fg | #0f1830 | #eef2ff | | muted | #505a75 | #9aa6c7 | | border | #d5ddef | #22305a | | input | #9fb0d6 | #3c4f8a | | primary | #1d3fbf | #8ea8ff | | primaryFg | #ffffff | #0a1030 | | secondary | #eef2fb | #16203f | | secondaryFg | #0f1830 | #eef2ff | | accent | #c7381a | #ff8a66 | | accentFg | #ffffff | #2a0a00 | | ring | #1d3fbf | #8ea8ff | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1d3fbf | #8ea8ff | | secondaryText | #6d7485 | #798197 | | accentText | #bc361b | #ff8a66 | | successText | #15783c | #4ade80 | | warningText | #aa4f0b | #fbbf24 | | dangerText | #c82527 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1d3fbf | #8ea8ff | --- # Acini di pepe: a MIAN design language Peppercorn dots and halftone. Acini di pepe, “peppercorns”, are tiny beads of pasta, a pinch of dots in every spoonful of soup. Acini di pepe is a halftone system: dotted edges instead of lines, surfaces shaded with dot screens, progress that grows from small dots to large, and charts printed in dots. - Family: Pixel · Origin: Italy · “peppercorns” · License: MIAN License (free to use) - Traits: halftone, dotted, print, playful, editorial · intensity 3/5 · contrast medium · density default. Good for: magazines, music, culture, creative studios. Less for: dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/acini.css - Page: https://mian.ro/noodles/acini ## Design philosophy Acini di pepe is halftone. Peppercorn-sized beads of pasta become a system printed in dots: dotted edges instead of lines, surfaces shaded with dot screens, selection and emphasis shown by bigger dots, progress that grows from specks to full circles, and charts printed in halftone. Pepper black on warm paper, one teal accent. ## Principles - Dotted, not solid: borders are 2px dotted; focus turns them solid. - Shade with a screen: var(--ac-screen) (1px dots) for tint, var(--ac-screen-2) (1.6px) for emphasis. - Bigger dots mean more: progress, the selected tab underline and highlights grow the dot size. - One teal accent; everything else is pepper and paper. ## The language - **Shape.** 8px controls, 12px containers, pill badges; round dot knobs. - **Surface.** Warm paper with a dotted edge; halftone-shaded headers, footers and hovers. - **Colour.** Pepper black, warm paper, teal (#0f766e). - **Type.** Clean sans at 600–650. - **Motion.** acini-in: a soft 2px blur and scale; the spinner is three bouncing peppercorns. - **Data.** Halftone columns with a solid teal highlight; progress as a row of dots growing to 8px. ## Colour, type and brand - **Primary** #1b1a17: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #0f766e: teal and cyan (deep, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #fbf9f4: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one teal and cyan accent: the accent means “look here” precisely because nothing else is coloured. The page is warm. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** halftone, dotted, print, playful, editorial. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "acini"). ## Inspired by the noodle - A spoonful of tiny beads → dotted borders and dotted underlines instead of solid lines - Printed like a newspaper photo → halftone dot screens shade surfaces, selections and charts - Growing beads → progress and emphasis grow the dots, from specks to full circles - Pepper and broth → pepper black on warm paper, one teal accent ## Designing new components in Acini di pepe Build new components from `--mn-*` tokens, scoped with `[data-noodle="acini"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border: 2px dotted var(--mn-input); background: var(--mn-surface). - Tint or hover: background: var(--ac-screen-2), var(--mn-surface-2). - Rows of dots: radial-gradient(circle, 2px, transparent 2.4px) 0 50% / 8px 6px repeat-x. Avoid: - Solid 1px rules - Flat grey tints (use a dot screen) - Shadows Recipe: a selectable tile in this language: ```css [data-noodle="acini"] .tile { padding: 12px 16px; border: 2px dotted var(--mn-input); border-radius: 12px; background: var(--mn-surface); } [data-noodle="acini"] .tile:hover { background: var(--ac-screen), var(--mn-surface); } [data-noodle="acini"] .tile[aria-selected="true"] { border-style: solid; border-color: var(--mn-fg); background: var(--ac-screen-2), var(--mn-surface-2); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Radius: field 8px, box 12px, badge 999px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #fbf9f4 | #11100e | | surface | #fffefb | #191815 | | surface2 | #f1ede3 | #22201c | | fg | #1b1a17 | #f2eee5 | | muted | #5f5b52 | #a9a397 | | border | #e3ddcf | #2d2a25 | | input | #b9b1a0 | #5b564c | | primary | #1b1a17 | #f2eee5 | | primaryFg | #ffffff | #1b1a17 | | secondary | #f1ede3 | #22201c | | secondaryFg | #1b1a17 | #f2eee5 | | accent | #0f766e | #5eead4 | | accentFg | #ffffff | #04201c | | ring | #0f766e | #5eead4 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1b1a17 | #f2eee5 | | secondaryText | #75736d | #86837c | | accentText | #0f746c | #5eead4 | | successText | #15783a | #4ade80 | | warningText | #a84e0a | #fbbf24 | | dangerText | #c52524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1b1a17 | #f2eee5 | --- # Kalguksu: a MIAN design language Knife-cut, precise, clean. Kalguksu means "knife noodles": dough rolled flat on a floured board and cut by hand into clean strips. Kalguksu is a monochrome, grid-true system with crisp 45° cut corners, tabular numbers and motion that slices rather than fades. - Family: Linear · Origin: Korea · License: MIAN License (free to use) - Traits: precise, structured, monochrome, dependable, engineered · intensity 2/5 · contrast high · density default. Good for: finance, admin dashboards, b2b saas, analytics, logistics. Less for: children, playful consumer. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/kalguksu.css - Page: https://mian.ro/noodles/kalguksu ## Design philosophy Kalguksu means “knife noodles”: dough rolled flat on a floured board and cut into clean strips by hand. The language is monochrome, measured and exact, a strict grid, full table rules, tabular numbers, and its signature is the cut: 45° corners on labels, bars and progress ends, and motion that slices content in rather than fading it. ## Principles - The grid is visible: tables are fully ruled, segmented controls share borders, charts sit on a dotted board. - Cut, don’t round: small elements get a 45° chamfer (6px) instead of a radius. - Ink and flour: black, white and greys; one zucchini-green accent for focus and meaning. - Numbers and labels are monospaced and tabular. - Motion slices along a line (clip-path wipes) in 120–240ms with a sharp in-out curve. ## The language - **Shape.** 6px fields, 8px containers, 0px badges with a cut top-right corner. The switch knob is a thin blade. - **Surface.** White on white with 1px borders; card headers and modal headers are separated by a full rule; footers sit on surface-2. - **Colour.** Pure monochrome; the accent (deep green / light green in dark) is reserved for focus rings and highlights. - **Type.** Clean sans at 600 with tight tracking (−0.035em) for headings; uppercase mono labels at 11px with 0.06em tracking. - **Motion.** kalguksu-drop: clip-path inset(0 0 100% 0) → inset(0), 240ms cubic-bezier(.7,0,.3,1). Tab underlines are drawn left-to-right with scaleX. - **Data.** Square bars with the top-left corner cut, on a 12px dot grid; progress is a tick-marked strip with a slanted leading edge; dashed grid lines. ## Colour, type and brand - **Primary** #0a0a0a: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #2f6f3e: green (mid). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #ffffff: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one green accent: the accent means “look here” precisely because nothing else is coloured. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** precise, structured, monochrome, dependable, engineered (brand dimension: competence). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "kalguksu"). ## Inspired by the noodle - Cut with a knife → 45° cut corners on badges, bars and progress ends; content wipes in like a slice - Rolled flat on a board → a strict grid: full table rules, square hit areas, a dotted chart grid - Flour-dusted dough → pure white and ink black, one zucchini-green accent from the garnish - Hand-measured strips → monospaced numbers and labels, blade-thin switch knob ## Designing new components in Kalguksu Build new components from `--mn-*` tokens, scoped with `[data-noodle="kalguksu"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Give the component 1px var(--mn-border) edges and align every internal division to a shared rule, no floating gaps. - Label with uppercase mono (font: 500 .6875rem var(--mn-font-mono); letter-spacing .06em). - Mark importance with a clip-path chamfer: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 0 100%). - Selected = inverted (fg background, bg text). Pressing adds an inset 1px line; nothing moves. Avoid: - Large radii and pills - Soft shadows - Colour used decoratively - Proportional numbers in data - Fade-only or bouncy motion Recipe: a selectable tile in this language: ```css [data-noodle="kalguksu"] .tile { padding: 12px 14px; border: 1px solid var(--mn-border); border-radius: 0; background: var(--mn-surface); font-feature-settings: "tnum"; clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 0 100%); } [data-noodle="kalguksu"] .tile[aria-selected="true"] { background: var(--mn-fg); color: var(--mn-bg); } [data-noodle="kalguksu"] .tile .label { font: 500 .6875rem/1 var(--mn-font-mono); text-transform: uppercase; letter-spacing: .06em; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Radius: field 6px, box 8px, badge 0px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #ffffff | #0a0a0a | | surface | #ffffff | #111111 | | surface2 | #f4f4f3 | #1b1b1b | | fg | #0a0a0a | #ededed | | muted | #5e5e5e | #a3a3a3 | | border | #e6e6e6 | #262626 | | input | #d0d0d0 | #3b3b3b | | primary | #0a0a0a | #ededed | | primaryFg | #ffffff | #0a0a0a | | secondary | #f4f4f3 | #1b1b1b | | secondaryFg | #0a0a0a | #ededed | | accent | #2f6f3e | #86c795 | | accentFg | #ffffff | #0b1f10 | | ring | #2f6f3e | #86c795 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0a0a0a | #ededed | | secondaryText | #717171 | #808080 | | accentText | #2f6f3e | #86c795 | | successText | #14793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c72323 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0a0a0a | #ededed | --- # Sanuki: a MIAN design language 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. - Family: Linear · Origin: Japan · Kagawa · License: MIAN License (free to use) - Traits: square, firm, exact, industrial, serious · intensity 2/5 · contrast high · density default. Good for: engineering, architecture, industrial, b2b tools. Less for: soft consumer, wellness. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/sanuki.css - Page: https://mian.ro/noodles/sanuki ## Design philosophy 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. ## The language - **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. ## Colour, type and brand - **Primary** #1e3a8a: blue (mid). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #b45309: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f7f6f2: yellow and gold (pale, muted). Optimism, attention, caution. Gold tones add value and ceremony. - **Scheme.** Blue against brown and terracotta, close to complementary: strong contrast, so the accent must stay rare. The page 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. - **Reads as** square, firm, exact, industrial, serious (brand dimension: ruggedness). - **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. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "sanuki"). ## Inspired by the noodle - Cut square with sharp edges → zero radius on everything, including checkboxes, switches and avatars - Thick and firm → 2px lines, heavy square blocks, chunky controls - A firm bite (koshi) → motion that snaps into place with no easing tail - Kagawa indigo noren → deep indigo primary on wheat white ## Designing new components in Sanuki Build new components from `--mn-*` tokens, scoped with `[data-noodle="sanuki"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - 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 in this language: ```css [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); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 0px, box 0px, badge 0px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #f7f6f2 | #0e0e0d | | surface | #ffffff | #161615 | | surface2 | #eeece6 | #21201e | | fg | #121212 | #f2f1ec | | muted | #595650 | #a8a59c | | border | #121212 | #f2f1ec | | input | #121212 | #f2f1ec | | primary | #1e3a8a | #93b4ff | | primaryFg | #ffffff | #0b1633 | | secondary | #eeece6 | #21201e | | secondaryFg | #121212 | #f2f1ec | | accent | #b45309 | #f59e0b | | accentFg | #ffffff | #1f1300 | | ring | #1e3a8a | #93b4ff | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1e3a8a | #93b4ff | | secondaryText | #6e6e6b | #81807d | | accentText | #aa4f0a | #f59e0b | | successText | #15793a | #4ade80 | | warningText | #aa4f0a | #fbbf24 | | dangerText | #c82424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1e3a8a | #93b4ff | --- # Hakata: a MIAN design language Thin, straight, fast. Hakata ramen uses ultra-thin straight noodles, boiled for seconds and ordered by firmness, with a refill (kaedama) called for the moment the bowl runs low. Hakata is a fast, horizontal system: pinstripe speed lines, everything aligned to straight rules, compact density, oblique headings and motion measured in tens of milliseconds. - Family: Linear · Origin: Japan · Fukuoka · License: MIAN License (free to use) - Traits: fast, thin, efficient, technical, dense · intensity 2/5 · contrast medium · density compact. Good for: dashboards, fitness and tracking apps, data-heavy tools, trading. Less for: editorial storytelling. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/hakata.css - Page: https://mian.ro/noodles/hakata ## Design philosophy Hakata is speed along straight lines. Its noodles are ultra-thin and perfectly straight, cooked in seconds, and ordered at a counter where everything happens fast. The interface is compact and horizontal: fields sit on a rule, surfaces carry pinstripe speed lines, headings lean forward (oblique), and motion is the fastest in MIAN, things slide in along the line in about 100ms. ## Principles - Everything on a straight horizontal rule: fields are filled strips with a 2px bottom rule, cards are ruled top and bottom only. - Pinstripes (--hk-pin: 1px every 4px) mark headers and active surfaces. - Compact density; uppercase, tracked labels. - Forward lean: oblique headings (font-style: oblique 10deg). - Fast: 90–110ms, ease-out, horizontal slides. ## The language - **Shape.** 3px fields, 4px containers, 2px badges; long low switches with a bar knob. - **Surface.** Milk-white with pinstriped header bands; no side borders on cards. - **Colour.** Ink primary, pickled-ginger red accent for focus, current items and highlights. - **Type.** Sans at 700–800; oblique headings; uppercase, tracked buttons and tabs. - **Motion.** hakata-in: 10px slide from the left, 110ms. Progress and spinners run with moving stripes. - **Data.** Tight bars (3px gap), square line caps, a denser grid (8 rows). ## Colour, type and brand - **Primary** #111111: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #d61f4f: magenta and pink (mid, saturated). Play, tenderness, boldness. Pale pinks are gentle; hot magenta is loud and modern. - **Page** #f7f7f5: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one magenta and pink accent: the accent means “look here” precisely because nothing else is coloured. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are heavy, which reads as loud and direct. Clear, modern, impartial. The voice of software and signage. - **Reads as** fast, thin, efficient, technical, dense. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "hakata"). ## Inspired by the noodle - Thin, perfectly straight strands → horizontal pinstripes and long straight rules - Boiled for seconds → the fastest motion of any noodle (90ms), sliding in along the line - Ordered by firmness at the counter → compact, dense controls built for speed - Milky pork broth and red pickled ginger → milk-white surfaces with a ginger-red accent ## Designing new components in Hakata Build new components from `--mn-*` tokens, scoped with `[data-noodle="hakata"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Put the component on a rule: border-width: 0 0 2px or 1px top/bottom only. - Use var(--hk-pin) as the background of headers or hovered rows. - Selected = a 2–3px ginger-red line (inset box-shadow) at the leading edge or underneath. - Keep it compact (var(--mn-size-sm) heights) and uppercase the labels. Avoid: - Rounded pills and large radii - Vertical emphasis - Slow or bouncy motion - Side borders Recipe: a selectable tile in this language: ```css [data-noodle="hakata"] .tile { padding: 8px 12px; border: 0; border-bottom: 2px solid var(--mn-border); border-radius: 0; background: var(--mn-surface-2); font-weight: 700; text-transform: uppercase; letter-spacing: .06em; transition: box-shadow 90ms cubic-bezier(0, 0, .2, 1); } [data-noodle="hakata"] .tile:hover { background-image: var(--hk-pin); } [data-noodle="hakata"] .tile[aria-selected="true"] { box-shadow: inset 3px 0 0 var(--mn-accent); border-bottom-color: var(--mn-fg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 3px, box 4px, badge 2px - Density: compact · Shadows: none | token | light | dark | |---|---|---| | bg | #f7f7f5 | #0c0c0c | | surface | #ffffff | #141414 | | surface2 | #efefec | #1e1e1e | | fg | #111111 | #f0f0ee | | muted | #5a5a5a | #a0a09c | | border | #e2e2de | #2a2a2a | | input | #c4c4bf | #444444 | | primary | #111111 | #f0f0ee | | primaryFg | #ffffff | #111111 | | secondary | #efefec | #1e1e1e | | secondaryFg | #111111 | #f0f0ee | | accent | #d61f4f | #ff5c85 | | accentFg | #ffffff | #2a0510 | | ring | #d61f4f | #ff5c85 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #111111 | #f0f0ee | | secondaryText | #6e6e6d | #7f7f7e | | accentText | #c61e4a | #ff5c85 | | successText | #15793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c82424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #111111 | #f0f0ee | --- # Ditalini: a MIAN design language Tiny tubes. A dense, calm ledger. Ditalini, “little thimbles”, are short, tiny tubes that fill a spoon of soup evenly. Ditalini is a dense, conservative system for data: compact controls, small exact type with tabular figures, quiet slate blue, ruled tables and nothing that competes with the numbers. - Family: Linear · Origin: Italy · Sicily · License: MIAN License (free to use) - Traits: dense, conservative, sober, precise, calm, trustworthy, serious · intensity 1/5 · contrast medium · density compact. Good for: admin dashboards, finance, accounting, back office, data-heavy tools, b2b saas, analytics. Less for: marketing sites, children, luxury. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/ditalini.css - Page: https://mian.ro/noodles/ditalini ## Design philosophy Ditalini is a quiet ledger for dense work: compact controls, small exact type with tabular figures, ruled tables, sober slate blue. Everything is aligned to an even grid so that numbers can be compared at a glance. It is designed to disappear behind the data. ## Principles - The data is the design: no decoration competes with numbers. - Even grid: equal gaps, aligned columns, tabular figures everywhere. - Compact but legible: small sizes, never below 12px, high contrast. - Colour only for meaning: slate for action, teal for positive, status colours for status. ## The language - **Shape.** 4px fields, 6px surfaces, square-ish badges. - **Surface.** White cards with 1px borders and a faint shadow; zebra-free ruled tables. - **Colour.** Slate blue (#1d3557), teal accent, neutral greys. - **Type.** System UI at small sizes, tabular numbers, 600 headings. - **Motion.** ditalini-in: a 120ms fade; no bounce. - **Data.** Thin, compact bars and 1.5px lines; the highlighted series slate. ## Colour, type and brand - **Primary** #1d3557: blue (deep). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #0f766e: teal and cyan (deep, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #f7f8fa: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Blue with its neighbour teal and cyan: an analogous pair, harmonious and natural. The page 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. - **Reads as** dense, conservative, sober, precise, calm (brand dimension: competence). - **Tone of voice.** Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "ditalini"). ## Inspired by the noodle - Tiny and many → compact sizes, tight rows and small type that stays legible - Evenly spread in a spoon → an even grid: equal gaps, aligned columns, tabular figures - Pasta e fagioli, a working lunch → sober slate and teal, no decoration - Short tubes → small squared ends: 4px corners throughout ## Designing new components in Ditalini Build new components from `--mn-*` tokens, scoped with `[data-noodle="ditalini"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Rows: height var(--mn-size-sm); padding .25rem .5rem; border-bottom: 1px solid var(--mn-border). - Numbers: font-variant-numeric: tabular-nums; text-align: right. - Keep radius at var(--mn-radius-field); no gradients; shadows at most --mn-shadow-sm. Avoid: - Large display type inside apps - Decorative illustrations - Animated charts - Low-contrast greys for numbers Recipe: a selectable tile in this language: ```css [data-noodle="ditalini"] .tile { padding: 6px 10px; border: 1px solid var(--mn-border); border-radius: 4px; background: var(--mn-surface); font-size: .8125rem; font-variant-numeric: tabular-nums; } [data-noodle="ditalini"] .tile[aria-selected="true"] { border-color: var(--mn-primary); box-shadow: inset 3px 0 0 var(--mn-primary); } ``` ## Tokens - Fonts: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 4px, box 6px, badge 4px - Density: compact · Shadows: subtle | token | light | dark | |---|---|---| | bg | #f7f8fa | #0b0f16 | | surface | #ffffff | #111722 | | surface2 | #eef1f5 | #19212f | | fg | #111827 | #e8edf5 | | muted | #4b5563 | #9aa6b8 | | border | #dde2ea | #263042 | | input | #c3cad6 | #3b475c | | primary | #1d3557 | #9dbbe6 | | primaryFg | #ffffff | #0b1a30 | | secondary | #e8edf5 | #1c2638 | | secondaryFg | #1d3557 | #e8edf5 | | accent | #0f766e | #5eead4 | | accentFg | #ffffff | #042f2b | | ring | #2563eb | #7aa7ff | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1d3557 | #9dbbe6 | | secondaryText | #6b717e | #7a828f | | accentText | #0f766e | #5eead4 | | successText | #15783b | #4ade80 | | warningText | #aa4f0b | #fbbf24 | | dangerText | #c82526 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1d3557 | #9dbbe6 | --- # Juksing: a MIAN design language Bamboo-pole noodles. Straight, jointed, springy. Jook-sing noodles are kneaded by a cook who sits on the end of a long bamboo pole and bounces along the dough. Juksing is a bamboo system: straight lines broken by nodes, segmented progress and sliders with joints, dividers and step lines with node rings, tabs with node caps, and a small springy bounce when pressed. - Family: Linear · Origin: China · Hong Kong · License: MIAN License (free to use) - Traits: springy, jointed, crafted, natural, structured · intensity 2/5 · contrast medium · density default. Good for: logistics, outdoor, timelines, process-heavy sites. Less for: luxury. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/juksing.css - Page: https://mian.ro/noodles/juksing ## Design philosophy Juksing is bamboo. The noodles are kneaded by a cook bouncing along a bamboo pole, so straight lines are broken by nodes: buttons carry a node ring near each end, progress bars, sliders and chart bars are jointed into segments, dividers and tab lines end in round node caps, and things answer a press with a small springy bounce. ## Principles - Nodes on straight lines: joints every 26–40px (--jk-joints), node rings near the ends of buttons (--jk-rings). - Culm shading: a soft top-light / bottom-shade gradient (--jk-culm) on filled controls. - Bounce: presses and selections play juksing-bounce (2px down, 1px up). - Sage-green ink, egg-yolk accent, 4–6px corners. ## The language - **Shape.** 4px fields, 6px surfaces; tab and step lines end in round caps. - **Surface.** White with light borders; card headings underlined by a line with node caps. - **Colour.** Sage bamboo green, egg-yolk accent, pale bamboo neutrals. - **Type.** Sans at 550–650. - **Motion.** juksing-in drops in and bounces (320ms); presses bounce. - **Data.** Bars jointed every 18px; a segmented ring spinner. ## Colour, type and brand - **Primary** #33513a: green (deep, muted). Growth, health, permission, money. The easiest colour to look at for a long time. - **Accent** #8f5b0e: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f6f6f0: yellow and gold (pale, muted). Optimism, attention, caution. Gold tones add value and ceremony. - **Scheme.** Green with brown and terracotta: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** springy, jointed, crafted, natural, structured (brand dimension: ruggedness). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "juksing"). ## Inspired by the noodle - A long bamboo pole → straight lines interrupted by nodes: segmented progress, jointed dividers and step connectors - Bouncing on the pole → a small vertical bounce on press and on arrival - Egg-yellow, springy noodles → a warm yolk accent on sage-green ink - Pressed flat, then cut → firm 4px corners and even rhythm ## Designing new components in Juksing Build new components from `--mn-*` tokens, scoped with `[data-noodle="juksing"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Break long lines with joints: background: var(--jk-joints), var(--mn-surface-2). - Filled controls: background-image: var(--jk-rings), var(--jk-culm). - End indicator lines with two small circles (radial gradients at 3px and calc(100% - 3px)). - On press: animation: juksing-bounce 260ms. Avoid: - Long unbroken bars - Glass or blur - Sharp 0px corners Recipe: a selectable tile in this language: ```css [data-noodle="juksing"] .tile { padding: 12px 16px; border: 1px solid var(--mn-border); border-radius: 6px; background: var(--jk-joints), var(--mn-surface); } [data-noodle="juksing"] .tile[aria-selected="true"] { background: var(--jk-rings), var(--jk-culm), var(--mn-primary); color: var(--mn-primary-fg); } [data-noodle="juksing"] .tile:active { animation: juksing-bounce 260ms cubic-bezier(.3, 1.4, .5, 1); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 4px, box 6px, badge 3px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #f6f6f0 | #0d100c | | surface | #ffffff | #141812 | | surface2 | #ecece3 | #1c211a | | fg | #151a14 | #eef1e8 | | muted | #5b6356 | #a1ab98 | | border | #dfe2d6 | #283024 | | input | #b3baa7 | #4b5644 | | primary | #33513a | #a9d3a4 | | primaryFg | #ffffff | #0e1f10 | | secondary | #ecece3 | #1c211a | | secondaryFg | #151a14 | #eef1e8 | | accent | #8f5b0e | #e8b45a | | accentFg | #ffffff | #241603 | | ring | #33513a | #a9d3a4 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #33513a | #a9d3a4 | | secondaryText | #6f726b | #81857d | | accentText | #8f5b0e | #e8b45a | | successText | #15783a | #4ade80 | | warningText | #a74e0a | #fbbf24 | | dangerText | #c82524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #33513a | #a9d3a4 | --- # Kishimen: a MIAN design language Wide, flat, glossy, with dancing flakes. Broad, paper-thin flat noodles from Nagoya, topped with bonito flakes that dance in the steam. Kishimen is a wide, low, flat system: ribbon-shaped controls, full-width bands, and small flakes that flutter on interaction. - Family: Linear · Origin: Nagoya · flat noodles · License: MIAN License (free to use) - Traits: wide, glossy, low, calm, modern · intensity 2/5 · contrast medium · density compact. Good for: media apps, dashboards, consumer tools. Less for: print-like editorial. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/kishimen.css - Page: https://mian.ro/noodles/kishimen ## Design philosophy Kishimen is Nagoya’s wide, paper-thin flat noodle, folded over in the bowl and topped with bonito flakes that dance in the steam. The language is low and wide: flat broad controls with a glossy top edge, folded corners on cards and tabs, touching flat bars, and little flakes that flutter on hover. ## Principles - Low and wide: compact heights, generous widths, flat fills. - The fold: a triangular folded corner (var(--k-fold), 12px) on cards and selected tabs. - Glossy top: inset 0 1px 0 rgb(255 255 255/.45). - Flakes: small rotated slivers that flutter on hover and form the spinner. ## The language - **Shape.** 3px fields, 5px containers, folded corners. - **Surface.** Warm paper-white, flat fills with a glossy top edge, no shadows. - **Colour.** Bonito salmon-brown primary, scallion green accent. - **Type.** Clean sans, uppercase small labels. - **Motion.** kishimen-drop: short drop and settle, 200ms. Flakes flutter continuously on hover. - **Data.** Flat bars that touch, wide and low. ## Colour, type and brand - **Primary** #9a4a3c: red (mid). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #3f7d3a: green (mid). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #fbfaf6: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Red with green: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** wide, glossy, low, calm, modern. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "kishimen"). ## Inspired by the noodle - Wide and flat → low, broad controls and ribbon tabs - Glossy surface → a single sheen line along the top edge - Dancing bonito flakes → flake accents that flutter on hover and focus - Folded ribbons → cards and tabs with folded corner notches ## Designing new components in Kishimen Build new components from `--mn-*` tokens, scoped with `[data-noodle="kishimen"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Keep the component low (compact density) and wide; flat fill with the glossy top edge. - Fold the top-right corner with a linear-gradient triangle of size var(--k-fold). - Use a flake (a small rotated rounded sliver) as the decorative accent. Avoid: - Tall, narrow controls - Soft drop shadows - Round pills Recipe: a selectable tile in this language: ```css [data-noodle="kishimen"] .tile { padding: 8px 16px; border: 0; border-radius: 3px; background: linear-gradient(225deg, var(--mn-bg) 0 var(--k-fold), var(--mn-surface-2) 0); box-shadow: var(--k-sheen); } [data-noodle="kishimen"] .tile[aria-selected="true"] { background: linear-gradient(225deg, var(--mn-bg) 0 var(--k-fold), var(--mn-primary) 0); color: var(--mn-primary-fg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 3px, box 5px, badge 2px - Density: compact · Shadows: none | token | light | dark | |---|---|---| | bg | #fbfaf6 | #15120e | | surface | #ffffff | #1c1813 | | surface2 | #f3f0e8 | #26211a | | fg | #221d17 | #f3eee5 | | muted | #625a4e | #aca290 | | border | #e7e1d4 | #342d24 | | input | #d3cbba | #483f33 | | primary | #9a4a3c | #f0a594 | | primaryFg | #ffffff | #2a0e08 | | secondary | #f3e7e1 | #26211a | | secondaryFg | #6b2e24 | #f3eee5 | | accent | #3f7d3a | #86c77e | | accentFg | #ffffff | #0b2408 | | ring | #9a4a3c | #f0a594 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #9a4a3c | #f0a594 | | secondaryText | #7a726c | #88837b | | accentText | #3d7537 | #86c77e | | successText | #16783a | #4ade80 | | warningText | #a84f0a | #fbbf24 | | dangerText | #c62524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #9a4a3c | #f0a594 | --- # LaMian: a MIAN design language Long, smooth, dependable. A cobalt primary on cool near-white with a cyan accent. The familiar product system: balanced, legible, and dependable rather than distinctive. - Family: Linear · Origin: China · License: MIAN License (free to use) - Traits: familiar, balanced, modern, trustworthy, corporate · intensity 2/5 · contrast medium · density default. Good for: saas, b2b, startups, admin panels. Less for: brands that must look distinctive, editorial. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/lamian.css - Page: https://mian.ro/noodles/lamian ## Design philosophy Lamian is pulled by hand from one piece of dough into a single long, elastic strand. The language is about stretch and continuity: controls stretch when pulled, indicators glide and lengthen between positions, charts become long horizontal strands, and everything springs with a lively overshoot. ## Principles - One continuous strand: a single indicator travels between options instead of each option having its own. - Elastic: presses stretch horizontally (scale(1.1,.9)); knobs lengthen as they move. - Long and horizontal: pills, long bars, wide letter-spacing on hover. - Springy overshoot everywhere (cubic-bezier(.5,1.7,.4,.8)). ## The language - **Shape.** Pill-shaped fields and buttons, 22px textareas, long capsule knobs. - **Surface.** Clean cool white, soft shadows; cards carry a gradient strand along the top that pulls taut on hover. - **Colour.** Indigo primary, deep cyan accent. - **Type.** Clean sans; buttons widen their letter-spacing on hover. - **Motion.** lamian-stretch: enter from scaleX(.35) with overshoot, 420ms. Tab indicator glides 460ms. - **Data.** All bar charts become horizontal strands (0.55rem pills) growing from the left; 3px lines. ## Colour, type and brand - **Primary** #1f4fd6: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #0e7490: teal and cyan (mid, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #fbfbfe: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Blue with its neighbour teal and cyan: an analogous pair, harmonious and natural. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** familiar, balanced, modern, trustworthy, corporate (brand dimension: competence). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "lamian"). ## Inspired by the noodle - Hand-pulled → controls stretch horizontally when pressed - Elastic dough → spring easing with visible overshoot - Long strands → long pill shapes and horizontal bar charts - One continuous strand → indicators that slide between positions instead of jumping ## Designing new components in LaMian Build new components from `--mn-*` tokens, scoped with `[data-noodle="lamian"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Represent selection with one shared indicator that moves (use --_ix / --_iw like the tab list). - Make the component a pill and stretch it on press: transform: scale(1.1, .9). - Animate lengths (width, scaleX from the left) rather than opacity. Avoid: - Square corners - Vertical emphasis - Linear or flat motion - Separate indicators per item Recipe: a selectable tile in this language: ```css [data-noodle="lamian"] .tile { padding: 12px 22px; border-radius: 999px; background: var(--mn-surface); transition: transform 380ms cubic-bezier(.5, 1.7, .4, .8), letter-spacing 380ms cubic-bezier(.5, 1.7, .4, .8); } [data-noodle="lamian"] .tile:hover { letter-spacing: .04em; } [data-noodle="lamian"] .tile:active { transform: scale(1.1, .9); transition-duration: 120ms; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 8px, box 12px, badge 999px - Density: default · Shadows: soft | token | light | dark | |---|---|---| | bg | #fbfbfe | #0b0c18 | | surface | #ffffff | #12142a | | surface2 | #f1f2f9 | #1b1e38 | | fg | #111327 | #eef0ff | | muted | #5b5e78 | #9da1c4 | | border | #e3e5f0 | #262a4a | | input | #cfd2e3 | #393e68 | | primary | #1f4fd6 | #86a8ff | | primaryFg | #ffffff | #081433 | | secondary | #e9eefb | #1b1e38 | | secondaryFg | #16307a | #eef0ff | | accent | #0e7490 | #22d3ee | | accentFg | #ffffff | #032a31 | | ring | #1f4fd6 | #86a8ff | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1f4fd6 | #86a8ff | | secondaryText | #707384 | #7c7f94 | | accentText | #0e728e | #22d3ee | | successText | #15793c | #4ade80 | | warningText | #aa4f0b | #fbbf24 | | dangerText | #c82426 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1f4fd6 | #86a8ff | --- # Somen: a MIAN design language Hair-thin, white, served on ice. The thinnest wheat noodle, bundled straight and eaten ice-cold. Somen is a hairline system: 1px strokes, underline fields, dot-sized knobs, light type and crisp, instant motion. - Family: Thin · Origin: Japan · License: MIAN License (free to use) - Traits: hairline, delicate, cool, quiet, refined, japanese · intensity 1/5 · contrast medium · density compact. Good for: architecture, research, fashion, studios, quiet luxury. Less for: loud campaigns, children. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/somen.css - Page: https://mian.ro/noodles/somen ## Design philosophy Somen is the thinnest wheat noodle, bundled straight and eaten on ice. The language is drawn with a 1px pen: every element is reduced to its outline or a single line, type is light, and motion is almost instant, cool, precise, and completely unornamented. ## Principles - A hairline is enough: 1px strokes for borders, underlines, dividers and chart marks. - Fields are a line to write on, not a box. - Light type weights carry elegance; hierarchy comes from size and letter-spacing, not weight. - No shadows, no fills where an outline will do. - Motion is short (≈110–120ms) and linear: nothing drifts. ## The language - **Shape.** Tight 2px field radius, 4px containers. Switch knobs are 0.7rem beads on a 2px strand; step markers are thin rings. - **Surface.** Icy blue-white page, white surfaces, 1px cool borders, no shadow at all except a faint one on floating menus. - **Colour.** Ink (near-black navy) as primary; a clear ice-blue accent; everything else is cool grey. - **Type.** Headings at weight 200–300 with tight tracking; table headers tiny, uppercase, widely spaced (0.12em). - **Motion.** somen-in: 3px drop and fade in 120ms, linear. Focus underlines draw left-to-right in 200ms. - **Data.** Bars are 2px stems topped with a small cap; horizontal bars are 1px lines; donuts are 3px rings; lines are 1px with visible points. ## Colour, type and brand - **Primary** #0b1220: blue (deep). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #0369a1: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Page** #f8fafc: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Two tones of blue: harmonious and calm, with little contrast between brand and accent. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are light to regular, which reads as delicate and unhurried. Clear, modern, impartial. The voice of software and signage. - **Reads as** hairline, delicate, cool, quiet, refined (brand dimension: sophistication). - **Tone of voice.** Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Use a light or regular wordmark; a heavy one would overpower this interface. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "somen"). ## Inspired by the noodle - Hair-thin strands → 1px borders, hairline charts and a 2px switch track - Bundled straight → strict horizontal rules, underline-only inputs - Served on ice → icy blue-white surfaces, cool ink primary - Delicate → light font weights, tight 2px radius, no shadows ## Designing new components in Somen Build new components from `--mn-*` tokens, scoped with `[data-noodle="somen"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Draw the component with 1px lines in var(--mn-border) or var(--mn-fg); never fill a surface just to separate it. - Inputs inside the component use only a bottom border that animates to var(--mn-fg) on focus. - Selected = inverted (var(--mn-fg) background, var(--mn-bg) text) or a 1px underline: pick one. - Keep text at weight 300–400; label small caps with letter-spacing .1em. Avoid: - Borders thicker than 1px - Radii above 4px - Shadows and glows - Bold display type - Spring or overshoot Recipe: a selectable tile in this language: ```css [data-noodle="somen"] .tile { padding: 12px 0; border: 0; border-bottom: 1px solid var(--mn-border); border-radius: 0; background: none; font-weight: 300; letter-spacing: .02em; } [data-noodle="somen"] .tile[aria-selected="true"] { border-bottom-color: var(--mn-fg); } [data-noodle="somen"] .tile:active { opacity: .75; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 2px, box 4px, badge 2px - Density: compact · Shadows: none | token | light | dark | |---|---|---| | bg | #f8fafc | #070b12 | | surface | #ffffff | #0c121c | | surface2 | #f1f5f9 | #141c28 | | fg | #0b1220 | #eef3f9 | | muted | #566174 | #93a1b5 | | border | #e2e8f0 | #1e2835 | | input | #cbd5e1 | #2d3a4c | | primary | #0b1220 | #eef3f9 | | primaryFg | #f8fafc | #0b1220 | | secondary | #f1f5f9 | #141c28 | | secondaryFg | #0b1220 | #eef3f9 | | accent | #0369a1 | #7dd3fc | | accentFg | #ffffff | #04202e | | ring | #475569 | #93a1b5 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0b1220 | #eef3f9 | | secondaryText | #6c717b | #787f88 | | accentText | #0369a1 | #7dd3fc | | successText | #14793b | #4ade80 | | warningText | #aa4f0a | #fbbf24 | | dangerText | #c72425 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0b1220 | #eef3f9 | --- # Capellini: a MIAN design language Angel hair: light as air. Capellini d’angelo, angel hair, are the finest pasta made, often twisted into loose nests and served with nothing but lemon and butter. Capellini is an airy system: very light type, fine low-contrast lines, lots of space, soft round surfaces and a single note of lemon. - Family: Thin · Origin: Italy · angel hair · License: MIAN License (free to use) - Traits: airy, delicate, light, elegant, italian · intensity 1/5 · contrast low · density comfortable. Good for: wellness, beauty, weddings, personal brands. Less for: dense admin, data. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/capellini.css - Page: https://mian.ro/noodles/capellini ## Design philosophy Capellini is air. Angel-hair pasta is the finest there is, twisted into loose nests and served with lemon and butter, so the interface is light type (250–400), lines at the edge of visibility, round white surfaces floating on diffuse light, lots of space and a single pale note of lemon. Nothing is heavy, nothing is loud. ## Principles - Weight is the hierarchy: 250 for headings, 350–400 for text and controls; nothing above 450. - Hairlines at 9% ink, never solid grey borders. - Surfaces float on one diffuse, warm shadow (--cp-air). - Lemon only for the thread of emphasis: the tab underline, the switch, the highlighted bar, focus. ## The language - **Shape.** 14px fields, 20px containers, pill badges; round and soft. - **Surface.** White on warm white, a 9% hairline and a wide, soft shadow. - **Colour.** Warm white, soft ink, pale lemon (#e8d44d) and nothing else. - **Type.** System sans at 250–400; large, light numbers. - **Motion.** capellini-in: 4px rise with a 3px blur, 340ms, a long soft ease. - **Data.** 1px lines, round pale columns, a thin 10% donut; the highlight is lemon. ## Colour, type and brand - **Primary** #26241f: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #e8d44d: yellow and gold (mid, saturated). Optimism, attention, caution. Gold tones add value and ceremony. - **Page** #fdfcf8: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one yellow and gold accent: the accent means “look here” precisely because nothing else is coloured. The page is warm. - **Type.** One voice throughout: neutral sans. Headings are light to regular, which reads as delicate and unhurried. Clear, modern, impartial. The voice of software and signage. - **Reads as** airy, delicate, light, elegant, italian. - **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. Use a light or regular wordmark; a heavy one would overpower this interface. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "capellini"). ## Inspired by the noodle - The finest strand there is → 300-weight type and lines at the edge of visibility - Twisted into nests → soft round corners and a spinner that swirls like a nest - Al limone → warm white, soft ink and one pale lemon accent - Cooks in two minutes → quick, feather-light motion ## Designing new components in Capellini Build new components from `--mn-*` tokens, scoped with `[data-noodle="capellini"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border: 1px solid var(--cp-hair); border-radius: 20px; background: var(--mn-surface); box-shadow: var(--cp-air). - Text weight 350; headings 250 with −0.035em tracking. - Mark the chosen thing with a 2px lemon thread (var(--mn-accent)), not a fill. Avoid: - Bold weights - Dark or hard shadows - Saturated colour Recipe: a selectable tile in this language: ```css [data-noodle="capellini"] .tile { padding: 16px 20px; border: 1px solid var(--cp-hair); border-radius: 20px; background: var(--mn-surface); box-shadow: var(--cp-air); font-weight: 350; } [data-noodle="capellini"] .tile[aria-selected="true"] { box-shadow: var(--cp-air), inset 0 -2px 0 var(--mn-accent); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 14px, box 20px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #fdfcf8 | #121210 | | surface | #ffffff | #1a1a17 | | surface2 | #f5f3ea | #23231f | | fg | #26241f | #f3f1e8 | | muted | #6b675c | #aaa697 | | border | #ebe8dd | #2d2c27 | | input | #d8d4c6 | #45433b | | primary | #26241f | #f3f1e8 | | primaryFg | #ffffff | #1b1a16 | | secondary | #f5f3ea | #23231f | | secondaryFg | #26241f | #f3f1e8 | | accent | #e8d44d | #efe06a | | accentFg | #2b2500 | #262000 | | ring | #8a7a0a | #efe06a | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #26241f | #f3f1e8 | | secondaryText | #75736c | #87867f | | accentText | #7b7133 | #efe06a | | successText | #16793b | #4ade80 | | warningText | #a94f0b | #fbbf24 | | dangerText | #c62625 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #26241f | #f3f1e8 | --- # Longxu: a MIAN design language Folded, pulled, doubled, engraved in hairlines. Longxu mian, dragon’s beard noodles, are made by folding and pulling one rope of dough again and again; every fold doubles the strands, 2, 4, 8 … thousands of hair-fine threads. Longxu is an engraving system: fills are drawn with fine parallel hatching that doubles in density when something is active, on warm paper, in ink. - Family: Thin · Origin: China · dragon’s beard noodles · License: MIAN License (free to use) - Traits: engraved, intricate, crafted, precise, heritage · intensity 2/5 · contrast medium · density default. Good for: banking, certificates, heritage brands, premium tools. Less for: playful consumer. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/longxu.css - Page: https://mian.ro/noodles/longxu ## Design philosophy Longxu is an engraving. Dragon’s beard noodles are folded and pulled until one rope becomes thousands of hair-fine threads, each fold doubling the last, so fills are drawn, not painted: fine parallel hatching in ink on warm paper, which doubles in density when something is hovered, selected or on. Lines are 1px, headings are set in a book serif, and nothing is flat colour except the ink. ## Principles - Hatching instead of fills: --lx-hatch (1px every 6px); active states use --lx-hatch-2 (every 3px), the fold doubles the strands. - Cross-hatching (--lx-cross) marks the strongest state: checked, highlighted, the chosen bar. - 1px ink lines for every edge; text over hatching gets a paper-coloured halo (text-shadow). - Book serif for headings and numbers; a small offset ink outline under floating panels, like a printed plate. ## The language - **Shape.** 3–4px corners; square knobs. - **Surface.** Warm paper, 1px ink-tinted frames, a hatched rule under card headings. - **Colour.** Ink on paper; seal-red accent used sparingly. - **Type.** Book serif (400) headings, sans body. - **Motion.** Steady and even; progress hatching slides along (longxu-pull). - **Data.** Hatched columns with a 1px outline; the highlight cross-hatched; hatched rings for radials and spinners. ## Colour, type and brand - **Primary** #1a1712: brown and terracotta (deep, muted). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #8a2a1c: red (mid). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #f8f5ee: yellow and gold (pale). Optimism, attention, caution. Gold tones add value and ceremony. - **Scheme.** Brown and terracotta with its neighbour red: an analogous pair, harmonious and natural. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are light to regular, which reads as delicate and unhurried. Considered, literate, established. The voice of books and long reading. - **Reads as** engraved, intricate, crafted, precise, heritage. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "longxu"). ## Inspired by the noodle - Every fold doubles the strands → hatched fills whose line spacing halves on hover and selection - Hair-fine threads → 1px lines and hairline hatching instead of flat colour - A craft shown to an audience → an engraved, printed look: ink on warm paper, a book serif - Pulled with rhythm → steady, even motion ## Designing new components in Longxu Build new components from `--mn-*` tokens, scoped with `[data-noodle="longxu"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Fill with background: var(--lx-hatch) and an inset 0 0 0 1px ink outline; on hover/selection switch to var(--lx-hatch-2). - Put a paper halo behind any text over hatching: text-shadow: 0 0 3px var(--mn-surface). - Keep every line 1px and every colour ink. Avoid: - Solid colour fills for states - Gradients and shadows - Rounded pills Recipe: a selectable tile in this language: ```css [data-noodle="longxu"] .tile { padding: 12px 14px; border: 1px solid var(--mn-fg); border-radius: 3px; background: var(--mn-surface); } [data-noodle="longxu"] .tile:hover { background: var(--mn-surface) var(--lx-hatch); } [data-noodle="longxu"] .tile[aria-selected="true"] { background: var(--mn-surface) var(--lx-hatch-2); } [data-noodle="longxu"] .tile > * { text-shadow: 0 0 3px var(--mn-surface), 0 0 3px var(--mn-surface); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Radius: field 3px, box 4px, badge 2px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #f8f5ee | #11100d | | surface | #fffdf8 | #181612 | | surface2 | #f0ebe0 | #221f1a | | fg | #1a1712 | #f2ede3 | | muted | #625b50 | #a79f92 | | border | #e3dccd | #2f2b24 | | input | #b8ad97 | #5a5347 | | primary | #1a1712 | #f2ede3 | | primaryFg | #fffdf8 | #1a1712 | | secondary | #f0ebe0 | #221f1a | | secondaryFg | #1a1712 | #f2ede3 | | accent | #8a2a1c | #e59a8a | | accentFg | #ffffff | #2a0a05 | | ring | #1a1712 | #f2ede3 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1a1712 | #f2ede3 | | secondaryText | #747069 | #86827a | | accentText | #8a2a1c | #e59a8a | | successText | #15783a | #4ade80 | | warningText | #a84e0a | #fbbf24 | | dangerText | #c52424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1a1712 | #f2ede3 | --- # Misua: a MIAN design language Finest thread, never cut. Misua (mee sua) is one of the finest wheat noodles there is, stretched by hand into threads and eaten on birthdays as longevity noodles, the longer and more unbroken, the better. Misua is a thread-thin system in which long, unbroken lines run through and between components, drawn slowly, with a red longevity thread for what matters. - Family: Thin · Origin: China · Fujian · License: MIAN License (free to use) - Traits: fine, continuous, celebratory, gentle, thread-like · intensity 2/5 · contrast medium · density default. Good for: events, weddings, cultural sites, timelines. Less for: dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/misua.css - Page: https://mian.ro/noodles/misua ## Design philosophy Misua is the finest thread, and it must never be cut: it is eaten for long life, and the longer the strand, the better. The interface is drawn in 1px threads that run on from one thing to the next, list items strung on a vertical thread, steps on a horizontal one, tabs on a shared line, and draw themselves slowly. A red longevity thread marks progress, selection and focus. ## Principles - 1px threads and light (300–400) type. - Continuity: connect related elements with one unbroken thread instead of separate borders. - The red thread marks what matters: focus, selection, progress, highlights. - Beads on threads: knobs, points and markers are small circles on a line. - Slow drawing: lines grow over 400–900ms (scaleX/scaleY from the start). ## The language - **Shape.** 4px fields, 6px containers, round beads for knobs and markers. - **Surface.** Warm paper with thread-coloured (fg at 22%) 1px edges; no shadows. - **Colour.** Ink and paper; a red thread accent. - **Type.** Book serif headings at 400; light sans body; tracked uppercase table headers. - **Motion.** misua-in: slow fade 500ms; threads draw with misua-draw / misua-draw-y. - **Data.** Each bar is a single thread topped with a bead; 1px lines with small points; a 3px donut ring. ## Colour, type and brand - **Primary** #1f1b16: brown and terracotta (deep, muted). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #b3261e: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #fbf9f5: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Brown and terracotta with its neighbour red: an analogous pair, harmonious and natural. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are light to regular, which reads as delicate and unhurried. Considered, literate, established. The voice of books and long reading. - **Reads as** fine, continuous, celebratory, gentle, thread-like. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "misua"). ## Inspired by the noodle - Threads finer than a hair → 1px lines and light type throughout - Longevity: never cut → lines continue from one element to the next: list items, steps and tabs are strung on one thread - Stretched slowly by hand → lines draw themselves from start to end - A red thread for birthdays → a thin red thread marks progress, selection and focus ## Designing new components in Misua Build new components from `--mn-*` tokens, scoped with `[data-noodle="misua"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Separate and connect with 1px var(--ms-thread); if two items belong together, let one line run through both. - Mark the current item with a 1px red thread (inset box-shadow or ::after) and draw it in with scaleX. - Use a 6–7px bead (circle) as the knob or marker on any thread. Avoid: - Lines thicker than 1px - Broken, dashed or segmented lines - Filled blocks of colour - Quick snaps Recipe: a selectable tile in this language: ```css [data-noodle="misua"] .tile { position: relative; padding: 12px 0 12px 28px; border: 0; background: none; font-weight: 400; } [data-noodle="misua"] .tile::before { content: ""; position: absolute; left: 12px; top: 0; bottom: 0; width: 1px; background: var(--ms-thread); } [data-noodle="misua"] .tile::after { content: ""; position: absolute; left: 9.5px; top: 50%; width: 6px; height: 6px; margin-top: -3px; border-radius: 50%; background: var(--mn-bg); box-shadow: inset 0 0 0 1px var(--mn-fg); } [data-noodle="misua"] .tile[aria-selected="true"]::after { background: var(--mn-accent); box-shadow: none; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Radius: field 4px, box 6px, badge 999px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #fbf9f5 | #12100d | | surface | #ffffff | #191612 | | surface2 | #f3efe7 | #231f1a | | fg | #1f1b16 | #f1ece3 | | muted | #6a6258 | #a99f91 | | border | #e6dfd3 | #302a23 | | input | #c9bfae | #4a4238 | | primary | #1f1b16 | #f1ece3 | | primaryFg | #fbf9f5 | #1f1b16 | | secondary | #f3efe7 | #231f1a | | secondaryFg | #1f1b16 | #f1ece3 | | accent | #b3261e | #ff7b6e | | accentFg | #ffffff | #2a0603 | | ring | #b3261e | #ff7b6e | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1f1b16 | #f1ece3 | | secondaryText | #74706a | #86817a | | accentText | #b3261e | #ff7b6e | | successText | #16783a | #4ade80 | | warningText | #a84f0a | #fbbf24 | | dangerText | #c52524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1f1b16 | #f1ece3 | --- # Bún: a MIAN design language Delicate, rosy, light. Rice vermicelli. Rose primary on blush white, teal accent, rounded but refined. Lifestyle, beauty, events. - Family: Thin · Origin: Vietnam · rice vermicelli · License: MIAN License (free to use) - Traits: rosy, delicate, light, friendly, lifestyle · intensity 2/5 · contrast low · density default. Good for: beauty, lifestyle, events, salons. Less for: finance, engineering. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/bun.css - Page: https://mian.ro/noodles/bun ## Design philosophy Bún is thread-thin rice vermicelli, served in small, lightly tangled nests. The language is fine and concentric: double-thread outlines, rings within rings on focus and on avatars, beads on threads for progress and switches, dotted and dashed thread dividers, and nested spinners turning opposite ways. ## Principles - Two threads: outlines are a 1px line, a gap, and a second 1px line (layered box-shadows). - Nests: focus and emphasis add concentric rings. - Beads on threads: progress, switches and chart bars are thin threads ending in a bead. - Delicate: thin strokes, rosy light colours. ## The language - **Shape.** Pills and circles; 10px fields, 16px containers. - **Surface.** Rosy white, surfaces ringed by a double thread (var(--b-thread)). - **Colour.** Rose primary, teal accent. - **Type.** Delicate serif-like headings, light body. - **Motion.** bun-in: a slight twist and scale, 220ms; focus rings expand outward (bun-nest). - **Data.** Thread bars topped with a nest ring, beaded progress, doubled line shadows, ringed donuts. ## Colour, type and brand - **Primary** #e11d48: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #0f766e: teal and cyan (deep, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #fffafa: white and paper (pale, saturated). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Red against teal and cyan, close to complementary: strong contrast, so the accent must stay rare. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are semibold, which reads as confident without shouting. Considered, literate, established. The voice of books and long reading. - **Reads as** rosy, delicate, light, friendly, lifestyle. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "bun"). ## Inspired by the noodle - Thread-thin rice vermicelli → fine double-thread outlines - Served in little nests → concentric rings on focus, avatars and spinners - Tangled → dashed, looping thread dividers - Delicate → light, airy spacing and small, precise motion ## Designing new components in Bún Build new components from `--mn-*` tokens, scoped with `[data-noodle="bun"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Outline with box-shadow: 0 0 0 1px var(--mn-border), 0 0 0 4px var(--mn-bg), 0 0 0 5px var(--mn-border). - Emphasise with an extra outer ring in the primary at 45%. - Show quantities as a 1.5–2px thread with a round bead at the end. Avoid: - Thick fills - Heavy shadows - Square corners Recipe: a selectable tile in this language: ```css [data-noodle="bun"] .tile { padding: 12px 16px; border: 1px solid var(--mn-border); border-radius: 16px; background: var(--mn-surface); box-shadow: 0 0 0 4px var(--mn-bg), 0 0 0 5px var(--mn-border); } [data-noodle="bun"] .tile[aria-selected="true"] { box-shadow: 0 0 0 2px var(--mn-bg), 0 0 0 3px var(--mn-primary), 0 0 0 5px var(--mn-bg), 0 0 0 6px color-mix(in oklab, var(--mn-primary) 45%, transparent); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-serif, "New York", "Iowan Old Style", "Palatino Linotype", Georgia, serif - Radius: field 10px, box 16px, badge 999px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #fffafa | #170b0d | | surface | #ffffff | #1f0f12 | | surface2 | #fcefef | #2b161a | | fg | #2a1215 | #fcecee | | muted | #6e5156 | #c09aa0 | | border | #f3dfe1 | #3a1f24 | | input | #e3c2c7 | #55303a | | primary | #e11d48 | #fb7185 | | primaryFg | #ffffff | #2a0610 | | secondary | #fde8ea | #2b161a | | secondaryFg | #881337 | #fcecee | | accent | #0f766e | #2dd4bf | | accentFg | #ffffff | #042f2c | | ring | #e11d48 | #fb7185 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #c71b41 | #fb7185 | | secondaryText | #836c6e | #8f7d80 | | accentText | #0f766e | #2dd4bf | | successText | #16793b | #4ade80 | | warningText | #a94e0a | #fbbf24 | | dangerText | #c72424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #e11d48 | #fb7185 | --- # Kuzukiri: a MIAN design language Clear glass in ice water. Black and white. Kuzukiri are clear kudzu-starch noodles from Kyoto, served floating in ice water and dipped in black sugar syrup. Kuzukiri is Mian in glass: black and white, one-pixel edges and clear type, but every surface is a sheet of clear, cold glass, and the only colour is the dark syrup. - Family: Glass · Origin: Japan · Kyoto kudzu noodles · License: MIAN License (free to use) - Traits: glass, clear, monochrome, cool, premium · intensity 2/5 · contrast high · density default. Good for: premium apps, hardware, media, portfolios. Less for: print-like editorial, dense tables. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/kuzukiri.css - Page: https://mian.ro/noodles/kuzukiri ## Design philosophy Kuzukiri is Mian in glass. The noodles are perfectly clear, served in ice water with black sugar syrup, so the interface keeps every Mian rule, black and white, 1px edges, two type weights, nothing decorative, but each surface is a sheet of clear, cold glass over a pale backdrop, with one bright hairline along its top edge. The only colour is the syrup. ## Principles - Clear glass, not frosted colour: 58% white (dark: 52% night) with blur(20px). - A bright top hairline and a 1px ink ring at 7% (--kz-edge) instead of borders. - Ink for action: solid black buttons and selections, as in Mian. - Stillness: quick, clean fades with a touch of blur. ## The language - **Shape.** 10px fields, 18px surfaces, pill badges. - **Surface.** Clear glass sheets with --kz-edge over a pale, cool backdrop with one soft ink shadow. - **Colour.** Black and white; a dark syrup-brown accent. - **Type.** Clean sans at 500/600, tight headings. - **Motion.** kuzukiri-in: 4px rise from blur(4px), 260ms. - **Data.** Ink for the highlight, frosted grey for the rest. ## Colour, type and brand - **Primary** #0a0a0a: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #3b2a1e: brown and terracotta (deep, muted). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #eef0f2: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one brown and terracotta accent: the accent means “look here” precisely because nothing else is coloured. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** glass, clear, monochrome, cool, premium. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "kuzukiri"). ## Inspired by the noodle - Clear noodles in ice water → clear glass sheets with a strong blur over a cool, pale backdrop - Black sugar syrup → ink-black primary; a dark syrup-brown accent - Kyoto restraint → the Mian rules: 1px edges, two type weights, nothing decorative - Cold and still → slow, clean fades; a soft chill of blur as things appear ## Designing new components in Kuzukiri Build new components from `--mn-*` tokens, scoped with `[data-noodle="kuzukiri"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - background-color: var(--kz-glass); backdrop-filter: var(--kz-blur); box-shadow: var(--kz-edge); border: 0. - Selected = solid var(--mn-fg) with var(--mn-bg) text. - Keep everything else exactly as Mian would. Avoid: - Coloured glass - Thick rims or lens effects - Gradients on controls Recipe: a selectable tile in this language: ```css [data-noodle="kuzukiri"] .tile { padding: 14px 16px; border: 0; border-radius: 14px; background-color: var(--kz-glass); -webkit-backdrop-filter: var(--kz-blur); backdrop-filter: var(--kz-blur); box-shadow: var(--kz-edge); } [data-noodle="kuzukiri"] .tile[aria-selected="true"] { background: var(--mn-fg); color: var(--mn-bg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Radius: field 10px, box 18px, badge 999px - Density: default · Shadows: soft · Translucent surfaces | token | light | dark | |---|---|---| | bg | #eef0f2 | #07080a | | surface | #ffffff | #121418 | | surface2 | #e6e9ec | #1b1e23 | | fg | #0a0a0a | #f1f3f5 | | muted | #555b62 | #9ba2ab | | border | #dde1e5 | #262a30 | | input | #b9c0c7 | #434a53 | | primary | #0a0a0a | #f1f3f5 | | primaryFg | #ffffff | #0a0a0a | | secondary | #e6e9ec | #1b1e23 | | secondaryFg | #0a0a0a | #f1f3f5 | | accent | #3b2a1e | #c9a88a | | accentFg | #ffffff | #1c120a | | ring | #0a0a0a | #f1f3f5 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0a0a0a | #f1f3f5 | | secondaryText | #6b6c6d | #7d8084 | | accentText | #3b2a1e | #c9a88a | | successText | #14793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c72323 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0a0a0a | #f1f3f5 | --- # Sotanghon: a MIAN design language Real transparency. You see what is behind. Sotanghon are Filipino mung-bean noodles: in the bowl you see the broth through them rather than the noodle. Sotanghon is glass with real transparency: surfaces are about a third opaque, they blur and brighten whatever is behind them, a line of light runs along the top edge, and the backdrop is part of the design. - Family: Glass · Origin: Philippines · glass noodles · License: MIAN License (free to use) - Traits: glass, transparent, airy, premium, modern, light, futuristic · intensity 3/5 · contrast medium · density comfortable. Good for: consumer apps, media apps, product launches, weather, music, portfolios, operating-system style interfaces. Less for: dense admin, financial data, print, long-form reading. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/sotanghon.css - Page: https://mian.ro/noodles/sotanghon ## Design philosophy Sotanghon is glass you can actually see through. Surfaces are about a third opaque and sit over a soft, colourful backdrop, which they blur and brighten so that text on them stays readable. A thin line of light along the top edge and a hairline all round are what draw each pane; there are no solid fills except the ink primary. The backdrop is not optional: without something behind it, glass is just grey. ## Principles - Three opacities only: 18% for wells, 34% for panes, 68% for anything that floats above panes. - Every pane has the rim: inset 0 1px 0 light, plus a 1px inner hairline. No opaque borders. - Blur and saturate behind (22px, 170%), so the backdrop becomes soft colour, never detail. - Ink is the only solid: primary buttons, the switch when on, progress fills. - Design the backdrop: two or three large soft colours, warm and cool, behind everything. ## The language - **Shape.** 14px fields, 24px panes, pill badges. - **Surface.** Translucent white (dark: translucent slate) with backdrop-filter. Panes inside panes drop the blur and use the 18% well. - **Colour.** Ink primary on glass, a teal accent. Colour comes from the backdrop: sky, peach and mint in light, deep blue, ember and forest in dark. - **Type.** The system font, headings at 650 tracked −0.03em. - **Motion.** sotanghon-in: rises 6px, scales from .985 and sharpens from a 6px blur in 320ms. - **Data.** Bars are 16% ink glass with the highlighted bar in solid ink; a 2px ink line over a 16% area. ## Colour, type and brand - **Primary** #0b1220: blue (deep). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #0e7490: teal and cyan (mid, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #e9eef5: blue (pale). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Scheme.** Blue with its neighbour teal and cyan: an analogous pair, harmonious and natural. The page is cool. - **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. - **Reads as** glass, transparent, airy, premium, modern. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "sotanghon"). ## Inspired by the noodle - You see the broth through the noodle → surfaces at 34% opacity over a coloured backdrop - Clear strands catch the light → a thin bright rim on the top edge of every pane - Soaked until soft → heavy blur and saturation behind each pane, so text stays readable - Served in a golden broth → a warm and cool backdrop of sky, peach and mint, never one flat colour ## Designing new components in Sotanghon Build new components from `--mn-*` tokens, scoped with `[data-noodle="sotanghon"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Background: color-mix(in srgb, var(--mn-surface) 34%, transparent) with backdrop-filter: var(--mn-backdrop). Border: transparent. - Edge: box-shadow: var(--st-rim), var(--st-drop). - Hover raises opacity to 68%; it does not move or tint. - Selected: a 68% pane inside an 18% track, or solid ink for a single chosen item. - Place it over the noodle’s backdrop (the page already has it); inside another pane, drop the blur. - Honour prefers-reduced-transparency by raising the opacity to 94%. Avoid: - Opaque cards - Glass over a plain white or plain black page - Purple and blue blobs as the backdrop - Body text on a pane with no blur behind it - More than two layers of glass on top of each other Recipe: a selectable tile in this language: ```css [data-noodle="sotanghon"] .tile { padding: 18px; border: 0; border-radius: 24px; background: color-mix(in srgb, var(--mn-surface) 34%, transparent); color: var(--mn-fg); -webkit-backdrop-filter: blur(22px) saturate(1.7); backdrop-filter: blur(22px) saturate(1.7); box-shadow: inset 0 1px 0 light-dark(rgb(255 255 255 / .7), rgb(255 255 255 / .14)), inset 0 0 0 1px light-dark(rgb(15 23 42 / .1), rgb(255 255 255 / .1)); transition: background-color 200ms cubic-bezier(.16, 1, .3, 1); } [data-noodle="sotanghon"] .tile:hover { background: color-mix(in srgb, var(--mn-surface) 68%, transparent); } [data-noodle="sotanghon"] .tile[aria-selected="true"] { background: var(--mn-fg); color: var(--mn-bg); } ``` ## Tokens - Fonts: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 14px, box 24px, badge 999px - Density: comfortable · Shadows: none · Translucent surfaces | token | light | dark | |---|---|---| | bg | #e9eef5 | #05070c | | surface | #ffffff | #0f141c | | surface2 | #dfe6ee | #19202b | | fg | #0b1220 | #eef3f9 | | muted | #3d4858 | #a3afc0 | | border | #d5dde7 | #252e3b | | input | #b3bfcd | #3b4658 | | primary | #0b1220 | #f2f6fb | | primaryFg | #ffffff | #0b1220 | | secondary | #dfe6ee | #19202b | | secondaryFg | #0b1220 | #eef3f9 | | accent | #0e7490 | #67d7ee | | accentFg | #ffffff | #03222b | | ring | #0e7490 | #67d7ee | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0b1220 | #f2f6fb | | secondaryText | #646b77 | #7b818a | | accentText | #0e728e | #67d7ee | | successText | #14793b | #4ade80 | | warningText | #aa4f0a | #fbbf24 | | dangerText | #c72425 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0b1220 | #f2f6fb | --- # Harusame: a MIAN design language Clear, cool, layered. Glass noodles. Translucent surfaces with backdrop blur over a soft gradient, large radii, sky-blue primary. For dashboards and media. - Family: Glass · Origin: Japan · glass noodles · License: MIAN License (free to use) - Traits: glass, cool, layered, modern, calm · intensity 2/5 · contrast medium · density default. Good for: dashboards, media apps, weather, consumer apps. Less for: serious finance, legal. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/harusame.css - Page: https://mian.ro/noodles/harusame ## Design philosophy Harusame are glass noodles: clear, glossy and refractive. The language is layered glass: frosted see-through surfaces over a soft gradient, bright specular edges, a sheen that sweeps across buttons, translucent overlapping chart layers and transitions that come into focus out of blur. ## Principles - See-through: surfaces are 55–72% opaque with a backdrop blur. - Light catches edges: a bright 1px inner top highlight on every glass surface. - Sheen on interaction: a diagonal highlight sweeps across on hover. - Depth by layering and blur, not by heavy shadows. ## The language - **Shape.** 12px fields, 20px containers. - **Surface.** Frosted glass (var(--h-glass)) over a gradient page, inner edge highlights (var(--h-edge)). - **Colour.** Clear blue primary, a warm amber-brown accent, cool translucent neutrals. - **Type.** Clean sans, medium weights. - **Motion.** harusame-in: blur(6px) → sharp with fade, 240ms. - **Data.** Translucent, overlapping bar and area layers, glowing lines. ## Colour, type and brand - **Primary** #0369a1: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #9a4a12: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #eef2f7: blue (pale). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Scheme.** Blue against brown and terracotta, close to complementary: strong contrast, so the accent must stay rare. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** glass, cool, layered, modern, calm. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "harusame"). ## Inspired by the noodle - Glass noodles → frosted, see-through surfaces with backdrop blur - Refraction → specular edge highlights and a sheen that sweeps across buttons - Clear layers → translucent overlapping chart bars - Crisp → precise, quick, blur-in transitions ## Designing new components in Harusame Build new components from `--mn-*` tokens, scoped with `[data-noodle="harusame"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Use background var(--h-glass) with backdrop-filter: blur(18px) saturate(1.4) and box-shadow var(--h-edge). - Add a ::before sheen (a skewed white gradient) that translates across on hover. - Keep contrast on text by placing it on the more opaque layers. Avoid: - Opaque flat fills - Hard outlines - Heavy shadows - Texture Recipe: a selectable tile in this language: ```css [data-noodle="harusame"] .tile { padding: 14px 16px; border: 1px solid color-mix(in srgb, var(--mn-fg) 12%, transparent); border-radius: 16px; background: var(--h-glass); -webkit-backdrop-filter: blur(18px) saturate(1.4); backdrop-filter: blur(18px) saturate(1.4); box-shadow: var(--h-edge); } [data-noodle="harusame"] .tile[aria-selected="true"] { background: color-mix(in srgb, var(--mn-primary) 18%, var(--h-glass)); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 12px, box 20px, badge 999px - Density: default · Shadows: soft · Translucent surfaces | token | light | dark | |---|---|---| | bg | #eef2f7 | #0a0f1a | | surface | #ffffff | #131b2b | | surface2 | #e4eaf2 | #1c2536 | | fg | #0f172a | #e8eef7 | | muted | #4f5d70 | #95a3b8 | | border | #d8e0eb | #27334a | | input | #c3cedc | #374560 | | primary | #0369a1 | #38bdf8 | | primaryFg | #ffffff | #04202e | | secondary | #e2e8f0 | #1c2536 | | secondaryFg | #0f172a | #e8eef7 | | accent | #9a4a12 | #fdba74 | | accentFg | #ffffff | #2a1403 | | ring | #0369a1 | #38bdf8 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0369a1 | #38bdf8 | | secondaryText | #636b79 | #7e8593 | | accentText | #9a4a12 | #fdba74 | | successText | #15783b | #4ade80 | | warningText | #aa4f0b | #fbbf24 | | dangerText | #c82526 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0369a1 | #38bdf8 | --- # Fensi: a MIAN design language Liquid glass. Fensi are mung-bean noodles that turn perfectly clear and glossy when cooked, slipping and bending like liquid. Fensi is a liquid-glass system: thick, clear capsules that bend the colour behind them, bright rims of light top and bottom, and shapes that flow and swell when touched. - Family: Glass · Origin: China · mung-bean glass noodles · License: MIAN License (free to use) - Traits: liquid, glossy, futuristic, fluid, premium · intensity 3/5 · contrast medium · density comfortable. Good for: consumer apps, audio, product launches, mobile. Less for: dense admin, print. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/fensi.css - Page: https://mian.ro/noodles/fensi ## Design philosophy Fensi is liquid glass. The noodles become perfectly clear when cooked and slip and bend like water, so every surface is a thick, very clear piece of glass that saturates and brightens whatever is behind it. Each piece acts like a lens, a bright rim of light along its top edge, a softer one along the bottom, and shapes swell and flow under the finger instead of clicking. ## Principles - Clear, not frosted: 22–34% surface with blur(14px) saturate(1.9): the colour behind should glow through. - The lens rim: --f-lens (bright inner top edge, soft inner bottom edge, faint inner outline) on every glass object. - Liquid response: hover swells (scale 1.04), press squashes (1.08 × .92) and springs back. - Capsules and big radii: 999px controls, 28px panels. - Needs a colourful backdrop (the page gradient) to show what it is. ## The language - **Shape.** Capsules for controls, 28px panels, blob-like morphing spinners. - **Surface.** Clear glass with lens rims and a soft drop; recessed wells for inputs and tracks. - **Colour.** Lagoon blue primary, fuchsia accent, over an aqua–pink–mint gradient. - **Type.** Clean sans at 600–650. - **Motion.** fensi-in: from blur(6px) and scale(.9) with overshoot, 460ms; springs at cubic-bezier(.3,1.4,.4,1). - **Data.** Glass tubes of colour with lens rims; glowing lines (drop-shadow); a donut with a soft shadow. ## Colour, type and brand - **Primary** #0b6e99: teal and cyan (mid, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Accent** #b4391f: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #eaf1f8: blue (pale). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Scheme.** Teal and cyan against red, close to complementary: strong contrast, so the accent must stay rare. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** liquid, glossy, futuristic, fluid, premium. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "fensi"). ## Inspired by the noodle - Clear as water when cooked → thick, highly transparent glass with strong saturation behind it - Glossy and round in cross-section → a bright rim of light along the top edge and a softer one along the bottom, like a lens - Slippery, liquid strands → capsules and blobs that swell and flow when pressed - Everything seen through it → a colourful backdrop that the glass refracts ## Designing new components in Fensi Build new components from `--mn-*` tokens, scoped with `[data-noodle="fensi"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - background-color: var(--f-clear); backdrop-filter: var(--f-blur); box-shadow: var(--f-lens), var(--f-drop); border-radius: 999px or 28px. - Interaction: transform: scale(1.04) on hover and scale(1.08, .92) on press with a spring transition (~420ms). - Recessed parts (wells, tracks): inset 0 2px 6px shadow plus a bright bottom rim. - Put the glass over colour; on a flat white page use the noodle’s --mn-bg-image. Avoid: - Opaque fills - Hard 1px borders - Flat, instant presses - Placing text directly on busy backdrops without a surface Recipe: a selectable tile in this language: ```css [data-noodle="fensi"] .tile { padding: 14px 22px; border: 0; border-radius: 999px; background: var(--f-clear); -webkit-backdrop-filter: var(--f-blur); backdrop-filter: var(--f-blur); box-shadow: var(--f-lens), var(--f-drop); transition: transform 420ms cubic-bezier(.3, 1.4, .4, 1); } [data-noodle="fensi"] .tile:hover { transform: scale(1.04); } [data-noodle="fensi"] .tile:active { transform: scale(1.08, .92); transition-duration: 120ms; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 999px, box 28px, badge 999px - Density: comfortable · Shadows: soft · Translucent surfaces | token | light | dark | |---|---|---| | bg | #eaf1f8 | #060b14 | | surface | #ffffff | #101826 | | surface2 | #dde7f1 | #1a2436 | | fg | #0b1524 | #eaf2fb | | muted | #46566b | #94a4ba | | border | #d4dfeb | #263349 | | input | #b8c7d8 | #3a4a64 | | primary | #0b6e99 | #5ccfff | | primaryFg | #ffffff | #03202e | | secondary | #dde7f1 | #1a2436 | | secondaryFg | #0b1524 | #eaf2fb | | accent | #b4391f | #ffa98c | | accentFg | #ffffff | #2e0a02 | | ring | #0b6e99 | #5ccfff | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0b6e99 | #5ccfff | | secondaryText | #636d7a | #7a8391 | | accentText | #b4391f | #ffa98c | | successText | #14773b | #4ade80 | | warningText | #aa4f0b | #fbbf24 | | dangerText | #c72426 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0b6e99 | #5ccfff | --- # Tokoroten: a MIAN design language Pressed through a grid. Glass tiles. Tokoroten is agar jelly pushed through a wooden press whose blades form a square grid, so it comes out as clear, square strands. Tokoroten is a glass-tile system: frosted glass etched with a fine square grid, square-cut corners, grid-snapped indicators and a clean, cool palette with a mustard accent. - Family: Glass · Origin: Japan · agar noodles · License: MIAN License (free to use) - Traits: glass, grid, tiled, cool, structured · intensity 2/5 · contrast medium · density default. Good for: dashboards, productivity, smart home. Less for: editorial. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/tokoroten.css - Page: https://mian.ro/noodles/tokoroten ## Design philosophy Tokoroten is glass pressed through a grid. Agar jelly is pushed through a wooden press whose blades form a square grid, so every surface is a frosted glass tile etched with a fine 8px grid, corners are small and square, indicators snap cell by cell, labels are mono, and components slide out of their slot in one clean push. ## Principles - The etched grid (--tk-grid) on every glass surface, track and chart. - Square tiles: 2–6px corners; selections are filled tiles. - Snap to cells: the switch knob and progress move in visible steps. - Cool agar teal with a mustard accent; mono uppercase labels. ## The language - **Shape.** 4px fields, 6px surfaces, 2px badges; square spinner turning in quarter steps. - **Surface.** Frosted glass (62%) with a white inner edge and a teal outline, etched grid. - **Colour.** Agar-teal primary, mustard accent. - **Type.** Sans body, mono uppercase labels, tabs and badges. - **Motion.** tokoroten-in: slides out of a slot (clip-path from the top), 240ms. - **Data.** Bars made of 8px cells over the grid. ## Colour, type and brand - **Primary** #134e4a: teal and cyan (deep). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Accent** #8a5a06: brown and terracotta (deep, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #edf3f3: teal and cyan (pale, muted). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Scheme.** Teal and cyan with brown and terracotta: a contrasting pair that needs one of the two to dominate. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** glass, grid, tiled, cool, structured. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "tokoroten"). ## Inspired by the noodle - Pushed through a grid of blades → a fine square grid etched into every glass surface - Square, translucent strands → frosted glass tiles with small, square corners - Served with vinegar and mustard → cool agar-teal ink with a mustard accent - Pressed out in one push → components slide out of a slot in one clean move ## Designing new components in Tokoroten Build new components from `--mn-*` tokens, scoped with `[data-noodle="tokoroten"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - background: var(--tk-grid), var(--tk-glass); backdrop-filter: var(--tk-blur); box-shadow: var(--tk-edge); radius ≤6px. - Selected = a filled tile in var(--mn-primary). - Label with mono uppercase at 11–12px. Avoid: - Large radii and pills - Grid-free flat panels - Smooth continuous motion for discrete values Recipe: a selectable tile in this language: ```css [data-noodle="tokoroten"] .tile { padding: 12px 14px; border: 0; border-radius: 4px; background: var(--tk-grid), var(--tk-glass); -webkit-backdrop-filter: var(--tk-blur); backdrop-filter: var(--tk-blur); box-shadow: var(--tk-edge); font: 500 .75rem/1.2 var(--mn-font-mono); text-transform: uppercase; letter-spacing: .05em; } [data-noodle="tokoroten"] .tile[aria-selected="true"] { background: var(--tk-grid), var(--mn-primary); color: var(--mn-primary-fg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 4px, box 6px, badge 2px - Density: default · Shadows: subtle · Translucent surfaces | token | light | dark | |---|---|---| | bg | #edf3f3 | #081010 | | surface | #ffffff | #0f1919 | | surface2 | #e2ebeb | #172222 | | fg | #0d1717 | #e8f2f1 | | muted | #4c5c5c | #93a7a5 | | border | #d4e0e0 | #233131 | | input | #a9bcbc | #3e5251 | | primary | #134e4a | #7dd3c7 | | primaryFg | #ffffff | #062522 | | secondary | #e2ebeb | #172222 | | secondaryFg | #0d1717 | #e8f2f1 | | accent | #8a5a06 | #facc15 | | accentFg | #ffffff | #1c1500 | | ring | #134e4a | #7dd3c7 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #134e4a | #7dd3c7 | | secondaryText | #667070 | #7b8685 | | accentText | #8a5a06 | #facc15 | | successText | #14783a | #4ade80 | | warningText | #aa4f0a | #fbbf24 | | dangerText | #c72525 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #134e4a | #7dd3c7 | --- # Nagashi: a MIAN design language Down a bamboo chute in running water. In nagashi-sōmen, noodles are sent down a split-bamboo chute in cold running water and caught with chopsticks as they pass. Nagashi is a flowing-water glass system: clear, blue-tinted glass, a current that runs along progress bars and hovered surfaces, indicators that glide downstream, and things that arrive on a gentle curve. - Family: Glass · Origin: Japan · flowing sōmen · License: MIAN License (free to use) - Traits: flowing, fresh, summer, glass, lively · intensity 3/5 · contrast medium · density comfortable. Good for: travel, summer events, consumer apps, drinks. Less for: serious b2b. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/nagashi.css - Page: https://mian.ro/noodles/nagashi ## Design philosophy Nagashi is running water in a bamboo chute. Noodles are carried down a split-bamboo channel in cold water and caught as they pass, so surfaces are clear, blue-tinted glass that a current runs across on hover, tracks and tabs are open channels, indicators glide downstream as beads of glass, progress bars carry flowing water, and things arrive from upstream on a gentle curve. ## Principles - The current (--ng-flow): a moving sheen across buttons and cards on hover, and continuously along progress. - Channels: fields, tracks and tab lists are recessed (--ng-channel); what sits in them is a raised bead of glass (--ng-edge). - Glide: indicators travel 600ms on a soft curve. - Water blue with a bamboo-green accent, over a light water gradient. ## The language - **Shape.** 14px fields, 22px surfaces, pills for tabs, badges and channels. - **Surface.** Clear blue-tinted glass (55%) with bright top rims. - **Colour.** Water blue primary, bamboo green accent. - **Type.** Sans at 600. - **Motion.** nagashi-in: from upstream on a curve (420ms); nagashi-flow for currents. - **Data.** Columns of water with a bright surface; lines with a soft shadow beneath. ## Colour, type and brand - **Primary** #0b5f8f: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #3d6b1f: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #eef6fa: teal and cyan (pale). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Scheme.** Blue with green: a contrasting pair that needs one of the two to dominate. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** flowing, fresh, summer, glass, lively. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "nagashi"). ## Inspired by the noodle - Cold running water → clear blue-tinted glass with a moving sheen that flows along on hover - A split-bamboo chute → long, open channels: rounded tracks, tabs in a channel, a bamboo-green accent - Noodles carried by the current → indicators glide with the flow; items arrive on a gentle curve from upstream - Caught with chopsticks → a quick, soft catch when pressed ## Designing new components in Nagashi Build new components from `--mn-*` tokens, scoped with `[data-noodle="nagashi"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Glass: background-color: var(--ng-water); backdrop-filter: var(--ng-blur); box-shadow: var(--ng-edge). - Hover: background-image: var(--ng-flow) at 300% size, animated with nagashi-flow. - Anything that holds something is a channel (--ng-channel); the held thing is a bead (--ng-edge). Avoid: - Opaque panels - Hard corners - Snappy or stepped motion Recipe: a selectable tile in this language: ```css [data-noodle="nagashi"] .tile { padding: 14px 18px; border: 0; border-radius: 22px; background: var(--ng-flow) 100% 0 / 300% 100% no-repeat, var(--ng-water); -webkit-backdrop-filter: var(--ng-blur); backdrop-filter: var(--ng-blur); box-shadow: var(--ng-edge); } [data-noodle="nagashi"] .tile:hover { animation: nagashi-flow 1.2s var(--mn-ease) both; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 14px, box 22px, badge 999px - Density: comfortable · Shadows: soft · Translucent surfaces | token | light | dark | |---|---|---| | bg | #eef6fa | #061018 | | surface | #ffffff | #0d1a24 | | surface2 | #e2eef4 | #15232f | | fg | #0b1a24 | #e6f2f8 | | muted | #48606e | #8fa8b8 | | border | #d3e3ec | #1f3140 | | input | #a9c2d0 | #3a5264 | | primary | #0b5f8f | #6cc4f2 | | primaryFg | #ffffff | #031b2a | | secondary | #e2eef4 | #15232f | | secondaryFg | #0b1a24 | #e6f2f8 | | accent | #3d6b1f | #a7d77a | | accentFg | #ffffff | #132404 | | ring | #0b5f8f | #6cc4f2 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0b5f8f | #6cc4f2 | | secondaryText | #616f77 | #79868f | | accentText | #3d6b1f | #a7d77a | | successText | #14783b | #4ade80 | | warningText | #a64e0b | #fbbf24 | | dangerText | #c72526 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0b5f8f | #6cc4f2 | --- # Liangfen: a MIAN design language Thick glass bricks. Cool, chunky, clear. Liangfen is mung-bean jelly cut into thick, translucent strips and served cold with chilli oil and black vinegar. Liangfen is a glass-brick system: translucent blocks with visible thickness, a tinted glass edge below and to the side, that press down into the page when clicked, with a chilli-red accent. - Family: Glass · Origin: China · mung-bean jelly · License: MIAN License (free to use) - Traits: chunky, glass, cool, solid, bold · intensity 3/5 · contrast medium · density default. Good for: consumer apps, games, food. Less for: quiet luxury. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/liangfen.css - Page: https://mian.ro/noodles/liangfen ## Design philosophy Liangfen is glass bricks. Mung-bean jelly is cut into thick, translucent strips, so every surface is a translucent block with a visible, tinted thickness along its lower edge and a bright top face; selections are raised bricks in a sunken slot, and presses sink a block into its own thickness. It is cool and jade-tinted underneath, with a chilli-red accent. ## Principles - Thickness: every raised block shows a 4–6px tinted glass edge below (--lf-tint), plus a bright top face (--lf-face). - Presses sink: translateY(3px) while the edge shrinks to 1px. - Slots and bricks: containers are sunken (inset tint); the chosen item is a raised white brick. - Cool jade page, chilli-red primary, vinegar-brown accent. ## The language - **Shape.** 8px fields, 14px surfaces, 8px badges; brick-shaped knobs. - **Surface.** Translucent glass (66%) with a tinted lower edge and a soft drop. - **Colour.** Chilli red, vinegar brown, jade neutrals. - **Type.** Sans at 650–700. - **Motion.** liangfen-in: drops in with a 1px settle (300ms); a tumbling jelly-cube spinner. - **Data.** Glass-brick columns with a side thickness. ## Colour, type and brand - **Primary** #b42318: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #4a3322: brown and terracotta (deep). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #e9f1eb: green (pale, muted). Growth, health, permission, money. The easiest colour to look at for a long time. - **Scheme.** Red with its neighbour brown and terracotta: an analogous pair, harmonious and natural. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** chunky, glass, cool, solid, bold. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "liangfen"). ## Inspired by the noodle - Thick, translucent strips → glass blocks with a visible, tinted thickness on their lower edge - Firm jelly → presses sink the block into its own thickness - Chilli oil and black vinegar → chilli-red primary, vinegar-brown accent - Served cold → a cool jade-tinted page under the glass ## Designing new components in Liangfen Build new components from `--mn-*` tokens, scoped with `[data-noodle="liangfen"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Raised: background-color: var(--lf-glass); box-shadow: var(--lf-face), 0 4px 0 var(--lf-tint). - Pressed: transform: translateY(3px); box-shadow: var(--lf-face), 0 1px 0 var(--lf-tint). - Sunken containers: box-shadow: inset 0 3px 0 var(--lf-tint). Avoid: - Flat, thickness-free panels - Hairline-only styling - Warm heavy shadows Recipe: a selectable tile in this language: ```css [data-noodle="liangfen"] .tile { padding: 14px 16px; border: 0; border-radius: 14px; background-color: var(--lf-glass); -webkit-backdrop-filter: var(--lf-blur); backdrop-filter: var(--lf-blur); box-shadow: var(--lf-face), 0 4px 0 var(--lf-tint); transition: transform 120ms, box-shadow 120ms; } [data-noodle="liangfen"] .tile:active { transform: translateY(3px); box-shadow: var(--lf-face), 0 1px 0 var(--lf-tint); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 8px, box 14px, badge 8px - Density: default · Shadows: soft · Translucent surfaces | token | light | dark | |---|---|---| | bg | #e9f1eb | #08100b | | surface | #ffffff | #0f1a13 | | surface2 | #dde8e0 | #17241b | | fg | #101a13 | #e8f2eb | | muted | #4b5d51 | #93a89a | | border | #cfdcd2 | #223328 | | input | #a4b7a9 | #3d5344 | | primary | #b42318 | #ff8a7a | | primaryFg | #ffffff | #2a0505 | | secondary | #dde8e0 | #17241b | | secondaryFg | #101a13 | #e8f2eb | | accent | #4a3322 | #d6b79c | | accentFg | #ffffff | #1c1109 | | ring | #b42318 | #ff8a7a | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #b42318 | #ff8a7a | | secondaryText | #626c65 | #7b877f | | accentText | #4a3322 | #d6b79c | | successText | #15783a | #4ade80 | | warningText | #a74e0a | #fbbf24 | | dangerText | #c82524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #b42318 | #ff8a7a | --- # Dangmyeon: a MIAN design language Smoked glass, sesame gloss. Dangmyeon are Korean sweet-potato starch noodles: grey-brown and translucent, chewy, glossy with sesame oil and tossed with bright julienned vegetables in japchae. Dangmyeon is a smoked-glass system: dark tinted translucent panels with an amber sheen, and the vegetables’ colours as accents. - Family: Glass · Origin: Korea · sweet-potato glass noodles · License: MIAN License (free to use) - Traits: smoked, glossy, moody, premium, dark · intensity 3/5 · contrast medium · density default. Good for: nightlife, music, premium apps, bars and restaurants. Less for: children, public services. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/dangmyeon.css - Page: https://mian.ro/noodles/dangmyeon ## Design philosophy Dangmyeon is smoked glass. Sweet-potato noodles are grey-brown and translucent, glossy with sesame oil and tossed with bright vegetables, so the interface uses tinted, smoky translucent panels with a thicker glass edge at the bottom, a warm amber sheen that slides across when you hover, and the vegetables’ colours, carrot, spinach, egg yolk, for data. ## Principles - Tinted, not clear: panels are smoke-tinted glass (--d-smoke) with blur. - A thicker bottom edge: inset 0 -3px 0 of the tint, a bright top edge (--d-edge). - Sesame sheen: a diagonal amber highlight slides across buttons and rows on hover. - Julienne colours for data and status, never for surfaces. ## The language - **Shape.** 12px fields, 18px panels, pill badges. - **Surface.** Smoked translucent glass over a warm gradient; soft deep shadows. - **Colour.** Sesame-amber primary, spinach green accent; carrot, egg and mushroom series colours. - **Type.** Sans at 650–700. - **Motion.** dangmyeon-in: rise with a little blur and spring, 320ms; the sheen travels 600ms. - **Data.** Glossy tinted bars cycling through four julienne colours; a four-colour spinner. ## Colour, type and brand - **Primary** #a14a0d: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #3f6212: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #e7e3dd: brown and terracotta (pale, muted). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** Brown and terracotta with green: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** smoked, glossy, moody, premium, dark. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "dangmyeon"). ## Inspired by the noodle - Grey-brown, translucent → smoked, tinted glass panels rather than clear ones - Glossy with sesame oil → a warm amber sheen along edges and on hover - Tossed with carrot, spinach, egg and mushroom → a bright julienne palette for charts and status - Chewy and springy → soft, slightly elastic motion ## Designing new components in Dangmyeon Build new components from `--mn-*` tokens, scoped with `[data-noodle="dangmyeon"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - background-color: var(--d-smoke); backdrop-filter: var(--d-blur); box-shadow: var(--d-edge). - Add a ::before with var(--d-sheen) (background-size 250%) and move its background-position on hover. - Colour data with --mn-series-1…4 (amber, green, yolk, carrot). Avoid: - Clear or white glass - Cold blue tints - Flat opaque panels Recipe: a selectable tile in this language: ```css [data-noodle="dangmyeon"] .tile { position: relative; overflow: hidden; padding: 14px 16px; border: 1px solid light-dark(rgb(90 70 50 / .14), rgb(255 255 255 / .07)); border-radius: 18px; background-color: var(--d-smoke); -webkit-backdrop-filter: var(--d-blur); backdrop-filter: var(--d-blur); box-shadow: var(--d-edge); } [data-noodle="dangmyeon"] .tile::before { content: ""; position: absolute; inset: 0; background: var(--d-sheen) 120% 0 / 250% 100% no-repeat; transition: background-position 600ms; } [data-noodle="dangmyeon"] .tile:hover::before { background-position: -20% 0; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 12px, box 18px, badge 999px - Density: default · Shadows: soft · Translucent surfaces | token | light | dark | |---|---|---| | bg | #e7e3dd | #0f0d0b | | surface | #faf8f5 | #1b1815 | | surface2 | #dcd6ce | #26221e | | fg | #1d1915 | #f1ebe3 | | muted | #5b5249 | #a8998a | | border | #cdc5ba | #3a332c | | input | #a99f92 | #564c42 | | primary | #a14a0d | #f5a524 | | primaryFg | #ffffff | #1f1300 | | secondary | #dcd6ce | #26221e | | secondaryFg | #1d1915 | #f1ebe3 | | accent | #3f6212 | #a3d65c | | accentFg | #ffffff | #132203 | | ring | #a14a0d | #f5a524 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #a14a0d | #f5a524 | | secondaryText | #69655f | #87827d | | accentText | #3f6212 | #a3d65c | | successText | #167438 | #4ade80 | | warningText | #a24c0a | #fbbf24 | | dangerText | #c12424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #a14a0d | #f5a524 | --- # Woonsen: a MIAN design language Crystal clear, a prism at the edge. Woonsen are Thai glass noodles, crystal clear in a bright salad of lime, chilli and herbs. Woonsen is a crystal system: clear glass with faceted, bevelled edges that split light into a thin prism of colour, and small sparkles of motion. - Family: Glass · Origin: Thailand · glass noodles · License: MIAN License (free to use) - Traits: crystal, bright, faceted, fresh, sparkling · intensity 3/5 · contrast medium · density default. Good for: jewellery, beauty, launches, drinks. Less for: dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/woonsen.css - Page: https://mian.ro/noodles/woonsen ## Design philosophy Woonsen is cut crystal. Thai glass noodles are crystal clear in a bright salad, so the interface is clear, lightly frosted glass with bevelled edges, a light facet top-left, a darker one bottom-right, and a thin prism of colour where light splits along borders, focus rings and the current tab. Things arrive with a quick sparkle. ## Principles - The prism edge: a 1px conic rainbow border (padding-box glass over a border-box --w-prism). - Bevels, not shadows: --w-bevel gives every raised thing cut facets. - Clear and bright: 60–90% glass over a pale prismatic wash. - A glint sweeps across buttons on hover; entrances sparkle (brightness → normal). ## The language - **Shape.** 10px fields, 16px panels, pill badges. - **Surface.** Clear frosted glass with a prism edge, bevels and a light lift. - **Colour.** Violet primary, lime accent; the prism (pink, gold, lime, cyan, lilac) only at edges. - **Type.** Clean sans at 600–650. - **Motion.** woonsen-in: from brightness(1.6) desaturated to normal, 300ms; woonsen-glint on hover. - **Data.** Cut-glass bars with a facet highlight; a turning prism-ring spinner. ## Colour, type and brand - **Primary** #111827: blue (deep). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #3f6212: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #f5f7fb: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Blue with green: a contrasting pair that needs one of the two to dominate. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** crystal, bright, faceted, fresh, sparkling. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "woonsen"). ## Inspired by the noodle - Crystal clear → clear, lightly frosted glass on a bright white page - Light through glass → a thin iridescent prism along edges and focus rings - Cut glass facets → bevelled edges: a light edge on top-left, a dark edge on bottom-right - Lime and chilli → a bright, zesty accent; a quick sparkle when things appear ## Designing new components in Woonsen Build new components from `--mn-*` tokens, scoped with `[data-noodle="woonsen"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border: 1px solid transparent; background: linear-gradient(var(--w-glass), var(--w-glass)) padding-box, var(--w-prism) border-box. - Add box-shadow: var(--w-bevel), var(--w-lift). - Use the prism only on edges and indicators, never fill an area with it. Avoid: - Rainbow fills - Dark smoky tints - Soft blurred-only edges Recipe: a selectable tile in this language: ```css [data-noodle="woonsen"] .tile { padding: 14px 16px; border: 1px solid transparent; border-radius: 16px; background: linear-gradient(var(--w-glass), var(--w-glass)) padding-box, var(--w-prism) border-box; -webkit-backdrop-filter: blur(12px) saturate(1.5); backdrop-filter: blur(12px) saturate(1.5); box-shadow: var(--w-bevel), var(--w-lift); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 10px, box 16px, badge 999px - Density: default · Shadows: subtle · Translucent surfaces | token | light | dark | |---|---|---| | bg | #f5f7fb | #07080d | | surface | #ffffff | #11131c | | surface2 | #eceff6 | #1a1d29 | | fg | #111827 | #eef1f8 | | muted | #4b5563 | #9aa3b5 | | border | #dfe3ec | #272b3a | | input | #c3c9d6 | #3b4154 | | primary | #111827 | #eef1f8 | | primaryFg | #ffffff | #111827 | | secondary | #eceff6 | #1a1d29 | | secondaryFg | #111827 | #eef1f8 | | accent | #3f6212 | #bef264 | | accentFg | #ffffff | #1a2e05 | | ring | #111827 | #eef1f8 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #111827 | #eef1f8 | | secondaryText | #696e7a | #7c7f88 | | accentText | #3f6212 | #bef264 | | successText | #15783b | #4ade80 | | warningText | #aa4f0b | #fbbf24 | | dangerText | #c82526 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #111827 | #eef1f8 | --- # Shirataki: a MIAN design language Translucent, jelly-soft, bouncy. "White waterfall" noodles made of konjac: milky, translucent, slippery and springy. Shirataki is a jelly system: glossy blobs, wobble-on-press, overshooting springs and soft pearl surfaces. - Family: Glass · Origin: Japan · konjac noodles · License: MIAN License (free to use) - Traits: bouncy, jelly, playful, soft, fun · intensity 3/5 · contrast low · density comfortable. Good for: games, kids, consumer apps, social. Less for: finance, legal, enterprise. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/shirataki.css - Page: https://mian.ro/noodles/shirataki ## Design philosophy Shirataki are konjac noodles: translucent, jelly-soft and springy. The language is gelatinous: pearl surfaces with a glossy highlight blob, controls that wobble when pressed, blobby shapes that morph, and springs that overshoot and settle like jelly. ## Principles - Gloss: a radial highlight (var(--s-gloss)) near the top-left of every raised thing. - Wobble: presses and selections play a jiggle (squash and stretch in both axes). - Soft and round: large radii (16–28px), no sharp corners anywhere. - Sunken wells: inputs and tracks are inset with a soft inner shadow. ## The language - **Shape.** 16px fields, 26px containers, blob spinners that morph their border-radius. - **Surface.** Pearl surfaces with gloss and a soft coloured drop shadow; sunken fields. - **Colour.** Mint-teal primary, violet accent, pearly neutrals. - **Type.** Rounded sans. - **Motion.** shirataki-in: squash (0.7,1.15) → overshoot → settle, 480ms, cubic-bezier(.3,1.3,.5,1). shirataki-jiggle on press. - **Data.** Jelly-blob bars with gloss that swell on hover, thick 5px lines, a glossy donut with a coloured shadow. ## Colour, type and brand - **Primary** #0f766e: teal and cyan (deep, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Accent** #6d28d9: indigo and violet (mid). Imagination, luxury, spirituality, the unusual. - **Page** #f5f6f5: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Teal and cyan with indigo and violet: a contrasting pair that needs one of the two to dominate. The page is neutral. - **Type.** One voice throughout: rounded sans. Headings are semibold, which reads as confident without shouting. Friendly, soft, safe, young. - **Reads as** bouncy, jelly, playful, soft, fun. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "shirataki"). ## Inspired by the noodle - Gelatinous konjac → controls wobble and jiggle when pressed - Milky translucence → pearl surfaces with a glossy highlight blob - Springy → every transition overshoots and settles - Slippery → knobs and indicators slide past and bounce back ## Designing new components in Shirataki Build new components from `--mn-*` tokens, scoped with `[data-noodle="shirataki"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Background var(--mn-surface) var(--s-gloss), radius 18–28px, shadow 0 10px 30px -14px of the primary. - On press and on selection play animation: shirataki-jiggle 400ms. - Wells and tracks: surface-2 with inset 0 2px 6px rgb(0 0 0/.07). Avoid: - Hard edges - Flat, matte fills - Linear motion Recipe: a selectable tile in this language: ```css [data-noodle="shirataki"] .tile { padding: 14px 18px; border: 0; border-radius: 22px; background: var(--mn-surface) var(--s-gloss); box-shadow: 0 10px 30px -14px color-mix(in oklab, var(--mn-primary) 40%, transparent); } [data-noodle="shirataki"] .tile:active, [data-noodle="shirataki"] .tile[aria-selected="true"] { animation: shirataki-jiggle 400ms ease-out; } ``` ## Tokens - Fonts: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Heading font: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Radius: field 16px, box 26px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #f5f6f5 | #0f1211 | | surface | #fbfcfb | #161a19 | | surface2 | #eceeec | #1f2523 | | fg | #1d2321 | #eaf0ed | | muted | #56605b | #9aa7a1 | | border | #dde2df | #2a322f | | input | #c7cfcb | #3a4541 | | primary | #0f766e | #5eead4 | | primaryFg | #ffffff | #042f2c | | secondary | #e4e9e6 | #1f2523 | | secondaryFg | #1d2321 | #eaf0ed | | accent | #6d28d9 | #c4b5fd | | accentFg | #ffffff | #1a0b3a | | ring | #0f766e | #5eead4 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #10736b | #5eead4 | | secondaryText | #6d7270 | #808684 | | accentText | #6d28d9 | #c4b5fd | | successText | #16773a | #4ade80 | | warningText | #a54e0b | #fbbf24 | | dangerText | #c12625 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0f766e | #5eead4 | --- # Cha Soba: a MIAN design language Matcha, calm, considered. Green-tea soba. Muted matcha primary, serif headings, paper-toned surfaces and small radii. Wellness, writing, reading. - Family: Textured · Origin: Japan · green tea soba · License: MIAN License (free to use) - Traits: calm, natural, considered, bookish, wellness · intensity 2/5 · contrast medium · density default. Good for: wellness, writing, reading apps, tea and food, sustainability. Less for: loud campaigns, gaming. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/chasoba.css - Page: https://mian.ro/noodles/chasoba ## Design philosophy Cha soba is green-tea buckwheat noodle, and its world is the tea ceremony: washi paper, brush and ink, hanko seals and the ensō circle. The language is hand-made and deliberate: paper texture, brush-stroke outlines with irregular radii, stamped seal badges, and slow motion in which things appear like ink spreading into paper. ## Principles - Paper: surfaces carry a subtle washi fibre texture. - The brush: outlines use irregular elliptical radii (var(--c-brush)) so they look hand-drawn. - Seals: badges are stamped hanko, a red or coloured frame with an inner line. - Deliberate pace: 280–460ms, ease-out, never springy. ## The language - **Shape.** Brush-stroke radii on buttons and cards; the ensō (an open ring) for spinners and donuts. - **Surface.** Washi texture, ink outlines, brush underlines on card headers. - **Colour.** Matcha green primary, amber accent, ink and paper. - **Type.** Serif headings. - **Motion.** chasoba-ink: blur and spread in, 460ms. Buttons tilt slightly on hover like a brush lifting. - **Data.** Brush-stroke bars, an ensō donut, ink lines. ## Colour, type and brand - **Primary** #4d7c0f: green (deep, saturated). Growth, health, permission, money. The easiest colour to look at for a long time. - **Accent** #a16207: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f7f8f3: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Green with brown and terracotta: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are semibold, which reads as confident without shouting. Considered, literate, established. The voice of books and long reading. - **Reads as** calm, natural, considered, bookish, wellness. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "chasoba"). ## Inspired by the noodle - Green tea → matcha palette and a washi paper texture - Tea ceremony → slow, deliberate, ink-spreading transitions - Brush and ink → hand-drawn, uneven outlines on buttons and fields - Hanko seal → square red-stamp badges and switch knobs ## Designing new components in Cha Soba Build new components from `--mn-*` tokens, scoped with `[data-noodle="chasoba"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Border 2px var(--mn-fg) with border-radius var(--c-brush); background var(--mn-surface) var(--c-washi). - Mark status with a hanko seal: 2px frame plus an inset 1.5px surface line. - Enter with blur(4px) → 0 and a slow fade. Avoid: - Perfect geometric radii - Glossy or glassy effects - Fast or bouncy motion Recipe: a selectable tile in this language: ```css [data-noodle="chasoba"] .tile { padding: 12px 16px; border: 2px solid var(--mn-fg); border-radius: var(--c-brush); background: var(--mn-surface) var(--c-washi); transition: transform 280ms cubic-bezier(.3, .1, .2, 1); } [data-noodle="chasoba"] .tile:hover { transform: rotate(-.6deg); } [data-noodle="chasoba"] .tile[aria-selected="true"] { background-color: color-mix(in oklab, var(--mn-primary) 14%, var(--mn-surface)); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-serif, "New York", "Iowan Old Style", "Palatino Linotype", Georgia, serif - Radius: field 6px, box 10px, badge 6px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #f7f8f3 | #10130d | | surface | #fdfdfa | #161a12 | | surface2 | #ecefe3 | #20261a | | fg | #1c2117 | #eef1e6 | | muted | #5b6452 | #a3ab95 | | border | #dde2d2 | #2b3323 | | input | #c7cfb8 | #3f4a33 | | primary | #4d7c0f | #a3e635 | | primaryFg | #ffffff | #10130d | | secondary | #e6ebd9 | #20261a | | secondaryFg | #1c2117 | #eef1e6 | | accent | #a16207 | #facc15 | | accentFg | #ffffff | #1c1600 | | ring | #4d7c0f | #a3e635 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #487310 | #a3e635 | | secondaryText | #6d7265 | #83877c | | accentText | #945c09 | #facc15 | | successText | #16783a | #4ade80 | | warningText | #a54e0a | #fbbf24 | | dangerText | #c52524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #4d7c0f | #a3e635 | --- # Daoxiao: a MIAN design language Shaved from the block. Rough-hewn. Daoxiao mian, knife-shaved noodles, are shaved straight from a block of dough into boiling water, each one thick in the middle and thin at the edges like a willow leaf, with a ridged, hand-cut surface. Daoxiao is a carved system: shaved-stroke textures, ridged bevels, willow-leaf shapes and quick flicking motion. - Family: Textured · Origin: China · Shanxi · License: MIAN License (free to use) - Traits: rough, hand-made, rugged, crafted, honest · intensity 3/5 · contrast medium · density default. Good for: craft brands, outdoor, food, workshops. Less for: fintech, precise tools. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/daoxiao.css - Page: https://mian.ro/noodles/daoxiao ## Design philosophy Daoxiao is carved. Knife-shaved noodles are cut off a block with a curved blade, each thick in the middle and thin at the edges like a willow leaf, with a ridged surface. The interface carries a fine diagonal shaved-stroke texture, controls have a raised ridge down their middle, shapes are willow leaves (two round corners, two sharp), and things flick into place from the top right. ## Principles - Shaved texture (--dx-shave) on surfaces, tracks and headers. - The ridge: a vertical light-to-dark gradient (--dx-ridge) on raised controls, plus a 2px carved bottom edge. - Willow-leaf corners: 18px 4px 18px 4px (small: 10px 3px). - A quick flick: translate from the top right with a slight rotation, 220ms, small overshoot. ## The language - **Shape.** Leaf radii on buttons, fields, cards, tabs and badges; a spinning leaf spinner. - **Surface.** Dough-cream with a shaved texture; a 2px carved edge and a warm soft shadow. - **Colour.** Vinegar-red primary, roasted-brown accent, dough neutrals. - **Type.** Sans at 650–750. - **Motion.** daoxiao-in: translate(10px,-8px) rotate(2deg) → 0; hover tilts −0.5°. - **Data.** Leaf-topped bars with a ridge; thick lines. ## Colour, type and brand - **Primary** #7f1d1d: red (mid). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #8a5a12: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f6f0e4: brown and terracotta (pale). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** Red with its neighbour brown and terracotta: an analogous pair, harmonious and natural. The page 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. - **Reads as** rough, hand-made, rugged, crafted, honest (brand dimension: ruggedness). - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "daoxiao"). ## Inspired by the noodle - Shaved from a block with a curved blade → diagonal shaved-stroke texture on surfaces - Thick in the middle, thin at the edges → controls with a raised ridge down the middle and tapered ends - Willow-leaf shape → leaf-cut corners on buttons, tabs and badges - Flicked into the pot → a quick flick-in motion from the top right ## Designing new components in Daoxiao Build new components from `--mn-*` tokens, scoped with `[data-noodle="daoxiao"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border-radius: var(--dx-leaf) (or --dx-leaf-sm); background-image: var(--dx-shave) on surfaces, var(--dx-ridge) on controls. - Add box-shadow: 0 2px 0 var(--mn-border) as the carved edge. - Hover: translateY(-1px) rotate(-.5deg). Avoid: - Symmetric uniform radii - Glossy glass - Perfectly smooth flat fills Recipe: a selectable tile in this language: ```css [data-noodle="daoxiao"] .tile { padding: 14px 16px; border: 1px solid var(--mn-border); border-radius: var(--dx-leaf); background: var(--mn-surface) var(--dx-shave); box-shadow: 0 2px 0 var(--mn-border); transition: transform 150ms cubic-bezier(.2, .9, .3, 1.15); } [data-noodle="daoxiao"] .tile:hover { transform: translateY(-1px) rotate(-.5deg); } [data-noodle="daoxiao"] .tile[aria-selected="true"] { background-image: var(--dx-ridge), var(--dx-shave); border-color: var(--mn-primary); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 6px, box 10px, badge 4px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #f6f0e4 | #15110b | | surface | #fffaf1 | #1e1911 | | surface2 | #ece2cf | #2a231a | | fg | #231c12 | #f4ecdd | | muted | #665a47 | #b0a28a | | border | #dfd2ba | #3a3124 | | input | #c2b193 | #574a36 | | primary | #7f1d1d | #f5a3a3 | | primaryFg | #ffffff | #2a0707 | | secondary | #ece2cf | #2a231a | | secondaryFg | #231c12 | #f4ecdd | | accent | #8a5a12 | #e5b867 | | accentFg | #ffffff | #261a04 | | ring | #7f1d1d | #f5a3a3 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #7f1d1d | #f5a3a3 | | secondaryText | #736b5e | #8b8378 | | accentText | #8a5a12 | #e5b867 | | successText | #167639 | #4ade80 | | warningText | #a64e0a | #fbbf24 | | dangerText | #c22523 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #7f1d1d | #f5a3a3 | --- # Pici: a MIAN design language Hand-rolled, uneven, honest. Pici are thick strands rolled one by one between the palms, so no two are the same. Pici is a hand-made system: slightly irregular corners, borders that wobble a little, a serif for headings, rust and olive on unbleached paper, honest and warm, never polished. - Family: Textured · Origin: Italy · Siena · License: MIAN License (free to use) - Traits: hand-made, rustic, warm, honest, crafted, earthy · intensity 2/5 · contrast medium · density comfortable. Good for: food, restaurants, crafts, farms, bakeries, local businesses. Less for: fintech, developer tools, enterprise. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/pici.css - Page: https://mian.ro/noodles/pici ## Design philosophy Pici is hand-made: every surface has slightly irregular corners, borders are a touch heavier and uneven, headings are a warm serif, colours are rust and olive on unbleached paper. It should feel like a trattoria menu written by the owner: honest, warm and never polished to plastic. ## Principles - No two corners the same: surfaces use irregular radii. - Warmth over precision: warm paper, rust and olive, a book serif for headings. - Hand-drawn edges: 1.5px borders in ink at reduced opacity. - Relaxed spacing, calm motion. ## The language - **Shape.** Irregular corners (e.g. 12px 16px 10px 18px); round badges. - **Surface.** Unbleached paper; cards with uneven 1.5px ink borders and a faint paper shadow. - **Colour.** Rust (#7a3b1d), olive accent (#56642a), paper neutrals. - **Type.** Book serif headings at 700; humanist sans body. - **Motion.** pici-in: a gentle drop with a tiny rotation; hovers lift slightly. - **Data.** Rust columns with uneven tops, olive highlight. ## Colour, type and brand - **Primary** #7a3b1d: brown and terracotta (deep). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #56642a: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #f3ede1: brown and terracotta (pale). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** Brown and terracotta with green: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are semibold, which reads as confident without shouting. Considered, literate, established. The voice of books and long reading. - **Reads as** hand-made, rustic, warm, honest, crafted (brand dimension: sincerity). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "pici"). ## Inspired by the noodle - Rolled between the palms → irregular corners on every surface; no two radii the same - Thick and uneven → slightly heavier, hand-drawn-looking borders - Aglione, the Tuscan garlic sauce → rust, olive and unbleached paper - A trattoria, not a laboratory → warm serif headings, relaxed spacing ## Designing new components in Pici Build new components from `--mn-*` tokens, scoped with `[data-noodle="pici"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Radius: border-radius: 12px 16px 10px 18px / 14px 10px 16px 12px (vary per element). - Borders: 1.5px solid color-mix(in srgb, var(--mn-fg) 55%, transparent). - Headings in var(--mn-font-heading) at 700. Avoid: - Perfect geometric shapes - Cold greys and pure white - Glass or gradients - Tight dense layouts Recipe: a selectable tile in this language: ```css [data-noodle="pici"] .tile { padding: 14px; border: 1.5px solid color-mix(in srgb, var(--mn-fg) 55%, transparent); border-radius: 12px 16px 10px 18px / 14px 10px 16px 12px; background: var(--mn-surface); } [data-noodle="pici"] .tile:hover { transform: translateY(-1px) rotate(-.3deg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Radius: field 10px, box 14px, badge 999px - Density: comfortable · Shadows: subtle | token | light | dark | |---|---|---| | bg | #f3ede1 | #16120d | | surface | #faf6ec | #1f1a13 | | surface2 | #e9e0cd | #2a231a | | fg | #231c14 | #f3ede1 | | muted | #5f5344 | #b9ad98 | | border | #d8ccb4 | #3d3326 | | input | #b9a988 | #5d503d | | primary | #7a3b1d | #e6a57c | | primaryFg | #ffffff | #2a1105 | | secondary | #e9e0cd | #2a231a | | secondaryFg | #231c14 | #f3ede1 | | accent | #56642a | #bfd08a | | accentFg | #ffffff | #1b2206 | | ring | #7a3b1d | #e6a57c | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #7a3b1d | #e6a57c | | secondaryText | #726a5e | #8a847a | | accentText | #56642a | #bfd08a | | successText | #177237 | #4ade80 | | warningText | #a04b0b | #fbbf24 | | dangerText | #be2423 | #f87171 | | infoText | #04679e | #38bdf8 | | link | #7a3b1d | #e6a57c | --- # Naengmyeon: a MIAN design language Ice-cold, in a brushed-steel bowl. Naengmyeon are long, chewy buckwheat noodles served in an ice-cold broth, often with a slush of ice, in a brushed stainless-steel bowl, and cut at the table with scissors. Naengmyeon is a brushed-metal system: fine brushed-steel textures, frosted edges, cool steel greys, and a crisp snip when things open. - Family: Textured · Origin: Korea · License: MIAN License (free to use) - Traits: metallic, cold, industrial, crisp, engineered · intensity 2/5 · contrast medium · density default. Good for: hardware, industrial, automotive, engineering. Less for: soft lifestyle. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/naengmyeon.css - Page: https://mian.ro/noodles/naengmyeon ## Design philosophy Naengmyeon is brushed steel and ice. The noodles come ice-cold in a stainless-steel bowl and are cut with scissors at the table, so raised surfaces are brushed metal plates with a bright top rim and a dark bottom rim, fields are cold recessed steel that frost at the edge when focused, and components open with a crisp snip from the centre. ## Principles - Brushed metal (--nm-brush over --nm-steel) on raised surfaces, knobs and thumbs. - Rims, not borders: --nm-rim (bright top, dark bottom). - Frost for focus and hover: an icy blue outer ring. - Snip: clip-path opens from the centre (inset(0 50% 0 50%) → 0), 220ms. ## The language - **Shape.** 8px fields, 12px panels, 5–7px rectangular knobs. - **Surface.** Brushed steel plates; recessed cold wells for inputs, tracks and segmented controls. - **Colour.** Slate primary (steel gradient on default buttons), icy blue accent, cool greys. - **Type.** Sans at 600, slightly tracked. - **Motion.** naengmyeon-in: clip-path snip from the centre; blades spinner. - **Data.** Steel bars with rims; the highlight frosted blue. ## Colour, type and brand - **Primary** #334155: blue (deep, muted). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #0369a1: blue (mid, saturated). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Page** #eef1f4: blue (pale, muted). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Scheme.** Two tones of blue: harmonious and calm, with little contrast between brand and accent. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** metallic, cold, industrial, crisp, engineered (brand dimension: ruggedness). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "naengmyeon"). ## Inspired by the noodle - A brushed stainless-steel bowl → fine horizontal brushed-metal texture on raised surfaces and knobs - Ice slush in the broth → frosted, icy highlights and cool blue-greys - Cut with scissors at the table → components open with a crisp snip from the centre - Long, chewy strands → long steel rails for progress and sliders ## Designing new components in Naengmyeon Build new components from `--mn-*` tokens, scoped with `[data-noodle="naengmyeon"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - background: var(--nm-brush), var(--nm-steel); box-shadow: var(--nm-rim), 0 1px 2px rgb(0 0 0 / .18). - Recessed parts: a darker flat fill with inset 0 1px 3px shadow. - Hover/focus: add var(--nm-frost) (an icy 1px ring) or a 3px pale blue halo. Avoid: - Warm colours - Soft organic shapes - Glossy colour gradients Recipe: a selectable tile in this language: ```css [data-noodle="naengmyeon"] .tile { padding: 14px 16px; border: 1px solid var(--mn-border); border-radius: 12px; background: var(--nm-brush), var(--nm-steel); box-shadow: var(--nm-rim); } [data-noodle="naengmyeon"] .tile:hover { box-shadow: var(--nm-rim), var(--nm-frost); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 8px, box 12px, badge 6px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #eef1f4 | #0b0e12 | | surface | #fbfcfd | #141920 | | surface2 | #e2e7ec | #1d242d | | fg | #0f172a | #e8edf3 | | muted | #4a5568 | #98a4b3 | | border | #d3dae2 | #2a333e | | input | #aab5c2 | #445061 | | primary | #334155 | #cbd5e1 | | primaryFg | #ffffff | #0f172a | | secondary | #e2e7ec | #1d242d | | secondaryFg | #0f172a | #e8edf3 | | accent | #0369a1 | #7dd3fc | | accentFg | #ffffff | #04202e | | ring | #0369a1 | #7dd3fc | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #334155 | #cbd5e1 | | secondaryText | #686e7b | #7e848c | | accentText | #0369a1 | #7dd3fc | | successText | #14763b | #4ade80 | | warningText | #a74e0c | #fbbf24 | | dangerText | #c32426 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #334155 | #cbd5e1 | --- # Hōtō: a MIAN design language Rustic, earthy, simmered. Hōtō are thick, flat, hand-cut noodles simmered in miso with pumpkin and root vegetables in a heavy iron pot. Hōtō is a rustic stoneware system: coarse clay grain on every surface, thick glazed edges, earthy miso and pumpkin colours and slow, simmering motion. - Family: Textured · Origin: Japan · Yamanashi · License: MIAN License (free to use) - Traits: rustic, earthy, warm, homely, traditional · intensity 2/5 · contrast medium · density comfortable. Good for: food, farms, crafts, local businesses, hospitality. Less for: tech startups, fintech. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/hoto.css - Page: https://mian.ro/noodles/hoto ## Design philosophy Hōtō is stoneware and a simmering pot. Thick hand-cut noodles are stewed in miso with pumpkin in a heavy iron pot, so surfaces carry a coarse clay grain, controls have thick glazed rims, shapes are hand-thrown (every corner slightly different), colours are earth, miso and pumpkin, and motion rises and settles slowly. ## Principles - Clay grain (--ht-grain) on every surface and control. - Glaze: a light top rim and a darker 3px bottom rim (--ht-glaze). - Hand-thrown radii: uneven elliptical corners (--ht-throw, --ht-throw-sm). - Simmer: 400–520ms rises with a gentle settle; a bubbling spinner. ## The language - **Shape.** Uneven radii everywhere; round pebble knobs. - **Surface.** Warm clay with grain, glazed rims and heavy soft shadows. - **Colour.** Miso brown primary, pumpkin accent, green and yolk for data. - **Type.** Serif headings, sans body. - **Motion.** hoto-in: 10px rise with a 1px overshoot, 520ms; hoto-simmer bubble. - **Data.** Grainy clay bars in four vegetable colours. ## Colour, type and brand - **Primary** #6b4423: brown and terracotta (deep). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #b45309: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f1e9dc: brown and terracotta (pale). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** Two tones of brown and terracotta: harmonious and calm, with little contrast between brand and accent. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are semibold, which reads as confident without shouting. Considered, literate, established. The voice of books and long reading. - **Reads as** rustic, earthy, warm, homely, traditional (brand dimension: sincerity, ruggedness). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "hoto"). ## Inspired by the noodle - A heavy iron pot and clay bowls → coarse stoneware grain on surfaces, glazed rims on controls - Miso broth and pumpkin → earthy browns with a pumpkin-orange accent - Thick, hand-cut, irregular → slightly uneven radii and hand-thrown shapes - Simmered for a long time → slow motion that rises and settles gently ## Designing new components in Hōtō Build new components from `--mn-*` tokens, scoped with `[data-noodle="hoto"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border-radius: var(--ht-throw); background-image: var(--ht-grain); box-shadow: var(--ht-glaze), 0 14px 28px -18px rgb(60 30 10 / .45). - Controls: --ht-throw-sm radii, 1.5px borders. - Keep transitions ≥240ms. Avoid: - Perfect geometric radii - Cold greys and blues - Glass or gloss Recipe: a selectable tile in this language: ```css [data-noodle="hoto"] .tile { padding: 16px; border: 1.5px solid var(--mn-border); border-radius: var(--ht-throw); background: var(--mn-surface) var(--ht-grain); box-shadow: var(--ht-glaze), 0 14px 28px -18px rgb(60 30 10 / .45); transition: transform 240ms cubic-bezier(.25, .8, .3, 1); } [data-noodle="hoto"] .tile:hover { transform: translateY(-1px); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-serif, "New York", "Iowan Old Style", "Palatino Linotype", Georgia, serif - Radius: field 10px, box 16px, badge 8px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #f1e9dc | #15100b | | surface | #fbf6ee | #1f1811 | | surface2 | #e6dac7 | #2b2218 | | fg | #271c12 | #f3e9da | | muted | #675644 | #b3a18a | | border | #d8c8b0 | #3d3124 | | input | #b9a384 | #5a4a37 | | primary | #6b4423 | #e0b98f | | primaryFg | #ffffff | #21150a | | secondary | #e6dac7 | #2b2218 | | secondaryFg | #271c12 | #f3e9da | | accent | #b45309 | #fb923c | | accentFg | #ffffff | #2a1204 | | ring | #6b4423 | #e0b98f | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #6b4423 | #e0b98f | | secondaryText | #73685a | #8b8275 | | accentText | #a34c0a | #fb923c | | successText | #177438 | #4ade80 | | warningText | #a34c0a | #fbbf24 | | dangerText | #bf2423 | #f87171 | | infoText | #04679e | #38bdf8 | | link | #6b4423 | #e0b98f | --- # Ramen: a MIAN design language Bold, loud, high contrast. Pure black and white with a chilli-red primary and amber accent. Heavier type, crisp shadows. For products that want to be noticed. - Family: Bold · Origin: Japan · License: MIAN License (free to use) - Traits: bold, loud, energetic, confident, noticeable · intensity 4/5 · contrast high · density default. Good for: campaigns, product launches, agencies, sport, youth brands. Less for: quiet luxury, healthcare. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/ramen.css - Page: https://mian.ro/noodles/ramen ## Design philosophy Ramen is curly alkaline noodles in a loud, rich bowl, loaded with toppings and steam. The language is bold: heavy ink outlines, hard offset shadows like printed stickers, wavy lines wherever a straight one would be expected, and things that rise into place like steam. ## Principles - Ink first: 2px outlines in the foreground colour around every raised thing. - Hard shadows, never blurred: offset 3–5px in ink. - Curly, not straight: underlines, dividers and bar tops are waves. - Toppings on top: stickers and bands, slightly rotated. - High contrast, high energy. ## The language - **Shape.** 8px fields, 12px containers, badges as rotated stickers. - **Surface.** Pure white/black with ink outlines and hard offset shadows (var(--r-ink)). - **Colour.** Chilli red primary, amber accent, black and white. - **Type.** Heavy (800) headings, uppercase bold labels. - **Motion.** ramen-steam: rise and settle with a slight overshoot, 260ms. Hover lifts and grows the shadow; press flattens it. - **Data.** Wave-topped bars, bold outlined charts, wavy dividers (var(--r-wave)). ## Colour, type and brand - **Primary** #dc2626: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #f59e0b: orange (mid, saturated). Warmth, friendliness, appetite, affordability. Active like red, without the alarm. - **Page** #ffffff: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Red with its neighbour orange: an analogous pair, harmonious and natural. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are heavy, which reads as loud and direct. Clear, modern, impartial. The voice of software and signage. - **Reads as** bold, loud, energetic, confident, noticeable (brand dimension: excitement). - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "ramen"). ## Inspired by the noodle - Curly, wavy alkaline noodles → wavy underlines, wavy dividers and wave-topped bars - A loud, rich bowl → heavy outlines and hard offset shadows - Steam → components rise into place when they appear - Toppings on top → header bands and bold labels ## Designing new components in Ramen Build new components from `--mn-*` tokens, scoped with `[data-noodle="ramen"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Outline with 2px var(--r-ink) and add box-shadow 4px 4px 0 var(--r-ink). - On hover translate(-1px,-1px) and grow the shadow; on press translate(3px,3px) with no shadow. - Replace straight rules with the wave pattern (var(--r-wave) as a mask or background). - Small labels: uppercase, weight 900, rotated ±2°. Avoid: - Blurred shadows - Hairlines - Pastel palettes - Subtle states Recipe: a selectable tile in this language: ```css [data-noodle="ramen"] .tile { padding: 12px 14px; border: 2px solid var(--r-ink); border-radius: 12px; background: var(--mn-surface); box-shadow: 4px 4px 0 var(--r-ink); transition: transform 140ms, box-shadow 140ms; } [data-noodle="ramen"] .tile:hover { transform: translate(-1px, -1px); box-shadow: 5px 5px 0 var(--r-ink); } [data-noodle="ramen"] .tile:active { transform: translate(3px, 3px); box-shadow: 0 0 0 var(--r-ink); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 8px, box 12px, badge 6px - Density: default · Shadows: soft | token | light | dark | |---|---|---| | bg | #ffffff | #0c0a09 | | surface | #ffffff | #151211 | | surface2 | #f5f5f4 | #1f1b19 | | fg | #0c0a09 | #fafaf9 | | muted | #66615d | #a8a29e | | border | #e7e5e4 | #2b2523 | | input | #d6d3d1 | #443b37 | | primary | #dc2626 | #dc2626 | | primaryFg | #ffffff | #ffffff | | secondary | #0c0a09 | #fafaf9 | | secondaryFg | #ffffff | #0c0a09 | | accent | #f59e0b | #fbbf24 | | accentFg | #1c1002 | #1c1002 | | ring | #dc2626 | #f87171 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #c72323 | #e35554 | | secondaryText | #0c0a09 | #fafaf9 | | accentText | #98630a | #fbbf24 | | successText | #14793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c72323 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #dc2626 | #fbbf24 | --- # Biangbiang: a MIAN design language Belt-wide, slapped, loud. Biangbiang noodles are hand-pulled into belts as wide as a hand and slapped against the counter as they are stretched, the sound gives them their name, written with one of the most complicated characters in Chinese. Biangbiang is a heavyweight system: belt-wide blocks, very heavy type, thick borders, flat colour and a slap of motion. - Family: Bold · Origin: China · Shaanxi · License: MIAN License (free to use) - Traits: loud, brutal, energetic, unusual, raw, expressive · intensity 5/5 · contrast high · density comfortable. Good for: creative agencies, festivals, events, youth brands, indie products. Less for: finance, legal, healthcare, dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/biangbiang.css - Page: https://mian.ro/noodles/biangbiang ## Design philosophy Biangbiang is loud and wide. The noodles are hand-wide belts slapped on the counter, named after the sound and written with one of the most complicated characters there is. The interface uses the heaviest type in MIAN, belt-wide blocks with 3px ink borders, full-width colour bands across card tops, flat colour with no shadows at all, and a slap of motion: things land with an impact and a small rebound. ## Principles - Weight: 900 headings, uppercase 900 buttons, labels and tabs. - Belts: wide padding, full-width colour bands, 8px tab underlines. - 3px ink borders on everything (--mn-border-w: 3px). - Flat: no shadows, no gradients, only ink, cream and chilli orange. - Slap: land from above with a squash and a rebound (biangbiang-in). ## The language - **Shape.** 4px fields, 6px panels, 3px badges; blocky switch and slider. - **Surface.** Cream with 3px ink edges; card headers are solid chilli bands. - **Colour.** Chilli orange primary with black text, scallion green accent, ink and cream. - **Type.** Sans at 900, tight (−0.05em) and large. - **Motion.** biangbiang-in: −14px drop, squash, rebound, 300ms. - **Data.** Fat flat bars with an ink edge, a very thick donut. ## Colour, type and brand - **Primary** #ea580c: orange (mid, saturated). Warmth, friendliness, appetite, affordability. Active like red, without the alarm. - **Accent** #166534: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #fff7ed: white and paper (pale, saturated). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Orange with green: a contrasting pair that needs one of the two to dominate. The page 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. - **Reads as** loud, brutal, energetic, unusual, raw (brand dimension: excitement). - **Tone of voice.** Loud. Imperatives, one- and two-word lines, contrast in everything. Use it only if the product can keep the promise. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "biangbiang"). ## Inspired by the noodle - Belts as wide as a hand → wide, flat, blocky controls and full-width colour bands - One of the most complicated characters → the heaviest type in MIAN (900), set tight and large - Slapped on the counter → things land with a quick impact and a small rebound - Chilli oil poured hot over the top → chilli orange on black and cream ## Designing new components in Biangbiang Build new components from `--mn-*` tokens, scoped with `[data-noodle="biangbiang"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - border: 3px solid var(--mn-fg); border-radius: 4–6px; no box-shadow. - Make it wide and loud: uppercase 900 text, generous horizontal padding. - Selected = solid primary band with an ink edge. Avoid: - Shadows and gradients - Thin lines or light weights - Subtle hover states Recipe: a selectable tile in this language: ```css [data-noodle="biangbiang"] .tile { padding: 14px 20px; border: 3px solid var(--mn-fg); border-radius: 6px; background: var(--mn-surface); font-weight: 900; text-transform: uppercase; letter-spacing: .02em; } [data-noodle="biangbiang"] .tile[aria-selected="true"] { background: var(--mn-primary); color: var(--mn-primary-fg); } [data-noodle="biangbiang"] .tile:active { transform: scaleY(.9); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 4px, box 6px, badge 3px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #fff7ed | #0c0a09 | | surface | #ffffff | #171412 | | surface2 | #fde9d4 | #24201c | | fg | #0a0a0a | #fff7ed | | muted | #5c4a3c | #b8a898 | | border | #0a0a0a | #fff7ed | | input | #0a0a0a | #fff7ed | | primary | #ea580c | #fb923c | | primaryFg | #0a0a0a | #0a0a0a | | secondary | #0a0a0a | #fff7ed | | secondaryFg | #fff7ed | #0c0a09 | | accent | #166534 | #4ade80 | | accentFg | #ffffff | #052e16 | | ring | #0a0a0a | #fb923c | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #b4450c | #fb923c | | secondaryText | #0a0a0a | #fff7ed | | accentText | #166534 | #4ade80 | | successText | #14793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c72323 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #166534 | #fb923c | --- # Maccheroni: a MIAN design language Thick ink line, cut-out shadow, sweet colours. Maccheroni are short elbows of pasta, the first shape a child draws. Maccheroni is a blunt, cheerful system: a thick ink line around everything, a solid shadow you could cut out with scissors, flat sweet colours and corners just rounded enough to be friendly. Pressing a button pushes it down onto its shadow. - Family: Bold · Origin: Italy · Naples · License: MIAN License (free to use) - Traits: brutal, playful, bold, cheerful, loud, pastel, honest, indie · intensity 4/5 · contrast high · density default. Good for: indie products, creator tools, creative agencies, education, communities, landing pages, events. Less for: finance, healthcare, luxury, dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/maccheroni.css - Page: https://mian.ro/noodles/maccheroni ## Design philosophy Maccheroni is blunt and cheerful. Everything has a 2px ink outline and a solid shadow offset 4px down and right, like shapes cut from coloured paper and stuck on a cream page. Colours are flat and sweet (butter yellow, mint, pink) and always carry ink text. A button rises a pixel when you point at it and drops onto its shadow when you press it. Nothing is subtle, so it needs space and few elements. ## Principles - Ink outline on everything: 2px, the same colour as the text. - Solid shadows, no blur: 2px for small things, 4px for controls and cards, 7px for overlays. - Flat sweet fills with ink text. No gradients, no transparency. - Press is physical: translate onto the shadow and remove it. - Friendly corners: 8px and 12px, never zero, never pills for buttons. ## The language - **Shape.** 8px fields and buttons, 12px cards, 6px badges; tabs are outlined folders that fill when chosen. - **Surface.** Cream page, white surfaces, butter-yellow second surface. Nested cards lose the shadow. - **Colour.** Yellow primary, mint secondary, pink accent, all with #111 text. Dark mode keeps the same fills and turns the ink line cream. - **Type.** A grotesk at 800 for headings, 700 for controls and labels. - **Motion.** maccheroni-in: slides 4px from the top left in 160ms. Hover moves −1px, press moves +4px, both in 100ms. - **Data.** Outlined bars filled mint with the highlighted bar yellow; a 3px ink line with visible points. ## Colour, type and brand - **Primary** #ffd23f: yellow and gold (mid, saturated). Optimism, attention, caution. Gold tones add value and ceremony. - **Accent** #ff8fab: red (pale, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #fffdf5: white and paper (pale, saturated). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Yellow and gold with red: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** One voice throughout: grotesque sans. Headings are heavy, which reads as loud and direct. Confident, graphic, European. A poster voice with a little warmth and irregularity. - **Reads as** brutal, playful, bold, cheerful, loud (brand dimension: excitement). - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "maccheroni"). ## Inspired by the noodle - The shape a child draws → a 2px ink outline around every element - Short, sturdy elbows → solid offset shadows with no blur, like paper cut-outs - Baked with cheese → butter yellow, mint and pink, flat, on cream - Eaten with a spoon → big, obvious controls that move down onto their shadow when pressed ## Designing new components in Maccheroni Build new components from `--mn-*` tokens, scoped with `[data-noodle="maccheroni"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Border: 2px solid var(--mn-border). Shadow: 4px 4px 0 var(--mn-border). Radius 12px. - Fill with var(--mn-surface), or one of the three sweets (--mn-primary, --mn-secondary, --mn-accent) with var(--mn-fg) text. - Hover: translate(-1px,-1px) and a 5px shadow. Active: translate(4px,4px) and no shadow. - Selected: fill with var(--mn-primary); keep the outline. - Inside a card, drop the shadow and keep only the outline. - Remove the transforms under prefers-reduced-motion. Avoid: - Soft or blurred shadows - Gradients and glass - Grey outlines - Pill-shaped buttons - Dense tables of small text Recipe: a selectable tile in this language: ```css [data-noodle="maccheroni"] .tile { padding: 16px; border: 2px solid var(--mn-border); border-radius: 12px; background: var(--mn-surface); color: var(--mn-fg); box-shadow: 4px 4px 0 var(--mn-border); transition: transform 100ms cubic-bezier(.2, 0, 0, 1), box-shadow 100ms; } [data-noodle="maccheroni"] .tile:hover { transform: translate(-1px, -1px); box-shadow: 5px 5px 0 var(--mn-border); } [data-noodle="maccheroni"] .tile:active { transform: translate(4px, 4px); box-shadow: none; } [data-noodle="maccheroni"] .tile[aria-selected="true"] { background: var(--mn-primary); color: var(--mn-primary-fg); } @media (prefers-reduced-motion: reduce) { [data-noodle="maccheroni"] .tile { transition: none; transform: none; } } ``` ## Tokens - Fonts: "Helvetica Neue", Helvetica, "Nimbus Sans", Arial, ui-sans-serif, system-ui, sans-serif - Heading font: "Helvetica Neue", Helvetica, "Nimbus Sans", Arial, ui-sans-serif, system-ui, sans-serif - Radius: field 8px, box 12px, badge 6px - Density: default · Shadows: hard | token | light | dark | |---|---|---| | bg | #fffdf5 | #121212 | | surface | #ffffff | #1c1c1c | | surface2 | #fff3c4 | #2a2616 | | fg | #111111 | #fffdf5 | | muted | #4a4a4a | #b8b5a8 | | border | #111111 | #fffdf5 | | input | #111111 | #fffdf5 | | primary | #ffd23f | #ffd23f | | primaryFg | #111111 | #111111 | | secondary | #90e0c9 | #90e0c9 | | secondaryFg | #111111 | #111111 | | accent | #ff8fab | #ff8fab | | accentFg | #111111 | #111111 | | ring | #111111 | #ffd23f | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #836e27 | #ffd23f | | secondaryText | #50786d | #90e0c9 | | accentText | #9b5a6a | #ff8fab | | successText | #15793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c82424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #836e27 | #ffd23f | --- # Rigatoni: a MIAN design language Ridged tubes. Poster stripes. Rigatoni are wide tubes with ridges down their length, made to hold a heavy sauce. Rigatoni is a ridged poster system: condensed heavy type, parallel stripes as the texture of rules, focus and progress, flat cream paper and one paprika orange. - Family: Bold · Origin: Italy · Rome · License: MIAN License (free to use) - Traits: bold, ridged, poster, confident, industrial, european, energetic · intensity 4/5 · contrast high · density default. Good for: creative agencies, studios, campaigns, restaurants, events, sport. Less for: healthcare, quiet luxury, dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/rigatoni.css - Page: https://mian.ro/noodles/rigatoni ## Design philosophy Rigatoni is a ridged poster: heavy condensed type carries the page, and parallel ridges are the one texture, on rules, the chosen tab, progress and the highlighted bar. Cream paper, ink and one paprika orange. Loud through structure and weight, never through effects. ## Principles - Ridges are the signature: stripes appear on rules, chosen states and data, nowhere decorative. - Type carries the page: headings at 900, tight, flush left; one idea shouted clearly. - Outline until chosen: broad outlined controls fill solid ink when selected. - One orange per view: focus, the key action or the key number. ## The language - **Shape.** 3–4px corners, broad 2px outlines, square switches. - **Surface.** Cream paper; cards are outlined, never shadowed; a ridged 6px rule tops sections and cards. - **Colour.** Ink black, cream, paprika orange (#c2410c) used once per view. - **Type.** Heavy grotesk at 900 for headings with tight tracking; 700 uppercase labels. - **Motion.** rigatoni-in: a short rise in 150ms; hovers slide the ridge pattern. - **Data.** Columns in ink; the highlighted column is ridged orange; 3px lines. ## Colour, type and brand - **Primary** #17130e: brown and terracotta (deep, muted). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #c2410c: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f4efe4: brown and terracotta (pale). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** Two tones of brown and terracotta: harmonious and calm, with little contrast between brand and accent. The page is warm. - **Type.** One voice throughout: grotesque sans. Headings are heavy, which reads as loud and direct. Confident, graphic, European. A poster voice with a little warmth and irregularity. - **Reads as** bold, ridged, poster, confident, industrial (brand dimension: excitement). - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "rigatoni"). ## Inspired by the noodle - Ridges down the tube → repeating stripes on rules, active tabs, progress and the chosen bar - Wide and hollow → broad outlined controls that fill solid when chosen - Carbonara or amatriciana → cream paper, ink black and a paprika orange - Holds the sauce → strong, weighty type at 900 that carries a page on its own ## Designing new components in Rigatoni Build new components from `--mn-*` tokens, scoped with `[data-noodle="rigatoni"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Rules: height 6px; background: repeating-linear-gradient(90deg, var(--mn-fg) 0 3px, transparent 3px 7px). - Controls: 2px solid var(--mn-fg) outlines; chosen = solid var(--mn-fg) fill with var(--mn-bg) text. - Headings: font-weight 900; letter-spacing -.04em; line-height .95. - Use var(--mn-accent) for one element per view. Avoid: - Soft shadows or blur - Rounded pills - More than one accent - Stripes as background decoration behind text Recipe: a selectable tile in this language: ```css [data-noodle="rigatoni"] .tile { padding: 14px; border: 2px solid var(--mn-fg); border-radius: 4px; background: var(--mn-surface); font-weight: 800; } [data-noodle="rigatoni"] .tile[aria-selected="true"] { background: var(--mn-fg); color: var(--mn-bg); box-shadow: inset 0 -6px 0 var(--mn-accent); } ``` ## Tokens - Fonts: "Helvetica Neue", Helvetica, "Nimbus Sans", Arial, ui-sans-serif, system-ui, sans-serif - Heading font: "Helvetica Neue", Helvetica, "Nimbus Sans", Arial, ui-sans-serif, system-ui, sans-serif - Radius: field 3px, box 4px, badge 3px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #f4efe4 | #120f0b | | surface | #fbf8f1 | #1b1712 | | surface2 | #ebe3d2 | #262019 | | fg | #17130e | #f4efe4 | | muted | #5a5145 | #b3a893 | | border | #d9cfbb | #3a3228 | | input | #b8ab93 | #5a4f40 | | primary | #17130e | #f4efe4 | | primaryFg | #f4efe4 | #17130e | | secondary | #ebe3d2 | #262019 | | secondaryFg | #17130e | #f4efe4 | | accent | #c2410c | #fb8a4c | | accentFg | #ffffff | #1d0a00 | | ring | #c2410c | #fb8a4c | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #17130e | #f4efe4 | | secondaryText | #706a60 | #89837a | | accentText | #b13c0c | #fb8a4c | | successText | #157538 | #4ade80 | | warningText | #a44d0a | #fbbf24 | | dangerText | #c02323 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #17130e | #f4efe4 | --- # Fusilli: a MIAN design language Twisted, springy, a little off-axis. Fusilli are strands wound around a thin rod into springs. Fusilli is an expressive system for creative work: italic heavy headings, surfaces that tilt a degree on hover, spiral spinners, a springy overshoot on every press, basil green with a tomato accent. - Family: Bold · Origin: Italy · Campania · License: MIAN License (free to use) - Traits: expressive, playful, energetic, unusual, springy, creative · intensity 4/5 · contrast medium · density default. Good for: creative agencies, studios, portfolios, startups, communities, product launches. Less for: finance, legal, healthcare, dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/fusilli.css - Page: https://mian.ro/noodles/fusilli ## Design philosophy Fusilli is springy and a little off-axis, made for creative studios and people who want a page to feel alive without being noisy. Italic heavy headings lean forward, surfaces tilt one degree when pointed at, presses overshoot and settle, and a spiral spins while things load. Violet ink with a basil-green accent. ## Principles - Lean forward: headings are italic and heavy; motion moves forward and up. - Spring, then settle: every press overshoots slightly and returns; nothing jitters. - One tilt at a time: only the element under the pointer leans, by one degree. - Colour with intent: violet for action, green only for what is new or done. ## The language - **Shape.** 14px fields, 20px surfaces, pill badges and chips. - **Surface.** White with soft green-tinted shadows; tiles tilt 1° on hover. - **Colour.** Violet primary (#5b2bd9), basil green accent, lavender tints. - **Type.** Clean sans at 800, italic for display and titles. - **Motion.** fusilli-in: a twisting rise; presses use an overshooting spring. - **Data.** Rounded columns, basil-green highlight, spiral spinner. ## Colour, type and brand - **Primary** #1f6b34: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Accent** #b8361d: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #fbfaf5: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Green with red: a contrasting pair that needs one of the two to dominate. The page 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. - **Reads as** expressive, playful, energetic, unusual, springy. - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "fusilli"). ## Inspired by the noodle - Wound around a rod → italic, forward-leaning headings and a spiral spinner - Springs → overshooting motion; pressed controls bounce back - Never quite straight → cards and tiles lean one degree when you point at them - Tossed with pesto and tomato → basil green with a tomato-red accent ## Designing new components in Fusilli Build new components from `--mn-*` tokens, scoped with `[data-noodle="fusilli"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Hover: transform: rotate(-1deg) translateY(-2px) with var(--mn-spring). - Headings: font-style: italic; font-weight: 800; letter-spacing -.03em. - Surfaces: border-radius var(--mn-radius-box); box-shadow: 0 10px 30px color-mix(in srgb, var(--mn-primary) 14%, transparent). - Use the accent only for new/done states. Avoid: - Tilting several things at once - Rotation on text blocks people read - Hard black shadows - Constant looping animation Recipe: a selectable tile in this language: ```css [data-noodle="fusilli"] .tile { padding: 16px; border-radius: 20px; background: var(--mn-surface); box-shadow: 0 8px 24px color-mix(in srgb, var(--mn-primary) 12%, transparent); transition: transform 320ms var(--mn-spring); } [data-noodle="fusilli"] .tile:hover { transform: rotate(-1deg) translateY(-2px); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Radius: field 14px, box 20px, badge 999px - Density: default · Shadows: soft | token | light | dark | |---|---|---| | bg | #fbfaf5 | #0d120c | | surface | #ffffff | #141b12 | | surface2 | #eef2e6 | #1d271a | | fg | #141a12 | #f0f5ea | | muted | #565e50 | #a6b29c | | border | #e2e6d8 | #2a3626 | | input | #c3cab6 | #43523d | | primary | #1f6b34 | #8fdc6a | | primaryFg | #ffffff | #0d2204 | | secondary | #e2efd9 | #22331c | | secondaryFg | #14401f | #e6f5dc | | accent | #b8361d | #ff8a6b | | accentFg | #ffffff | #2a0a02 | | ring | #1f6b34 | #8fdc6a | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1f6b34 | #8fdc6a | | secondaryText | #6b7366 | #7d8877 | | accentText | #b8361d | #ff8a6b | | successText | #15783a | #4ade80 | | warningText | #a74e0a | #fbbf24 | | dangerText | #c82524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1f6b34 | #8fdc6a | --- # Jjajang: a MIAN design language Glossy black, bold and rich. Jjajangmyeon comes under a thick, glossy black-bean sauce with diced onion and a crisp tangle of cucumber on top. Jjajang is a bold, lacquered-black system: heavy glossy black surfaces with a wet highlight, bright cucumber-green and onion-cream accents, and rich, heavy type. - Family: Bold · Origin: Korea · License: MIAN License (free to use) - Traits: glossy, rich, dark, bold, premium · intensity 4/5 · contrast high · density comfortable. Good for: nightlife, music, gaming, premium brands. Less for: public services, children. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/jjajang.css - Page: https://mian.ro/noodles/jjajang ## Design philosophy Jjajang is glossy black sauce. The noodles are coated in a thick, shining black-bean sauce and topped with crisp cucumber, so the interface is bold and filled: heavy glossy black controls with a wet highlight across the top, cucumber-green accents, onion-cream text on black, rich heavy type and generous round shapes. ## Principles - Filled, not outlined: selected and primary things are glossy black (--jj-sauce with --jj-gloss). - Wet highlight: a bright band across the top half of black fills (--jj-wet). - Cucumber green for focus, on-states and highlights. - Heavy, rounded, generous: 800–900 type, 14–20px radii, comfortable density. ## The language - **Shape.** 14px fields, 20px panels, pills for badges and tabs. - **Surface.** Warm white with deep soft shadows; black glossy fills for emphasis. - **Colour.** Sauce black primary, cucumber green accent, onion cream on black. - **Type.** Sans at 800–900. - **Motion.** jjajang-in: rise with a light overshoot, 300ms; hover brightens the gloss. - **Data.** Glossy black bars with a green highlight; thick lines. ## Colour, type and brand - **Primary** #15110d: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #3f7d1f: green (mid). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #f6f3ee: brown and terracotta (pale, muted). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** A neutral primary with one green accent: the accent means “look here” precisely because nothing else is coloured. The page 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. - **Reads as** glossy, rich, dark, bold, premium. - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "jjajang"). ## Inspired by the noodle - A thick, glossy black sauce → deep black fills with a wet highlight across the top - Stirred through until every strand is coated → bold filled controls rather than outlines - Cucumber on top → a crisp green accent; diced onion → warm cream text on black - Rich and heavy → large, heavy type and generous, rounded shapes ## Designing new components in Jjajang Build new components from `--mn-*` tokens, scoped with `[data-noodle="jjajang"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Emphasis = background: var(--jj-sauce) var(--jj-gloss); color: #f6f0e6; box-shadow: var(--jj-wet). - Use var(--mn-accent) (cucumber) for the single focus or on-state. - Round and heavy: radius ≥14px, weight ≥750. Avoid: - Thin outlines as the main style - Pale pastels - Light type weights Recipe: a selectable tile in this language: ```css [data-noodle="jjajang"] .tile { padding: 14px 18px; border: 0; border-radius: 20px; background: var(--mn-surface-2); font-weight: 750; } [data-noodle="jjajang"] .tile[aria-selected="true"] { background: var(--jj-sauce) var(--jj-gloss); color: #f6f0e6; box-shadow: var(--jj-wet); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 14px, box 20px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #f6f3ee | #050403 | | surface | #ffffff | #110e0b | | surface2 | #ebe6de | #1c1814 | | fg | #15110d | #f6f0e6 | | muted | #5f554a | #ac9f8e | | border | #ddd5ca | #2c2620 | | input | #bcb0a1 | #4a4138 | | primary | #15110d | #f6f0e6 | | primaryFg | #f6f3ee | #110e0b | | secondary | #ebe6de | #1c1814 | | secondaryFg | #15110d | #f6f0e6 | | accent | #3f7d1f | #9bdc62 | | accentFg | #ffffff | #132503 | | ring | #3f7d1f | #9bdc62 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #15110d | #f6f0e6 | | secondaryText | #736f69 | #807b75 | | accentText | #3c771e | #9bdc62 | | successText | #15793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c82424 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #15110d | #f6f0e6 | --- # Laksa: a MIAN design language Spicy, creamy, layered colour. Curry laksa is rice noodles in a rich coconut-curry broth, red with chilli oil, topped with tofu puffs, lime and laksa leaf. Laksa is a bold colour system: saturated sambal red over coconut cream, thick coloured rings and bands, and a bubbling pulse of motion. - Family: Bold · Origin: Malaysia · Singapore · License: MIAN License (free to use) - Traits: spicy, warm, colourful, layered, vibrant · intensity 4/5 · contrast medium · density comfortable. Good for: food, festivals, travel, culture. Less for: enterprise, legal. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/laksa.css - Page: https://mian.ro/noodles/laksa ## Design philosophy Laksa is layered colour. Chilli oil floats in a red layer over creamy coconut broth, so the interface is bold and saturated: sambal red over coconut cream in thick bands, thick coloured rings instead of thin borders, full round shapes, laksa-leaf and lime accents, and a bubbling pulse as things arrive. ## Principles - Thick rings (3px inset box-shadows) replace thin borders. - Layers: a band of chilli red floats on top of cream surfaces (inset top band plus --lk-oil). - Saturated and warm: red, turmeric, leaf green, cream. - Round and plump with a bubbling spring (laksa-in, laksa-bubble). ## The language - **Shape.** 14px fields, 22px panels, pill buttons with a 4px darker base edge. - **Surface.** Coconut cream with a red band on top and warm coloured shadows. - **Colour.** Sambal red primary, laksa-leaf green accent, turmeric and chilli series. - **Type.** Rounded body, heavy (850) headings. - **Motion.** laksa-in: pop with overshoot 360ms; checkboxes bubble; the spinner is a rising ripple. - **Data.** Round saturated bars in four broth colours, thick lines and a thick donut. ## Colour, type and brand - **Primary** #be3a10: red (mid, saturated). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #3f6212: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #fff5e8: orange (pale, saturated). Warmth, friendliness, appetite, affordability. Active like red, without the alarm. - **Scheme.** Red with green: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** Two voices: neutral sans for headings, rounded sans for the interface. Headings are heavy, which reads as loud and direct. Clear, modern, impartial. The voice of software and signage. - **Reads as** spicy, warm, colourful, layered, vibrant (brand dimension: excitement). - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "laksa"). ## Inspired by the noodle - Chilli oil floating on coconut broth → saturated red-orange over warm cream, layered in thick bands - Rich and creamy → full, rounded shapes with thick coloured rings instead of borders - Laksa leaf and lime → herb green and lime as accents - A simmering pot → components bubble in with a soft pulse ## Designing new components in Laksa Build new components from `--mn-*` tokens, scoped with `[data-noodle="laksa"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Outline with box-shadow: inset 0 0 0 3px (colour at 30–45%) instead of border. - Put a 5px inset top band of var(--mn-primary) on panels. - Buttons: 999px radius, 4px darker bottom edge, lift on hover. Avoid: - 1px hairlines - Cold neutrals - Flat, unlayered surfaces Recipe: a selectable tile in this language: ```css [data-noodle="laksa"] .tile { padding: 16px 18px; border: 0; border-radius: 22px; background: var(--mn-surface); box-shadow: inset 0 5px 0 var(--mn-primary), inset 0 0 0 3px var(--mn-border); } [data-noodle="laksa"] .tile[aria-selected="true"] { box-shadow: inset 0 0 0 3px var(--mn-primary), 0 0 0 3px color-mix(in oklab, var(--mn-primary) 22%, transparent); } ``` ## Tokens - Fonts: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 14px, box 22px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #fff5e8 | #170b06 | | surface | #fffcf6 | #22120a | | surface2 | #fbe6cd | #2f1a0f | | fg | #2a120a | #fdebdc | | muted | #6e4a36 | #c9a58c | | border | #f2d6b6 | #45281a | | input | #dfb58b | #654030 | | primary | #be3a10 | #ff8a5b | | primaryFg | #ffffff | #2a0d03 | | secondary | #fbe6cd | #2f1a0f | | secondaryFg | #2a120a | #fdebdc | | accent | #3f6212 | #b5e36b | | accentFg | #ffffff | #172603 | | ring | #be3a10 | #ff8a5b | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #b83810 | #ff8a5b | | secondaryText | #826b5c | #927e71 | | accentText | #3f6212 | #b5e36b | | successText | #177739 | #4ade80 | | warningText | #a64d09 | #fbbf24 | | dangerText | #c32322 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #be3a10 | #ff8a5b | --- # Soba: a MIAN design language Earthy, editorial, restrained. Buckwheat neutrals with serif headings and small radii. Flat: borders instead of shadows. For publications, docs and calm tools. - Family: Elegant · Origin: Japan · License: MIAN License (free to use) - Traits: editorial, earthy, restrained, literary, calm · intensity 1/5 · contrast medium · density default. Good for: publications, documentation, law, research, calm tools. Less for: games, campaigns. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/soba.css - Page: https://mian.ro/noodles/soba ## Design philosophy Soba is buckwheat: grey-brown, speckled, cut straight with a knife and served on a slatted bamboo zaru. The language is editorial and restrained: square corners, serif headings, a faint speckle in the paper, slatted stripes in tables, progress and charts, and its motion is calm and ceremonial. ## Principles - Square and straight: corners of 4–6px at most, strict alignments. - The zaru pattern: repeating vertical slats mark progress, stripes and charts. - Speckle, not shine: a fine buckwheat texture on surfaces instead of gradients. - Serif for headings, sans for reading; restrained earth colours. - Unhurried: things unroll into place over 260ms without bounce. ## The language - **Shape.** 4px fields, 6px containers; radios become diamonds; segmented indicators. - **Surface.** Warm paper with the speckle texture, 1px borders, no shadows. - **Colour.** Buckwheat taupe primary, roasted brown accent, stone neutrals. - **Type.** Serif headings, small-caps style uppercase labels. - **Motion.** soba-unroll: reveal from the top edge, 260ms, cubic-bezier(.4,0,.2,1). - **Data.** Bars cut into slats, striped progress, tables with slatted headers. ## Colour, type and brand - **Primary** #3f3a33: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #7c5a2e: brown and terracotta (mid). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f7f6f3: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one brown and terracotta accent: the accent means “look here” precisely because nothing else is coloured. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are semibold, which reads as confident without shouting. Considered, literate, established. The voice of books and long reading. - **Reads as** editorial, earthy, restrained, literary, calm (brand dimension: sophistication). - **Tone of voice.** Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "soba"). ## Inspired by the noodle - Buckwheat speckle → a fine speckled texture on surfaces - Served on a bamboo zaru → slatted stripes in tables, progress and charts - Cut straight with a knife → square corners and segmented indicators - Dipping ritual → calm, measured motion that settles without bounce ## Designing new components in Soba Build new components from `--mn-*` tokens, scoped with `[data-noodle="soba"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Use var(--s-speckle) as a background-image on new surfaces and var(--s-slats) for anything that measures or fills. - Keep corners square (≤6px) and use the serif heading font for titles. - Selected = a solid taupe fill or a 2px straight underline. Avoid: - Rounded pills - Glossy gradients - Bright saturated colours - Springy motion Recipe: a selectable tile in this language: ```css [data-noodle="soba"] .tile { padding: 12px 14px; border: 1px solid var(--mn-border); border-radius: 4px; background: var(--mn-surface) var(--s-speckle); } [data-noodle="soba"] .tile[aria-selected="true"] { background-image: var(--s-slats); border-color: var(--mn-fg); } [data-noodle="soba"] .tile h3 { font-family: var(--mn-font-heading); font-weight: 600; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-serif, "New York", "Iowan Old Style", "Palatino Linotype", Georgia, serif - Radius: field 4px, box 6px, badge 4px - Density: default · Shadows: none | token | light | dark | |---|---|---| | bg | #f7f6f3 | #161513 | | surface | #ffffff | #1d1c19 | | surface2 | #eeece6 | #282622 | | fg | #1f1d1a | #eeebe4 | | muted | #66615a | #a39d91 | | border | #e0ddd5 | #33302b | | input | #cdc8bc | #48443c | | primary | #3f3a33 | #eeebe4 | | primaryFg | #faf9f6 | #1d1c19 | | secondary | #eeece6 | #282622 | | secondaryFg | #1f1d1a | #eeebe4 | | accent | #7c5a2e | #d4a466 | | accentFg | #ffffff | #1d1407 | | ring | #7c5a2e | #d4a466 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #3f3a33 | #eeebe4 | | secondaryText | #72706c | #87857f | | accentText | #7c5a2e | #d4a466 | | successText | #16783a | #4ade80 | | warningText | #a84f0a | #fbbf24 | | dangerText | #c52525 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #3f3a33 | #eeebe4 | --- # Tagliatelle: a MIAN design language Egg ribbons, cut by hand. Editorial. Tagliatelle are ribbons of egg pasta, rolled thin and cut by hand; Bologna keeps a golden reference ribbon in its chamber of commerce. Tagliatelle is an editorial system: Garamond headings, generous measures, ribbon underlines in egg-yolk gold, paper surfaces and hairline rules. - Family: Elegant · Origin: Italy · Bologna · License: MIAN License (free to use) - Traits: editorial, elegant, literary, warm, refined, italian, european · intensity 2/5 · contrast medium · density comfortable. Good for: publications, magazines, studios, hospitality, fine dining, cultural sites, online courses. Less for: dense admin, games. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/tagliatelle.css - Page: https://mian.ro/noodles/tagliatelle ## Design philosophy Tagliatelle is an editorial system: a literary Garamond over a clean body face, classic measures, hairline rules, and a single egg-yolk ribbon that marks what is chosen or important. It reads like a well-made magazine and runs like a calm product. ## Principles - The ribbon marks the choice: a gold underline or band for selected, focused and important. - Measure before decoration: text columns near 65 characters; space instead of boxes. - Hairlines, not borders: 1px rules separate; surfaces are paper. - Serif for voice, sans for work: Garamond for headings, a clean sans for controls. ## The language - **Shape.** 2–4px corners; fields are underlines; the chosen tab is a ribbon. - **Surface.** Warm paper, no shadows; 1px hairlines between sections and rows. - **Colour.** Ink brown-black, paper, yolk gold (#9a6400) used as the ribbon. - **Type.** Garamond headings at 500, generous size; clean sans body. - **Motion.** tagliatelle-in: a slow fade-up in 260ms; ribbons slide under tabs. - **Data.** Thin ink columns, the highlighted one gold; hairline axes. ## Colour, type and brand - **Primary** #2a2118: brown and terracotta (deep, muted). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #9a6400: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #fbf7ef: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Two tones of brown and terracotta: harmonious and calm, with little contrast between brand and accent. The page is warm. - **Type.** Two voices: garalde serif (garamond family) for headings, neutral sans for the interface. Headings are medium, which reads as calm and assured. Classical, humane, quietly elegant. Five centuries of book typography. - **Reads as** editorial, elegant, literary, warm, refined (brand dimension: sophistication). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "tagliatelle"). ## Inspired by the noodle - Ribbons of egg dough → ribbon underlines and ribbon-shaped chosen states in yolk gold - Rolled thin with a pin → hairline rules and thin, calm controls - A reference ribbon kept in Bologna → exact proportions: classic measure, typographic scale - Served on a paper menu → warm paper surfaces and a literary serif ## Designing new components in Tagliatelle Build new components from `--mn-*` tokens, scoped with `[data-noodle="tagliatelle"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Selected: box-shadow: inset 0 -3px 0 var(--mn-accent) (the ribbon). - Headings: font-family var(--mn-font-heading); font-weight 500; letter-spacing -.01em. - Separate with border-top: 1px solid var(--mn-border); no card backgrounds for text. Avoid: - Heavy shadows - Pills and bubbly shapes - More than one gold element per view - Serif for small UI labels Recipe: a selectable tile in this language: ```css [data-noodle="tagliatelle"] .tile { padding: 14px 0; border-top: 1px solid var(--mn-border); font-family: var(--mn-font-heading); font-size: 1.15rem; } [data-noodle="tagliatelle"] .tile[aria-selected="true"] { box-shadow: inset 0 -3px 0 var(--mn-accent); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Text", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif - Heading font: "EB Garamond", Garamond, "Adobe Garamond Pro", "Cormorant Garamond", "Iowan Old Style", ui-serif, Georgia, serif - Radius: field 2px, box 4px, badge 2px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #fbf7ef | #14110c | | surface | #fffcf6 | #1c1812 | | surface2 | #f2eadb | #27211a | | fg | #1f1a14 | #f6efe2 | | muted | #5e5446 | #b8ab95 | | border | #e6dcc8 | #3a3226 | | input | #cbbd9f | #5b4e3c | | primary | #2a2118 | #f6efe2 | | primaryFg | #fbf7ef | #1f1a14 | | secondary | #f2eadb | #27211a | | secondaryFg | #1f1a14 | #f6efe2 | | accent | #9a6400 | #f2b84b | | accentFg | #ffffff | #2a1a00 | | ring | #9a6400 | #f2b84b | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #2a2118 | #f6efe2 | | secondaryText | #787168 | #8a847a | | accentText | #905e02 | #f2b84b | | successText | #16783a | #4ade80 | | warningText | #a84e0a | #fbbf24 | | dangerText | #c52524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #2a2118 | #f6efe2 | --- # Tajarin: a MIAN design language Forty yolks and shaved truffle. Tajarin are Piedmont’s hair-thin egg noodles, made with up to forty yolks per kilo, served in autumn under shaved white truffle. Tajarin is a luxury system: black and ivory, Garamond headlines, tiny tracked capitals, sharp corners, hairlines and one gold yolk accent, with a lot of silence around everything. - Family: Elegant · Origin: Italy · Piedmont · License: MIAN License (free to use) - Traits: luxury, refined, golden, italian, exclusive, elegant · intensity 2/5 · contrast medium · density comfortable. Good for: luxury, hospitality, fine dining, fashion, wine. Less for: dense admin, children. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/tajarin.css - Page: https://mian.ro/noodles/tajarin ## Design philosophy Tajarin is quiet luxury. Hair-thin egg noodles made with forty yolks and served under shaved white truffle become black and ivory at full contrast, Garamond headlines, tiny tracked capitals for every label and button, sharp corners, 1px hairlines, one yolk-gold signature, and a great deal of silence around everything. ## Principles - Capitals for the interface: labels, buttons, tabs, badges and table heads are 11px uppercase with .18em tracking. - Garamond for content: headlines, titles and numbers at 400. - Hairlines only: 1px borders and underlines; no shadows, no radius. - Gold is a signature: the focus underline, the active tab line, a switch knob, one chart column. ## The language - **Shape.** 0px radius everywhere; fields are a single hairline. - **Surface.** Ivory and black; hairline frames; nothing floats. - **Colour.** Black (#0d0d0c), ivory (#faf8f3), yolk gold (#8a6508 / #e3b547). - **Type.** Garamond headlines, tracked small capitals for UI. - **Motion.** tajarin-in: a plain 480ms fade; hovers darken slowly; nothing bounces. - **Data.** Narrow columns at 40% width, hairline lines without points, an 8% donut. ## Colour, type and brand - **Primary** #0d0d0c: black and ink (deep, muted). Authority, precision, luxury. It makes everything next to it look more deliberate. - **Accent** #8a6508: olive (deep, saturated). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #faf8f3: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** A neutral primary with one olive accent: the accent means “look here” precisely because nothing else is coloured. The page is warm. - **Type.** Two voices: garalde serif (garamond family) for headings, neutral sans for the interface. Headings are light to regular, which reads as delicate and unhurried. Classical, humane, quietly elegant. Five centuries of book typography. - **Reads as** luxury, refined, golden, italian, exclusive (brand dimension: sophistication). - **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. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "tajarin"). ## Inspired by the noodle - Forty yolks → one deep yolk-gold accent, used like a signature - Shaved truffle → black and ivory at high contrast, nothing in between - Cut by hand, hair-thin → sharp corners and 1px hairlines - An autumn dinner → Garamond headlines, tracked small capitals and slow, quiet fades ## Designing new components in Tajarin Build new components from `--mn-*` tokens, scoped with `[data-noodle="tajarin"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - font: 500 .6875rem/1 var(--mn-font); letter-spacing: .18em; text-transform: uppercase for every control label. - border: 1px solid var(--mn-fg) (frames) or border-bottom only (fields); border-radius: 0. - Emphasis with a 1px gold line (var(--mn-accent)), not a fill. Avoid: - Rounded corners and shadows - Colour beyond black, ivory and gold - Bold weights Recipe: a selectable tile in this language: ```css [data-noodle="tajarin"] .tile { padding: 18px 20px; border: 1px solid var(--mn-border); border-radius: 0; background: var(--mn-surface); font: 500 .6875rem/1 var(--mn-font); letter-spacing: .18em; text-transform: uppercase; } [data-noodle="tajarin"] .tile[aria-selected="true"] { border-color: var(--mn-fg); box-shadow: inset 0 -1px 0 var(--mn-accent); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: "EB Garamond", Garamond, "Adobe Garamond Pro", "Cormorant Garamond", "Iowan Old Style", ui-serif, Georgia, serif - Radius: field 0px, box 0px, badge 0px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #faf8f3 | #080807 | | surface | #ffffff | #10100e | | surface2 | #f1eee6 | #191816 | | fg | #0d0d0c | #f3efe4 | | muted | #5d5b55 | #a8a395 | | border | #e5e1d7 | #262521 | | input | #b9b4a7 | #4a4740 | | primary | #0d0d0c | #f3efe4 | | primaryFg | #faf8f3 | #0d0d0c | | secondary | #f1eee6 | #191816 | | secondaryFg | #0d0d0c | #f3efe4 | | accent | #8a6508 | #e3b547 | | accentFg | #ffffff | #221700 | | ring | #0d0d0c | #e3b547 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #0d0d0c | #f3efe4 | | secondaryText | #71706c | #827f79 | | accentText | #886308 | #e3b547 | | successText | #15793a | #4ade80 | | warningText | #aa4f09 | #fbbf24 | | dangerText | #c72423 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0d0d0c | #f3efe4 | --- # Mafaldine: a MIAN design language Royal ribbons with ruffled edges. Mafaldine are long ribbons with ruffled edges, named in 1902 for Princess Mafalda of Savoy. Mafaldine is a regal system: Didone italics, wavy ruffled underlines and dividers, scalloped badges, deep burgundy and antique gold on cream, and slow, courtly motion. - Family: Elegant · Origin: Italy · Naples · License: MIAN License (free to use) - Traits: regal, ornate, romantic, elegant, expressive · intensity 3/5 · contrast medium · density comfortable. Good for: weddings, culture, fashion, perfume, theatre. Less for: developer tools, finance. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/mafaldine.css - Page: https://mian.ro/noodles/mafaldine ## Design philosophy Mafaldine is regal. Long ribbons with ruffled edges, named for a princess, become Didone italics, wavy ruffled underlines and dividers, scalloped badges, a fine gold rule inside every card, burgundy and antique gold on cream, generous margins and slow, courtly motion that settles. ## Principles - Ruffle the edges that matter: the selected tab, dividers and card footers use the wave mask (--mf-wave-mask). - Italic Didone for every title, table head, tab and step number. - Gold is jewellery: a 1px inner rule, a bead on the switch, a ring round avatars, never a fill. - Slow, settling motion (240–420ms). ## The language - **Shape.** 4px controls, 6px containers; arched chart columns; scalloped badge bottoms. - **Surface.** Cream paper with a fine gold rule inset 4px from the edge. - **Colour.** Burgundy (#6d1a2b), antique gold (#846020), cream. - **Type.** Didone italic for headings; book serif for text. - **Motion.** mafaldine-in: a 6px rise while the tracking settles, 420ms. - **Data.** Arched columns with a gold edge; burgundy highlight; a slim 16% donut. ## Colour, type and brand - **Primary** #6d1a2b: red (deep). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #846020: brown and terracotta (mid). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #fbf7ef: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Red with brown and terracotta: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** Two voices: didone serif (high contrast) for headings, book serif (old-style and transitional) for the interface. Headings are light to regular, which reads as delicate and unhurried. Fashion, luxury, ceremony. Thick and hair-thin strokes signal expense. - **Reads as** regal, ornate, romantic, elegant, expressive. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "mafaldine"). ## Inspired by the noodle - Ruffled edges → wavy underlines, wavy dividers and scalloped badge edges - Named for a princess → Didone display type in italic, burgundy and antique gold - A long ribbon → long horizontal rhythm with generous margins - A court, not a kitchen → slow, graceful motion that settles ## Designing new components in Mafaldine Build new components from `--mn-*` tokens, scoped with `[data-noodle="mafaldine"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - font-family: var(--mn-font-heading); font-style: italic; font-weight: 400 for titles. - Inner gold rule: box-shadow: inset 0 0 0 4px var(--mn-surface), inset 0 0 0 5px color-mix(in oklab, var(--mn-accent) 35%, transparent). - Ruffle: background: currentColor; mask: var(--mf-wave-mask) 0 50% / 16px 6px repeat-x; height: 6px. Avoid: - Bold sans-serif - Flat, saturated colour - Fast or springy motion Recipe: a selectable tile in this language: ```css [data-noodle="mafaldine"] .tile { padding: 14px 18px; border: 1px solid var(--mn-border); border-radius: 6px; background: var(--mn-surface); box-shadow: inset 0 0 0 4px var(--mn-surface), inset 0 0 0 5px color-mix(in oklab, var(--mn-accent) 35%, transparent); font-family: var(--mn-font-heading); font-style: italic; } [data-noodle="mafaldine"] .tile[aria-selected="true"] { background: var(--mn-primary); color: var(--mn-primary-fg); } ``` ## Tokens - Fonts: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Heading font: Didot, "Bodoni 72", "Bodoni MT", "Bodoni Moda", "Libre Bodoni", ui-serif, Georgia, serif - Radius: field 4px, box 6px, badge 999px - Density: comfortable · Shadows: subtle | token | light | dark | |---|---|---| | bg | #fbf7ef | #150a0d | | surface | #fffdf8 | #1d0f13 | | surface2 | #f3ece0 | #28151b | | fg | #2a1016 | #f8ece6 | | muted | #6d5359 | #c3a7ad | | border | #e9dccc | #36212a | | input | #d4c0ab | #573a43 | | primary | #6d1a2b | #e8a0ae | | primaryFg | #ffffff | #33070f | | secondary | #f3ece0 | #28151b | | secondaryFg | #2a1016 | #f8ece6 | | accent | #846020 | #e2c07a | | accentFg | #ffffff | #2b1d00 | | ring | #6d1a2b | #e8a0ae | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #6d1a2b | #e8a0ae | | secondaryText | #7e6c6b | #8c7c7c | | accentText | #846020 | #e2c07a | | successText | #17773a | #4ade80 | | warningText | #a94e0a | #fbbf24 | | dangerText | #c72324 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #6d1a2b | #e8a0ae | --- # Corzetti: a MIAN design language Pasta coins, stamped by hand. Corzetti are discs of pasta pressed between two carved wooden stamps, so each coin carries a coat of arms on one side and a flower on the other. Corzetti is a letterpress system: debossed type, embossed surfaces pressed into the paper, round medallion badges, navy ink and a seal red on cream. - Family: Elegant · Origin: Italy · Liguria · License: MIAN License (free to use) - Traits: stamped, crafted, heritage, tactile, elegant · intensity 2/5 · contrast medium · density default. Good for: heritage brands, wine, bakeries, crafts, museums. Less for: developer tools. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/corzetti.css - Page: https://mian.ro/noodles/corzetti ## Design philosophy Corzetti is letterpress. Discs of pasta pressed between carved wooden stamps become a system where surfaces are pressed into the paper (inset light and shade) or raised off it, type is debossed and set in small capitals, badges and avatars are round medallions with a stamped double ring, navy ink and a seal red on warm laid paper. ## Principles - Pressed or raised: containers and controls use --cz-raise; wells, tracks and trays use --cz-press. Never a floating drop shadow. - Stamp the type: headings and labels in small capitals with a 1px debossed highlight. - Medallions: round badges and avatars with a double ring. - Laid paper (--cz-laid) under surfaces, navy ink, a seal red accent. ## The language - **Shape.** 6px controls, 10px containers, round medallions. - **Surface.** Warm laid paper; raised panels and pressed-in fields and tracks. - **Colour.** Navy ink (#1e3a5f), seal red (#8c2f1b), cream paper. - **Type.** Book serif, small capitals for labels, headings and buttons; debossed. - **Motion.** corzetti-in: pressed down from 103% with a hint of blur; the spinner turns and presses like a stamp. - **Data.** Rounded columns with an embossed edge; pressed tracks; a 26% donut. ## Colour, type and brand - **Primary** #1e3a5f: blue (deep). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #8c2f1b: red (mid). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #f6f1e6: brown and terracotta (pale). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** Blue against red, close to complementary: strong contrast, so the accent must stay rare. The page is warm. - **Type.** One voice throughout: book serif (old-style and transitional). Headings are semibold, which reads as confident without shouting. Considered, literate, established. The voice of books and long reading. - **Reads as** stamped, crafted, heritage, tactile, elegant. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "corzetti"). ## Inspired by the noodle - Pressed between carved stamps → debossed text and embossed surfaces instead of shadows - Round coins → round medallion badges, avatars and a spinner that turns like a stamp - A family crest → navy ink, a seal red, small capitals - Genoese paper → warm cream with a faint laid texture ## Designing new components in Corzetti Build new components from `--mn-*` tokens, scoped with `[data-noodle="corzetti"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Raised: box-shadow: var(--cz-raise); pressed: box-shadow: var(--cz-press). - Paper: background: var(--cz-laid), var(--mn-surface). - Labels: font-variant-caps: small-caps; letter-spacing: .04em; text-shadow: var(--cz-deboss). Avoid: - Floating drop shadows - Glossy gradients - Neon or saturated colour Recipe: a selectable tile in this language: ```css [data-noodle="corzetti"] .tile { padding: 12px 16px; border: 1px solid var(--mn-border); border-radius: 10px; background: var(--cz-laid), var(--mn-surface); box-shadow: var(--cz-raise); font-variant-caps: small-caps; } [data-noodle="corzetti"] .tile:active, [data-noodle="corzetti"] .tile[aria-selected="true"] { box-shadow: var(--cz-press); background: var(--mn-surface-2); } ``` ## Tokens - Fonts: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Heading font: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Radius: field 6px, box 10px, badge 999px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #f6f1e6 | #0f141c | | surface | #fbf7ee | #161d28 | | surface2 | #ede5d3 | #1f2835 | | fg | #1c2533 | #efe8d8 | | muted | #5c6474 | #a9a597 | | border | #e0d6c0 | #2a3443 | | input | #c6b99c | #465368 | | primary | #1e3a5f | #a9c1e6 | | primaryFg | #ffffff | #0d1a2d | | secondary | #ede5d3 | #1f2835 | | secondaryFg | #1c2533 | #efe8d8 | | accent | #8c2f1b | #e58a70 | | accentFg | #ffffff | #2a0a02 | | ring | #1e3a5f | #a9c1e6 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1e3a5f | #a9c1e6 | | secondaryText | #6b6e70 | #878887 | | accentText | #8c2f1b | #e58a70 | | successText | #16733c | #4ade80 | | warningText | #a24d0e | #fbbf24 | | dangerText | #bd2628 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1e3a5f | #a9c1e6 | --- # Inaniwa: a MIAN design language Silken, ivory, courtly. Inaniwa udon is kneaded, stretched and dried by hand over several days into thin, silky, glossy ivory noodles, once made only for the court. Inaniwa is an elegant system: ivory and ink, fine serif type, gold hairlines, a silk sheen and generous, unhurried space. - Family: Elegant · Origin: Japan · Akita · License: MIAN License (free to use) - Traits: silken, courtly, refined, serene, elegant · intensity 1/5 · contrast low · density comfortable. Good for: hospitality, spa, tea, luxury retail. Less for: dense admin, loud campaigns. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/inaniwa.css - Page: https://mian.ro/noodles/inaniwa ## Design philosophy Inaniwa is courtly silk. The noodles are stretched and dried by hand over days into thin, glossy ivory strands once made only for the court. The interface is ivory and ink, set in a fine book serif with small capitals, framed by gold hairlines set in from the edge, with a faint silk sheen, generous space and slow, unhurried motion. ## Principles - Space is the luxury: comfortable density and larger padding (1.75rem in cards and dialogs). - Book serif for headings and numbers; small capitals for labels, buttons and tabs. - Gold hairlines: 1px gold (or gold at 45%) inset from edges, under focused fields and current tabs. - Silk: a faint diagonal sheen (--in-silk) on surfaces. - Unhurried: 260–560ms, gentle ease. ## The language - **Shape.** 2px fields, 4px panels; fields are single underlines. - **Surface.** Ivory with silk sheen, 1px border and an inset gold hairline. - **Colour.** Ink-navy primary, gold accent, ivory neutrals. - **Type.** Book serif headings at 500, small-cap labels, tabular serif numbers. - **Motion.** inaniwa-in: 6px rise, 560ms; underlines widen gently. - **Data.** Fine ink stems with a gold highlight; 1.25px lines; thin donut rings. ## Colour, type and brand - **Primary** #1e2a44: blue (deep). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #7d6118: olive (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Page** #faf7f0: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Blue against olive, close to complementary: strong contrast, so the accent must stay rare. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are medium, which reads as calm and assured. Considered, literate, established. The voice of books and long reading. - **Reads as** silken, courtly, refined, serene, elegant (brand dimension: sophistication). - **Tone of voice.** Quiet. Plain statements in sentence case, no exclamation marks, numbers with their units. Let space do the persuading. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "inaniwa"). ## Inspired by the noodle - Made by hand over days → unhurried motion and generous space; nothing crowded - Silky, glossy ivory → ivory surfaces with a faint silk sheen - Once reserved for the court → fine book serif, small capitals and gold hairlines - Thin and even → precise 1px rules, perfectly aligned ## Designing new components in Inaniwa Build new components from `--mn-*` tokens, scoped with `[data-noodle="inaniwa"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Frame with box-shadow: inset 0 0 0 4px var(--mn-card), inset 0 0 0 5px var(--in-hair). - Label with font-variant: small-caps; text-transform: lowercase; letter-spacing: .06–.08em. - Mark focus or selection with a 1px gold line, never a fill. Avoid: - Heavy weights and uppercase - Saturated colour fills - Tight, dense layouts - Fast motion Recipe: a selectable tile in this language: ```css [data-noodle="inaniwa"] .tile { padding: 24px 28px; border: 1px solid var(--mn-border); border-radius: 4px; background: var(--mn-card) var(--in-silk); box-shadow: inset 0 0 0 4px var(--mn-card), inset 0 0 0 5px var(--in-hair); font-family: var(--mn-font-heading); } [data-noodle="inaniwa"] .tile .label { font-variant: small-caps; text-transform: lowercase; letter-spacing: .08em; } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Radius: field 2px, box 4px, badge 2px - Density: comfortable · Shadows: subtle | token | light | dark | |---|---|---| | bg | #faf7f0 | #0f0e0c | | surface | #fffdf8 | #171612 | | surface2 | #f2ece0 | #211f1a | | fg | #1b1a24 | #f3eee3 | | muted | #5f5a55 | #aaa192 | | border | #e6dccb | #332f26 | | input | #c9bca5 | #4e4839 | | primary | #1e2a44 | #e7dcc2 | | primaryFg | #fffdf8 | #16140f | | secondary | #f2ece0 | #211f1a | | secondaryFg | #1b1a24 | #f3eee3 | | accent | #7d6118 | #d4b55f | | accentFg | #ffffff | #1f1705 | | ring | #7d6118 | #d4b55f | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1e2a44 | #e7dcc2 | | secondaryText | #716e6f | #86827a | | accentText | #7d6118 | #d4b55f | | successText | #15783b | #4ade80 | | warningText | #a84e0b | #fbbf24 | | dangerText | #c52526 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1e2a44 | #e7dcc2 | --- # Yifu: a MIAN design language Lacquer red and gold, for celebrations. Yifu mian (yi mein) are golden fried egg noodles served at birthdays and weddings for long life. Yifu is a celebratory, lacquered system: deep lacquer red and black with fine gold inlay lines, framed panels like a lacquer box, and slow, ceremonial motion. - Family: Elegant · Origin: China · Guangdong · License: MIAN License (free to use) - Traits: celebratory, festive, lacquer, gold, rich · intensity 4/5 · contrast high · density comfortable. Good for: celebrations, restaurants, cultural events, gifts. Less for: saas, healthcare. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/yifu.css - Page: https://mian.ro/noodles/yifu ## Design philosophy Yifu is a celebration in lacquer. Golden fried noodles served at birthdays and weddings bring the look of lacquerware gift boxes: deep lacquer red and black panels, fine gold inlay lines set in from the edge, gold coins for knobs, a lacquer sheen on fills, a small diamond marking the current tab, and slow, ceremonial rises. ## Principles - Inlay: a 1px gold line set 3–4px inside every panel and primary button (--yf-inlay). - Lacquer: fills carry a soft top-light / bottom-shade gradient (--yf-lacquer). - Gold for markers and highlights; red for emphasis; serif for titles. - Ceremonial pace: 240–520ms ease-out rises. ## The language - **Shape.** 4px fields, 8px panels; diamond markers (rotated squares). - **Surface.** Warm paper-white or lacquer black with gold inlay and warm shadows. - **Colour.** Lacquer red primary, gold accent (dark mode: gold primary on lacquer black). - **Type.** Book serif titles; sans body at 550–600. - **Motion.** yifu-in: 10px rise, 520ms. - **Data.** Lacquer bars with a gilded highlight; diamond legend keys. ## Colour, type and brand - **Primary** #8b1a1a: red (mid). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #b8860b: yellow and gold (mid, saturated). Optimism, attention, caution. Gold tones add value and ceremony. - **Page** #faf3ea: orange (pale). Warmth, friendliness, appetite, affordability. Active like red, without the alarm. - **Scheme.** Red with its neighbour yellow and gold: an analogous pair, harmonious and natural. The page is warm. - **Type.** Two voices: book serif (old-style and transitional) for headings, neutral sans for the interface. Headings are semibold, which reads as confident without shouting. Considered, literate, established. The voice of books and long reading. - **Reads as** celebratory, festive, lacquer, gold, rich. - **Tone of voice.** Bold. Short claims, strong verbs, big numbers. Say one thing per screen and say it loudly. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. Set the wordmark in a serif to match the headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "yifu"). ## Inspired by the noodle - Served at banquets and birthdays → lacquerware: deep red and black panels - Golden fried noodles → fine gold inlay lines framing panels and controls - A gift box → framed panels with an inner gold line set in from the edge - A ceremony, not a rush → slow, graceful rises ## Designing new components in Yifu Build new components from `--mn-*` tokens, scoped with `[data-noodle="yifu"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Frame panels with box-shadow: var(--yf-inlay). - Primary fills: background var(--mn-primary) var(--yf-lacquer) with an inner gold line (inset 0 0 0 2px fill, inset 0 0 0 3px gold). - Mark current items with a small rotated gold-edged diamond. Avoid: - Cold greys - Flat unframed panels - Playful, bouncy motion Recipe: a selectable tile in this language: ```css [data-noodle="yifu"] .tile { padding: 18px 20px; border: 1px solid var(--mn-border); border-radius: 8px; background: var(--mn-card); box-shadow: var(--yf-inlay); } [data-noodle="yifu"] .tile[aria-selected="true"] { background: var(--mn-primary) var(--yf-lacquer); color: var(--mn-primary-fg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", ui-serif, Georgia, serif - Radius: field 4px, box 8px, badge 3px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #faf3ea | #0d0806 | | surface | #fffaf3 | #1a0f0c | | surface2 | #f2e4d2 | #26160f | | fg | #221210 | #f8ecdc | | muted | #6a4f45 | #c2a58e | | border | #e5cfb8 | #3e2319 | | input | #c9a98a | #5e382a | | primary | #8b1a1a | #e8b64a | | primaryFg | #ffffff | #1f1403 | | secondary | #f2e4d2 | #26160f | | secondaryFg | #221210 | #f8ecdc | | accent | #b8860b | #ef6b6b | | accentFg | #1a1203 | #2a0505 | | ring | #8b1a1a | #e8b64a | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #8b1a1a | #e8b64a | | secondaryText | #796a61 | #8b7d71 | | accentText | #8b630d | #ef6b6b | | successText | #167539 | #4ade80 | | warningText | #a54d0a | #fbbf24 | | dangerText | #c22323 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #8b1a1a | #e8b64a | --- # Udon: a MIAN design language Thick, soft, warm. Cream surfaces, generous rounding and a terracotta primary. Comfortable density and soft depth for friendly, tactile products. - Family: Rounded · Origin: Japan · License: MIAN License (free to use) - Traits: warm, friendly, soft, tactile, cosy · intensity 2/5 · contrast medium · density comfortable. Good for: consumer products, food, home, onboarding. Less for: enterprise data, legal. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/udon.css - Page: https://mian.ro/noodles/udon ## Design philosophy Udon is thick, soft and chewy, glossy in hot broth. The language is tactile: raised controls have a visible thickness that compresses when pressed and springs back, everything is plump and generously rounded, and data is drawn with fat, friendly marks. It should feel good to press. ## Principles - Thickness is real: raised elements carry a 5px darker bottom edge (--_edge) that shrinks when pressed. - Squash and stretch: presses squish, releases spring back with overshoot. - Plump over thin: fat rings, fat bars, pillow knobs, chunky separated table rows. - Warm and glossy: cream surfaces and a soft highlight on the top of raised things. ## The language - **Shape.** 12px fields, 18px containers, pill badges. Knobs and thumbs are large pillows. - **Surface.** Cream page, white raised surfaces with the thickness edge and an inset top highlight (rgb(255 255 255/.28)). - **Colour.** Terracotta primary, teal accent, warm browns and creams. - **Type.** Rounded sans, bold headings. - **Motion.** udon-squish entrance with overshoot (cubic-bezier(.34,1.4,.64,1)), 320ms; knobs squish on toggle. - **Data.** Pill-ended bars with 10px gaps, 7px lines with points, thick donuts. ## Colour, type and brand - **Primary** #c2410c: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Accent** #0f766e: teal and cyan (deep, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #faf7f2: white and paper (pale). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Brown and terracotta against teal and cyan, close to complementary: strong contrast, so the accent must stay rare. The page is warm. - **Type.** One voice throughout: rounded sans. Headings are semibold, which reads as confident without shouting. Friendly, soft, safe, young. - **Reads as** warm, friendly, soft, tactile, cosy (brand dimension: sincerity). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "udon"). ## Inspired by the noodle - Thick and chewy → controls with a visible 5px "thickness" edge that compresses when pressed - Soft and springy → squash-and-stretch press and release - Glossy in broth → a soft top highlight on every raised surface - Chunky → fat bars, fat rings, fat switch knobs, generous rounding ## Designing new components in Udon Build new components from `--mn-*` tokens, scoped with `[data-noodle="udon"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Raise the component: box-shadow 0 5px 0 var(--_edge) where --_edge is the fill mixed 25% with black; translate it up 3px on hover and down 4px on press while the edge shrinks. - Use the rounded font and radius 12–18px. - Selected = filled with the primary and its edge; unselected = white with a border-coloured edge. Avoid: - Hairlines - Sharp corners - Flat, weightless presses - Thin chart marks Recipe: a selectable tile in this language: ```css [data-noodle="udon"] .tile { --_edge: color-mix(in oklab, var(--mn-border), #000 12%); padding: 14px 16px; border-radius: 16px; background: var(--mn-surface); box-shadow: 0 5px 0 var(--_edge), inset 0 2px 0 rgb(255 255 255 / .28); transition: translate 180ms cubic-bezier(.34, 1.56, .64, 1), box-shadow 180ms; } [data-noodle="udon"] .tile:hover { translate: 0 -3px; box-shadow: 0 8px 0 var(--_edge); } [data-noodle="udon"] .tile:active { translate: 0 4px; box-shadow: 0 1px 0 var(--_edge); } ``` ## Tokens - Fonts: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Heading font: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Radius: field 12px, box 18px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #faf7f2 | #1a1612 | | surface | #ffffff | #221d18 | | surface2 | #f1ebe1 | #2d2620 | | fg | #2b2520 | #f5efe6 | | muted | #6c6257 | #b3a795 | | border | #e8e0d4 | #3a322a | | input | #d6cbbb | #4d4338 | | primary | #c2410c | #fb923c | | primaryFg | #ffffff | #1a0d03 | | secondary | #f1ebe1 | #2d2620 | | secondaryFg | #2b2520 | #f5efe6 | | accent | #0f766e | #2dd4bf | | accentFg | #ffffff | #042f2c | | ring | #c2410c | #fb923c | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #b93f0d | #fb923c | | secondaryText | #767069 | #8d867f | | accentText | #0f766e | #2dd4bf | | successText | #17793b | #4ade80 | | warningText | #a94f0b | #fbbf24 | | dangerText | #c72625 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #c2410c | #fb923c | --- # Gnocchi: a MIAN design language Soft pillows. Clay you want to press. Gnocchi are small pillows of potato dough, rolled over a fork so each one keeps the dent of a thumb. Gnocchi is a clay system: every element is a soft inflated shape lit from above, with a light inner edge on top, a darker one underneath and a wide coloured shadow. Things squash when pressed and pop back. - Family: Rounded · Origin: Italy · the north · License: MIAN License (free to use) - Traits: clay, soft, playful, friendly, puffy, cheerful, tactile, 3d · intensity 3/5 · contrast medium · density comfortable. Good for: kids, education, consumer onboarding, games, wellness, food, landing pages. Less for: finance, legal, enterprise, dense admin. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/gnocchi.css - Page: https://mian.ro/noodles/gnocchi ## Design philosophy Gnocchi is clay. Every element looks like a soft, slightly inflated object lit from above: a light inner edge along the top, a darker one underneath, and a wide shadow in the colour of the thing itself. Fields and tracks are thumb dents pressed into the surface. Pressing a button squashes it to 95% and it springs back. It is friendly and physical, and it works best with few, large elements. ## Principles - Puffed or pressed: things you act on are inflated; things you fill in are dented. - Three shadows make clay: inner light on top, inner dark below, a soft tinted drop. - No borders anywhere. The shadows are the edge. - Big and few: 18px and 28px radii, comfortable sizes, heavy rounded type. - Squash and spring: scale to .95 on press, overshoot slightly on release and entry. ## The language - **Shape.** 18px fields, 28px cards, pills for badges, tabs and progress; checkboxes are 8px-rounded cushions. - **Surface.** Warm peach clay. Cards carry --gn-clay; inputs, tracks and nested panels carry --gn-dent. - **Colour.** Tomato red primary, butter yellow secondary, teal accent. Coloured buttons take their inner light and shadow from their own colour. - **Type.** A rounded sans at 800 for headings and buttons, 700 for labels. - **Motion.** gnocchi-in: scales from .92, overshoots to 1.015 and settles in 320ms. Hover rises 1px; press squashes. - **Data.** Pill bars with the clay inner light; a 4px line. ## Colour, type and brand - **Primary** #c93c24: red (mid). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Accent** #1f7a6b: teal and cyan (mid). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #fdf1e7: orange (pale, saturated). Warmth, friendliness, appetite, affordability. Active like red, without the alarm. - **Scheme.** Red against teal and cyan, close to complementary: strong contrast, so the accent must stay rare. The page is warm. - **Type.** One voice throughout: rounded sans. Headings are heavy, which reads as loud and direct. Friendly, soft, safe, young. - **Reads as** clay, soft, playful, friendly, puffy. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. Use a heavy wordmark; a thin one would vanish beside these headings. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "gnocchi"). ## Inspired by the noodle - Pillows of soft dough → inflated shapes with a light inner edge above and a dark one below - The dent of a thumb → fields and tracks are pressed in; buttons and cards are puffed out - Squashes and springs back → pressing scales a control to 95%, release overshoots - Butter, sage and tomato → peach clay, a tomato red and a butter yellow ## Designing new components in Gnocchi Build new components from `--mn-*` tokens, scoped with `[data-noodle="gnocchi"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Raised: background var(--mn-surface), border 0, box-shadow var(--gn-clay), radius 28px. - A coloured raised element takes its shadows from its own colour: inset light = colour mixed 38% with white, inset dark = 20% with black. - Pressed-in: background var(--mn-surface-2), box-shadow var(--gn-dent). - Active: transform: scale(.95) with the spring curve; always remove transforms under reduced motion. - Selected in a group: a small raised cushion (--gn-clay-sm) inside a dented track. Avoid: - Borders and outlines - Small, dense controls - Flat fills with no inner light - Sharp corners - More than three colours on one screen Recipe: a selectable tile in this language: ```css [data-noodle="gnocchi"] .tile { padding: 20px; border: 0; border-radius: 28px; background: var(--mn-surface); color: var(--mn-fg); box-shadow: var(--gn-clay); transition: transform 180ms cubic-bezier(.34, 1.4, .64, 1), box-shadow 180ms; } [data-noodle="gnocchi"] .tile:hover { transform: translateY(-3px); } [data-noodle="gnocchi"] .tile:active { transform: scale(.97); } [data-noodle="gnocchi"] .tile[aria-selected="true"] { background: var(--mn-secondary); color: var(--mn-secondary-fg); } @media (prefers-reduced-motion: reduce) { [data-noodle="gnocchi"] .tile { transition: none; transform: none; } } ``` ## Tokens - Fonts: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Heading font: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Radius: field 18px, box 28px, badge 999px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #fdf1e7 | #1d1512 | | surface | #fff8f1 | #281d18 | | surface2 | #f7e4d3 | #342621 | | fg | #2b1d14 | #fdeee2 | | muted | #6b5547 | #c7ab9a | | border | #f0d9c6 | #40302a | | input | #dcc0a8 | #5e483e | | primary | #c93c24 | #ff8f73 | | primaryFg | #ffffff | #3a0d02 | | secondary | #ffd166 | #ffd166 | | secondaryFg | #3a2a00 | #3a2a00 | | accent | #1f7a6b | #6fd6c3 | | accentFg | #ffffff | #04302a | | ring | #c93c24 | #ff8f73 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #b63822 | #ff8f73 | | secondaryText | #846936 | #ffd166 | | accentText | #207162 | #6fd6c3 | | successText | #187438 | #4ade80 | | warningText | #a44d0a | #fbbf24 | | dangerText | #c02523 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #c93c24 | #ff8f73 | --- # Cavatelli: a MIAN design language One material, pressed in and pushed out. Cavatelli, “little hollows”, are small pieces of dough dragged under two fingers so they curl around the dent. Cavatelli is a soft, single-material system: page and surface are the same colour, and every element is either pushed out of the page or pressed into it, drawn only by a light and a shadow. Colour is kept for what is switched on. - Family: Rounded · Origin: Italy · Molise and Puglia · License: MIAN License (free to use) - Traits: soft, monochrome, calm, tactile, quiet, embossed, minimal · intensity 2/5 · contrast low · density comfortable. Good for: smart home, audio, calculators and tools, wellness, hardware companions, personal dashboards. Less for: dense admin, content-heavy sites, e-commerce, data tables. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/cavatelli.css - Page: https://mian.ro/noodles/cavatelli ## Design philosophy Cavatelli is one material. The page, the cards and the controls are the same pale colour, and every element is either pushed out of that surface or pressed into it; a light from the top left and a shadow to the bottom right are the only things that draw it. Because edges are soft, state has to be unmistakable: colour is reserved for what is on, and every control keeps a visible boundary or a strong inner shadow. ## Principles - One colour for page and surface. Never put a white card on the grey page. - Two states of the material: raised (can be pressed) and inset (holds a value, or is pressed). - Light from the top left, always: a light shadow up-left, a dark one down-right. - Colour means on: the blue appears for the checked switch, the chosen tab’s text, the progress fill. - Keep it legible: text is full-contrast ink, checkboxes and switches keep a 1px boundary. ## The language - **Shape.** 14px fields, 22px cards, pill badges and tracks. - **Surface.** Raised: 7px/16px twin shadows (--cv-out). Inset: twin inner shadows (--cv-in). Overlays use a larger pair. - **Colour.** Cool pale grey (#e8ecf1) or slate (#23272e); a single blue for on-states; a teal accent. - **Type.** A clean sans, headings at 650 tracked −0.025em. - **Motion.** cavatelli-in: scale from .985 and fade in 260ms. Pressing swaps the raised shadow for the inset one; nothing moves. - **Data.** Pill bars in 14% ink with the highlighted bar in blue; a 3px line. ## Colour, type and brand - **Primary** #2a56c6: blue (mid). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #0f766e: teal and cyan (deep, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #e8ecf1: blue (pale, muted). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Scheme.** Blue with its neighbour teal and cyan: an analogous pair, harmonious and natural. The page is cool. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** soft, monochrome, calm, tactile, quiet. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "cavatelli"). ## Inspired by the noodle - One piece of dough, dented → one colour for page and surface; shape comes from light and shadow alone - Dragged under two fingers → two states only: raised (resting, tappable) and pressed in (fields, tracks, active) - A hollow that holds the sauce → wells for inputs, progress and selected tabs - Pale durum wheat → a cool pale grey with a single blue for what is on ## Designing new components in Cavatelli Build new components from `--mn-*` tokens, scoped with `[data-noodle="cavatelli"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Raised: background var(--mn-bg), border 0, box-shadow var(--cv-out) (or --cv-out-sm for small things). - Inset: same background, box-shadow var(--cv-in). - Press = swap raised for inset, with no transform. - Selected in a group: a raised chip inside an inset track, with its label in var(--mn-primary-text). - Anything that must be found by people with low vision (checkbox, switch, field on focus) also gets a 1px var(--mn-input) or var(--mn-ring) edge. Avoid: - White or tinted cards on the page - Coloured fills for resting buttons other than the primary - Hard borders as the main edge - Low-contrast grey text - Stacking raised elements on raised elements Recipe: a selectable tile in this language: ```css [data-noodle="cavatelli"] .tile { padding: 18px; border: 1px solid transparent; border-radius: 22px; background: var(--mn-bg); color: var(--mn-fg); box-shadow: var(--cv-out); transition: box-shadow 200ms cubic-bezier(.16, 1, .3, 1); } [data-noodle="cavatelli"] .tile:active { box-shadow: var(--cv-in); } [data-noodle="cavatelli"] .tile[aria-selected="true"] { box-shadow: var(--cv-in); color: var(--mn-primary-text); border-color: var(--mn-ring); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 14px, box 22px, badge 999px - Density: comfortable · Shadows: none | token | light | dark | |---|---|---| | bg | #e8ecf1 | #23272e | | surface | #e8ecf1 | #23272e | | surface2 | #dde2e9 | #2b3038 | | fg | #1c2430 | #e9edf3 | | muted | #4a5565 | #a7b0bd | | border | #d5dbe3 | #30353e | | input | #8c97a6 | #6b7482 | | primary | #2a56c6 | #8fb0ff | | primaryFg | #ffffff | #0a1a40 | | secondary | #dde2e9 | #2b3038 | | secondaryFg | #1c2430 | #e9edf3 | | accent | #0f766e | #5eead4 | | accentFg | #ffffff | #042f2b | | ring | #2a56c6 | #8fb0ff | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #2a55c3 | #8fb0ff | | secondaryText | #616873 | #8a8f96 | | accentText | #116964 | #5eead4 | | successText | #176c3a | #4ade80 | | warningText | #964a11 | #fbbf24 | | dangerText | #ae2628 | #f77676 | | infoText | #056398 | #38bdf8 | | link | #2a56c6 | #8fb0ff | --- # Orecchiette: a MIAN design language Little ears, pressed with a thumb. Orecchiette, “little ears”, are pressed from a disc of dough with the thumb, leaving a smooth cup and a rough rim. Orecchiette is a concave system: controls are cups pressed into the surface, round shapes, olive green and a tomato accent on warm white. - Family: Rounded · Origin: Italy · Puglia · License: MIAN License (free to use) - Traits: warm, friendly, soft, rounded, natural, calm · intensity 2/5 · contrast low · density comfortable. Good for: food, wellness, consumer apps, onboarding, local businesses, education. Less for: dense admin, developer tools. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/orecchiette.css - Page: https://mian.ro/noodles/orecchiette ## Design philosophy Orecchiette is concave: surfaces are cups pressed into the page rather than objects floating above it. Pressing deepens the cup; choosing fills it with olive green. Round, warm and generous: friendly without being childish. ## Principles - Press in, not out: depth is inset; nothing floats except dialogs and menus. - Round with a rim: round shapes with a slightly heavier edge. - Warm and generous: comfortable spacing, rounded type. - Olive for action, tomato for attention. ## The language - **Shape.** 14px fields, 26px surfaces, round badges, round switch knobs. - **Surface.** Warm white; controls and cards are gently inset (inner shadow) on a slightly darker rim. - **Colour.** Olive green (#4f5d23), tomato brick accent, warm neutrals. - **Type.** Rounded sans at 700 for headings. - **Motion.** orecchiette-in: a soft scale-in; presses deepen the inset. - **Data.** Round-ended bars, olive fills. ## Colour, type and brand - **Primary** #4f5d23: green (deep). Growth, health, permission, money. The easiest colour to look at for a long time. - **Accent** #a33b20: red (mid). Urgency, energy, appetite, danger. It raises attention faster than any other hue and reads as the most forceful. - **Page** #f6f3ec: brown and terracotta (pale). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Scheme.** Green with red: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** One voice throughout: rounded sans. Headings are semibold, which reads as confident without shouting. Friendly, soft, safe, young. - **Reads as** warm, friendly, soft, rounded, natural (brand dimension: sincerity). - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "orecchiette"). ## Inspired by the noodle - Pressed with a thumb → concave, inset surfaces instead of raised ones; pressing deepens the cup - Round with a rough rim → round shapes with a slightly heavier edge - Cime di rapa and tomato → olive green primary, tomato-brick accent - Made by hand on a board → comfortable, generous spacing ## Designing new components in Orecchiette Build new components from `--mn-*` tokens, scoped with `[data-noodle="orecchiette"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Surfaces: box-shadow: inset 0 2px 6px color-mix(in srgb, var(--mn-fg) 10%, transparent); border: 1px solid var(--mn-border). - Pressed: inset shadow doubles; chosen: background var(--mn-primary) with var(--mn-primary-fg). - Radius: var(--mn-radius-box) for surfaces, 999px for small controls. Avoid: - Raised drop shadows on cards - Sharp corners - Cold greys - Dense layouts Recipe: a selectable tile in this language: ```css [data-noodle="orecchiette"] .tile { padding: 16px; border-radius: 26px; background: var(--mn-surface-2); box-shadow: inset 0 2px 6px color-mix(in srgb, var(--mn-fg) 10%, transparent); } [data-noodle="orecchiette"] .tile:active { box-shadow: inset 0 4px 10px color-mix(in srgb, var(--mn-fg) 16%, transparent); } ``` ## Tokens - Fonts: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Heading font: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Radius: field 14px, box 26px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #f6f3ec | #12140d | | surface | #fbf9f4 | #1a1d14 | | surface2 | #ece6da | #24281c | | fg | #1e2216 | #f1f0e6 | | muted | #595e4c | #b0b39c | | border | #e1dbcd | #33382a | | input | #c7bfae | #50573f | | primary | #4f5d23 | #c3d38a | | primaryFg | #ffffff | #1b2206 | | secondary | #e6e9d6 | #2b3220 | | secondaryFg | #2e3614 | #eef2da | | accent | #a33b20 | #f08c6a | | accentFg | #ffffff | #2a0a02 | | ring | #4f5d23 | #c3d38a | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #4f5d23 | #c3d38a | | secondaryText | #6a6e5f | #86897b | | accentText | #a33b20 | #f08c6a | | successText | #167538 | #4ade80 | | warningText | #a24d0b | #fbbf24 | | dangerText | #c12524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #4f5d23 | #c3d38a | --- # Mee: a MIAN design language Golden, round, cheerful. Egg-yolk yellow, pill-shaped controls, rounded type and big friendly corners. Consumer apps, kids, onboarding. - Family: Rounded · Origin: Malaysia · egg noodles · License: MIAN License (free to use) - Traits: cheerful, golden, playful, bright, kid-friendly · intensity 3/5 · contrast medium · density comfortable. Good for: kids, education, consumer apps, onboarding. Less for: finance, luxury. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/mee.css - Page: https://mian.ro/noodles/mee ## Design philosophy Mee is yellow egg noodles tossed in a hot wok. The language is golden and cheerful: rich gradient fills, a toasted, charred bottom edge on raised things, fully round pills and pies, and a quick sizzle wiggle when something is pressed or appears. ## Principles - Golden gradients on primary surfaces (lighter at the top). - A toasted edge: inset 0 -3px 0 var(--m-char) on raised controls. - Round everything: pill buttons, pill tables rows, full pie charts. - Sizzle: a quick wiggle on hover and on entry. ## The language - **Shape.** 999px fields and badges, 22px containers. - **Surface.** Warm cream with golden fills and charred edges. - **Colour.** Egg-yolk yellow primary, teal accent, warm neutrals. - **Type.** Rounded sans, bold. - **Motion.** mee-pop: pop in with overshoot, 300ms; mee-sizzle wiggle on hover. - **Data.** Pill bars, 4px lines with a warm area, a full pie instead of a ring. ## Colour, type and brand - **Primary** #eab308: yellow and gold (mid, saturated). Optimism, attention, caution. Gold tones add value and ceremony. - **Accent** #0f766e: teal and cyan (deep, saturated). Clarity, cleanliness, calm technology. Cooler than green, softer than blue. - **Page** #fffdf5: white and paper (pale, saturated). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Yellow and gold with teal and cyan: a contrasting pair that needs one of the two to dominate. The page is warm. - **Type.** One voice throughout: rounded sans. Headings are semibold, which reads as confident without shouting. Friendly, soft, safe, young. - **Reads as** cheerful, golden, playful, bright, kid-friendly. - **Tone of voice.** Lively. A point of view in the headline, concrete verbs, a little humour where it is true. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "mee"). ## Inspired by the noodle - Yellow egg noodles → golden gradient fills - Wok-fried → a toasted, charred bottom edge on raised controls - Round and springy → pill shapes and round charts - Sizzle → a quick wiggle when things are pressed or appear ## Designing new components in Mee Build new components from `--mn-*` tokens, scoped with `[data-noodle="mee"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Fill with linear-gradient(180deg, color-mix(in oklab, var(--mn-primary), #fff 20%), var(--mn-primary)) and add the charred inset edge. - Use radius 999px for anything under 48px tall. - Hover: animation mee-sizzle 360ms. Avoid: - Cold greys - Square corners - Flat single-colour fills on primary elements Recipe: a selectable tile in this language: ```css [data-noodle="mee"] .tile { padding: 12px 20px; border: 0; border-radius: 999px; background: var(--mn-surface); box-shadow: inset 0 -3px 0 var(--m-char); } [data-noodle="mee"] .tile[aria-selected="true"] { background: linear-gradient(180deg, color-mix(in oklab, var(--mn-primary), #fff 20%), var(--mn-primary)); color: var(--mn-primary-fg); } [data-noodle="mee"] .tile:hover { animation: mee-sizzle 360ms ease-in-out; } ``` ## Tokens - Fonts: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Heading font: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Radius: field 999px, box 22px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #fffdf5 | #14110a | | surface | #ffffff | #1c180e | | surface2 | #fbf3dc | #272114 | | fg | #231c05 | #fbf3dc | | muted | #6b6030 | #b8aa7c | | border | #efe4c4 | #342c1a | | input | #dccb95 | #4d4226 | | primary | #eab308 | #facc15 | | primaryFg | #231c05 | #1c1600 | | secondary | #231c05 | #fbf3dc | | secondaryFg | #fffdf5 | #14110a | | accent | #0f766e | #2dd4bf | | accentFg | #ffffff | #042f2c | | ring | #a16207 | #facc15 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #8a6b07 | #facc15 | | secondaryText | #231c05 | #fbf3dc | | accentText | #0f766e | #2dd4bf | | successText | #167839 | #4ade80 | | warningText | #a84f09 | #fbbf24 | | dangerText | #c62522 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #0f766e | #facc15 | --- # Mixian: a MIAN design language Round, soft, served on small plates. Mixian are Yunnan’s round rice noodles, smooth, white and springy. In crossing-the-bridge noodles they arrive with a bowl of very hot broth and a table of small plates, and each ingredient is slid into the bowl one at a time. Mixian is a small-plates system: everything round, every choice on its own separate plate, and things arriving one by one. - Family: Rounded · Origin: China · Yunnan · License: MIAN License (free to use) - Traits: round, soft, tidy, friendly, modular · intensity 2/5 · contrast low · density comfortable. Good for: food delivery, menus, modular dashboards, consumer apps. Less for: editorial. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/mixian.css - Page: https://mian.ro/noodles/mixian ## Design philosophy Mixian is a table of small plates. The round rice noodles arrive with hot broth and many small dishes that are slid in one at a time, so the interface is round and modular: every choice sits on its own separate round plate, buttons in a group, segments of a toggle, tabs, table rows, list items, stats and avatars are split apart with small gaps, and they arrive one after another. ## Principles - Round: 999px controls and rows, circles for checkboxes, icons buttons and OTP boxes; 28px panels. - Separate plates: never merge a group into one bar, gap 6–8px and a plate shadow on each. - Arrive one by one: a 50ms stagger (mixian-in, scale .92 → 1). - Porcelain: cobalt on warm white, soft plate shadows (--mx-plate). ## The language - **Shape.** Pills and circles; rows are pill-shaped plates. - **Surface.** White plates with --mx-plate on a warm page; no borders. - **Colour.** Porcelain cobalt primary, chilli-oil accent. - **Type.** Rounded sans at 600–650. - **Motion.** mixian-in with stagger; presses shrink to .95 with a gentle spring. - **Data.** Round bars with gaps and visible round points. ## Colour, type and brand - **Primary** #1f3fa6: blue (mid). Trust, competence, calm, distance. The world’s most-liked colour and the default of banks, software and social networks. - **Accent** #b3541e: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #f8f6f1: yellow and gold (pale, muted). Optimism, attention, caution. Gold tones add value and ceremony. - **Scheme.** Blue against brown and terracotta, close to complementary: strong contrast, so the accent must stay rare. The page is warm. - **Type.** One voice throughout: rounded sans. Headings are semibold, which reads as confident without shouting. Friendly, soft, safe, young. - **Reads as** round, soft, tidy, friendly, modular. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** Round marks fit: a circular symbol or a soft, lowercase wordmark. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "mixian"). ## Inspired by the noodle - Round in cross-section → perfect circles and full pills everywhere - A table of small plates → groups split into separate round plates with gaps (button groups, toggles, tabs, table rows, lists) - Ingredients added one at a time → items arrive one after another in a short stagger - Blue-and-white porcelain bowls → porcelain cobalt on warm white ## Designing new components in Mixian Build new components from `--mn-*` tokens, scoped with `[data-noodle="mixian"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Split any group into separate items: display: flex/grid with gap: 6–8px; each item gets border-radius: 999px (or 20–28px) and box-shadow: var(--mx-plate). - Stagger arrivals with animation: mixian-in 320ms both and 50ms per item. - Selected = filled with var(--mn-primary). Avoid: - Joined segmented bars - Square corners - Borders instead of plates Recipe: a selectable tile in this language: ```css [data-noodle="mixian"] .tiles { display: flex; flex-wrap: wrap; gap: 8px; } [data-noodle="mixian"] .tile { padding: 10px 18px; border: 0; border-radius: 999px; background: var(--mn-surface); box-shadow: var(--mx-plate); animation: mixian-in 320ms cubic-bezier(.3, 1.3, .5, 1) both; } [data-noodle="mixian"] .tile:nth-child(2) { animation-delay: 50ms; } [data-noodle="mixian"] .tile[aria-selected="true"] { background: var(--mn-primary); color: var(--mn-primary-fg); } ``` ## Tokens - Fonts: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Heading font: ui-rounded, "SF Pro Rounded", "Nunito", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif - Radius: field 999px, box 28px, badge 999px - Density: comfortable · Shadows: soft | token | light | dark | |---|---|---| | bg | #f8f6f1 | #12110f | | surface | #ffffff | #1a1916 | | surface2 | #efece5 | #24221e | | fg | #1c1b19 | #f3f0ea | | muted | #625e57 | #aaa398 | | border | #e6e1d8 | #302d28 | | input | #cfc8bc | #48443c | | primary | #1f3fa6 | #8fa8f5 | | primaryFg | #ffffff | #0b1433 | | secondary | #efece5 | #24221e | | secondaryFg | #1c1b19 | #f3f0ea | | accent | #b3541e | #f0a070 | | accentFg | #ffffff | #2a1204 | | ring | #1f3fa6 | #8fa8f5 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #1f3fa6 | #8fa8f5 | | secondaryText | #706f6b | #878580 | | accentText | #a74f1e | #f0a070 | | successText | #16783a | #4ade80 | | warningText | #a84f0a | #fbbf24 | | dangerText | #c52524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #1f3fa6 | #8fa8f5 | --- # Pho: a MIAN design language Fresh, herbal, clean. Herb green on a crisp white, chilli-orange accent. Clean and optimistic: health, food, finance and sustainability. - Family: Rounded · Origin: Vietnam · License: MIAN License (free to use) - Traits: fresh, herbal, clean, optimistic, healthy · intensity 2/5 · contrast medium · density default. Good for: health, food, sustainability, finance for consumers. Less for: nightlife, luxury. - Use: `` (or on any element to scope it). Add `data-mode="dark"` or `"light"` to force a mode. - Everything: https://mian.ro/dist/mian.css · Only this noodle: https://mian.ro/dist/mian-core.css + https://mian.ro/dist/noodles/pho.css - Page: https://mian.ro/noodles/pho ## Design philosophy Pho is flat rice ribbons in a clear broth, served with a plate of fresh herbs. The language is fresh and light: flat borderless surfaces lightly tinted like clear broth, leaf-shaped corners (two round, two sharp), ribbon bands, and brisk motion where things unfurl like a leaf. ## Principles - The leaf corner: opposite corners round (16px) and sharp (3px), on buttons, cards, alerts and table wraps. - Flat and clear: tinted surfaces, no borders where a tint will do. - Herb green for action, chilli orange for accent. - Unfurl, don’t drop: entrances rotate slightly open from a corner. ## The language - **Shape.** Leaf radii (16px 3px), leaf-shaped radios rotated 45°, leaf-tipped bars. - **Surface.** White with a 3% herb tint; flat ribbon bands for headers. - **Colour.** Herb green primary, chilli orange accent, crisp white. - **Type.** Clean sans, fresh and open. - **Motion.** pho-unfurl: rotate from −4° with fade, 260ms. Switch knobs turn into leaves when on. - **Data.** Leaf-tipped bars, a spinning-leaf spinner, 2.5px lines. ## Colour, type and brand - **Primary** #15803d: green (deep, saturated). Growth, health, permission, money. The easiest colour to look at for a long time. - **Accent** #c2410c: brown and terracotta (mid, saturated). Earth, craft, reliability, age. Feels made by hand and unhurried. - **Page** #fbfdfb: white and paper (pale, muted). Space, honesty, simplicity. Warm whites feel human, cool whites feel clinical. - **Scheme.** Green with brown and terracotta: a contrasting pair that needs one of the two to dominate. The page is neutral. - **Type.** One voice throughout: neutral sans. Headings are semibold, which reads as confident without shouting. Clear, modern, impartial. The voice of software and signage. - **Reads as** fresh, herbal, clean, optimistic, healthy. - **Tone of voice.** Calm and clear. Short sentences, one idea each, a friendly but not chatty register. - **Logo.** A simple geometric mark with slightly softened corners fits; avoid both hard spikes and full circles. - To keep this noodle’s shape with your own brand colours: POST https://mian.ro/api/v1/noodles/create or the MCP tool `create_noodle` (base: "pho"). ## Inspired by the noodle - Flat rice ribbons → flat, borderless, ribbon-like bands - The herb plate → leaf-shaped corners on buttons, badges and knobs - Clear broth → lightly tinted, transparent-feeling surfaces - Fresh → brisk motion, leaves that unfurl into view ## Designing new components in Pho Build new components from `--mn-*` tokens, scoped with `[data-noodle="pho"]`, and follow these rules. Any `--x-*` variables named below are defined by this noodle's skin and can be used inside its scope. - Give containers border-radius: 16px 3px (or 10px 2px when small), no border, a light primary tint. - Rotate small indicators 45° to read as leaves (and give them margin so the tips stay in their box). - Enter with a small rotation from the top-left corner. Avoid: - Uniform radii - Heavy borders - Dark, muddy colours Recipe: a selectable tile in this language: ```css [data-noodle="pho"] .tile { padding: 12px 16px; border: 0; border-radius: 16px 3px; background: color-mix(in oklab, var(--mn-primary) 4%, var(--mn-surface)); } [data-noodle="pho"] .tile[aria-selected="true"] { background: var(--mn-primary); color: var(--mn-primary-fg); } ``` ## Tokens - Fonts: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Heading font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif - Radius: field 8px, box 14px, badge 999px - Density: default · Shadows: subtle | token | light | dark | |---|---|---| | bg | #fbfdfb | #0a130d | | surface | #ffffff | #0f1b13 | | surface2 | #eef5ef | #17271c | | fg | #0f1f14 | #e7f3ea | | muted | #54665a | #93aa99 | | border | #dce8de | #20362a | | input | #c2d4c6 | #30503d | | primary | #15803d | #4ade80 | | primaryFg | #ffffff | #052e16 | | secondary | #e6f2e8 | #17271c | | secondaryFg | #14532d | #e7f3ea | | accent | #c2410c | #fb923c | | accentFg | #ffffff | #1a0d03 | | ring | #15803d | #4ade80 | | success | #15803d | #4ade80 | | successFg | #ffffff | #052e16 | | warning | #b45309 | #fbbf24 | | warningFg | #ffffff | #1f1300 | | danger | #dc2626 | #f87171 | | dangerFg | #ffffff | #210505 | | info | #0369a1 | #38bdf8 | | infoFg | #ffffff | #03202d | | primaryText | #15783a | #4ade80 | | secondaryText | #69786d | #7b897f | | accentText | #b73f0c | #fb923c | | successText | #15783a | #4ade80 | | warningText | #a74f0a | #fbbf24 | | dangerText | #c82524 | #f87171 | | infoText | #0369a1 | #38bdf8 | | link | #15803d | #4ade80 | --- # Button · MIAN Triggers an action. Six colour roles, five variants, four sizes, icon-only, loading and disabled states. - Id: `button` · Category: Actions · Needs mian.js: no · License: MIAN License (free to use) - Docs: https://mian.ro/components/button - Use for: button, call to action button, submit button, icon button, loading button, destructive action. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-btn`: Base button. Solid, primary colour by default. - `mn-btn-outline`: Bordered, transparent background. Neutral unless a colour role is added. - `mn-btn-soft`: Tinted background, coloured text. - `mn-btn-ghost`: No background until hover. - `mn-btn-link`: Looks like a link, behaves like a button. - `mn-btn-xs · mn-btn-sm · mn-btn-lg`: Sizes. Heights come from the noodle's density. - `mn-btn-icon`: Square, for a single icon. Give it an aria-label. - `mn-btn-block · mn-btn-pill`: Full width · fully rounded. - `mn-primary · mn-secondary · mn-accent · mn-success · mn-warning · mn-danger · mn-info · mn-neutral`: Colour roles. Combine with any variant. - `aria-busy="true"`: Loading state: hides the label, shows a spinner, blocks clicks. ## Accessibility - Use a real ``` ### Colours Every colour role works with every variant. ```html ``` ### Sizes ```html ``` ### With icons ```html ``` ### States ```html Link styled as button ``` ### Block ```html ``` ## Source CSS ```css .mn-btn { --_h: var(--mn-size-md); --_bg: var(--_c, var(--mn-primary)); --_fg: var(--_cf, var(--mn-primary-fg)); --_bd: transparent; position: relative; display: inline-flex; align-items: center; justify-content: center; gap: .5em; height: var(--_h); min-width: var(--_h); padding: 0 calc(var(--_h) * .4); border: var(--mn-border-w) solid var(--_bd); border-radius: var(--mn-radius-field); background: var(--_bg); color: var(--_fg); font: 500 var(--mn-text-sm)/1 var(--mn-font); white-space: nowrap; text-decoration: none; vertical-align: middle; cursor: pointer; user-select: none; -webkit-tap-highlight-color: transparent; box-shadow: var(--mn-shadow-sm); transition: background-color var(--mn-duration) var(--mn-ease), color var(--mn-duration) var(--mn-ease), border-color var(--mn-duration) var(--mn-ease), box-shadow var(--mn-duration) var(--mn-ease), transform var(--mn-duration) var(--mn-ease); } .mn-btn:hover { --_bg: color-mix(in oklab, var(--_c, var(--mn-primary)) 88%, var(--mn-bg)); } .mn-btn:active { transform: translateY(1px); } .mn-btn:focus-visible { outline: none; box-shadow: var(--mn-focus); } .mn-btn svg { width: 1.15em; height: 1.15em; flex: none; } .mn-btn-outline { --_bg: transparent; --_fg: var(--_ct, var(--mn-fg)); --_bd: var(--_c, var(--mn-input)); box-shadow: none; } .mn-btn-outline:hover { --_bg: color-mix(in oklab, var(--_c, var(--mn-fg)) 8%, transparent); } .mn-btn-soft { --_bg: color-mix(in oklab, var(--_c, var(--mn-primary)) 14%, transparent); --_fg: var(--_ct, var(--mn-primary-text)); box-shadow: none; } .mn-btn-soft:hover { --_bg: color-mix(in oklab, var(--_c, var(--mn-primary)) 22%, transparent); } .mn-btn-ghost { --_bg: transparent; --_fg: var(--_ct, var(--mn-fg)); box-shadow: none; } .mn-btn-ghost:hover { --_bg: color-mix(in oklab, var(--_c, var(--mn-fg)) 9%, transparent); } .mn-btn-link { --_bg: transparent; --_fg: var(--_ct, var(--mn-link)); box-shadow: none; padding-inline: .25em; text-underline-offset: 4px; } .mn-btn-link:hover { --_bg: transparent; text-decoration: underline; } .mn-btn-xs { --_h: var(--mn-size-xs); font-size: calc(var(--mn-text-sm) - 2px); gap: .35em; } .mn-btn-sm { --_h: var(--mn-size-sm); font-size: calc(var(--mn-text-sm) - 1px); } .mn-btn-lg { --_h: var(--mn-size-lg); font-size: calc(var(--mn-text-sm) + 1px); } .mn-btn-icon { padding: 0; width: var(--_h); } .mn-btn-block { display: flex; width: 100%; } .mn-btn-pill { border-radius: 999px; } .mn-btn:disabled, .mn-btn[aria-disabled="true"] { opacity: .5; cursor: not-allowed; pointer-events: none; box-shadow: none; } .mn-btn[aria-busy="true"] { color: transparent; pointer-events: none; } .mn-btn[aria-busy="true"]::after { content: ""; position: absolute; inset: 0; margin: auto; width: 1.1em; height: 1.1em; border-radius: 50%; border: 2px solid var(--_fg); border-right-color: transparent; animation: mn-spin .7s linear infinite; ``` --- # Button group · MIAN Joins related buttons into one control, horizontally or vertically. - Id: `button-group` · Category: Actions · Needs mian.js: no · License: MIAN License (free to use) - Docs: https://mian.ro/components/button-group - Use for: joined buttons, segmented buttons, split button, toolbar buttons. - Alternatives: toggle-group. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-btn-group`: Container. Merges the radii of its children. - `mn-btn-group-vertical`: Stacks the buttons. ## Accessibility - Wrap with role="group" and an aria-label so the relationship is announced. - For a single-choice toggle use Toggle group instead. ## Examples ### Outline group ```html
``` ### Split button ```html
``` ### Vertical ```html
``` ## Source CSS ```css .mn-btn-group { display: inline-flex; isolation: isolate; } .mn-btn-group > .mn-btn { border-radius: 0; box-shadow: none; } .mn-btn-group > .mn-btn:focus-visible { z-index: 1; } .mn-btn-group > .mn-btn:first-child { border-start-start-radius: var(--mn-radius-field); border-end-start-radius: var(--mn-radius-field); } .mn-btn-group > .mn-btn:last-child { border-start-end-radius: var(--mn-radius-field); border-end-end-radius: var(--mn-radius-field); } .mn-btn-group > .mn-btn-outline + .mn-btn-outline { margin-inline-start: calc(var(--mn-border-w) * -1); } .mn-btn-group > .mn-btn:not(.mn-btn-outline) + .mn-btn:not(.mn-btn-outline) { border-inline-start: 1px solid color-mix(in oklab, var(--_fg) 25%, transparent); } .mn-btn-group-vertical { flex-direction: column; } .mn-btn-group-vertical > .mn-btn:first-child { border-radius: var(--mn-radius-field) var(--mn-radius-field) 0 0; } .mn-btn-group-vertical > .mn-btn:last-child { border-radius: 0 0 var(--mn-radius-field) var(--mn-radius-field); } .mn-btn-group-vertical > .mn-btn-outline + .mn-btn-outline { margin: calc(var(--mn-border-w) * -1) 0 0; } ``` --- # Toggle group · MIAN A set of pressable buttons, single choice like a segmented control, or multiple like a formatting toolbar. - Id: `toggle-group` · Category: Actions · Needs mian.js: yes · License: MIAN License (free to use) - Docs: https://mian.ro/components/toggle-group - Use for: segmented control, view switcher, formatting toolbar, choose one option inline, grid list toggle. - Alternatives: tabs, radio-card. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-toggle-group`: Container. - `data-mn-toggle="single | multiple"`: Button mode, handled by mian.js. - `mn-toggle-group-block`: Stretches to full width. ## Accessibility - Button mode sets aria-pressed on each button; arrow keys move between them. - For a form value with no JavaScript, use the label + radio version: it submits with the form and is announced as a radio group. ## Examples ### Single choice ```html
``` ### Multiple ```html
``` ### As a form field (no JS) ```html
``` ## Source CSS ```css .mn-toggle-group { display: inline-flex; gap: 2px; padding: 3px; border-radius: calc(var(--mn-radius-field) + 3px); background: var(--mn-surface-2); } .mn-toggle-group > button, .mn-toggle-group > label { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: .45em; height: calc(var(--mn-size-md) - 6px); padding: 0 .85em; border: 0; border-radius: var(--mn-radius-field); background: transparent; color: var(--mn-muted); font: 500 var(--mn-text-sm)/1 var(--mn-font); white-space: nowrap; cursor: pointer; transition: background-color var(--mn-duration) var(--mn-ease), color var(--mn-duration) var(--mn-ease), box-shadow var(--mn-duration) var(--mn-ease); } .mn-toggle-group > :hover { color: var(--mn-fg); } .mn-toggle-group > [aria-pressed="true"], .mn-toggle-group > [aria-checked="true"], .mn-toggle-group > label:has(input:checked) { background: var(--mn-surface); color: var(--mn-fg); box-shadow: 0 1px 2px rgb(0 0 0 / .08), 0 0 0 1px var(--mn-border); } .mn-toggle-group > label > input { position: absolute; opacity: 0; pointer-events: none; } .mn-toggle-group > label:has(input:focus-visible), .mn-toggle-group > button:focus-visible { outline: none; box-shadow: var(--mn-focus); } .mn-toggle-group svg { width: 1.1em; height: 1.1em; } .mn-toggle-group-block { display: flex; } .mn-toggle-group-block > * { flex: 1; } ``` ## Source JS (excerpt of mian.js) ```js register('toggle-group', (root) => { each(root, '.mn-toggle-group[data-mn-toggle]', 'Tgl', (g) => { const single = g.dataset.mnToggle !== 'multiple'; const btns = () => [...g.querySelectorAll(':scope > button')]; if (single) g.setAttribute('role', 'group'); btns().forEach((b) => { if (!b.hasAttribute('aria-pressed')) b.setAttribute('aria-pressed', 'false'); }); g.addEventListener('click', (e) => { const b = e.target.closest('button'); if (!b || !g.contains(b) || b.disabled) return; if (single) btns().forEach((x) => x.setAttribute('aria-pressed', String(x === b))); else b.setAttribute('aria-pressed', String(b.getAttribute('aria-pressed') !== 'true')); emit(g, 'change', { value: btns().filter((x) => x.getAttribute('aria-pressed') === 'true').map((x) => x.value || x.textContent.trim()) }); }); g.addEventListener('keydown', (e) => { const list = btns().filter((b) => !b.disabled); const i = list.indexOf(document.activeElement); if (i < 0) return; let n = -1; if (e.key === 'ArrowRight' || e.key === 'ArrowDown') n = (i + 1) % list.length; else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') n = (i - 1 + list.length) % list.length; if (n >= 0) { e.preventDefault(); list[n].focus(); } }); }); }); ``` --- # Dropdown menu · MIAN A menu of actions anchored to a trigger. Built on the native Popover API: top layer, light dismiss and Escape are free. - Id: `dropdown` · Category: Actions · Needs mian.js: yes · License: MIAN License (free to use) - Docs: https://mian.ro/components/dropdown - Use for: dropdown menu, more actions menu, kebab menu, user menu, overflow menu. - Alternatives: context-menu, select. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-menu + popover`: The menu panel. Give it an id and point a button's popovertarget at it. - `mn-menu-item`: A menu item: button or link. Add mn-danger for destructive items. - `mn-menu-label · mn-menu-sep · mn-menu-shortcut`: Group label, separator, trailing shortcut hint. - `data-placement`: bottom-start (default), bottom-end, top-start, top-end, right-start, left-start… - `aria-checked`: Makes an item a checkable menuitemcheckbox; the menu stays open when toggled. ## Accessibility - mian.js adds role="menu" and role="menuitem", wires aria-expanded and aria-haspopup on the trigger. - Focus moves to the first item on open. Arrow keys, Home, End and type-ahead navigate. Escape and Tab close. - Focus returns to the trigger after choosing an item. - The menu emits mn:select with the chosen item. ## Examples ### Basic ```html
Signed in as ana@mian.ro

``` ### Checkable items ```html
Visible columns
``` ### Icon trigger, aligned to the end ```html

``` ## Source CSS ```css .mn-menu { min-width: 12rem; max-width: min(22rem, calc(100vw - 16px)); margin: 0; padding: 4px; border: var(--mn-border-w) solid var(--mn-border); border-radius: var(--mn-radius-box); background: var(--mn-popover); color: var(--mn-fg); box-shadow: var(--mn-shadow-lg); font: 400 var(--mn-text-sm)/1.4 var(--mn-font); } .mn-menu[popover] { position: fixed; inset: auto; overflow: auto; max-height: min(24rem, calc(100vh - 24px)); } .mn-menu[popover]:popover-open { animation: var(--mn-enter) var(--mn-enter-duration) var(--mn-ease-enter); transform-origin: top left; } .mn-menu-item { display: flex; align-items: center; gap: .6rem; width: 100%; min-height: calc(var(--mn-size-md) - 6px); padding: .35rem .6rem; border: 0; border-radius: calc(var(--mn-radius-box) - 4px); background: none; color: inherit; font: inherit; text-align: start; text-decoration: none; cursor: pointer; outline: none; } .mn-menu-item:hover, .mn-menu-item:focus-visible { background: var(--mn-hover); } .mn-menu-item:focus-visible { box-shadow: inset 0 0 0 2px var(--mn-ring); } .mn-menu-item svg { width: 1rem; height: 1rem; color: var(--mn-muted); flex: none; } .mn-menu-item[aria-disabled="true"], .mn-menu-item:disabled { opacity: .5; pointer-events: none; } .mn-menu-item.mn-danger { color: var(--mn-danger-text); } .mn-menu-item.mn-danger svg { color: currentColor; } .mn-menu-item[aria-checked="true"]::after { content: "✓"; margin-inline-start: auto; font-weight: 600; } .mn-menu-label { padding: .5rem .6rem .25rem; font-size: .75rem; font-weight: 600; color: var(--mn-muted); } .mn-menu-sep { height: 1px; margin: 4px -4px; border: 0; background: var(--mn-border); } .mn-menu-shortcut { margin-inline-start: auto; padding-inline-start: 1rem; font-size: .75rem; color: var(--mn-muted); letter-spacing: .04em; } @keyframes mn-spin { to { transform: rotate(360deg); } } @keyframes mn-pop { from { opacity: 0; transform: translateY(-4px) scale(.98); } } @keyframes mn-fade { from { opacity: 0; } } ``` ## Source JS (excerpt of mian.js) ```js /* Dropdown menus and popovers use the native Popover API for top-layer rendering, light dismiss and Escape. MIAN adds anchoring and keyboard navigation. */ const invokers = new WeakMap(); document.addEventListener('click', (e) => { const btn = e.target.closest('[popovertarget]'); if (btn) { const target = document.getElementById(btn.getAttribute('popovertarget')); if (target) invokers.set(target, btn); } }, true); const menuItems = (menu) => [...menu.querySelectorAll('.mn-menu-item')] .filter((i) => !i.matches(':disabled, [aria-disabled="true"]') && !i.closest('[hidden]')); register('popover', (root) => { each(root, '.mn-menu[popover], .mn-popover[popover]', 'Pop', (pop) => { const isMenu = pop.classList.contains('mn-menu'); if (isMenu && !pop.getAttribute('role')) pop.setAttribute('role', 'menu'); if (isMenu) pop.querySelectorAll('.mn-menu-item').forEach((i) => { if (!i.getAttribute('role')) i.setAttribute('role', i.hasAttribute('aria-checked') ? 'menuitemcheckbox' : 'menuitem'); i.tabIndex = -1; }); // Wire aria on every invoker we can find. document.querySelectorAll(`[popovertarget="${id(pop, 'mn-pop')}"]`).forEach((b) => { b.setAttribute('aria-expanded', 'false'); if (isMenu) b.setAttribute('aria-haspopup', 'menu'); }); let anchor = null; const reposition = () => { if (anchor && pop.matches(':popover-open')) place(pop, anchor, pop.dataset.placement || 'bottom-start'); }; pop.addEventListener('toggle', (e) => { anchor = invokers.get(pop) || document.querySelector(`[popovertarget="${pop.id}"]`); const open = e.newState === 'open'; anchor?.setAttribute('aria-expanded', String(open)); if (open) { reposition(); addEventListener('scroll', reposition, true); addEventListener('resize', reposition); if (isMenu) (menuItems(pop)[0] || pop).focus({ preventScroll: true }); } else { removeEventListener('scroll', reposition, true); removeEventListener('resize', reposition); } }); if (!isMenu) return; let buffer = '', timer = 0; pop.addEventListener('keydown', (e) => { const items = menuItems(pop); const i = items.indexOf(document.activeElement); let n = -1; if (e.key === 'ArrowDown') n = (i + 1) % items.length; else if (e.key === 'ArrowUp') n = (i - 1 + items.length) % items.length; else if (e.key === 'Home') n = 0; else if (e.key === 'End') n = items.length - 1; else if (e.key === 'Tab') { pop.hidePopover(); return; } else if (e.key.length === 1 && /\S/.test(e.key)) { clearTimeout(timer); buffer += e.key.toLowerCase(); timer = setTimeout(() => (buffer = ''), 500); n = items.findIndex((it, k) => k > i - (buffer.length > 1 ? 1 : 0) && it.textContent.trim().toLowerCase().startsWith(buffer)); if (n < 0) n = items.findIndex((it) => it.textContent.trim().toLowerCase().startsWith(buffer)); } if (n >= 0) { e.preventDefault(); items[n].focus(); } }); pop.addEventListener('click', (e) => { const item = e.target.closest('.mn-menu-item'); if (!item || item.matches(':disabled, [aria-disabled="true"]')) return; if (item.hasAttribute('aria-checked')) { item.setAttribute('aria-checked', String(item.getAttribute('aria-checked') !== 'true')); return; // checkable items keep the menu open } emit(pop, 'select', { item, value: item.dataset.value ?? item.textContent.trim() }); pop.hidePopover(); anchor?.focus({ preventScroll: true }); }); }); }); ``` --- # Copy button · MIAN Copies text to the clipboard and confirms it in place, visually and for screen readers. - Id: `copy-button` · Category: Actions · Needs mian.js: yes · License: MIAN License (free to use) - Docs: https://mian.ro/components/copy-button - Use for: copy to clipboard, copy code, copy link, share link. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-copy[data-mn-copy="text"]`: Copies the given text. - `data-mn-copy-target="#el"`: Copies an element’s value or text instead. - `mn-copy-idle · mn-copy-done`: Content shown before and after copying. - `mn-copy-field`: A read-only input joined to a copy button. ## Accessibility - “Copied to clipboard” is announced in a polite live region (override with data-mn-copied). - Keep a visible label or aria-label on icon-only copy buttons. Emits mn:copy with { text }. ## Examples ### Copy buttons ```html ``` ### Copy field ```html
``` ## Source CSS ```css .mn-copy .mn-copy-done { display: none; } .mn-copy[data-copied] .mn-copy-idle { display: none; } .mn-copy[data-copied] .mn-copy-done { display: contents; } .mn-copy[data-copied] { color: var(--mn-success-text); } .mn-copy-field { display: flex; max-width: 100%; } .mn-copy-field > .mn-input { flex: 1; min-width: 0; font-family: var(--mn-font-mono); font-size: calc(var(--mn-text-sm) - 1px); border-start-end-radius: 0; border-end-end-radius: 0; } .mn-copy-field > .mn-btn { border-start-start-radius: 0; border-end-start-radius: 0; margin-inline-start: calc(var(--mn-border-w) * -1); } ``` ## Source JS (excerpt of mian.js) ```js /* ``` ## Source CSS ```css .mn-hold { --_hold: 1200ms; position: relative; overflow: hidden; isolation: isolate; } .mn-hold::before { content: ""; position: absolute; inset: 0; z-index: -1; background: color-mix(in oklab, var(--_fg, currentColor) 26%, transparent); transform: scaleX(0); transform-origin: left center; transition: transform 180ms var(--mn-ease-out); } .mn-hold[data-holding]::before { transform: scaleX(1); transition: transform var(--_hold) linear; } .mn-hold[data-done]::before { transform: scaleX(1); transition: none; } @media (prefers-reduced-motion: reduce) { .mn-hold[data-holding]::before { transition-duration: var(--_hold); } } ``` ## Source JS (excerpt of mian.js) ```js /* Fires mn:confirm only after the button was held for the whole time (pointer, or Space / Enter held). Releasing early cancels. data-done marks it done. */ register('hold-button', (root) => each(root, '[data-mn-hold]', 'Hold', (b) => { let timer = 0; const ms = () => parseFloat(getComputedStyle(b).getPropertyValue('--_hold')) || 1200; const start = () => { if (timer || b.disabled || b.hasAttribute('data-done')) return; b.setAttribute('data-holding', ''); timer = setTimeout(() => { timer = 0; b.removeAttribute('data-holding'); b.setAttribute('data-done', ''); if (b.dataset.mnHoldDone) b.textContent = b.dataset.mnHoldDone; emit(b, 'confirm'); }, ms()); }; const cancel = () => { if (!timer) return; clearTimeout(timer); timer = 0; b.removeAttribute('data-holding'); }; b.addEventListener('pointerdown', start); for (const ev of ['pointerup', 'pointerleave', 'pointercancel', 'blur']) b.addEventListener(ev, cancel); b.addEventListener('keydown', (e) => { if ((e.key === ' ' || e.key === 'Enter') && !e.repeat) { e.preventDefault(); start(); } }); b.addEventListener('keyup', (e) => { if (e.key === ' ' || e.key === 'Enter') cancel(); }); b.addEventListener('click', (e) => { if (!b.hasAttribute('data-done')) e.preventDefault(); }); })); ``` --- # Field · MIAN Label, control, hint and error message wired together, plus form and fieldset layout. - Id: `field` · Category: Forms · Needs mian.js: no · License: MIAN License (free to use) - Docs: https://mian.ro/components/field - Use for: form field, label and hint, form layout, validation error, fieldset. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-field`: Stacks a label, a control and its messages. - `mn-label · mn-req`: Label · required marker. - `mn-hint · mn-error`: Help text · error text. Link them with aria-describedby. - `mn-form · mn-form-row`: Vertical form rhythm · responsive multi-column row. - `mn-fieldset`: Groups related controls under a legend. ## Accessibility - Always pair a label with its control using for/id. - Point aria-describedby at the hint and the error; set aria-invalid="true" when invalid. - The required marker is visual, also set the required attribute on the control. ## Examples ### Label, hint and error ```html

We'll never share it.

Must be at least 3 characters.

``` ### Form layout ```html
Notifications
``` ## Source CSS ```css .mn-field { display: flex; flex-direction: column; gap: .4rem; min-width: 0; } .mn-label { font: 500 var(--mn-text-sm)/1.3 var(--mn-font); color: var(--mn-fg); } .mn-label .mn-req { color: var(--mn-danger-text); margin-inline-start: 2px; } .mn-hint { margin: 0; font-size: calc(var(--mn-text-sm) - 1px); line-height: 1.45; color: var(--mn-muted); } .mn-error { margin: 0; font-size: calc(var(--mn-text-sm) - 1px); line-height: 1.45; color: var(--mn-danger-text); } .mn-fieldset { margin: 0; padding: 0; border: 0; display: flex; flex-direction: column; gap: .6rem; min-width: 0; } .mn-fieldset > legend { padding: 0; margin-bottom: .6rem; font: 600 var(--mn-text-sm)/1.3 var(--mn-font); } .mn-form { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1.1rem; align-content: start; } .mn-form-row { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(min(100%, 12rem), 1fr)); } ``` --- # Input · MIAN Single-line text entry. Styles every native input type: text, email, password, search, number, date, time, color. - Id: `input` · Category: Forms · Needs mian.js: no · License: MIAN License (free to use) - Docs: https://mian.ro/components/input - Use for: text input, email field, search field, date input, form input. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-input`: Base input. - `mn-input-sm · mn-input-lg`: Sizes. - `aria-invalid="true"`: Error state. ## Accessibility - Use the right type and autocomplete values so mobile keyboards and password managers help. - Placeholder is not a label. ## Examples ### Types ```html
``` ### Sizes ```html
``` ### States ```html
``` ## Source CSS ```css .mn-input, .mn-textarea, .mn-select { --_h: var(--mn-size-md); display: block; width: 100%; min-width: 0; height: var(--_h); padding: 0 .75rem; border: var(--mn-border-w) solid var(--mn-input); border-radius: var(--mn-radius-field); background: var(--mn-surface); color: var(--mn-fg); font: 400 var(--mn-text-sm)/1.4 var(--mn-font); box-shadow: var(--mn-shadow-sm); transition: border-color var(--mn-duration) var(--mn-ease), box-shadow var(--mn-duration) var(--mn-ease); appearance: none; -webkit-appearance: none; } .mn-input::placeholder, .mn-textarea::placeholder { color: var(--mn-muted); opacity: .85; } .mn-input:hover, .mn-textarea:hover, .mn-select:hover { border-color: color-mix(in oklab, var(--mn-input), var(--mn-fg) 20%); } .mn-input:focus, .mn-textarea:focus, .mn-select:focus { outline: none; border-color: var(--mn-ring); box-shadow: 0 0 0 3px color-mix(in oklab, var(--mn-ring) 25%, transparent); } .mn-input:disabled, .mn-textarea:disabled, .mn-select:disabled { opacity: .55; cursor: not-allowed; background: var(--mn-surface-2); } .mn-input[aria-invalid="true"], .mn-textarea[aria-invalid="true"], .mn-select[aria-invalid="true"] { border-color: var(--mn-danger); } .mn-input[aria-invalid="true"]:focus, .mn-textarea[aria-invalid="true"]:focus { box-shadow: 0 0 0 3px color-mix(in oklab, var(--mn-danger) 22%, transparent); } .mn-input-sm, .mn-select.mn-input-sm { --_h: var(--mn-size-sm); padding: 0 .6rem; font-size: calc(var(--mn-text-sm) - 1px); } .mn-input-lg, .mn-select.mn-input-lg { --_h: var(--mn-size-lg); padding: 0 1rem; font-size: calc(var(--mn-text-sm) + 1px); } .mn-input[type="date"], .mn-input[type="time"], .mn-input[type="datetime-local"] { padding-inline-end: .5rem; } .mn-input[type="color"] { padding: 3px; width: var(--_h); cursor: pointer; } .mn-input::-webkit-search-cancel-button { -webkit-appearance: none; } ``` --- # Textarea · MIAN Multi-line text. Grows with its content in browsers that support field-sizing. - Id: `textarea` · Category: Forms · Needs mian.js: no · License: MIAN License (free to use) - Docs: https://mian.ro/components/textarea - Use for: message box, multi-line text, comment field, description field. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-textarea`: Base textarea. Resizes vertically. ## Accessibility - Label it like any input. If you enforce a maximum length, show the count and link it with aria-describedby. ## Examples ### Basic ```html

Markdown is supported.

``` ## Source CSS ```css .mn-textarea { height: auto; min-height: calc(var(--mn-size-md) * 2.2); padding: .6rem .75rem; resize: vertical; field-sizing: content; max-height: 24rem; } ``` --- # Select · MIAN A styled native select. Keeps the platform picker on mobile and full keyboard support everywhere. - Id: `select` · Category: Forms · Needs mian.js: no · License: MIAN License (free to use) - Docs: https://mian.ro/components/select - Use for: dropdown select, choose from list, country select, native select. - Alternatives: combobox, radio-card. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-select`: Styled native ``` ### With groups ```html ``` ## Source CSS ```css .mn-select { padding-inline-end: 2.25rem; cursor: pointer; background-image: linear-gradient(45deg, transparent 50%, var(--mn-muted) 50%), linear-gradient(135deg, var(--mn-muted) 50%, transparent 50%); background-position: calc(100% - 17px) 55%, calc(100% - 12px) 55%; background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; } .mn-select.mn-input-sm, .mn-select.mn-input-lg { padding-inline-end: 2.1rem; } .mn-select.mn-input-sm { background-position: calc(100% - 15px) 55%, calc(100% - 10px) 55%; } .mn-select[multiple] { height: auto; padding: .35rem; background-image: none; } .mn-select option { color: var(--mn-fg); background: var(--mn-surface); } ``` --- # Checkbox · MIAN Native checkbox, restyled. Checked, indeterminate, disabled and invalid states; any colour role. - Id: `checkbox` · Category: Forms · Needs mian.js: no · License: MIAN License (free to use) - Docs: https://mian.ro/components/checkbox - Use for: checkbox, agree to terms, multiple choice, select all rows. Use only the classes below and copy the examples' structure and ARIA; change the words. Check your markup at https://mian.ro/api/v1/validate. ## Install ```html ``` ## Classes - `mn-checkbox`: On an . - `mn-check`: A label that lays out a control with its text. ## Accessibility - It is a native checkbox, so Space toggles and state is announced. Wrap it in a