Taste Engineering · 6 / 12

Consistency: Where System Feel Comes From

Some UIs look fine piece by piece, yet feel cobbled-together as a whole. What they lack is one thing: a shared set of variables everyone follows. This lesson is about design tokens — variables first, styles follow.

design tokenCSS variablessystem feel
Fine alone, cobbled-together as a whole

The mismatched feel has concrete causes: this button is 36 tall, that one 40; this card radius 8, that one 16; rose a shade deeper here, lighter there. Each was written ad hoc — fine alone, exposed when stacked. The fix is to fold those "ad-hoc numbers" into variables: set tokens first (primary, radius, control height, spacing steps), and every style reads from tokens. Fewer one-off decisions — the UI starts looking like one family.

What consistency buys you

Consistency sounds like fussiness; it buys real money. About Face 4 cites Nielsen's ledger: unified UI standards raise output and cut errors through predictability — rules learned on one page still work on the next, so learning cost and training spend drop. Apple and Microsoft happily let third-party apps look like their systems so users never have to relearn.

With consistency, users gainWithout it, users pay
Buttons look like this, behave like that — you can predict with eyes closedEvery new page means probing from scratch
Learn once, works sitewide"Last page, Save was top-right…"
UI fades into the background; attention stays on contentDifferences keep yanking attention onto the chrome

The same book says the hard part up front: standards cover the grammar of look and feel, not deeper logic. Treating standards as a cure-all is as wrong as thinking a style guide writes a great novel. So this lesson teaches setting variables for UI — not locking creativity.

Real case: the top bar you're looking at

This isn't a classroom fiction. The source of this site's course list page learn.html has these two variables — original comments included:

:root{ /* Unified height & radius for top-bar controls: Share, Theme, Community, Language, Account share one tier; controls injected by auth.js also read these, so nobody ships mismatched button sizes */ --xa-ctl-h:36px; --xa-ctl-r:10px; }

On the site you're reading, those five top-bar buttons are governed by these two variables: no one may bring their own size — all read 36px height and 10px radius. Want a sitewide restyle someday? Change these two lines.

Flip the switch — mismatch shows up
Variable switch Tap to switch
Same row of top-bar buttons — switch to "Each its own" and watch what happens.
xueai.app/slides/learn.html
Share Theme Community Language Account
Shared variables: five buttons read the same token pair — height 36, radius 10. None sticks out; lined up, they're even.
Change one variable — five controls move together
One radius variable for the whole UI Drag the slider
All five controls below read the same --demo-radius. Drag the slider.
Primary
Input
Card
Modal
Delete this record?
12px
Around 12: soft and friendly — the safe zone for most products.

Notice what just happened: you changed one variable, and the button, card, input, avatar, and modal moved together. Style is what variables are set to; system feel is that the variables exist. Values are debatable — variables must come first.

Spot the difference: which app feels like one maker
Spot the difference: which side is better Pick a side
List and detail thumbnails of the same mini app. Which side looks like one team? Pick a side.
Plan A
New
Detail
Save
Plan B
New
Detail
Save
Drill: this settings page hides five inconsistencies

Once tokens are set, the remaining work is catching drift. The settings page below looks normal at a glance — it hides five inconsistencies of the kind AI-generated UIs ship every day. Tap each one you find.

Find the inconsistencies 0 / 5
Hint: watch buttons, radius, blue, icons, and row gaps — one drift each.
settings.example.com
Settings
Account profile
Avatar, nickname, phone
Edit
Sign-in & security
Password, 2FA
Change password
Notifications
Push, email, DND
Manage
General
Language, type size, theme
Manage
Need help? Help Center
Start with whatever sticks out most.
Difference isn't a crime — no reason is

About Face 4 puts the consistency test in two lines: every element needs a sufficient reason to exist, and every difference needs a sufficient reason too. A Delete button redder than the rest has a solid reason: different behavior should look different — identical looks with different jobs is what traps people. Flip it: two peer cards with radius 8 and 16, and nobody can say why — that's drift to fold in. The book also offers a handy lever: rather than add new elements, let one element do more jobs; fewer elements make consistency easier to keep.

Of these four differences, which has a sufficient reason Single choice
ADetail page changes card radius from 12 to 16 — "mix it up or it's too dull"
BEvery button is blue sitewide — only "Delete account" is red
CTwo peer section titles: one 18px, one 20px
DSidebar icons half line-style, half filled — "use whichever looks better"
Ship it: hand the variable table to AI

What you learn here should become a paragraph at the top of any Prompt where you ask AI to build UI. The variable table below is ready to use — change values for your product. The key is that every decision has a source, so AI never gets to invent numbers for you.

Variable table for AI
Follow this variable table for all site styles before writing any page: // Color: one primary + neutrals; semantic colors only for status Primary #2563eb (hover deepen to #1e40af; no second blue) Neutrals text #111827 / secondary #6b7280 / border #e5e7eb Semantic success #16a34a / danger #dc2626 — status only, never decoration // Size: always read from steps; no ad-hoc numbers Radius always 10px (avatars excepted — use circle) Control height always 36px Spacing only 8 / 16 / 24 / 40 Type size only 13 / 15 / 18 / 24; weights only 400 and 700 // Acceptance: self-check before ship Check buttons, radius, blue, icon style, and row gaps screen by screen; any off-table value means unfinished.
Tap Copy at top-right, paste at the start of your next AI UI Prompt.

This table governs "new UI from today." If the project has been running and styles already diverge, a variable table alone isn't enough — you have to pull scattered implementations back in first. That's surgery; the steps are in Vibe Coding · Style Convergence: Don't Ship Eight CSS Kits for One Button: how to inventory debt, merge in batches, and which differences to keep.

Key Takeaways

System feel comes from shared variables: set tokens first (primary, radius, control height); styles read from tokens — the cobbled-together feel fades.

Fastest consistency check: put two screenshots side by side; watch buttons, radius, and primary depth for drift.

When AI builds UI, hand over the variable table first: put primary, radius, and control height in the Prompt before it starts — consistency jumps.

The two-line test: every element needs a reason; every difference needs a reason. Keep Delete's red; fold in radii you can't explain.

Sources: Original to Xiaoshan Academy's Taste Engineering series; consistency, the value of standards, and "differences need reasons" adapted from About Face 4: The Essentials of Interaction Design, Chapter 17 (Alan Cooper et al.).