{"id":"9a5d16a2-899c-45f8-a6b6-19057c6f50eb","shortId":"7fp6m8","kind":"skill","title":"refactoring-ui","tagline":"Comprehensive UI design guidance based on Refactoring UI principles covering visual hierarchy, color theory, typography, spacing, and mobile-first responsive design. Use this skill whenever the user is creating new pages, building components, making design additions or changes, r","description":"# Refactoring UI Design System\n\n## Core Philosophy\n\nDesign decisions should be made with intention, not decoration. Every visual choice—color, size, spacing, weight—communicates hierarchy and guides the user's attention. Start with too much whitespace, then remove it. Start with less contrast, then add it where needed.\n\n---\n\n## Visual Hierarchy\n\nHierarchy is the foundation of good UI. Users should immediately understand what's important.\n\n### The Hierarchy Toolkit\n\nYou have three primary tools to establish hierarchy:\n\n1. **Size** — Larger elements draw more attention\n2. **Weight** — Bolder text feels more important\n3. **Color** — Higher contrast elements stand out\n\nThe key insight: **don't rely on size alone**. A common mistake is making primary content huge and secondary content tiny. Instead, use all three tools together.\n\n### De-emphasize by Reducing Contrast\n\nInstead of making important things bigger, try making unimportant things less prominent:\n- Use lighter colors for secondary text (not smaller sizes)\n- Reduce font weight for supporting information\n- Use muted colors for metadata (dates, labels, counts)\n\n### Semantic Color vs Visual Hierarchy\n\nDon't let semantics override hierarchy. A \"danger\" action that's rarely used shouldn't be bright red if it competes with the primary action. Use muted reds for destructive secondary actions.\n\n```css path=null start=null\n/* Primary destructive action - prominent */\n.btn-danger-primary { @apply bg-red-600 text-white; }\n\n/* Secondary destructive action - muted */\n.btn-danger-secondary { @apply text-red-600/70 bg-transparent; }\n```\n\n### Labels and Data\n\nWhen showing label-value pairs, the data is usually more important than the label:\n- De-emphasize labels (lighter color, smaller size, or all caps with letter-spacing)\n- Let the values stand out naturally\n\n```html path=null start=null\n<!-- Labels de-emphasized, values prominent -->\n<div>\n  <span class=\"text-xs uppercase tracking-wide text-gray-500\">Status</span>\n  <span class=\"text-gray-900 font-medium\">Active</span>\n</div>\n```\n\n---\n\n## Typography\n\n### Font Size Scale\n\nUse a modular scale with intentional jumps. Avoid arbitrary sizes.\n\nRecommended scale (based on a ~1.25 ratio):\n- **xs**: 12px — Fine print, captions\n- **sm**: 14px — Secondary text, metadata  \n- **base**: 16px — Body text (minimum for readability)\n- **lg**: 18px — Emphasized body, lead paragraphs\n- **xl**: 20px — Subheadings\n- **2xl**: 24px — Section headings\n- **3xl**: 30px — Page headings\n- **4xl**: 36px — Hero text\n- **5xl+**: 48px+ — Display text, marketing\n\n### Line Height\n\nLine height should decrease as font size increases:\n- **Small text (12-14px)**: 1.5-1.75 (needs more breathing room)\n- **Body text (16-18px)**: 1.5-1.65\n- **Headings (24px+)**: 1.2-1.35 (tighter feels more refined)\n\n### Letter Spacing\n\n- **All-caps text**: Add 0.05-0.1em tracking (uppercase needs room)\n- **Large headings**: Consider slight negative tracking (-0.02em)\n- **Body text**: Leave default\n\n### Font Weight Strategy\n\nAvoid using too many weights. Pick 2-3:\n- **Normal (400)**: Body text\n- **Medium (500)**: Emphasis, UI elements\n- **Semibold/Bold (600-700)**: Headings, strong emphasis\n\nUsing medium (500) for UI text often looks more refined than jumping straight to bold.\n\n### Line Length\n\nOptimal reading: **45-75 characters** per line. For a 16px font, that's roughly 20-35em or 320-560px.\n\n```css path=null start=null\n.prose { max-width: 65ch; } /* ch unit = width of '0' character */\n```\n\n---\n\n## Color\n\n### Building a Color Palette\n\nEvery color needs a full range of shades (typically 9-10):\n- **50-100**: Backgrounds, subtle fills\n- **200-300**: Borders, disabled states\n- **400-500**: Icons, secondary text\n- **600-700**: Primary text, buttons\n- **800-900**: Headings, high-emphasis text\n\n### Defining Colors with HSL\n\nHSL (Hue, Saturation, Lightness) is more intuitive for building palettes:\n\n```css path=null start=null\n/* Base color */\n--primary-600: hsl(220, 65%, 50%);\n\n/* Lighter (increase lightness, slightly decrease saturation) */\n--primary-100: hsl(220, 60%, 95%);\n\n/* Darker (decrease lightness, can increase saturation slightly) */\n--primary-800: hsl(220, 70%, 30%);\n```\n\nKey insight: **perceived brightness changes with hue**. Yellow appears brighter than blue at the same lightness. Adjust accordingly.\n\n### Color for UI States\n\n- **Hover**: Darken by one shade (500 → 600) or reduce lightness by 5-10%\n- **Active/Pressed**: Darken another shade (600 → 700)\n- **Disabled**: Reduce saturation significantly, increase lightness\n- **Focus**: Use a ring/outline, don't change the element's color\n\n### Grays Aren't Truly Gray\n\nAdd a hint of color to your grays for warmth or coolness:\n- **Warm grays**: Add a touch of yellow/orange (better for friendly, approachable UIs)\n- **Cool grays**: Add a touch of blue (better for professional, technical UIs)\n\n```css path=null start=null\n/* Cool gray (slight blue) */\n--gray-600: hsl(215, 15%, 40%);\n\n/* Warm gray (slight yellow) */\n--gray-600: hsl(40, 10%, 40%);\n```\n\n### Accessible Color Contrast\n\n- **Body text**: Minimum 4.5:1 contrast ratio (WCAG AA)\n- **Large text (18px+ bold or 24px+)**: Minimum 3:1\n- **UI components**: Minimum 3:1 against adjacent colors\n- **Don't rely on color alone**: Use icons, text, or patterns alongside\n\n### Don't Use Pure Black\n\nPure black (#000) feels harsh and unnatural. Use a very dark gray instead:\n\n```css path=null start=null\n/* Too harsh */\ncolor: #000;\n\n/* Better - dark but not absolute */\ncolor: #1a1a1a; /* or hsl(0, 0%, 10%) */\n```\n\n---\n\n## Spacing\n\n### Spacing Scale\n\nUse a consistent scale based on a base unit (typically 4px or 8px):\n\n```\n4, 8, 12, 16, 24, 32, 48, 64, 96, 128...\n```\n\nAvoid arbitrary values like 13px or 27px. Constraints create consistency.\n\n### Spacing Relationships\n\n- **Related items**: Closer together (8-12px)\n- **Grouped but distinct**: Medium spacing (16-24px)\n- **Separate sections**: Larger gaps (32-64px)\n\nThe principle: **proximity implies relationship**. Group related items tightly; separate unrelated items clearly.\n\n### Start with Too Much Space\n\nIt's easier to remove whitespace than to add it later. Start generous, then tighten only where needed. Most designs are too cramped, not too airy.\n\n### Padding Consistency\n\nButtons and inputs should have consistent internal proportions:\n- Horizontal padding: 1.5-2x vertical padding\n- Maintain aspect ratio across sizes\n\n```css path=null start=null\n/* Small */\n.btn-sm { @apply px-3 py-1.5; }\n\n/* Medium */  \n.btn-md { @apply px-4 py-2; }\n\n/* Large */\n.btn-lg { @apply px-6 py-3; }\n```\n\n---\n\n## Layout\n\n### Don't Fill the Whole Width\n\nContent shouldn't span edge-to-edge on large screens. Use max-width constraints:\n\n```css path=null start=null\n.container { \n  max-width: 1200px; \n  margin-inline: auto;\n  padding-inline: 1rem;\n}\n```\n\n### Grids Aren't Always the Answer\n\nNot everything needs a 12-column grid. Simple layouts often work better with:\n- Max-width containers\n- Flexbox for alignment\n- Natural content flow\n\n### Give Elements Room to Breathe\n\nTight layouts feel cheap. Add generous padding to:\n- Cards and panels (24-32px minimum)\n- Sections (48-96px vertical)\n- Page margins (16-24px on mobile, more on desktop)\n\n### Alignment\n\n- **Left-align most text** (easier to scan)\n- **Center short headings and CTAs** (draws focus)\n- **Right-align numbers in tables** (decimal alignment)\n\n---\n\n## Mobile-First Responsive Design\n\n### Why Mobile-First\n\nStart with the mobile layout, then add complexity for larger screens. Benefits:\n- Forces prioritization of content\n- Simpler base styles\n- Progressive enhancement (works everywhere, better on larger screens)\n\n### Breakpoint Strategy\n\nDon't design for specific devices. Use content-based breakpoints:\n- Add a breakpoint when the layout breaks, not at arbitrary screen sizes\n- Common ranges: ~640px (sm), ~768px (md), ~1024px (lg), ~1280px (xl)\n\n### Mobile-First Patterns\n\n**Start simple, enhance up:**\n\n```css path=null start=null\n/* Mobile: stack vertically */\n.card-grid {\n  display: grid;\n  gap: 1rem;\n}\n\n/* Tablet+: 2 columns */\n@media (min-width: 768px) {\n  .card-grid { grid-template-columns: repeat(2, 1fr); }\n}\n\n/* Desktop: 3 columns */\n@media (min-width: 1024px) {\n  .card-grid { grid-template-columns: repeat(3, 1fr); }\n}\n```\n\n### Touch Targets\n\nMobile buttons and interactive elements need adequate tap targets:\n- **Minimum**: 44×44px (Apple HIG) or 48×48px (Material)\n- Add padding to small elements to increase hit area without visual bulk\n\n### Typography Scaling\n\nReduce heading sizes on mobile—there's less room for drama:\n\n```css path=null start=null\nh1 {\n  font-size: 1.875rem; /* 30px mobile */\n}\n\n@media (min-width: 768px) {\n  h1 { font-size: 2.5rem; } /* 40px tablet+ */\n}\n\n@media (min-width: 1024px) {\n  h1 { font-size: 3rem; } /* 48px desktop */\n}\n```\n\n---\n\n## Depth and Shadows\n\nShadows create depth and separate layers. Use them intentionally:\n\n### Shadow Elevation System\n\nBuild a scale of shadows for different elevations:\n- **sm**: Subtle, for cards and slight lifts\n- **md**: Default, for dropdowns and popovers  \n- **lg**: Prominent, for modals and dialogs\n- **xl**: Dramatic, rarely needed\n\n### Natural Shadow Direction\n\nLight comes from above. Shadows should:\n- Fall downward (positive Y offset)\n- Be slightly diffused (blur radius)\n- Use semi-transparent black, not gray\n\n```css path=null start=null\n/* Natural shadow */\nbox-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);\n\n/* Unnatural (shadow going up) - avoid */\nbox-shadow: 0 -4px 6px rgb(0 0 0 / 0.1);\n```\n\n### Combining Shadows\n\nLayered shadows look more realistic:\n\n```css path=null start=null\n/* Two shadows: soft ambient + sharper direct */\nbox-shadow: \n  0 1px 3px rgb(0 0 0 / 0.1),\n  0 10px 20px rgb(0 0 0 / 0.05);\n```\n\n*Note: If your design system avoids shadows, use borders or background color differences to create separation.*\n\n---\n\n## Images and Icons\n\n### Icon Sizing\n\nIcons should feel balanced with adjacent text:\n- For inline icons: slightly smaller than text line-height\n- For standalone icons: size proportional to touch target\n\n```html path=null start=null\n<!-- Icon sized relative to text -->\n<button class=\"flex items-center gap-2\">\n  <svg class=\"w-5 h-5\">...</svg>\n  <span class=\"text-base\">Save</span>\n</button>\n```\n\n### Icon Stroke Width\n\nThinner strokes feel more refined, thicker strokes feel friendlier:\n- **1.5-2px**: Modern, elegant\n- **2-2.5px**: Balanced, versatile  \n- **3px+**: Bold, playful\n\nMatch stroke weight to your typography weight.\n\n---\n\n## Empty States\n\nDon't leave empty states blank. They're an opportunity:\n- Explain what will appear here\n- Guide the user to take action\n- Use illustrations or icons to soften the emptiness\n\n```html path=null start=null\n<div class=\"text-center py-12\">\n  <svg class=\"mx-auto h-12 w-12 text-gray-400\">...</svg>\n  <h3 class=\"mt-2 text-sm font-medium text-gray-900\">No projects</h3>\n  <p class=\"mt-1 text-sm text-gray-500\">Get started by creating a new project.</p>\n  <button class=\"mt-4\">Create Project</button>\n</div>\n```\n\n---\n\n## Dark Mode Design\n\nDark mode isn't just inverting colors. It requires a different approach:\n\n### Reduce Contrast, Not Invert\n\n- **Don't use pure white text** on dark backgrounds—it's too harsh. Use `gray-100` or `gray-200`\n- **Don't use pure black backgrounds**—use `gray-900` or `gray-950` (e.g., `#0f172a`)\n- **Reduce elevation shadows**—they're less visible on dark; use subtle borders or lighter backgrounds instead\n\n### Color Adjustments\n\n```css path=null start=null\n/* Light mode */\n--bg-primary: #ffffff;\n--text-primary: #111827;    /* gray-900 */\n--text-secondary: #6b7280;  /* gray-500 */\n\n/* Dark mode - not just inverted */\n--bg-primary: #0f172a;      /* slate-900 */\n--text-primary: #f1f5f9;    /* slate-100 */\n--text-secondary: #94a3b8;  /* slate-400 */\n```\n\n### Saturation Shifts\n\nColors appear more vibrant on dark backgrounds. **Reduce saturation** slightly for primary colors in dark mode to avoid overwhelming the user.\n\n### Surface Hierarchy\n\nUse lighter surfaces (not shadows) to indicate elevation:\n- **Base**: `bg-gray-900`\n- **Raised card**: `bg-gray-800`\n- **Modal/dropdown**: `bg-gray-700`\n\n---\n\n## Form Design Patterns\n\nForms are where users do work. Make them effortless:\n\n### Input Styling\n\n```css path=null start=null\n/* Well-designed input */\n.input {\n  @apply w-full px-3 py-2\n         text-gray-900 placeholder-gray-400\n         bg-white border border-gray-300 rounded-lg\n         focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\n         transition-shadow duration-150;\n}\n```\n\n### Label Placement\n\n- **Above the input** (not inline) for most forms—clearer scanning\n- **Floating labels** only if space is extremely tight\n- **Required indicators**: Use `*` after the label, not before\n\n### Error States\n\n- Change border to `border-red-500`\n- Add error icon inside input (right side)\n- Show error message below input in `text-red-600 text-sm`\n- Don't just rely on color—add an icon or text\n\n### Field Grouping\n\n```html path=null start=null\n<!-- Group related fields visually -->\n<fieldset class=\"space-y-4\">\n  <legend class=\"text-sm font-medium text-gray-700\">Billing Address</legend>\n  <!-- address fields with tighter spacing -->\n</fieldset>\n\n<!-- Separate groups with more space -->\n<fieldset class=\"space-y-4 mt-8\">\n  <legend class=\"text-sm font-medium text-gray-700\">Payment Method</legend>\n  <!-- payment fields -->\n</fieldset>\n```\n\n### Button Placement\n\n- Primary action on the **right** (or bottom-right for forms)\n- Secondary/cancel action on the **left** with less visual weight\n- Destructive actions should require confirmation\n\n---\n\n## Accessibility Beyond Contrast\n\nAccessibility is design quality, not a checkbox:\n\n### Focus States\n\n**Every interactive element needs a visible focus state.** Don't remove outlines without replacing them:\n\n```css path=null start=null\n/* Bad - removes accessibility */\n:focus { outline: none; }\n\n/* Good - replaces with visible ring */\n:focus {\n  outline: none;\n  ring: 2px;\n  ring-color: blue-500;\n  ring-offset: 2px;\n}\n\n/* Tailwind shorthand */\n.btn { @apply focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2; }\n```\n\n### Motion Sensitivity\n\nRespect `prefers-reduced-motion`:\n\n```css path=null start=null\n@media (prefers-reduced-motion: reduce) {\n  *, *::before, *::after {\n    animation-duration: 0.01ms !important;\n    transition-duration: 0.01ms !important;\n  }\n}\n```\n\n### Interactive Element Sizing\n\n- **Minimum touch target**: 44×44px (48×48px preferred)\n- **Adequate spacing** between clickable elements (at least 8px gap)\n- **Large enough text** in buttons—minimum 14px\n\n### Semantic HTML\n\n- Use `<button>` for actions, `<a>` for navigation\n- Use heading hierarchy (`h1` → `h2` → `h3`), don't skip levels\n- Use `<nav>`, `<main>`, `<aside>`, `<footer>` landmarks\n- Add `aria-label` when visual context isn't enough\n\n---\n\n## Subtle Animation & Transitions\n\nMotion should feel natural, not distracting:\n\n### Timing Principles\n\n- **Micro-interactions**: 100-200ms (hover, focus, toggle)\n- **Small transitions**: 200-300ms (dropdowns, tooltips)\n- **Larger transitions**: 300-500ms (modals, page transitions)\n- **Never exceed 500ms** for UI—it feels sluggish\n\n### Easing Functions\n\n```css path=null start=null\n/* Enter: start fast, end slow (ease-out) */\n.dropdown-enter { transition: all 200ms ease-out; }\n\n/* Exit: start slow, end fast (ease-in) */\n.dropdown-exit { transition: all 150ms ease-in; }\n\n/* UI interactions: smooth (ease-in-out) */\n.btn { transition: all 150ms ease-in-out; }\n```\n\n### What to Animate\n\n**Do animate:**\n- Background color on hover\n- Transform (scale, translate) for emphasis\n- Opacity for appear/disappear\n- Box-shadow for elevation changes\n\n**Don't animate:**\n- Width/height (causes layout shift—use transform: scale instead)\n- Anything that triggers layout recalculation\n- Too many things at once\n\n### Hover Feedback\n\n```css path=null start=null\n/* Subtle but noticeable */\n.card {\n  @apply transition-all duration-150 ease-in-out\n         hover:shadow-md hover:-translate-y-0.5;\n}\n\n.btn {\n  @apply transition-colors duration-150\n         hover:bg-blue-600;\n}\n```\n\n---\n\n## Design Audit Checklist\n\nUse this to review any interface:\n\n### Hierarchy\n- [ ] Can you identify the primary action in 2 seconds?\n- [ ] Is there clear visual distinction between primary, secondary, and tertiary elements?\n- [ ] Are labels de-emphasized relative to values?\n\n### Typography\n- [ ] Using a consistent type scale (no arbitrary sizes)?\n- [ ] Line length constrained to 45-75 characters?\n- [ ] Headings tighter, body text more relaxed line-height?\n\n### Color\n- [ ] No pure black (#000) or pure white (#fff) in the UI?\n- [ ] Grays have subtle color tint (warm or cool)?\n- [ ] All text passes WCAG AA contrast (4.5:1 body, 3:1 large)?\n\n### Spacing\n- [ ] Using a consistent spacing scale?\n- [ ] Related items grouped tightly, sections separated clearly?\n- [ ] Generous padding on cards and sections?\n\n### Responsive\n- [ ] Works on 320px screens?\n- [ ] Touch targets at least 44×44px on mobile?\n- [ ] Typography scales appropriately?\n\n### Accessibility\n- [ ] All interactive elements have visible focus states?\n- [ ] Not relying on color alone to convey meaning?\n- [ ] Semantic HTML structure?\n\n---\n\n## Quick Reference: Common Mistakes\n\n1. **Too many font sizes** — Stick to your scale\n2. **Not enough contrast** between hierarchy levels\n3. **Cramped spacing** — When in doubt, add more\n4. **Pure black text** — Use dark gray instead\n5. **Border-heavy design** — Try spacing and background colors instead\n6. **Inconsistent spacing** — Use your scale religiously\n7. **Desktop-first thinking** — Start mobile, enhance up\n8. **Arbitrary values** — Every number should come from a system\n9. **Removing focus outlines** — Replace, don't remove\n10. **Over-animating** — Subtle > flashy","tags":["refactoring","skill","jaywilburn","agent-skills","refactoring-ui","skill-md","tailwind","ui-design"],"capabilities":["skill","source-jaywilburn","skill-refactoring-ui","topic-agent-skills","topic-refactoring-ui","topic-skill-md","topic-tailwind","topic-ui-design"],"categories":["refactoring-ui-skill"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/jaywilburn/refactoring-ui-skill/refactoring-ui","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add jaywilburn/refactoring-ui-skill","source_repo":"https://github.com/jaywilburn/refactoring-ui-skill","install_from":"skills.sh"}},"qualityScore":"0.458","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 16 github stars · SKILL.md body (17,841 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T01:02:11.445Z","embedding":null,"createdAt":"2026-04-18T23:07:04.477Z","updatedAt":"2026-04-23T01:02:11.445Z","lastSeenAt":"2026-04-23T01:02:11.445Z","tsv":"'-0.02':447 '-0.1':435 '-1':1417 '-1.35':422 '-1.5':971 '-1.65':418 '-1.75':407 '-10':548,662 '-100':550,610,1643,1718 '-12':875 '-14':404 '-150':1845,2277,2297 '-18':415 '-2':949,980,1543,1805,1831,2019 '-2.5':1548 '-200':1646,2133 '-24':883,1088 '-3':463,969,989,1803 '-300':555,2141 '-32':1077 '-35':511 '-4':978,1433 '-400':1724 '-500':560,1701,2004,2148 '-560':515 '-6':987 '-600':598,737,747 '-64':890 '-700':475,565 '-75':499,2355 '-800':623 '-900':570,1655,1695,1712 '-950':1658 '-96':1082 '0':531,829,830,1414,1420,1421,1422,1432,1437,1438,1439,1462,1466,1467,1468,1470,1474,1475,1476 '0.01':2053,2059 '0.05':434,1477 '0.1':1423,1440,1469 '0.5':2290 '000':800,819,2370 '0f172a':1660,1710 '1':118,759,772,777,2393,2396,2456 '1.2':421 '1.25':346 '1.5':406,417,948,1542 '1.875':1303 '10':750,831,2533 '100':2132 '1024px':1186,1238,1324 '10px':1471 '111827':1693 '12':403,850,1041 '1200px':1022 '128':857 '1280px':1188 '12px':349 '13px':862 '14px':354,2088 '15':740 '150ms':2198,2212 '16':414,851,882,1087 '16px':359,505 '18px':366,766 '1a1a1a':826 '1fr':1230,1248 '1px':1463 '1rem':1030,1212 '2':125,462,1214,1229,1547,2029,2320,2465 '2.5':1316 '20':510 '200':554,2140 '200ms':2181 '20px':372,1472 '215':739 '220':600,612,625 '24':852,1076 '24px':375,420,769 '27px':864 '2px':1999,2008 '2xl':374 '3':132,771,776,1232,1247,2395,2472 '30':627 '300':1821,2147 '30px':379,1305 '32':853,889 '320':514 '320px':2420 '36px':383 '3px':1464,1552 '3rem':1329 '3xl':378 '4':848,2480 '4.5':758,2392 '40':741,749,751 '400':465,559,1813 '40px':1318 '44':1261,2068,2426 '44px':1262,2069,2427 '45':498,2354 '48':854,1081,1266,2070 '48px':387,1267,1330,2071 '4px':845,1415 '4xl':382 '5':661,2488 '50':549,602 '500':469,481,655,1836,1882,2024 '500ms':2155 '5xl':386 '6':2499 '60':613 '600':261,474,564,656,667,1899,2302 '600/70':277 '64':855 '640px':1182 '65':601 '65ch':526 '6b7280':1699 '6px':1416,1435 '7':2506 '70':626 '700':668,1773 '768px':1184,1220,1311 '8':849,874,2515 '800':569,1768 '8px':847,2080 '9':547,2525 '900':1762,1809 '94a3b8':1722 '95':614 '96':856 'aa':763,2390 'absolut':824 'access':752,1952,1955,1986,2433 'accord':645 'across':956 'action':220,236,243,251,267,1584,1928,1939,1948,2093,2318 'activ':326 'active/pressed':663 'add':87,433,691,705,717,918,1069,1134,1168,1269,1883,1909,2108,2478 'addit':40 'address':1922 'adequ':1257,2073 'adjac':779,1504 'adjust':644,1678 'airi':935 'align':1056,1095,1098,1113,1118 'all-cap':429 'alon':147,786,2445 'alongsid':792 'alway':1034 'ambient':1456 'anim':2051,2119,2219,2221,2242,2536 'animation-dur':2050 'anoth':665 'answer':1036 'anyth':2251 'appear':636,1577,1728 'appear/disappear':2233 'appl':1263 'appli':257,273,967,976,985,1798,2012,2272,2292 'approach':713,1623 'appropri':2432 'arbitrari':339,859,1177,2348,2516 'area':1277 'aren':687,1032 'aria':2110 'aria-label':2109 'aspect':954 'attent':73,124 'audit':2304 'auto':1026 'avoid':338,456,858,1428,1483,1744 'background':551,1488,1636,1652,1675,1733,2222,2496 'bad':1984 'balanc':1502,1550 'base':8,343,358,595,839,842,1145,1166,1758 'benefit':1139 'better':710,722,820,1048,1151 'beyond':1953 'bg':259,279,1687,1708,1760,1766,1771,1815,2300 'bg-blue':2299 'bg-gray':1759,1765,1770 'bg-primari':1686,1707 'bg-red':258 'bg-transpar':278 'bg-white':1814 'bigger':177 'bill':1921 'black':797,799,1401,1651,2369,2482 'blank':1569 'blue':639,721,735,1835,2003,2023,2301 'blur':1395 'bodi':360,368,412,449,466,755,2359,2394 'bold':493,767,1553 'bolder':127 'border':556,1486,1672,1817,1819,1839,1877,1880,2490 'border-gray':1818 'border-heavi':2489 'border-r':1879 'border-transpar':1838 'bottom':1934 'bottom-right':1933 'box':1412,1430,1460,2235 'box-shadow':1411,1429,1459,2234 'break':1174 'breakpoint':1155,1167,1170 'breath':410,1064 'bright':228,631 'brighter':637 'btn':254,270,965,974,983,2011,2209,2291 'btn-danger-primari':253 'btn-danger-secondari':269 'btn-lg':982 'btn-md':973 'btn-sm':964 'build':36,534,588,1347 'bulk':1280 'button':568,938,1252,1925,2086 'cap':309,431 'caption':352 'card':1073,1207,1222,1240,1358,1764,2271,2414 'card-grid':1206,1221,1239 'caus':2244 'center':1104 'ch':527 'chang':42,632,681,1876,2239 'charact':500,532,2356 'cheap':1068 'checkbox':1961 'checklist':2305 'choic':61 'clear':904,2324,2410 'clearer':1856 'clickabl':2076 'closer':872 'color':16,62,133,186,201,208,304,533,536,539,577,596,646,685,695,753,780,785,818,825,1489,1618,1677,1727,1739,1908,2002,2223,2295,2366,2381,2444,2497 'column':1042,1215,1227,1233,1245 'combin':1441 'come':1382,2521 'common':149,1180,2454 'communic':66 'compet':232 'complex':1135 'compon':37,774 'comprehens':4 'confirm':1951 'consid':443 'consist':837,867,937,943,2344,2401 'constrain':2352 'constraint':865,1012 'contain':1018,1053 'content':154,158,997,1058,1143,1165 'content-bas':1164 'context':2114 'contrast':85,135,171,754,760,1625,1954,2391,2468 'convey':2447 'cool':702,715,732,2385 'core':48 'count':206 'cover':13 'cramp':932,2473 'creat':33,866,1336,1492,1603,1607 'css':244,517,590,727,811,958,1013,1198,1294,1404,1448,1679,1788,1979,2037,2163,2263 'ctas':1108 'danger':219,255,271 'dark':808,821,1609,1612,1635,1669,1702,1732,1741,2485 'darken':651,664 'darker':615 'data':283,291 'date':204 'de':167,300,2336 'de-emphas':166,299,2335 'decim':1117 'decis':51 'decor':58 'decreas':396,607,616 'default':452,1363 'defin':576 'depth':1332,1337 'design':6,25,39,46,50,929,1123,1159,1481,1611,1775,1795,1957,2303,2492 'desktop':1094,1231,1331,2508 'desktop-first':2507 'destruct':241,250,266,1947 'devic':1162 'dialog':1373 'differ':1353,1490,1622 'diffus':1394 'direct':1380,1458 'disabl':557,669 'display':388,1209 'distinct':879,2326 'distract':2126 'doubt':2477 'downward':1388 'drama':1293 'dramat':1375 'draw':122,1109 'dropdown':1365,2143,2177,2194 'dropdown-ent':2176 'dropdown-exit':2193 'durat':1844,2052,2058,2276,2296 'e.g':1659 'eas':2161,2174,2183,2191,2200,2206,2214,2279 'ease-in':2190,2199 'ease-in-out':2205,2213,2278 'ease-out':2173,2182 'easier':912,1101 'edg':1002,1004 'edge-to-edg':1001 'effortless':1785 'eleg':1546 'element':121,136,472,683,1061,1255,1273,1966,2063,2077,2332,2436 'elev':1345,1354,1662,1757,2238 'em':436,448,512 'emphas':168,301,367,2337 'emphasi':470,478,574,2230 'empti':1562,1567,1592 'end':2171,2188 'enhanc':1148,1196,2513 'enough':2083,2117,2467 'enter':2168,2178 'error':1874,1884,1891 'establish':116 'everi':59,538,1964,2518 'everyth':1038 'everywher':1150 'exceed':2154 'exit':2185,2195 'explain':1574 'extrem':1864 'f1f5f9':1716 'fall':1387 'fast':2170,2189 'feedback':2262 'feel':129,424,801,1067,1501,1535,1540,2123,2159 'fff':2374 'ffffff':1689 'field':1914 'fill':553,993 'fine':350 'first':23,1121,1127,1192,2509 'flashi':2538 'flexbox':1054 'float':1858 'flow':1059 'focus':675,1110,1825,1829,1832,1837,1962,1970,1987,1995,2013,2017,2020,2025,2136,2439,2527 'font':194,328,398,453,506,1301,1314,1327,2459 'font-siz':1300,1313,1326 'forc':1140 'form':1774,1777,1855,1937 'foundat':96 'friend':712 'friendlier':1541 'full':542,1801 'function':2162 'gap':888,1211,2081 'generous':922,1070,2411 'get':1600 'give':1060 'go':1426 'good':98,1990 'gray':686,690,698,704,716,733,736,743,746,809,1403,1642,1645,1654,1657,1694,1700,1761,1767,1772,1808,1812,1820,2378,2486 'grid':1031,1043,1208,1210,1223,1225,1241,1243 'grid-template-column':1224,1242 'group':877,897,1915,2406 'guid':69,1579 'guidanc':7 'h1':1299,1312,1325,2099 'h2':2100 'h3':2101 'harsh':802,817,1640 'head':377,381,419,442,476,571,1106,1284,2097,2357 'heavi':2491 'height':392,394,1515,2365 'hero':384 'hierarchi':15,67,92,93,108,117,211,217,1749,2098,2312,2470 'hig':1264 'high':573 'high-emphasi':572 'higher':134 'hint':693 'hit':1276 'horizont':946 'hover':650,2135,2225,2261,2282,2286,2298 'hsl':579,580,599,611,624,738,748,828 'html':320,1524,1593,1916,2090,2450 'hue':581,634 'huge':155 'icon':561,788,1496,1497,1499,1508,1518,1530,1588,1885,1911 'identifi':2315 'illustr':1586 'imag':1494 'immedi':102 'impli':895 'import':106,131,175,295,2055,2061 'inconsist':2500 'increas':400,604,619,673,1275 'indic':1756,1867 'inform':198 'inlin':1025,1029,1507,1852 'input':940,1786,1796,1797,1850,1887,1894 'insid':1886 'insight':141,629 'instead':160,172,810,1676,2250,2487,2498 'intent':56,336,1343 'interact':1254,1965,2062,2131,2203,2435 'interfac':2311 'intern':944 'intuit':586 'invert':1617,1627,1706 'isn':1614,2115 'item':871,899,903,2405 'jump':337,490 'key':140,628 'label':205,281,287,298,302,1846,1859,1871,2111,2334 'label-valu':286 'landmark':2107 'larg':441,764,981,1006,2082,2397 'larger':120,887,1137,1153,2145 'later':920 'layer':1340,1443 'layout':990,1045,1066,1132,1173,2245,2254 'lead':369 'least':2079,2425 'leav':451,1566 'left':1097,1942 'left-align':1096 'length':495,2351 'less':84,182,1290,1666,1944 'let':214,314 'letter':312,427 'letter-spac':311 'level':2105,2471 'lg':365,984,1187,1368,1824 'lift':1361 'light':583,605,617,643,659,674,1381,1684 'lighter':185,303,603,1674,1751 'like':861 'line':391,393,494,502,1514,2350,2364 'line-height':1513,2363 'look':486,1445 'made':54 'maintain':953 'make':38,152,174,179,1783 'mani':459,2257,2458 'margin':1024,1086 'margin-inlin':1023 'market':390 'match':1555 'materi':1268 'max':524,1010,1020,1051 'max-width':523,1009,1019,1050 'md':975,1185,1362,2285 'mean':2448 'media':1216,1234,1307,1320,2042 'medium':468,480,880,972 'messag':1892 'metadata':203,357 'method':1924 'micro':2130 'micro-interact':2129 'min':1218,1236,1309,1322 'min-width':1217,1235,1308,1321 'minimum':362,757,770,775,1079,1260,2065,2087 'mistak':150,2455 'mobil':22,1091,1120,1126,1131,1191,1203,1251,1287,1306,2429,2512 'mobile-first':21,1119,1125,1190 'modal':1371,2150 'modal/dropdown':1769 'mode':1610,1613,1685,1703,1742 'modern':1545 'modular':333 'motion':2030,2036,2046,2121 'ms':2054,2060,2134,2142,2149 'much':77,908 'mute':200,238,268 'natur':319,1057,1378,1409,2124 'navig':2095 'need':90,408,439,540,927,1039,1256,1377,1967 'negat':445 'never':2153 'new':34,1605 'none':1828,1989,1997,2016 'normal':464 'note':1478 'notic':2270 'null':246,248,322,324,519,521,592,594,729,731,813,815,960,962,1015,1017,1200,1202,1296,1298,1406,1408,1450,1452,1526,1528,1595,1597,1681,1683,1790,1792,1918,1920,1981,1983,2039,2041,2165,2167,2265,2267 'number':1114,2519 'offset':1391,2007,2028 'often':485,1046 'one':653 'opac':2231 'opportun':1573 'optim':496 'outlin':1827,1975,1988,1996,2015,2528 'outline-non':1826,2014 'over-anim':2534 'overrid':216 'overwhelm':1745 'pad':936,947,952,1028,1071,1270,2412 'padding-inlin':1027 'page':35,380,1085,2151 'pair':289 'palett':537,589 'panel':1075 'paragraph':370 'pass':2388 'path':245,321,518,591,728,812,959,1014,1199,1295,1405,1449,1525,1594,1680,1789,1917,1980,2038,2164,2264 'pattern':791,1193,1776 'payment':1923 'per':501 'perceiv':630 'philosophi':49 'pick':461 'placehold':1811 'placeholder-gray':1810 'placement':1847,1926 'play':1554 'popov':1367 'posit':1389 'prefer':2034,2044,2072 'prefers-reduced-mot':2033,2043 'primari':113,153,235,249,256,566,597,609,622,1688,1692,1709,1715,1738,1927,2317,2328 'principl':12,893,2128 'print':351 'priorit':1141 'profession':724 'progress':1147 'project':1599,1606,1608 'promin':183,252,1369 'proport':945,1520 'prose':522 'proxim':894 'pure':796,798,1631,1650,2368,2372,2481 'px':405,416,516,876,884,891,968,977,986,1078,1083,1089,1418,1434,1544,1549,1802 'py':970,979,988,1804 'qualiti':1958 'quick':2452 'r':43 'radius':1396 'rais':1763 'rang':543,1181 'rare':223,1376 'ratio':347,761,955 're':1571,1665 'read':497 'readabl':364 'realist':1447 'recalcul':2255 'recommend':341 'red':229,239,260,276,1881,1898 'reduc':170,193,658,670,1283,1624,1661,1734,2035,2045,2047 'refactor':2,10,44 'refactoring-ui':1 'refer':2453 'refin':426,488,1537 'relat':870,898,2338,2404 'relationship':869,896 'relax':2362 'reli':144,783,1906,2442 'religi':2505 'rem':1304,1317 'remov':80,914,1974,1985,2526,2532 'repeat':1228,1246 'replac':1977,1991,2529 'requir':1620,1866,1950 'respect':2032 'respons':24,1122,2417 'review':2309 'rgb':1419,1436,1465,1473 'right':1112,1888,1931,1935 'right-align':1111 'ring':1830,1834,1994,1998,2001,2006,2018,2022,2027 'ring-blu':1833,2021 'ring-color':2000 'ring-offset':2005,2026 'ring/outline':678 'room':411,440,1062,1291 'rough':509 'round':1823 'rounded-lg':1822 'satur':582,608,620,671,1725,1735 'save':1529 'scale':330,334,342,834,838,1282,1349,2227,2249,2346,2403,2431,2464,2504 'scan':1103,1857 'screen':1007,1138,1154,1178,2421 'second':2321 'secondari':157,188,242,265,272,355,562,1698,1721,2329 'secondary/cancel':1938 'section':376,886,1080,2408,2416 'semant':207,215,2089,2449 'semi':1399 'semi-transpar':1398 'semibold/bold':473 'sensit':2031 'separ':885,901,1339,1493,2409 'shade':545,654,666 'shadow':1334,1335,1344,1351,1379,1385,1410,1413,1425,1431,1442,1444,1454,1461,1484,1663,1754,1843,2236,2284 'shadow-md':2283 'sharper':1457 'shift':1726,2246 'short':1105 'shorthand':2010 'shouldn':225,998 'show':285,1890 'side':1889 'signific':672 'simpl':1044,1195 'simpler':1144 'size':63,119,146,192,306,329,340,399,957,1179,1285,1302,1315,1328,1498,1519,2064,2349,2460 'skill':28 'skill-refactoring-ui' 'skip':2104 'slate':1711,1717,1723 'slight':444,606,621,734,744,1360,1393,1509,1736 'slow':2172,2187 'sluggish':2160 'sm':353,966,1183,1355,1902 'small':401,963,1272,2138 'smaller':191,305,1510 'smooth':2204 'soft':1455 'soften':1590 'source-jaywilburn' 'space':19,64,313,428,832,833,868,881,909,1862,2074,2398,2402,2474,2494,2501 'span':1000 'specif':1161 'stack':1204 'stand':137,317 'standalon':1517 'start':74,82,247,323,520,593,730,814,905,921,961,1016,1128,1194,1201,1297,1407,1451,1527,1596,1601,1682,1791,1919,1982,2040,2166,2169,2186,2266,2511 'state':558,649,1563,1568,1875,1963,1971,2440 'status':325 'stick':2461 'straight':491 'strategi':455,1156 'stroke':1531,1534,1539,1556 'strong':477 'structur':2451 'style':1146,1787 'subhead':373 'subtl':552,1356,1671,2118,2268,2380,2537 'support':197 'surfac':1748,1752 'system':47,1346,1482,2524 'tabl':1116 'tablet':1213,1319 'tailwind':2009 'take':1583 'tap':1258 'target':1250,1259,1523,2067,2423 'technic':725 'templat':1226,1244 'tertiari':2331 'text':128,189,263,275,356,361,385,389,402,413,432,450,467,484,563,567,575,756,765,789,1100,1505,1512,1633,1691,1697,1714,1720,1807,1897,1901,1913,2084,2360,2387,2483 'text-gray':1806 'text-primari':1690,1713 'text-r':274,1896 'text-secondari':1696,1719 'text-sm':1900 'text-whit':262 'theori':17 'thicker':1538 'thing':176,181,2258 'think':2510 'thinner':1533 'three':112,163 'tight':900,1065,1865,2407 'tighten':924 'tighter':423,2358 'time':2127 'tini':159 'tint':2382 'togeth':165,873 'toggl':2137 'tool':114,164 'toolkit':109 'tooltip':2144 'topic-agent-skills' 'topic-refactoring-ui' 'topic-skill-md' 'topic-tailwind' 'topic-ui-design' 'touch':707,719,1249,1522,2066,2422 'track':437,446 'transform':2226,2248 'transit':1842,2057,2120,2139,2146,2152,2179,2196,2210,2274,2294 'transition-al':2273 'transition-color':2293 'transition-dur':2056 'transition-shadow':1841 'translat':2228,2288 'translate-i':2287 'transpar':280,1400,1840 'tri':178,2493 'trigger':2253 'truli':689 'two':1453 'type':2345 'typic':546,844 'typographi':18,327,1281,1560,2341,2430 'ui':3,5,11,45,99,471,483,648,714,726,773,2157,2202,2377 'understand':103 'unimport':180 'unit':528,843 'unnatur':804,1424 'unrel':902 'uppercas':438 'use':26,161,184,199,224,237,331,457,479,676,787,795,805,835,1008,1163,1341,1397,1485,1585,1630,1641,1649,1653,1670,1750,1868,2091,2096,2106,2247,2306,2342,2399,2484,2502 'user':31,71,100,1581,1747,1780 'usual':293 'valu':288,316,860,2340,2517 'versatil':1551 'vertic':951,1084,1205 'vibrant':1730 'visibl':1667,1969,1993,2438 'visual':14,60,91,210,1279,1945,2113,2325 'vs':209 'w':1800 'w-full':1799 'warm':703,742,2383 'warmth':700 'wcag':762,2389 'weight':65,126,195,454,460,1557,1561,1946 'well':1794 'well-design':1793 'whenev':29 'white':264,1632,1816,2373 'whitespac':78,915 'whole':995 'width':525,529,996,1011,1021,1052,1219,1237,1310,1323,1532 'width/height':2243 'without':1278,1976 'work':1047,1149,1782,2418 'x':950 'xl':371,1189,1374 'xs':348 'y':1390,2289 'yellow':635,745 'yellow/orange':709","prices":[{"id":"768f5eda-816d-49aa-a16f-1eb5b6d78490","listingId":"9a5d16a2-899c-45f8-a6b6-19057c6f50eb","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"jaywilburn","category":"refactoring-ui-skill","install_from":"skills.sh"},"createdAt":"2026-04-18T23:07:04.477Z"}],"sources":[{"listingId":"9a5d16a2-899c-45f8-a6b6-19057c6f50eb","source":"github","sourceId":"jaywilburn/refactoring-ui-skill/refactoring-ui","sourceUrl":"https://github.com/jaywilburn/refactoring-ui-skill/tree/main/skills/refactoring-ui","isPrimary":false,"firstSeenAt":"2026-04-18T23:07:04.477Z","lastSeenAt":"2026-04-23T01:02:11.445Z"}],"details":{"listingId":"9a5d16a2-899c-45f8-a6b6-19057c6f50eb","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"jaywilburn","slug":"refactoring-ui","github":{"repo":"jaywilburn/refactoring-ui-skill","stars":16,"topics":["agent-skills","refactoring-ui","skill-md","tailwind","ui-design"],"license":"mit","html_url":"https://github.com/jaywilburn/refactoring-ui-skill","pushed_at":"2026-03-27T04:48:22Z","description":"Agent skill for professional UI design based on Refactoring UI principles. Covers hierarchy, typography, color, spacing, dark mode, forms, accessibility, and animation.","skill_md_sha":"92817c835756ca037ae2c936cf00d8e57c9a3457","skill_md_path":"skills/refactoring-ui/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/jaywilburn/refactoring-ui-skill/tree/main/skills/refactoring-ui"},"layout":"multi","source":"github","category":"refactoring-ui-skill","frontmatter":{"name":"refactoring-ui","description":"Comprehensive UI design guidance based on Refactoring UI principles covering visual hierarchy, color theory, typography, spacing, and mobile-first responsive design. Use this skill whenever the user is creating new pages, building components, making design additions or changes, reviewing UI code, asking about design decisions (colors, fonts, spacing, layout), or discussing visual improvements. Trigger for any design-related conversation including \"how should this look\", \"what color\", \"font size\", \"spacing\", \"layout\", \"responsive\", \"mobile\", or when reviewing/critiquing existing interfaces."},"skills_sh_url":"https://skills.sh/jaywilburn/refactoring-ui-skill/refactoring-ui"},"updatedAt":"2026-04-23T01:02:11.445Z"}}