--- name: taste-soft description: "High-end visual design like a premium agency. Defines exact fonts, spacing, shadows, card structures, and animations that make a website feel expensive. Blocks common defaults that make AI designs look cheap or generic. Based on taste-skill by Leon Lin & blueemi, improved by shokunin." triggers: - "luxury design" - "premium UI" - "agency design" - "expensive look" - "high-end design" - "Apple-esque" - "Linear-tier" - "double-bezel" - "magnetic button" - "fluid nav" negatives: - "minimalist design" - "editorial design" - "brutalist" - "flat design" - "components" - "base design framework" -> use taste license: MIT compatibility: opencode metadata: version: "2.0.0" author: Leon Lin, blueemi, improved by shokunin workflow: frontend audience: designers --- # Principal UI/UX Architect & Motion Choreographer (Awwwards-Tier) Engineering $150k+ agency-level digital experiences. Output must exude haptic depth, cinematic spatial rhythm, obsessive micro-interactions, and flawless fluid motion. NEVER generate the same layout twice. Combine different premium archetypes while adhering to elite "Apple-esque / Linear-tier" design language. ## Authority References (shokunin improvement) Based on: Apple Human Interface Guidelines, Linear Design, Stripe Design, Emil Kowalski (design engineering), Paul Lewis (compositor-only), Ahmad Shadeed (Container Queries), WCAG 2.2. ## 1. THE "ABSOLUTE ZERO" DIRECTIVE (ANTI-PATTERNS) - **Banned Fonts:** Inter, Roboto, Arial, Open Sans, Helvetica. Use Geist, Clash Display, PP Editorial New, Plus Jakarta Sans. - **Banned Icons:** Standard thick-stroked Lucide, FontAwesome, Material. Use Phosphor Light, Remix Line. - **Banned Borders/Shadows:** Generic 1px solid gray. Harsh `rgba(0,0,0,0.3)`. Use tinted, ultra-diffuse shadows. - **Banned Layouts:** Edge-to-edge sticky nav glued to top. Boring symmetric 3-column grids without massive whitespace. - **Banned Motion:** Standard `linear` or `ease-in-out`. Instant state changes without interpolation. ## 2. THE CREATIVE VARIANCE ENGINE Select ONE combination per project to ensure unique output: ### Vibe & Texture Archetypes (Pick 1) 1. **Ethereal Glass (SaaS/Tech):** OLED black (#050505), radial mesh gradients (glowing purple/emerald orbs). Vantablack cards + `backdrop-blur-2xl` + white/10 hairlines. Wide geometric Grotesk. 2. **Editorial Luxury (Lifestyle/Agency):** Warm creams (#FDFBF7), muted sage, deep espresso. High-contrast Variable Serif for headings. CSS noise/film-grain overlay (`opacity-[0.03]`). 3. **Soft Structuralism (Consumer/Health/Portfolio):** Silver-grey or white backgrounds. Massive bold Grotesk. Airy, floating components with soft, highly diffused ambient shadows. ### Layout Archetypes (Pick 1) 1. **Asymmetrical Bento:** Masonry-like grid of varying card sizes (`col-span-8 row-span-2` next to stacked `col-span-4`). **Mobile:** Single column. All `col-span` overrides reset. 2. **Z-Axis Cascade:** Elements stacked like physical cards, overlapping with subtle `-2deg` or `3deg` rotation. **Mobile:** Remove all rotations and negative margins. Stack vertically. 3. **Editorial Split:** Massive typography on left half (`w-1/2`), interactive horizontal scrollable cards on right. **Mobile:** Full-width vertical stack. **Universal Mobile Override:** Any asymmetric layout ≥ md breakpoint MUST collapse to `w-full px-4 py-8` below `768px`. NEVER `h-screen` — always `min-h-[100dvh]`. ## 3. HAPTIC MICRO-AESTHETICS ### "Double-Bezel" Nested Architecture - **Outer Shell:** Wrapper with subtle background (`bg-black/5`), hairline border (`ring-1 ring-black/5`), padding `p-1.5`, large radius `rounded-[2rem]`. - **Inner Core:** Content container with distinct background, its own inner highlight (`shadow-[inset_0_1px_1px_rgba(255,255,255,0.15)]`), mathematically calculated smaller radius `rounded-[calc(2rem-0.375rem)]`. ### CTA "Button-in-Button" Architecture - Primary buttons: fully rounded pills (`rounded-full`, `px-6 py-3`). - Trailing icon: NEVER naked. Wrapped in its own circular container (`w-8 h-8 rounded-full bg-black/5`), placed flush with button's right inner padding. ### Spatial Rhythm - Macro-whitespace: `py-24` to `py-40` for sections. Breathe heavily. - Eyebrow Tags: Microscopic, pill-shaped badge (`rounded-full px-3 py-1 text-[10px] uppercase tracking-[0.2em] font-medium`) preceding major headings. ## 4. MOTION CHOREOGRAPHY All motion uses custom cubic-bezier (`transition-all duration-700 ease-[cubic-bezier(0.32,0.72,0,1)]`). Never `linear` or default `ease-in-out`. ### "Fluid Island" Nav - **Closed:** Floating glass pill detached from top (`mt-6 mx-auto w-max rounded-full`). - **Hamburger Morph:** Lines fluidly rotate to form 'X' (`rotate-45` / `-rotate-45`), not just disappear. - **Modal Expansion:** Massive screen-filling overlay with `backdrop-blur-3xl bg-black/80`. - **Staggered Mask Reveal:** Links fade + slide up (`translate-y-12 opacity-0` → `translate-y-0 opacity-100`) with staggered delay (100ms, 150ms, 200ms). ### Magnetic Button Physics - `group` utility. `active:scale-[0.98]` for physical press. - Nested inner icon: `group-hover:translate-x-1 group-hover:-translate-y-[1px] scale-105`. ### Scroll Entry - Elements fade + slide up + blur: `translate-y-16 blur-md opacity-0` → `translate-y-0 blur-0 opacity-100` over 800ms+. - Use `IntersectionObserver`. NEVER `window.addEventListener('scroll')`. ## 5. PERFORMANCE GUARDRAILS - **GPU-Safe:** Only `transform` + `opacity`. `will-change: transform` sparingly. - **Blur:** Only fixed/sticky elements. Never scrolling content. - **Grain:** `position: fixed; pointer-events: none` only. - **Z-Index:** Only systemic layers. - **`prefers-reduced-motion`:** Mandatory on every animation (shokunin improvement). ## 6. PRE-OUTPUT CHECKLIST - [ ] No banned fonts, icons, borders, shadows, layouts, motion (Section 1) - [ ] Vibe + Layout Archetype consciously selected (Section 2) - [ ] Double-Bezel nested architecture on major cards (Section 3) - [ ] Button-in-Button on CTAs where applicable (Section 3) - [ ] Section padding ≥ `py-24` - [ ] Custom cubic-bezier on all transitions - [ ] Scroll entry animations present - [ ] Mobile collapse below `768px`: single-column - [ ] `min-h-[100dvh]` not `h-screen` - [ ] `transform` + `opacity` only for animations - [ ] `prefers-reduced-motion` respected - [ ] Overall reads as "$150k agency build", not "template with nice fonts" ## Workflow ### Step 1: Select Archetypes Pick exactly one Vibe Archetype and one Layout Archetype from Section 2 before writing any code. Document the selection so the entire build stays coherent: ``` Vibe: Ethereal Glass | Editorial Luxury | Soft Structuralism Layout: Asymmetrical Bento | Z-Axis Cascade | Editorial Split ``` Never mix vibes. A page that blends Ethereal Glass gradients with Editorial Luxury serifs reads as confused, not premium. ### Step 2: Block banned defaults Before writing any Tailwind class, review Section 1 "Absolute Zero" and remove all banned fonts, icons, borders, shadows, and motion defaults from the project scaffold. This is a blocking step — do not proceed until every banned item is replaced. ### Step 3: Build outer shell → inner core Follow the Double-Bezel architecture (Section 3). For every major section: 1. Create the outer wrapper (`bg-black/5 ring-1 ring-black/5 rounded-[2rem] p-1.5`) 2. Place the inner content container (`shadow-[inset_0_1px_1px_rgba(255,255,255,0.15)]`) 3. Add content. Never skip the bezel — it is the signature of this aesthetic. ### Step 4: Wire motion Apply motion choreography (Section 4) to: - Navigation: Fluid Island pattern with hamburger morph + staggered mask reveal - CTAs: Magnetic button physics with nested icon animation - Scroll entries: IntersectionObserver-driven fade + slide + blur ### Step 5: Mobile collapse Overwrite every asymmetric layout rule at the `md` breakpoint (768px). All `col-span` values reset, all rotations removed, all negative margins zeroed. Use `min-h-[100dvh]` everywhere; never `h-screen`. ### Step 6: Pre-output checklist Run through the 12-item checklist (Section 6) before delivering. Every unchecked box is a regression from "$150k agency" to "template with nice fonts." ### Step 7: Accessibility verification - All animations respect `prefers-reduced-motion: reduce` - Color contrast meets WCAG 2.2 AA minimum (4.5:1 for text, 3:1 for large text) - Focus indicators visible and non-removed (never `outline: none` without replacement) - Grain overlay has `pointer-events: none` and `aria-hidden="true"` ## Error Handling | Cause | Fix | |-------|-----| | CSS grain texture causes layout shift or scroll jank | Grain must be `position: fixed; pointer-events: none; z-index: [system layer]`. Never apply grain to a scrolling container. | | backdrop-blur causes GPU compositing failure on low-end devices | Limit blur to fixed/sticky elements only. Feature-detect with `@supports (backdrop-filter: blur(1px))`. Provide solid fallback background. | | Double-Bezel nested radii don't align mathematically | Outer radius `R`, inner radius must be `R - padding`. If `rounded-[2rem]` and `p-1.5` (24px), inner is `rounded-[calc(2rem-1.5rem)]`. Always use `calc()` to prevent drift. | | Magnetic button jitters on rapid hover/unhover | Apply `transition-transform duration-200` on the inner element only. Use `will-change: transform` on the button and remove it on `animationend`. | | Z-Axis Cascade cards overlap incorrectly on Safari | Safari handles `z-index` in stacking contexts differently with transforms. Apply explicit `z-index` values (not `auto`) and `transform-style: flat` on the parent. | | Scroll entry animations fire multiple times on fast scroll | Use `IntersectionObserver` with `threshold: 0.1` and a `once: true` flag. Track animated elements in a `WeakSet` to prevent re-triggering. | | Custom cubic-bezier feels sluggish on quick interactions | For interactive elements (buttons, toggles), use shorter duration: `duration-200 ease-[cubic-bezier(0.32,0.72,0,1)]`. Reserve `duration-700` for scroll entries and page transitions only. | ## Sources - Apple Human Interface Guidelines (developer.apple.com/design/human-interface-guidelines) — spatial layout, motion, and material principles - Linear Design System (linear.app/docs/design-system) — opinionated component architecture and animation philosophy - Stripe Design documentation (stripe.com/design) — premium SaaS visual language and interaction patterns - Emil Kowalski "Animation Engineering" (animations.dev) — WAAPI, spring physics, and compositor-only animation - Ahmad Shadeed "CSS Container Queries" (ishadeed.com) — modern responsive layout patterns - WCAG 2.2 Specification (w3.org/TR/WCAG22) — accessibility compliance for motion, contrast, and focus - Paul Lewis "The Compositor's Properties" (web.dev/animations-guide) — GPU-safe animation properties and layout thrashing prevention ## Anti-Patterns | Pattern | Problem | Fix | |---------|---------|-----| | Dropping the Double-Bezel on inner sections "for simplicity" | The page loses its signature depth. Cards become flat and generic. | Every major card/section gets the bezel. Only minor inline elements (tags, badges, tooltips) skip it. | | Using `h-screen` instead of `min-h-[100dvh]` | `100vh` ignores mobile browser chrome (address bar), causing overflow and clipped content. | Always use `min-h-[100dvh]`. Dynamic viewport height compensates for browser UI. | | Applying the same archetype combination to every project | The Creative Variance Engine exists to prevent repetition. Reusing the same vibe+layout produces indistinguishable output. | Track previously used combinations. Force new selection if the last 3 projects used the same archetype. | | Omitting mobile overrides | Asymmetric bento and Z-axis cascade layouts break catastrophically below 768px. | Every `col-span-*` and rotation resets at `md:` breakpoint. Test at 375px width before delivery. | | Linear or ease-in-out on any transition | These are explicitly banned in Section 1. Default easing reads as unpolished AI output. | Custom cubic-bezier with asymmetric curve on every transition. Interactive: `duration-200`. Scroll: `duration-700`. | | Adding a fourth or fifth font to "make it unique" | Premium design uses 2 fonts max (heading + body). More fonts create visual noise and degrade performance. | Stick to 1-2 typefaces. Use weight, size, and letter-spacing for hierarchy instead of additional families. | ## Checklist - [ ] Skill loads without errors in the AI agent - [ ] YAML frontmatter is valid (description, compatibility, audience) - [ ] Workflow section provides clear step-by-step instructions - [ ] Error handling section covers common failure modes - [ ] All referenced files (references/, scripts/, assets/) exist - [ ] Skill triggers correctly for intended use cases - [ ] No broken links or missing resources