This skill should be used when the user is establishing visual importance, designing headings, creating focal points, designing CTAs or buttons, arranging label-data relationships, implementing scanning patterns (F-pattern, Z-pattern), or ensuring one dominant element per screen. Covers the three levers of hierarchy (size, weight, color), three-tier information architecture, the 'emphasize by de-emphasizing' principle, CTA design, and label-data relationships.
npx claudepluginhub oborchers/fractional-cto --plugin visual-design-principlesThis skill uses the workspace's default tool permissions.
Users form a first impression within 50ms (Lindgaard et al., 2006). Hierarchy must work at the gestalt level -- before anyone reads a single word, the eye must know where to land. If two elements compete for dominance, neither wins and the user stalls.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Users form a first impression within 50ms (Lindgaard et al., 2006). Hierarchy must work at the gestalt level -- before anyone reads a single word, the eye must know where to land. If two elements compete for dominance, neither wins and the user stalls.
Control visual importance with exactly three levers. Use them independently, not simultaneously.
| Lever | How It Works | Example |
|---|---|---|
| Size | Larger elements attract first | 2x body size for primary headings |
| Weight/Boldness | Heavier strokes draw focus | Bold for labels, regular for body |
| Color/Contrast | Higher contrast = more important | Dark text on light bg for primary, gray for tertiary |
Rule: Adjust one lever at a time. If a heading is already 2x body size, do not also make it bold and high-contrast -- that overshoots. Reserve additional levers for when a single lever is insufficient.
Every screen must have exactly three tiers of visual importance. No more, no fewer.
| Tier | Size | Weight | Contrast Ratio | Role |
|---|---|---|---|---|
| Primary | 2x body | Bold (600--700) | >= 7:1 | The star -- one per screen/section |
| Secondary | 1x body | Regular (400) | 4.5--7:1 | Supporting content |
| Tertiary | 0.75x body | Light (300--400) | 3--4.5:1 | Metadata, timestamps, captions |
If you cannot assign every text element to one of these three tiers, the hierarchy is broken.
Every screen and every section needs exactly one "star" -- the element the eye hits first. This is the F-pattern entry point, the dashboard KPI, the landing page headline.
The squint test: Squint at the screen until you can barely see it. The element that remains most visible is the star. If nothing stands out, or if two elements compete, the hierarchy has failed.
The 5-second test: Show the screen for 5 seconds, then ask: "What was this page about?" If users cannot answer, the star is not dominant enough.
Do not make the primary element louder. Make everything else quieter. When secondary and tertiary elements recede, the primary element naturally dominates without needing to be oversized or garish.
| Approach | Result |
|---|---|
| Make heading bigger, bolder, brighter | Feels aggressive, reduces reading comfort |
| Make body text lighter, smaller, lower contrast | Heading dominates naturally, entire page feels calm |
This is Steve Schoger's (Refactoring UI) core hierarchy insight: "If everything on the page is fighting for attention, nothing feels important."
| Pattern | When to Use | Key Constraint |
|---|---|---|
| F-pattern | Content-heavy pages, dashboards, lists | Place primary info on the left, secondary info indented right |
| Z-pattern | Landing pages, hero sections, CTAs | Top-left (logo) -> top-right (nav) -> bottom-left (headline) -> bottom-right (CTA) |
Place the most important content where the pattern predicts the eye will land. Do not fight the pattern -- work with it.
| Rule | Rationale |
|---|---|
| One primary CTA per section | Multiple primaries create decision paralysis |
| Button hierarchy: filled > outlined > ghost | Visual weight signals importance |
| Primary CTA uses a distinctive color | Must be the highest-contrast interactive element |
| Secondary actions use outlined or ghost buttons | Visually subordinate to primary |
| Destructive actions use red, but not filled-red at primary weight | Prevent accidental clicks |
Labels exist to describe data. Data is what the user came for. Labels must always be subordinate.
| Property | Label | Data |
|---|---|---|
| Size | 0.75--0.875x body | 1x body or larger |
| Weight | Regular or light | Medium or bold |
| Contrast | Lower (tertiary tier) | Higher (primary/secondary tier) |
| Color | Muted gray | Full-strength text color |
Anti-pattern: Labels in bold, data in regular weight. This inverts the hierarchy and forces users to scan past the noise to find the value.
| Anti-Pattern | Problem | Fix |
|---|---|---|
| Everything same size and weight | No entry point, no scannable structure | Apply three-tier architecture |
| Multiple competing CTAs | Decision paralysis, lower conversion | One primary CTA per section |
| Labels dominating data | User scans past noise to find values | Labels subordinate: smaller, lighter, lower contrast |
| Heading + bold + color simultaneously | Overshooting, feels aggressive | Adjust one lever at a time |
| No squint-test star | Page has no focal point | Designate one dominant element and de-emphasize the rest |
Working implementations in examples/:
examples/three-tier-hierarchy.md -- Implementing 3-tier hierarchy with CSS custom properties, Tailwind utilities, and React components, with good/bad comparisonWhen reviewing or building visual hierarchy:
accessibility-inclusive-design skill)