--- name: tweaks description: | Wrap any HTML artifact with a side panel of live, parameterized controls — accent color, type scale, density, motion, theme — that rewrite CSS custom properties in real time and persist to localStorage. Lets the user explore variants of a design without re-prompting the agent. Use when the brief asks for "variants", "side-by-side options", "tweak this", "let me adjust", "live knobs", or "实时调参". triggers: - "tweaks" - "variants" - "tweak panel" - "live controls" - "adjust on the fly" - "实时调参" - "可调参数面板" - "side panel" - "knobs" od: mode: prototype platform: desktop scenario: design upstream: "https://github.com/alchaincyf/huashu-design" preview: type: html entry: index.html design_system: requires: false example_prompt: "Wrap this landing page with a tweak panel — accent color, type scale, density, light/dark — persist to localStorage so the user can refresh without losing their choice." --- # Tweaks Skill · 参数化变体面板 Wrap any HTML artifact with a side panel of live controls that rewrite CSS custom properties in real time and persist to `localStorage`. Inspired by the *huashu-design* tweak pattern. ## What you produce A single self-contained HTML file with two layers: 1. **Stage** — the original artifact (landing page / deck / dashboard) re-keyed so all visual decisions read from CSS custom properties: `--accent`, `--scale`, `--density`, `--mode`, `--motion`. 2. **Panel** — a fixed sidebar (or drawer on small viewports) with form controls bound to those custom properties via a tiny vanilla-JS bridge. Persists every change to `localStorage` keyed by the artifact identifier. The user can: - Open the artifact and see the stage rendered with their saved preferences (or sensible defaults). - Adjust accent / scale / density / mode / motion in the panel and watch the stage update instantly — no rerender. - Press T to hide / reveal the panel; R to reset to defaults. - Refresh the page — every choice is persisted. ## When to use - The user generated something they like 80% of, and wants to dial in the last 20% themselves. - You're presenting a design system / brand and want the audience to feel the variants live (instead of you re-running the agent). - You're shipping a stand-alone demo (e.g. a portfolio piece) and want viewers to play. ## When *not* to use - One-shot artifacts that won't be iterated on (e.g. a runbook — parameters don't help). - When the artifact's value is in fixed ratios (e.g. an infographic with carefully balanced data viz — knobs would degrade it). ## The 5 standard knobs > Pick a subset that suits the artifact. Don't ship all 5 if only 2 > matter — clutter is a regression. ### 1. `--accent` — Accent color A select with 5–8 curated swatches (don't ship a free color picker — the user will pick a bad color and blame you). ```js const ACCENT_PRESETS = [ { id: 'rust', val: '#c96442', label: 'Rust' }, { id: 'cobalt', val: '#2c4d8e', label: 'Cobalt' }, { id: 'sage', val: '#4a7a3f', label: 'Sage' }, { id: 'plum', val: '#7a3f6a', label: 'Plum' }, { id: 'graphite',val: '#3a3a3a', label: 'Graphite' }, ]; ``` The artifact uses `var(--accent)` everywhere it had a hard-coded accent before. Border / link / pull-quote rule / CTA all flip together. ### 2. `--scale` — Type scale (0.85 / 1.0 / 1.15) Three settings: *Compact* (0.85), *Normal* (1.0), *Generous* (1.15). All `font-size` declarations multiply by `var(--scale)` via `calc(... * var(--scale))`. Don't go beyond ±15% — beyond that the layout breaks (column flow, breakpoints, line counts). ### 3. `--density` — Layout density (Tight / Normal / Roomy) Three settings that swap the spacing scale: *Tight* (0.75) / *Normal* (1.0) / *Roomy* (1.4). All `padding` / `gap` / `margin` declarations multiply by `var(--density)`. This is the highest-impact knob — it's also the most fragile, so **every layout-critical container must declare its base spacing in custom properties** before you wrap. ### 4. `--mode` — Light / Dark A 2-state toggle. Sets `data-mode="light"` vs `"dark"` on the `` element and the artifact's `:root` selector responds with two color sets. If the artifact already has a media-query-based dark mode, *replace* it with the data-attr version — the user's choice should win over their OS. ### 5. `--motion` — Off / Subtle / Lively Three settings. Maps to a CSS variable `--motion-mult` that scales all `transition-duration` / `animation-duration` declarations: - *Off* — `0s` (also disables WebGL canvases / decorative animation). - *Subtle* — `1.0` (the artifact's authored timing). - *Lively* — `1.6` (slower transitions, more visible motion). Respect `prefers-reduced-motion`: default to *Off* if the user has that set, regardless of stored preference. ## Implementation primitives Read `assets/wrap.html` — it ships the panel + bridge as an inert template. Your job is to: 1. Take the user's existing artifact HTML. 2. Lift its accent / mode / spacing / scale into custom properties (search for hard-coded `#hex` / `Npx` / `Nrem` and convert). 3. Paste the contents into the marked region of `wrap.html`. 4. Edit `assets/wrap.html`'s `KNOBS` array to keep only the knobs you decided are relevant to *this* artifact. Don't ship 5 if 2 matter. 5. Patch the `STORAGE_KEY` to a unique slug (`tweaks-`). The bridge in `wrap.html`: - Loads `localStorage[STORAGE_KEY]` JSON on first paint. - Applies values as `document.documentElement.style.setProperty('--accent', ...)`. - Listens to every form control's `change` event and writes back. - Exposes T (toggle panel) and R (reset). ## Workflow ### Step 1 — Acquire the artifact Same options as the critique skill: 1. Project file (`index.html` in the project folder). 2. Pasted HTML in the chat. 3. Generated by you in this turn. ### Step 2 — Decide which knobs apply Read the artifact's CSS first. For each knob, decide *yes / no*: - `--accent` — yes if the artifact has 1 accent color used ≥ 3 times. - `--scale` — yes if the artifact is type-driven (article, deck, pricing page). - `--density` — yes if the artifact has consistent gap / padding rhythm (deck, dashboard, landing). No for runbooks (already dense). - `--mode` — yes if the artifact has authored dark mode tokens, or you're willing to derive them. - `--motion` — yes if the artifact has any transition / animation worth scaling. No for static reports / critique reports. Default: **3 knobs is the sweet spot.** Five is too busy, one is not worth a panel. ### Step 3 — Lift hard-coded values into custom properties Open `assets/wrap.html`'s `