budge
Use when making single-property CSS or Tailwind visual changes in Next.js App Router projects. Presents a floating control widget…
Use when converting Paper canvas or design nodes from absolute positioning to flex or auto-layout. Covers Paper MCP absolute-to-flex restructuring, x-paper-clone preservation, clone z-order, computed spacing, shadow cleanup, SVG/image fidelity, layered cards, and screenshot
Claude Code
$ npx -y skills add millionco/skills --skill paper-flex --agent claude-code
Codex
$ npx skills add millionco/skills --skill paper-flex -a codex -y
Cursor
$ npx skills add millionco/skills --skill paper-flex -a cursor -y
Gemini CLI
$ npx skills add millionco/skills --skill paper-flex -a gemini-cli -y
GitHub Copilot
$ npx skills add millionco/skills --skill paper-flex -a github-copilot -y
OpenCode
$ npx skills add millionco/skills --skill paper-flex -a opencode -y
Windsurf
$ npx skills add millionco/skills --skill paper-flex -a windsurf -y
name: paper-flex description: Use when converting Paper canvas or design nodes from absolute positioning to flex or auto-layout. Covers Paper MCP absolute-to-flex restructuring, x-paper-clone preservation, clone z-order, computed spacing, shadow cleanup, SVG/image fidelity, layered cards, and screenshot verification.
You convert Paper layouts from absolute positioning into flex structure without losing the original pixels.
Hard rule: preserve existing visual nodes first. Recreate only plain layout wrappers or simple text/div surfaces whose computed styles are fully known.
This skill closes failures seen without Paper-specific guidance:
GREEN outcome: the converted node has a readable flex hierarchy, original SVG/image fidelity, verified z-order, and a screenshot that still matches the source.
Before writing or deleting anything:
1. Call `get_guide({ topic: "paper-mcp-instructions" })`. 2. Call `get_basic_info` and `get_selection` to confirm target artboard/node scope. 3. Call `get_screenshot` on the target and keep it as the visual baseline. 4. Call `get_tree_summary(depth=10)` and `get_children` on the target. 5. Call `get_computed_styles` for the target and every direct visual child. Record `left`, `top`, `width`, `height`, colors, fonts, shadows, filters, radii, and image fills. 6. If text styling will be created or changed, call `get_font_family_info` before writing typography.
Do not start conversion from memory or screenshot alone. The computed styles are the source of truth for flex math.
1. Keep the original nodes until the converted layout has passed screenshot comparison. 2. Use `<x-paper-clone node-id="...">` for SVGs, images, complex vectors, icons, masks, and styled shapes. 3. Never hand-redraw an SVG, image, logo, or complex decorative layer. No exceptions for "simple enough." 4. After cloning into flex flow, batch `update_styles` to set `left: "0px"` and `top: "0px"` on every flow clone. 5. After cloning anything that must remain overlaid, batch `update_styles` to set the required `position`, `left`, and `top`. Inline styles on `<x-paper-clone>` are not enough.
1. Map the absolute children into semantic groups: background, header row, text stack, media, card, controls, overlays. 2. Compute spacing from coordinates:
gap = next.top - (current.top + current.height) leftPadding = first.left - container.left topPadding = first.top - container.top
3. Use Paper-compatible layout: `display: flex`, `flex-direction`, `align-items`, `justify-content`, `gap`, and wrapper `padding`. 4. Do not rely on margins. Use `gap`, padding wrappers, or explicit spacer frames for non-uniform spacing. 5. Build incrementally. Each `write_html` call should add one visual group or wrapper. 6. Use separate `write_html` calls whenever clone z-order matters:
1. write_html container shell 2. write_html decorative/background clones into shell 3. write_html content wrappers/divs into shell 4. update_styles cloned positions and flow offsets
7. Delete original children only after the converted children exist, positions are verified, and the screenshot matches. Verify the final child list with `get_children`.
| Trap | Why It Breaks | Correct Move | |---|---|---| | Setting position styles on `<x-paper-clone>` | Paper ignores clone position overrides at insertion time | Clone first, then call `update_styles` | | Mixing clones and divs in one `write_html` | Paper appends clones after divs, changing z-order | Insert decorative clones in an earlier write | | Leaving original clone coordinates | Absolute offsets push flow items away from their flex slots | Reset flow clones to `left: "0px"`, `top: "0px"` | | Using `position: relative` for overlapped cards | Paper stacks instead of overlapping in fixed wrappers | Use absolute cards inside a fixed-size wrapper | | Keeping hidden source shadows | Flex order can reveal shadows that were covered before | Remove `boxShadow` on clones whose shadow was hidden by a later opaque sibling | | Applying `filter` to a flex parent | Filters inherit and affect children unintentionally | Apply filters only to leaf nodes that need them | | Cloning reference SVGs blindly | Some SVG clones contain empty text children | Inspect with `get_tree_summary`; delete empty Text children |
Open `references/layered-cards.md` when the design has back cards, floating badges, corner marks, or overlapping elements.
Default card stack rules:
1. Card stack wrapper is a plain fixed-size frame, not a flex container. 2. Back card is the first child. 3. Front card uses `position: absolute; left: 0px; top: 0px`. 4. Floating badges, labels, and corner marks are inside the stack wrapper as last children.
**Bad:** Delete an imported SVG, write a new `<svg>`, put it in a flex row, and eyeball the icon.
**Good:** Clone the original SVG with `x-paper-clone`, place it in the flex row, reset its flow offsets with `update_styles`, then compare screenshots.
**Bad:** One `write_html` call containing a background clone and content divs.
**Good:** Write the shell, insert background clones in a separate call, then insert content so Paper's clone ordering cannot place backgrounds on top.
1. Verify the original screenshot and converted screenshot match. 2. Verify no SVG, image, logo, mask, or complex shape was recreated instead of cloned. 3. Verify every flow clone has `l
Use when making single-property CSS or Tailwind visual changes in Next.js App Router projects. Presents a floating control widget…
Use when interactive elements that have visual spacing between them (chart bars/columns, list rows, nav items, segmented…
Use when implementing Paper MCP, Paper-to-code, design-to-code, Viewfinder, or Paper-exported JSX in React/Next.js apps. Covers…
Use when a built app that was derived from a Paper design looks "slightly off" versus the design, or to verify a Paper-to-code…
Use when consolidating, deduping, or reducing the number of CSS custom properties / Tailwind v4 design tokens in a globals.css…
Migrates React projects and components from Radix UI to Base UI. Use when asked to migrate from radix, move to base-ui, convert…
tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of 247 curated gallery sites (One…