Loading...
Loading...
Use when making single-property CSS or Tailwind visual changes in Next.js App Router projects. Presents a floating control widget on the page so the user can tweak the value before it is persisted. Covers atomic style changes, live preview, and cleanup. Triggers on single CSS value or single Tailwind utility class modifications.
npx skill4agent add ben-million/skills budgehttps://skills-pearl.vercel.app/budge.iife.jsnext/scriptdata-budge[data-budge-target]fillstroke--spacingbudge.iife.jsapp/layout.tsxreferences/INSTALL.md<Script src="https://skills-pearl.vercel.app/budge.iife.js" strategy="afterInteractive" />app/layout.tsx<div data-budge="..." hidden />slidesdata-budge-targetThe last StrReplace call touched exactly one CSS value literal OR exactly one Tailwind utility class token, in exactly one file. The change is not a variable, mixin, or theme token.
padding: 8pxpadding: 16pxclassName="p-2 m-4"className="p-4 m-4"slides{
label: string; // display name shown above bar
property: string; // CSS property to apply to [data-budge-target]
min: number; // minimum numeric value
max: number; // maximum numeric value
value: number; // current value (the one you set)
original: number; // value before your change
unit: string; // "px", "%", "em", etc.
type?: "color"; // only set for color properties
}valueoriginalpadding-top: 8pxpadding-top: 16px[
{ label: "padding-top", property: "padding-top", min: 0, max: 64, value: 16, original: 8, unit: "px" },
{ label: "padding-bottom", property: "padding-bottom", min: 0, max: 64, value: 8, original: 8, unit: "px" },
{ label: "padding-left", property: "padding-left", min: 0, max: 64, value: 12, original: 12, unit: "px" },
{ label: "padding-right", property: "padding-right", min: 0, max: 64, value: 12, original: 12, unit: "px" },
]font-size: 14pxfont-size: 16px[
{ label: "font-size", property: "font-size", min: 8, max: 72, value: 16, original: 14, unit: "px" },
{ label: "line-height", property: "line-height", min: 12, max: 80, value: 24, original: 22, unit: "px" },
{ label: "letter-spacing", property: "letter-spacing", min: -2, max: 10, value: 0, original: 0, unit: "px" },
]color: #333color: #1a1a1atype: "color"[
{ label: "color", property: "color", min: 0, max: 360, value: 0, original: 0, unit: "°", type: "color" },
]| Changed property | Related slides |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| Tailwind class | Primary slide property | Value |
|---|---|---|
| | 16px |
| | 16px |
| | 16px |
| | 16px |
| | 16px |
| | 16px |
| | 14 |
| | 8px |
px-*py-*mx-*my-*<div data-budge-target className="py-4" style={{ paddingTop: '16px', paddingBottom: '16px' }}>:root@theme| Property match | Discovered prefix |
|---|---|
| |
| |
| |
| |
16px · mdSet \scalepropertyscale: nullscale: "spacing" | "text" | "radius" | "color"tokens: [{ name, value, numeric }]unit: "px"data-budge-target<div data-budge-target style={{ paddingTop: '16px' }}>StrReplaceapp/layout.tsx<body><div data-budge={JSON.stringify({ slides: [
{ label: "padding-top", property: "padding-top", min: 0, max: 64, value: 16, original: 8, unit: "px" },
{ label: "padding-bottom", property: "padding-bottom", min: 0, max: 64, value: 8, original: 8, unit: "px" },
{ label: "padding-left", property: "padding-left", min: 0, max: 64, value: 12, original: 12, unit: "px" },
] })} hidden />data-budge