From surface
The depth-and-shape lens for a frontend surface — where elevation becomes physical, corners become a language, and texture earns its place. Use after color tokens are committed, when establishing or auditing the depth model, or when surfaces "look flat / look cheap / look wrong but I can't say why." The one shift: depth comes from ONE consistent light model — layered shadows sharing a direction, a tokenized elevation z-scale (resting / raised / overlay / modal), concentric radii (inner = outer − padding), and texture only with a job — the agent invents a fuzzy box-shadow per component and four light directions, feeling no wrongness, so the light model must be DECIDED and gated. Triggers on "shadow / box-shadow / elevation / depth / z-index", "border-radius / corner / squircle / rounded", "gradient / texture / grain / banding / noise", "it looks flat / looks cheap / looks plasticky / looks off", "light model / surface gradient / top highlight / contact shadow", "depth tokens / elevation tokens / z-scale", "concentric / inner radius / outer radius", "card / modal / dropdown / raised surface", "glassmorphism / frosted / backdrop blur / scrim", "aurora / mesh gradient / ambient background". Depth is not a pile of ad-hoc box-shadows — it is a system: one light direction driving four coordinated outputs (cast shadow, contact shadow, top-edge highlight, surface gradient), mapped to a small tokenized z-scale, with radii concentric and shape intentional, and gradient or texture present only when named.
How this skill is triggered — by the user, by Claude, or both
Slash command
/surface:form [the UI / component / design system to give a coherent depth model][the UI / component / design system to give a coherent depth model]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!--
!checklist init ${CLAUDE_SKILL_DIR} --force
A form in the sculptor's sense is the three-dimensional presence of a thing — its weight, its surface, how the light falls on it. form is the depth-and-shape lens of the atelier suite: where color tokens say what hue lives here, form says how far above the surface it sits, what shape its corners make, and whether the surface has a texture or is empty. Its product is a written depth system: one light model with a tokenized elevation z-scale, a concentric radius family, and deliberately chosen gradients and texture — each committed as tokens before components consume them.
The governing fact: depth reads as physical when one light source drives four coordinated outputs; it reads as "CSS" when a lone fuzzy box-shadow is invented per component. The four outputs are the cast shadow (layered ambient + direct), the contact shadow (tight grounding layer), the top-edge highlight (inset light on the raised face), and the surface gradient (micro light-to-dark across the face). All four must share one light direction. Most UI depth work only touches the first — and the rest of the form system is the gap between "looks designed" and "looks premium." Radii follow the same logic: concentric nesting is not a visual preference, it is a geometric fact (the inner arc must subtract the padding to stay parallel); a nested card whose inner image has the same radius as the outer card does not look like the same system. And texture, like motion, earns its place only with a named job: depth, focus, or brand. Without a job, it is noise.
This is where the agent era bites:
box-shadow per component. Each is defensible alone; the set has four different light directions, three different blur radii, and two different coloring approaches. No individual value is obviously wrong; the system is incoherent. The light model must be a decision, written down, gated.border-radius by eye — or copies from a similar component — and the inner element gets the same radius as the outer container, so the corners visually pinch. This is the single most reliable fingerprint of unattended craft, and the one step that is almost never taken without a gate.Read references/one-light-model-and-elevation.md first — the technical foundation. The four outputs, the layered shadow stack, the z-scale, shadow coloring, dark-mode flip, performance rules. Load at the start; re-check at STAGE 0's gate.
Speak the user's language. The depth system is theirs to decide. Read their fluency and gloss terms on first use: elevation model / z-scale, ambient shadow / contact shadow / top-edge highlight, surface gradient (the face itself, not a decorative layer), concentric radius / inner = outer − padding, squircle / continuous curvature / G2-continuous, grain dithering / banding, interpolation space / oklch / oklab (for gradients). A system the user can't read is a style imposed, not shared.
The depth lives in references/. Open each when a stage sends you there — not all upfront.
@property animation, dark-mode rethink, performance budget.The arc is one depth system. Three stages — light model · radii · gradient/texture — turn a working-but-flat surface into a coherent material: shadows that share a light direction and map to a z-scale; corners that are concentric and carry shape language; gradients and texture that appear only with a job and without banding.
formruns afteratelier:color(the perceptual palette is committed as tokens) and beforeatelier:motion(depth cues are in place before the motion layer adds temporal ones). Its tokens are what the design system later enforces and whatatelier:canonearlier specified as the surface archetype's target depth density.
Greenfield or retrofit? Choose the entry. Starting clean: walk STAGE 0 → STAGE 2 in order. Retrofitting an existing surface: inventory first — every ad-hoc
box-shadow, every magicborder-radius, every gradient without a named job. Cluster them into what the three stages own (elevation model · radius family · gradient/texture intent). That inventory is the raw material each gate consumes; the taste decisions stay yours. The audit technique (how to surface undeclared values across CSS and JS) is inatelier:systems— bring its output to STAGE 0 and the gates run unchanged.
Open references/one-light-model-and-elevation.md. Fix the light model before touching any component's shadow.
box-shadow, but 3–6 layers at low per-layer alpha (0.02–0.06), doubling offset and blur each step. The layers approximate the natural penumbra falloff. Add a tight contact shadow layer at the base (0–2px offset, 0–2px blur). Add a top-edge highlight (inset 0 1px 0 rgba(255,255,255,.06–.12)). Add a surface gradient to the face itself (L delta 1–3%). All four outputs, all sharing the light direction.oklch(from var(--surface-bg) calc(l - .20) calc(c + .02) h / .04).--z-resting (static card), --z-raised (hover/interactive/sticky), --z-overlay (dropdown/menu/popover), --z-modal (dialog/drawer/toast). Each token encodes the full shadow recipe — the layered stack, the contact layer, the highlight. Components reference a token, never a literal shadow value. z-index ordering must agree with z-scale ordering.checklist check light one-light-model-z-scalechecklist verify lightOpen references/radii-and-shape.md. Fix the radius system before touching any component's corners.
--radius-xs through --radius-2xl plus --radius-full. Map each step to a role (chip, input, button, card, modal, pill). Every component references a step by role — no magic border-radius values.inner-radius = outer-radius − padding. Apply this recursively. If the result is ≤ 0, the inner element gets border-radius: 0. This is geometric law, not preference — the eye sees when it's wrong. It is also the step most frequently skipped.round is a valid choice — but it must be a choice, not a default. Consider bevel (technical/industrial), squircle / superellipse on large prominent surfaces (smoother, softer, premium). Decide it once; apply it consistently. Shape language is part of the brand temperature.overflow: hidden.checklist check shape concentric-radii-and-shape-languagechecklist verify shapeOpen references/gradient-and-texture.md. Commit only gradients and texture that have a job; make them banding-free.
in oklab (direct mixing) or in oklch (hue-wheel travel, with a shorter hue or longer hue directive). Never rely on sRGB interpolation. The dead-gray midpoint in a sRGB gradient between two saturated colors is the most common invisible defect in production UI gradients.oklch(0.55 0.20 27 / 0) not transparent). Audit every gradient that fades to transparent and correct it.overlay or soft-light. Cache SVG feTurbulence as a data-URI; never regenerate per frame.prefers-reduced-motion.checklist check texture gradient-texture-with-intent-and-no-bandingchecklist verify texturechecklist show — confirm all three stages passed.checklist done — clear this run's state.form is the atelier suite's material conscience — the stage where the visual system acquires physical presence. Color tokens say what hue is here; type and space say how text sits; form says how high off the surface a panel is floating and what that elevation looks like in light. The through-line is the suite's: push correctness into structure. A tokenized z-scale with a committed light model cannot produce a shadow in the wrong direction — the token encodes both. A concentric-radius rule applied everywhere cannot produce a nested card with the wrong inner radius — the formula is applied at placement time, not guessed. A "gradient has a job" gate cannot produce a decorative gradient that slipped in on instinct — it never passes the gate.
The line that keeps form honest: the document holds the encodable technique (how layered shadows work, the concentric formula, banding fixes, the interpolation spaces); the taste decisions — which z-scale steps, which radius temperature, which depth density matches this surface archetype — stay a gate the user clears. A data tool should be nearly flat, with elevation only for modals and focused panels. A consumer card surface can be heavily layered. atelier:canon sets the target; form implements it correctly and gates each step.
box-shadow per component — the most common depth defect; replace with a layered stack from the z-scale token.round is fine, but it must be a choice; the surface archetype implies a shape language, and that implication should be made explicit.in oklab or in oklch.transparent in gradient fades — fades to rgba(0,0,0,0) (transparent black), producing a dirty midpoint; always fade to same-color zero-alpha.npx claudepluginhub iamk77/skill --plugin atelierProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.