ui-ux — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ui-ux (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Before making any changes:
with every control, inspect computed styles, take screenshots. Click through every reachable state. Include empty/zero-data states.
choices, color palette, and copy tone. Classify as elegant (serif, sharp corners, restrained palette), playful (rounded, saturated, casual copy), or neutral (sans-serif, medium radius, professional). Flag inconsistencies — e.g. playful rounded buttons with formal serif headings.
before/after screenshots to confirm improvements.
ones are resolved. Keep iterating until the design is coherent and polished.
to the CSS — reuse or refactor what exists.
opacity ≤ 0.4, cursor: not-allowed.When multiple actions compete, only one gets primary treatment:
| Role | Style |
|---|---|
| Primary | Solid fill, brand color, prominent |
| Secondary | Outline or muted fill |
| Tertiary | Ghost / text-only link style |
| Destructive | Tertiary or secondary — never red primary alongside other primaries |
tell what the intended action is. Demote everything except the one thing you want the user to do.
[email protected] doesn't need an "Email:" prefix.Dates, phone numbers, currency, and URLs are self-evident.
styled text or a badge.
weight, and lower contrast than their values.
scannability.
unrelated elements — title tight to its body, generous gap before the next section.
vs. body-to-next-title distances. Audit icon-to-label gaps vs. label-to-label gaps in lists.
over border: 1px solid. Borders between every element create visual clutter.
separated only by gap + shadow reads cleaner than bordered rows.
line-height: 1.4–1.6× font size. Large headings can go tighter (~1.1–1.2).use shorter (~1.4–1.5).
letter-spacing: -0.02em to-0.05em). Loosen all-caps text (letter-spacing: 0.05em+).
ch units or measure rendered text. Applies even when the element shares a row with images or sidebars.
max-width — justbecause the nav is full-width doesn't mean the body should be. A checkout page or article at 600–800px centered reads far better than stretched to 1400px.
on mobile, consider splitting into 2–3 columns rather than just making it wider.
fine-tune padding, font-size, and icon-size independently — don't scale all properties by the same factor.
darker for text and accents.
| Color | Meaning |
|---|---|
| Blue | Info |
| Green | Success |
| Red | Error |
| Yellow | Warning |
4.5:1 for body, 3:1 for large text.box-shadow — buttons, cards, dropdowns, modals.line-height of adjacent text — verify with getComputedStyle.4–6px.8px 16px or 12px 24px.44×44px.Every interactive element must have all required states:
| Element | States |
|---|---|
| Buttons | default / hover / active / disabled / loading |
| Inputs | default / focus / error (red border + message) / success |
:hover, :focus, :active, :disabled selectors.labels morphing to "Saved ✓", copy button should confirm copy happened, etc.
150–300ms, ease-out curves.page.evaluate() with CSS transitions and animations.4.5:1.backdrop-filter: blur() where missing.a blank page.
main focus.
should be hidden or disabled when there's zero content. Showing them empty creates confusion.
page from feeling broken.
crop overflow. Never let aspect ratios break your layout.
image with a white or light background, it bleeds into your page background.
borderinstead of shadow, background, or spacing
no max-width constraint
max-widthin ch or px
hierarchy
"Date: March 5, 2025"
bleeding into page background
playful colors with formal copy
.avatar {
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
/* OR */
border: 1px solid rgba(0, 0, 0, 0.05);
}.search-panel {
position: relative;
margin-top: -60px; /* pulls up into the hero section */
}.card {
box-shadow:
0 1px 3px rgba(0, 0, 0, 0.12), /* tight, dark — defines edge */
0 8px 24px rgba(0, 0, 0, 0.08); /* wide, soft — ambient lift */
}.card { border-top: 4px solid var(--color-primary); }
.alert { border-left: 4px solid var(--color-warning); }~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.