Install any skill in seconds. Free to start, no credit card required.
Get Started Free →웹 프로젝트의 브랜드 정합 시각 디자인 시스템 전문가. 히어로 우선 레이아웃 체이닝, WCAG 2.1 AA 접근성, Lighthouse 80점 이상, 브랜드 정체성 파일에서 디자인 토큰 추출을 보장합니다. 색상 팔레트, 타이포그래피, 여백, 컴포넌트 사양을 다룹니다.
.claude/skills/modu-ai-design-brand-system/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 71% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 263% | 0% |
| case-03 | ✓→✗ | ▼ Worse | -60% | 0% |
> ⚠️ 개발 런타임 전용 — 이 스킬은 MoAI-ADK(Claude Code) 환경을 전제한다. Claude Cowork(Desktop)에서는 .moai/config 의존으로 동작하지 않을 수 있다. Desktop 사용자는 moai-coworker:collab-brand-identity(브랜드 아이덴티티 산출물)를 사용한다.
Visual design system skill for brand-aligned web projects. Absorbed from the retired v2.x *-design-system capability (per the design-system absorption policy) at v1.0.0. Enforces hero-first chaining, WCAG 2.1 AA contrast, and structured design token output for downstream implementation.
Before generating design output, verify:
.moai/project/brand/visual-identity.md exists and contains no _TBD_ markers.design-copywriting JSON output or inline brief)..moai/config/sections/design.yaml default_framework).If visual-identity.md has unresolved _TBD_ markers, stop and request brand interview completion.
If the defined color palette conflicts with generated design tokens, execution halts and a conflict report is returned (see Error Handling below).
Figma integration is disabled by default. Check .moai/config/sections/design.yaml:
figma:
enabled: falseIf figma.enabled: true and a public Figma file URL is provided, extract design tokens from the Figma file. Otherwise use visual-identity.md as the sole source of truth.
The hero section establishes the visual tone for the entire site. All subsequent sections chain from it:
visual-identity.md.Hero section requirements:
Extract and output the following token categories from visual-identity.md:
Color tokens:
color.primary: Brand primary color (hex or OKLCH)color.primary.foreground: Text on primary background (must pass 4.5:1 contrast)color.secondary: Secondary brand colorcolor.accent: Call-to-action and highlight colorcolor.neutral.*: Scale from 50 to 950 (gray shades)color.semantic.success, color.semantic.warning, color.semantic.error: Status colorscolor.background: Page backgroundcolor.surface: Card and component backgroundTypography tokens:
font.family.sans: Primary sans-serif stackfont.family.mono: Code and technical contentfont.size.*: Scale: xs (12px), sm (14px), base (16px), lg (18px), xl (20px), 2xl (24px), 3xl (30px), 4xl (36px)font.weight.normal, font.weight.medium, font.weight.bold, font.weight.blackline.height.tight (1.25), line.height.normal (1.5), line.height.relaxed (1.75)Spacing tokens:
space.1 (4px) through space.24 (96px), following 4px gridspace.section: Vertical section padding (default 80px desktop, 48px mobile)space.container.max: Maximum content width (default 1280px)space.container.padding: Horizontal page padding (default 24px mobile, 48px desktop)Border radius tokens:
radius.sm (4px), radius.md (8px), radius.lg (12px), radius.xl (16px), radius.full (9999px)Shadow tokens:
shadow.sm, shadow.md, shadow.lg, shadow.xlOutput all tokens as a structured JSON file compatible with CSS custom properties and Tailwind CSS v4 theme configuration.
All color combinations must pass these contrast ratios:
| Use case | Minimum ratio | Requirement | | --- | --- | --- | | Body text (< 18px or < 14px bold) | 4.5:1 | WCAG AA | | Large text (>= 18px or >= 14px bold) | 3:1 | WCAG AA | | UI components and graphical objects | 3:1 | WCAG AA | | Focus indicators | 3:1 | WCAG AA |
If the brand's visual-identity.md specifies a color combination that fails contrast, execution halts and a conflict report is returned. The report includes:
AI slop detection — Reject these visual patterns without brand justification:
#FFFFFF) on light gray (#F9FAFB) background without border or shadowDefine the following component specifications in the design output:
Button:
color.primary background, color.primary.foreground textcolor.secondary background or transparent with bordercolor.semantic.error backgroundcolor.accent), disabled (40% opacity)Card:
color.surfacecolor.neutral.200 (light mode)radius.lgspace.6 (24px)shadow.sm (default), shadow.md (on hover)Navigation:
font.size.sm, font.weight.mediumSection layout:
space.section (see spacing tokens)space.container.maxspace.container.paddingcolor.background and color.surface for visual rhythmDefault responsive grid:
Hero layout options (select based on visual-identity.md preference):
centered: Content centered, full-width background image or gradientsplit-left: Copy left (7 cols), visual right (5 cols)split-right: Visual left (5 cols), copy right (7 cols)Color palette conflict: When generated design tokens conflict with visual-identity.md defined palette, halt execution and return:
BRAND_DESIGN_CONFLICT: Color token mismatch detected.
- Defined in visual-identity.md: <color>
- Generated token: <color>
- Conflict: <explanation>
- Resolution options: [list 2-3 adjustments]WCAG contrast failure: When brand colors fail contrast requirements, halt and return the conflict report described in the WCAG section. Do not generate fallback colors silently.
Missing identity file: When visual-identity.md does not exist or contains only _TBD_ values, return:
BRAND_DESIGN_MISSING_IDENTITY: visual-identity.md is incomplete.
- Unresolved markers found: <list of _TBD_ fields>
- Action required: Run brand interview via /moai designWhen brand context specifies dark mode support:
color.*.dark variants for each semantic colorprefers-color-scheme for automatic switchingKeep interaction guidelines minimal and purposeful:
ease-out for entrances, ease-in for exits, ease-in-out for state changesprefers-reduced-motion media queryGenerated design must meet:
design-copywriting: Copy length constraints inform layout choicesdesign-workflow: Replaces code-based design when Claude Design bundle is available (Path A handler)design-iteration-loop: Design Quality dimension evaluates token compliance and WCAGmoai-domain-uiux: Extends with accessibility audit patternsSource: Absorbed from the retired v2.x *-design-system capability v1.0.0 (per the design-system absorption policy) on 2026-04-20. REQ coverage: (internal provenance omitted) Version: 0.1.0
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | pass→fail | 37,702 | 6,037 | -84% | 1 | 1 | 0% | 7,343 | 2,908 | -60% | 0 | 0 | — |
case-01 | pass→fail | 25,795 | 15,384 | -40% | 1 | 1 | 0% | 5,768 | 2,855 | -51% | 0 | 0 | — |
case-02 | fail→pass | 43,151 | 32,652 | -24% | 1 | 1 | 0% | 8,239 | 8,186 | -1% | 0 | 0 | — |
case-04 | pass→pass | 12,975 | 9,939 | -23% | 1 | 1 | 0% | 1,528 | 3,411 | +123% | 0 | 0 | — |
case-05 | pass→pass | 12,896 | 11,130 | -14% | 1 | 1 | 0% | 1,482 | 3,606 | +143% | 0 | 0 | — |
case-06 | pass→pass | 14,750 | 14,258 | -3% | 1 | 1 | 0% | 2,473 | 3,979 | +61% | 0 | 0 | — |
case-07 | fail→pass | 16,032 | 14,764 | -8% | 1 | 1 | 0% | 2,848 | 4,319 | +52% | 0 | 0 | — |
case-08 | pass→pass | 22,990 | 9,448 | -59% | 1 | 1 | 0% | 3,456 | 3,358 | -3% | 0 | 0 | — |
case-09 | pass→pass | 19,239 | 15,466 | -20% | 1 | 1 | 0% | 2,500 | 4,504 | +80% | 0 | 0 | — |
case-10 | pass→pass | 16,192 | 13,767 | -15% | 1 | 1 | 0% | 2,041 | 4,193 | +105% | 0 | 0 | — |
case-11 | pass→pass | 13,947 | 7,808 | -44% | 1 | 1 | 0% | 1,827 | 3,042 | +67% | 0 | 0 | — |
case-12 | fail→pass | 14,170 | 1,724 | -88% | 1 | 1 | 0% | 1,662 | 2,834 | +71% | 0 | 0 | — |
case-13 | pass→pass | 15,487 | 10,249 | -34% | 1 | 1 | 0% | 1,788 | 4,335 | +142% | 0 | 0 | — |
case-14 | pass→pass | 14,913 | 8,073 | -46% | 1 | 1 | 0% | 2,647 | 3,024 | +14% | 0 | 0 | — |
case-15 | pass→pass | 13,220 | 9,880 | -25% | 1 | 1 | 0% | 2,510 | 3,361 | +34% | 0 | 0 | — |
case-16 | pass→pass | 16,428 | 7,856 | -52% | 1 | 1 | 0% | 1,890 | 3,070 | +62% | 0 | 0 | — |
case-17 | pass→pass | 13,596 | 7,689 | -43% | 1 | 1 | 0% | 1,719 | 2,962 | +72% | 0 | 0 | — |
case-18 | pass→pass | 16,869 | 11,432 | -32% | 1 | 1 | 0% | 1,923 | 3,661 | +90% | 0 | 0 | — |
case-19 | pass→pass | 9,832 | 9,328 | -5% | 1 | 1 | 0% | 1,696 | 3,252 | +92% | 0 | 0 | — |
case-20 | pass→pass | 15,961 | 15,490 | -3% | 1 | 1 | 0% | 1,657 | 4,140 | +150% | 0 | 0 | — |
case-21 | pass→pass | 39,427 | 31,861 | -19% | 1 | 1 | 0% | 8,219 | 10,266 | +25% | 0 | 0 | — |
case-22 | fail→pass | 10,625 | 23,353 | +120% | 1 | 1 | 0% | 1,714 | 6,227 | +263% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 20 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.