$npx -y skills add bitjaru/styleseed --skill ss-scoreScore a visual artifact's implementation quality 0-100 against its composed StyleSeed rule set — category breakdown, evidence, and prioritized fixes.
| 1 | # Design Score |
| 2 | |
| 3 | `/ss-review` tells you *what's wrong*. `/ss-score` tells you *how good it is |
| 4 | overall* and *what to fix first* — a single number plus a category breakdown, so |
| 5 | you can track UI quality like you track test coverage. |
| 6 | |
| 7 | ## When NOT to use |
| 8 | |
| 9 | - For a quick pass/fail before committing → use `/ss-lint` |
| 10 | - For a full prose audit with fixes → use `/ss-review` |
| 11 | - For logic/config with no visual artifact — scoring is meaningless |
| 12 | |
| 13 | ## Step 0 — Resolve the effective rule set |
| 14 | |
| 15 | Before scoring, read `PRODUCT-PRINCIPLES.md`, `RULESETS.md`, `ADAPTERS.md`, `PRESETS.md`, and `STYLESEED.md`. |
| 16 | If the lock selects `reference:<slug>`, read its project-local `RULESET.md` and evidence/checks. |
| 17 | |
| 18 | Score in authority order: core invariants first, then the exact output grammar, domain/page, |
| 19 | optional aesthetic profile, and bounded lock values. The lock cannot waive an invariant. |
| 20 | Unknown values fall back to the nearest built-in grammar; do not invent an exception. |
| 21 | |
| 22 | The output must name the effective rule set, for example: |
| 23 | |
| 24 | ```text |
| 25 | Rule set: operations-console × SaaS × dashboard × swiss |
| 26 | ``` |
| 27 | |
| 28 | ## What to score |
| 29 | |
| 30 | Score the file (or each file in a directory) on **eight weighted categories** that |
| 31 | map to the design language. Total = 100. |
| 32 | |
| 33 | | Category | Weight | Reads from | |
| 34 | |---|---|---| |
| 35 | | **Color discipline** | 16 | DESIGN-LANGUAGE §1, §18, §72 + VISUAL-CRAFT §C4 | |
| 36 | | **Hierarchy & typography** | 16 | §2, §3, §4, §16 + Font Size table + VISUAL-CRAFT §C2 | |
| 37 | | **Layout & rhythm** | 12 | §13, §14, §15, §61 + VISUAL-CRAFT §C1 | |
| 38 | | **Cards & elevation** | 10 | §7, §8, §12, §1 + VISUAL-CRAFT §C3 | |
| 39 | | **States & a11y** | 18 | §11, §70, §71, §72 + VISUAL-CRAFT §C3 | |
| 40 | | **Motion & interaction** | 6 | §24, §59 + `engine/motion` | |
| 41 | | **Coherence** | 12 | VISUAL-CRAFT §C0 (one choice per axis) | |
| 42 | | **Distinctiveness** | 10 | Golden Rules 14–16 + VISUAL-CRAFT §CC-9b (not generic/default/template) | |
| 43 | |
| 44 | ## How to score each category |
| 45 | |
| 46 | For each category, start at full marks and **subtract** for violations you find by |
| 47 | reading the code. Be specific and evidence-based — cite the line. |
| 48 | |
| 49 | **Color discipline (16)** — deduct for: accidental `#000`/`text-black` outside a profile or |
| 50 | grammar contract that explicitly uses hard black structurally (−4 each, cap −8); competing |
| 51 | decorative emphasis hues (−5); **emoji used as UI icons** (−5); **a normal/OK/"보통" state shown in a status color** instead of |
| 52 | neutral grey (−4); **status color on most/every row** (no severity hierarchy) (−4); |
| 53 | **decorative hues** (gold stars, rainbow category dots) instead of accent/grey (−3); |
| 54 | hardcoded hex where a semantic token exists (−2 each, cap −6); status conveyed by color |
| 55 | alone (−4); **the unlocked default indigo (`#5E6AD2`/`#4F46E5`) used as the accent** instead of |
| 56 | a chosen domain-fit color (−4). |
| 57 | |
| 58 | **Distinctiveness (10)** — a coherent screen can still read "AI-generated." Deduct for: the |
| 59 | **icon-chip cliché** — a generic Lucide line-icon in an identical pale-tinted rounded-square, |
| 60 | repeated for every feature/step (−4, §CC-9b); the **StyleSeed demo layout copied verbatim** |
| 61 | (hero+chat / 3-step / feature-grid / pricing) with no product-specific identity (−4); **no focal |
| 62 | point** — an all-even grid of same-weight, centered, evenly-spaced cards (−3); the hero shows a |
| 63 | stock/placeholder visual instead of *this* product (−3); the **escape hatch as a new uniform** |
| 64 | (§CC-9c) — ghost 01/02/03 index numbers on every section, or identical uppercase-overline + |
| 65 | big-number cards repeated with no variation (−2); **distinctive-but-dated** (§CC-9d) — full |
| 66 | beige/paper page base, serif body text on a product surface, dark-heavy blocks that read |
| 67 | "brochure" not "2026 product" (−3). Cap −10. |
| 68 | |
| 69 | **Hierarchy & typography (16)** — deduct for: number/unit not ~2:1 (−4); font |
| 70 | sizes off the Font Size table / `text-[var(--…)]` for size (−5); everything the |
| 71 | same weight, no clear primary (−5); cramped or wrong line-height on body (−3); |
| 72 | **body < 16px on a desktop/web B2B surface** (tight mobile scale on a wide screen) (−4 — |
| 73 | but dense-data chrome is exempt: chart ticks, mono SHAs/timestamps, table metadata at |
| 74 | 12–13px are correct; and dashboard app-chrome h1 at 22–24px is correct, not a violation |
| 75 | of the marketing 40–56px headline scale). |
| 76 | |
| 77 | **Layout & rhythm (12)** — deduct for: grouping that contradicts the selected grammar (−6): |
| 78 | `operations-console` needs explicit functional groups, while `editorial-reading` should not be |
| 79 | forced into cards; arbitrary off-scale spacing (−3); same section type repeated without purpose |
| 80 | (−4); no discernible proximity rhythm (−3). |
| 81 | |
| 82 | **Cards & elevation (10)** — deduct for mixed or task-inappropriate surface language. Hairlines, |
| 83 | flat grouping, tonal ramps, or restrained shadows are valid only when the selected grammar/profile |
| 84 | uses them c |