| name | impeccable |
| description | Eliminate generic-looking UI — anti-default checklist, custom hover states, precision typography, non-stock spacing, surface depth, and production-grade polish that separates professional from template. Use when asked to "make this look less generic", "UI looks Bootstrap-y", "looks like a template", "add polish", "impeccable UI", "production quality design", "make it look custom", "it looks like every other SaaS app", "remove default styles", or "design lacks personality". Do NOT use for: design system token architecture — see design-system-gen. Do NOT use for: animation timing specifics — see motion-design.
|
| origin | adapted:MIT © pbakaus |
| license | MIT © 2026 Vũ Văn Tâm |
| version | 1.0.0 |
| compatibility | Tailwind CSS, CSS Modules, vanilla CSS. Framework-agnostic. |
When to Use
- Use when: the UI looks "good enough" but not distinctive
- Use when: hover/focus states are missing or use browser defaults
- Use when: spacing feels arbitrary (pulled from a preset, not considered)
- Use when: the product lacks a visual personality or feels interchangeable
- Do NOT use for: animation timing — see motion-design
- Do NOT use for: full design system architecture — see design-system-gen
The Anti-Generic Checklist
Typography
Color
Spacing
Surfaces
Hover States That Feel Custom
button { cursor: pointer; }
.btn-primary {
background: var(--primary);
transition: background 150ms, box-shadow 150ms, transform 80ms;
}
.btn-primary:hover {
background: color-mix(in srgb, var(--primary) 85%, white);
box-shadow: 0 4px 14px color-mix(in srgb, var(--primary) 40%, transparent);
}
.btn-primary:active {
transform: translateY(1px);
box-shadow: none;
}
.card {
box-shadow: 0 1px 3px rgb(0 0 0 / 0.08);
transition: box-shadow 200ms, transform 200ms;
}
.card:hover {
box-shadow: 0 8px 24px rgb(0 0 0 / 0.12);
transform: translateY(-2px);
}
Typography Precision
h1, h2, h3 {
font-weight: 700;
letter-spacing: -0.025em;
line-height: 1.15;
text-wrap: balance;
}
p {
font-size: 1rem;
line-height: 1.6;
max-width: 70ch;
color: hsl(220 15% 25%);
}
label, caption, .meta {
font-size: 0.875rem;
letter-spacing: 0.01em;
color: hsl(220 10% 50%);
}
Surface Depth — Not Flat, Not Glossy
:root {
--surface-base: hsl(220 14% 96%);
--surface-raised: hsl(0 0% 100%);
--surface-overlay: hsl(0 0% 100%);
--shadow-sm: 0 1px 2px hsl(220 40% 15% / 0.06);
--shadow-md: 0 4px 12px hsl(220 40% 15% / 0.10);
--shadow-lg: 0 16px 40px hsl(220 40% 15% / 0.14);
}
.card { background: var(--surface-raised); box-shadow: var(--shadow-sm); }
.modal { background: (--surface-overlay); : (--shadow-lg); }
{ : (--surface-overlay); : (--shadow-md); }
Small Details That Separate Good from Great
::selection {
background: color-mix(in srgb, var(--primary) 25%, transparent);
color: inherit;
}
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
background: hsl(220 10% 80%);
border-radius: 99px;
}
::-webkit-scrollbar-thumb:hover {
background: hsl(220 10% 65%);
}
::placeholder { color: hsl(220 10% 65%); font-style: italic; }
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
}
Anti-Fake-Pass Rules
Before claiming UI polish is done, you MUST show:
Reference: gates/anti-fake-pass-gate.md