Install any skill in seconds. Free to start, no credit card required.
Get Started Free →디자인·프론트 업계가 '감'으로 쓰던 인터페이스 디테일을 수치화한 규칙으로 적용(APPLY)하거나 감사(AUDIT)한다. Jakub Krehel의 make-interfaces-feel-better 철학을 계승 + HIG/Material/WCAG/DS 토큰/실무자 리서치로 확장한 17축·113규칙(provenance 등급별). 모션 타이밍·이징·동심원 radius·tabular-nums·44px 타깃·focus ring·prefers-reduced-motion 등. 'feel 좋게 다듬어줘', '인터페이스 디테일 적용', 'feel 점검', '마이크로 인터랙션 손봐줘', 'make this feel better', 'polish the interactions', 「インターフェースの細部を詰めて」, 「介面細節打磨」 류에 트리거. 브랜드 토큰은 DESIGN.md(omd:apply)가 우선.
.claude/skills/kwakseongjae-omd-feel/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 217% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 80% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 159% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 259% | 0% |
<!-- omd:installed-skill — managed by omd install-skills. Do not edit; rerun the command to refresh. -->
업계가 감(感)으로 쓰던 인터페이스 디테일 — "이 정도 속도", "이 정도 그림자", "이 정도 여백" — 을 출처 등급이 매겨진 체크 가능한 숫자로 바꿔 적용하고 감사하는 스킬. Jakub Krehel의 "great interfaces are a collection of small things that compound" 명제를 계승하되, 어떤 숫자를 맞춰야 하는지 / 언제 틀렸는지까지 수치로 답한다.
핵심 통찰: 품질은 수십 개 작은 제약을 각자의 band 안에 가둔 것의 적분이다. 600ms짜리 체크박스 틱, 1px focus ring, 본문 2.85:1 대비, @media (hover:hover) 게이트 없는 hover lift — 하나하나가 "feel"에서 측정 가능한 차감이다. 이 스킬은 그 차감을 막는다.
전체 규칙(17축·113개)은 reference.md에, 각 숫자의 출처·tier·방법론은 provenance.md에 있다. 아래 cheat-sheet는 항상 로드되는 핵심이고, 깊은 감사·엣지 축은 reference를 읽는다.
UI 작업이 아니면 트리거하지 않는다. 카피·정보구조만 다루는 작업은 대상 아님.
모든 규칙은 tier를 달고 있고, tier가 강제 강도를 정한다. 이게 "감을 정직하게 수치화"하는 방법 — spec 숫자는 게이트, 취향 숫자는 제안.
| Badge | Tier | APPLY | AUDIT severity | |---|---|---|---| | 🟢 SPEC | spec-authoritative (W3C/WCAG·HIG·normative) | 강제 | BLOCK | | 🟢 DS | ds-token (커밋된 디자인시스템 토큰) | 강제 (브랜드가 덮지 않으면) | BLOCK | | 🟡 CONV | industry-convention (독립 실무자 ≥2 수렴) | 기본값으로 적용 | WARN | | ⚪ OP | single-opinion (신뢰할 만한 1인) | 제안만 | FYI | | ⚪ FOLK | folklore-unverified (근거 추적 불가) | 제안 + tier 명시 | FYI |
분포: SPEC 61 · DS 24 · CONV 19 · OP 7 · FOLK 2 → 85/113이 spec·token 근거(강제 가능).
> DESIGN.md가 항상 이긴다. 브랜드 DESIGN.md 토큰이 규칙과 충돌하면 브랜드 토큰이 권위. 이 규칙들은 브랜드가 침묵할 때의 기본값이지 override가 아니다. 프로젝트 루트에 DESIGN.md가 있으면 omd:apply로 먼저 토큰을 읽고, 빈 축만 feel 규칙으로 채운다.
> tier 표기: 🟢=강제, 🟡=기본값, ⚪=제안. 충돌 시 DESIGN.md > 🟢 > 🟡 > ⚪.
cubic-bezier(0,0,0.2,1) · exit = ease-in/accelerate · 이미 보이는 morph = ease-in-out · 스피너/progress = linear. enter에 ease-in 금지. 🟡(response 0.55, damping 0.825, bounce 0), 기능적 UI는 bounce <0.4. 🟢@keyframes. 🟢overscroll-behavior: contain (스크롤 체이닝·PTR 차단). 🟢scrollbar-gutter: stable. font-display: optional(또는 swap)+metric override. 입력 500ms 창 밖에서 콘텐츠 위쪽 삽입 금지. 🟢role=dialog + aria-modal=true, 열 때 다이얼로그로 focus, Tab trap, Esc 닫기, 닫을 때 트리거로 focus 복원, 배경 inert. scrim #000 ~32%. 🟢transition: all 금지; will-change는 transient(쉴 때 제거). 🟢backdrop-filter: blur(16px) saturate(180%) + 반투명 fill ~0.6 + 1px hairline + 불투명 fallback, 텍스트 ≥4.5:1. 🟡/🟢prefers-reduced-motion: reduce → cross-fade/즉시 전환, 큰 이동·parallax 제거(작은 opacity는 유지). ≤3 flashes/s. focus outline은 대체 없이 제거 금지(:focus-visible). 🟢DESIGN.md가 있나? 있으면 omd:apply 절차로 토큰(색·radius·spacing·motion·type) 먼저 read. 브랜드 토큰 = 권위.reference.md의 해당 섹션 참조.omd:designer-review와 같은 advisory(읽기 전용) 패턴 + feel 축. 매 호출 DESIGN.md 재read(캐싱 금지).
artifact_path(HTML/JSX/TSX/CSS) + (있으면) design_md_path + viewport.reference.md의 각 규칙 🔍 machine_check를 artifact에 적용. 예:transition: all / >400ms duration / off-grid duration → 검출<img>, aria-modal 없는 modal, overscroll-behavior 없는 오버레이🟢 in-band / 🟢 applicable을 핵심 숫자로, WARN/FYI는 부차. "feel-score 18/22 SPEC in-band, BLOCK 2, WARN 5".<work_dir>/.reviews/feel-audit-round-<N>.md — issue마다 line ref + tier + machine_check 근거 + fix(actionable). line ref 없는 issue·"looks good" rubber-stamp 금지.markdown### [BLOCK] Tap target below minimum — icon button - **Location:** `components/Toolbar.tsx:31` - **Rule:** §8 Targets — 44pt/48dp/24px min (🟢 SPEC, WCAG 2.5.8) - **Evidence:** `<button className="w-6 h-6">` → 24px, hit-slop 없음 - **Fix:** 패딩으로 44×44 hit region 확보 (`p-2.5` + 시각 24px 아이콘 유지)
prefers-reduced-motion 분기 누락 금지.reference.md를 손으로 고치지 말고 corpus → 제너레이터로 재생성.omd:apply — 브랜드 DESIGN.md 토큰 적용. omd:feel은 그 위에서 토큰이 침묵하는 느낌 층을 채운다.omd:designer-review — 브랜드 일관성(typo/color budget/radius scale) 감사. omd:feel AUDIT은 그 feel 축 짝꿍(모션 타이밍·타깃·CLS·a11y).omd:taste — 사용자 취향 대시보드(별개 개념). 반복되는 feel 결정이 취향으로 굳으면 omd:remember로 흘려보낸다.> 수동 검증: transition: all 0.6s + <button class="w-5 h-5"> + prefers-reduced-motion 분기 없는 컴포넌트를 AUDIT하면 — BLOCK 최소 3건(transition all=GPU SPEC, 20px 타깃=WCAG SPEC, reduced-motion 누락=a11y SPEC)이 line ref와 함께 뜨고 feel-score가 그만큼 깎여야 한다.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 24,340 | 6,675 | -73% | 1 | 1 | 0% | 4,176 | 4,161 | -0% | 0 | 0 | — |
case-07 | fail→pass | 10,483 | 14,095 | +34% | 1 | 1 | 0% | 2,050 | 6,495 | +217% | 0 | 0 | — |
case-14 | fail→fail | 12,938 | 5,279 | -59% | 1 | 1 | 0% | 2,275 | 4,098 | +80% | 0 | 0 | — |
case-15 | pass→pass | 12,877 | 15,154 | +18% | 1 | 1 | 0% | 2,271 | 6,413 | +182% | 0 | 0 | — |
case-02 | fail→pass | 23,033 | 25,132 | +9% | 1 | 1 | 0% | 4,387 | 7,905 | +80% | 0 | 0 | — |
case-03 | fail→fail | 10,521 | 7,214 | -31% | 1 | 1 | 0% | 1,529 | 4,040 | +164% | 0 | 0 | — |
case-04 | fail→fail | 6,086 | 4,170 | -31% | 1 | 1 | 0% | 871 | 4,296 | +393% | 0 | 0 | — |
case-05 | pass→fail | 13,075 | 7,313 | -44% | 1 | 1 | 0% | 2,552 | 4,153 | +63% | 0 | 0 | — |
case-06 | pass→pass | 10,620 | 3,947 | -63% | 1 | 1 | 0% | 1,898 | 4,457 | +135% | 0 | 0 | — |
case-08 | fail→pass | 10,774 | 9,941 | -8% | 1 | 1 | 0% | 2,201 | 5,691 | +159% | 0 | 0 | — |
case-09 | pass→pass | 12,441 | 11,130 | -11% | 1 | 1 | 0% | 2,282 | 5,827 | +155% | 0 | 0 | — |
case-10 | pass→pass | 13,657 | 14,138 | +4% | 1 | 1 | 0% | 2,729 | 6,374 | +134% | 0 | 0 | — |
case-11 | pass→pass | 10,466 | 10,836 | +4% | 1 | 1 | 0% | 1,998 | 5,305 | +166% | 0 | 0 | — |
case-12 | pass→pass | 8,366 | 10,388 | +24% | 1 | 1 | 0% | 1,558 | 5,577 | +258% | 0 | 0 | — |
case-13 | pass→pass | 13,511 | 8,122 | -40% | 1 | 1 | 0% | 2,549 | 5,227 | +105% | 0 | 0 | — |
case-16 | pass→fail | 9,090 | 5,982 | -34% | 1 | 1 | 0% | 1,592 | 4,089 | +157% | 0 | 0 | — |
case-17 | pass→pass | 13,295 | 15,041 | +13% | 1 | 1 | 0% | 2,268 | 6,022 | +166% | 0 | 0 | — |
case-18 | pass→pass | 12,892 | 13,132 | +2% | 1 | 1 | 0% | 2,323 | 6,111 | +163% | 0 | 0 | — |
case-19 | pass→pass | 16,336 | 13,692 | -16% | 1 | 1 | 0% | 2,986 | 6,205 | +108% | 0 | 0 | — |
case-20 | fail→pass | 17,970 | 20,579 | +15% | 1 | 1 | 0% | 3,667 | 7,260 | +98% | 0 | 0 | — |
case-21 | pass→fail | 11,762 | 3,962 | -66% | 1 | 1 | 0% | 2,229 | 4,087 | +83% | 0 | 0 | — |
case-22 | fail→pass | 13,976 | 30,165 | +116% | 1 | 1 | 0% | 2,442 | 8,770 | +259% | 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 18 counted toward the lift figure. The other 4 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 18 comparable cases. 4 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.