Awesome-omni-skill design
Design consistency and visual styling for the Svelte client UI. Use when creating or modifying visual elements, colors, typography, buttons, inputs, or cards.
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/design/design" ~/.claude/skills/diegosouzapw-awesome-omni-skill-design && rm -rf "$T"
manifest:
skills/design/design/SKILL.mdsource content
Design
All code must follow the Coding Principles in AGENTS.md (functional, minimal, readable, modular).
Core principles
- No scrolling — ever. The webview is a fixed sandboxed canvas (min 320×320px).
- Mobile-first. Design for the smallest viewport, then scale up.
- Tailwind only. No
blocks, no inline<style>
attributes.style= - Functional over decorative. Every visual element should serve the user.
Spacing scale
Use Tailwind's default spacing scale. Avoid arbitrary values (
p-[13px]).
| Use case | Class |
|---|---|
| Component padding | (16px) |
| Section gap | or |
| Tight inline gap | |
| Card/panel padding | or |
| Page horizontal padding | |
| Page vertical padding | |
Typography
<h1 class="text-xl font-bold tracking-tight">Title</h1> <h2 class="text-base font-semibold">Section</h2> <p class="text-sm text-gray-700 dark:text-gray-300">Body</p> <span class="text-xs text-gray-500">Caption / meta</span>
- Base body size:
(14px). Never belowtext-sm
for readable content.text-xs - Line length:
ormax-w-sm
for prose.max-w-xs - No custom fonts — use the system font stack (Tailwind default).
Color
| Role | Light | Dark |
|---|---|---|
| Background | | |
| Surface / card | | |
| Border | | |
| Primary text | | |
| Secondary text | | |
| Accent / brand | | same |
| Destructive | | same |
| Success | | same |
Always pair a light and dark variant. Reddit renders in both modes.
Buttons
<!-- Primary --> <button class="w-full rounded-lg bg-orange-500 px-4 py-2.5 text-sm font-semibold text-white hover:bg-orange-600 active:scale-95 transition-all disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-400"> Submit </button> <!-- Secondary --> <button class="w-full rounded-lg border border-gray-300 dark:border-gray-600 px-4 py-2.5 text-sm font-semibold text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 active:scale-95 transition-all"> Cancel </button>
- Minimum tap target:
ormin-h-[44px]
onpy-2.5
.text-sm - Always include
.disabled:opacity-50 disabled:cursor-not-allowed - Always include
for tactile feedback.active:scale-95 transition-all
Inputs
<input class="w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 px-3 py-2 text-sm text-gray-900 dark:text-gray-100 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-orange-400" />
UI states
Every data-driven component must handle all four states:
| State | Pattern |
|---|---|
| Loading | skeleton or spinner with label |
| Error | Red tinted surface, human-readable message |
| Empty | Neutral muted text, optionally a CTA |
| Success | Normal render; optionally brief confirmation |
Cards & surfaces
<div class="rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 p-4 shadow-sm"> <!-- content --> </div>
for cards,rounded-xl
for inputs/buttons,rounded-lg
for badges.rounded-md
only — avoid heavy shadows.shadow-sm- Max two surface levels deep (page → card → no deeper).
Animation
- Only Tailwind built-in transitions:
,transition-all
,transition-colors
.transition-opacity - Default duration (
). No custom durations.150ms
for loading,animate-pulse
for spinners.animate-spin- No entrance animations.
Checklist before finishing
- No
blocks — Tailwind classes only<style> - No arbitrary values (
) — use scale stepsp-[13px] - Dark mode variants on all color classes
- Buttons have
,disabled
, andactive:scale-95
classesfocus-visible:ring - Minimum tap target size respected
- Typography follows the hierarchy (xl → base → sm → xs)