원클릭으로
frontend-design
Thiết kế frontend chất lượng cao. Dual mode: Internal (LitElement Control UI) + External (React/Next.js/general web).
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Thiết kế frontend chất lượng cao. Dual mode: Internal (LitElement Control UI) + External (React/Next.js/general web).
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | frontend-design |
| description | Thiết kế frontend chất lượng cao. Dual mode: Internal (LitElement Control UI) + External (React/Next.js/general web). |
| metadata | {"openclaw":{"emoji":"🎨","skillKey":"frontend-design","userInvocable":true}} |
| invocation | {"userInvocable":true,"disableModelInvocation":false} |
Thiết kế frontend với chất lượng cao, có chủ đích. Không generic, không AI-slop.
This skill operates in two modes based on context:
| Signal | Mode | Framework |
|---|---|---|
| Control UI, dashboard view, gateway, LitElement | Internal | LitElement + CSS vars |
| Landing page, new web app, React, Next.js, Vue | External | React/Next.js/vanilla |
| Ambiguous | Ask user | — |
Before writing any CSS or markup, answer these questions:
When building for the OpenClaw Control UI dashboard.
Design system: See references/control-ui-design-system.md for complete CSS variables, component classes, and animation catalog.
Component patterns: See references/litelement-patterns.md for view functions, html templates, event binding, and state management.
var(--accent) = #ff5c5c. Use sparingly for primary actions and active statesvar(--accent-2) = #14b8a6. For secondary highlightsvar(--ease-out-expo) for entrancesborder: 1px solid var(--border) over heavy shadows--font-body: "Space Grotesk", -apple-system, sans-serif;
--mono: "JetBrains Mono", monospace;
| Purpose | Variable | Value |
|---|---|---|
| Primary action | --accent | #ff5c5c |
| Hover state | --accent-hover | #ff7070 |
| Subtle highlight | --accent-subtle | rgba(255, 92, 92, 0.15) |
| Success | --ok | #22c55e |
| Warning | --warn | #f59e0b |
| Error | --danger | #ef4444 |
| Info | --info | #3b82f6 |
| Secondary | --accent-2 | #14b8a6 |
Cards: Border + subtle shadow, hover lifts border-color
border: 1px solid var(--border);
background: var(--card);
border-radius: var(--radius-lg); /* 12px */
Buttons: Inline-flex, small (11px), transition on hover
.btn { border: 1px solid var(--border); background: var(--bg-elevated); }
.btn.primary { background: var(--accent); color: white; }
Status dots: 8px circles with statusPulse animation for online state
Pills/badges: border-radius: var(--radius-full), semantic colors
Empty states: Centered flex column, 64px icon container, accent CTA button
Use animations from animations.css:
| Animation | Use For | Duration |
|---|---|---|
fadeIn | General entrance | 150-200ms |
fadeInUp | Cards, list items | 200-250ms |
scaleIn | Modals, popovers | 200ms |
popIn | Notifications, badges | 300ms |
shimmer | Skeleton loaders | 1.5s infinite |
statusPulse | Online indicators | 2s infinite |
pulse-subtle | Connecting state | 1s infinite |
Staggering: Use animation-delay with calc(var(--i) * 30ms) for list items.
Reduced motion: Always respect @media (prefers-reduced-motion: reduce).
Grid-based shell layout:
┌────────────────────────────┐
│ topbar (52px) │
├──────┬─────────────────────┤
│ nav │ content │
│200px │ padding: 16px │
│ │ 20px 32px │
└──────┴─────────────────────┘
Nav collapses to 52px. Chat focus mode hides nav entirely.
When building new web apps, landing pages, or non-LitElement projects.
Choose fonts with intention. Defaults that work:
Scale: Use a modular scale (1.25 ratio). Don't use more than 4-5 distinct sizes.
Line height: 1.4-1.6 for body, 1.1-1.2 for headings, 1.7-1.8 for long-form.
Build a palette with purpose:
Dark mode: Don't just invert. Dark backgrounds need lighter borders, reduced shadow opacity, and slightly desaturated colors.
Rule: If you can't explain why something animates, remove the animation.
Avoid flat solid colors. Options:
Never: Mesh gradients with 5+ colors, parallax on everything, video backgrounds without purpose.
Buttons: Max 2-3 variants (primary, secondary, ghost). Consistent padding ratio (1:2 vertical:horizontal).
Cards: Pick ONE depth method (shadow OR border, not both heavy). Consistent radius.
Forms: Visible labels (not just placeholders). Clear focus states. Inline validation.
Navigation: Maximum 7 top-level items. Active state must be obvious.
This skill complements the /build workflow:
Architect (Claude Chat) → Blueprint.json → Builder (Claude Code)
↓
design.colors → CSS vars
design.fonts → font-family
design.spacing → gap/padding
When executing a Blueprint:
design.colors.primary → --accent or primary color variabledesign.colors.background → --bgdesign.fonts.heading → heading font-familyanimations.css — don't add new @keyframes unless necessary