/SKILL.md
Extract evidence-based style guides and motion appendices from websites or web apps. Use when Codex needs reusable visual language, semantic tokens, component/state rules, runtime animation evidence, or style references that preserve design signal while stripping product-specific structure and content.
npx skillsauth add lucent-snow/style-extractor style-extractorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Extract a reusable design system from web UIs: colors, typography, spacing, components, states, and, when relevant, motion (timings, keyframes, delay chains, JS-driven behavior).
Core principle:
%USERPROFILE%\\style-extractor\\.codex/skills/...)Each extraction must create a dedicated project folder:
%USERPROFILE%\style-extractor\
<project>-<style>\
guides\
style-guide.md
motion-guide.md
evidence-manifest.md
evidence\
screenshots\
assets\
notes\
Required deliverables for every extraction:
%USERPROFILE%\\style-extractor\\<project>-<style>\\guides\\style-guide.md%USERPROFILE%\\style-extractor\\<project>-<style>\\guides\\evidence-manifest.md%USERPROFILE%\\style-extractor\\<project>-<style>\\evidence\\Required when motion is meaningful:
%USERPROFILE%\\style-extractor\\<project>-<style>\\guides\\motion-guide.mdSubdirectory rules:
guides/ only for final Markdown deliverablesevidence/screenshots/ only for PNG/JPG/WebP capturesevidence/assets/ only for downloaded CSS/JS/SVG/font stylesheetsevidence/notes/ only for raw dumps, runtime notes, traces, or helper text filesUse these reference files:
references/output-contract.md — required output structure and anti-patternsreferences/style-guide-template.md — required sections for the style guidereferences/motion-guide-template.md — required sections for the motion appendixreferences/evidence-manifest-template.md — required sections for the evidence manifestreferences/9nine-visual-novel/ — best-practice style + motion reference packagereferences/motherduck-design-system-reference/ — strong static style reference packageWhat to learn from these references:
What not to copy blindly:
Before starting any extraction, read in this order:
references/output-contract.mdreferences/style-guide-template.mdreferences/motion-guide-template.mdreferences/evidence-manifest-template.mdreferences/9nine-visual-novel/guides/references/motherduck-design-system-reference/guides/Reference package selection rule:
references/9nine-visual-novel/ as the primary quality barreferences/motherduck-design-system-reference/Do not start evidence collection, screenshotting, script execution, or drafting until both reference packages have been reviewed. Extraction is incomplete if the final deliverable does not explicitly state:
Before gathering evidence, decide which source traits belong in the reusable style and which should be excluded. Use this simple filter:
Complete all of the following before Phase 1A:
references/output-contract.mdreferences/style-guide-template.mdreferences/motion-guide-template.mdreferences/evidence-manifest-template.mdreferences/9nine-visual-novel/guides/style-guide.mdreferences/9nine-visual-novel/guides/motion-guide.mdreferences/9nine-visual-novel/guides/evidence-manifest.mdreferences/motherduck-design-system-reference/guides/style-guide.mdreferences/motherduck-design-system-reference/guides/motion-guide.mdreferences/motherduck-design-system-reference/guides/evidence-manifest.mdIf both packages are not read first, the extraction is invalid.
Use Chrome MCP tools:
new_page / select_page / navigate_pagetake_screenshot (fullPage when helpful)Minimum screenshot set:
Use evaluate_script to pull:
:root and scoped)getComputedStylelist_network_requests / get_network_request to download CSS files@keyframes, CSS variables, and media queries offlineMinimum static evidence to keep in ...\\evidence\\:
evidence/screenshots/evidence/assets/evidence/notes/Static and motion are independent paths. Skip this phase if the site has no meaningful animation.
Follow these steps in priority order. Each level captures more; stop when you have enough evidence.
Paste scripts/transition-scanner.js, then call:
__seTransition.keyframes()
Returns all @keyframes definitions from stylesheets. This is deterministic and complete—no timing issues.
Same script, call:
__seTransition.scan() // scan entire page
__seTransition.scan('.my-section') // scan specific section
Returns every element's transition-property / duration / easing / delay + clusters by pattern. This shows what can animate even if nothing is animating yet.
This captures the dominant pattern on modern sites: JS sets inline style → CSS transition interpolates.
Paste scripts/interaction-diff.js, then:
// 1. Watch elements you care about
__seDiff.watch([
'[class*="sectionContainer"]',
'[class*="illustration"]',
'[class*="navItem"]',
'button, a[class*="cta"], a[class*="CTA"]'
])
// 2. Trigger interaction and capture diff
__seDiff.triggerAndCapture(
() => document.querySelector('.nav-item-2').click(),
{ captureAt: 50, settleAt: 500 }
)
Returns:
diffs — per-element before/after inline style + computed style changesduringAnimations — document.getAnimations() captured within the 50ms transition windowafterAnimations — what's still running after settleKey insight: document.getAnimations() only returns results during active CSS transitions. The capture window is typically <300ms. This script captures within that window automatically.
Repeat for 3+ key interactions (section change, component switch, hover, scroll).
Paste scripts/library-detect.js to detect third-party animation libraries.
Returns { globals, instances, dom, fingerprints, assets }.
Key: many modern sites bundle libraries as modules, so window.Swiper etc. may be undefined. The script also checks:
el.swiper — Swiper instance on DOM elements (works when bundled)[data-aos-*] — AOS attributes on elements[data-framer-*] — Framer Motion attributesWhen instances are found, configs are extracted directly (Swiper params, AOS settings, etc.).
When the above levels don't capture enough (e.g., hand-written requestAnimationFrame loops), use scripts/motion-tools.js:
__seMotion.sample('.animated-element', { durationMs: 800, include: ['transform', 'opacity'] })
Records computed style values every frame. Useful for inferring duration and property ranges, but cannot capture easing or intent.
For very complex orchestrated animations:
performance_start_trace / performance_stop_traceperformance_analyze_insightDo not write the guide as a product teardown. Convert evidence into reusable rules.
For each major finding, classify it explicitly:
Reusable: can be copied directly as a token, component rule, state rule, or motion primitiveAdapted: useful idea, but needs reshaping for the target product typeDiscarded: source-specific structure or content that should not be copiedExamples:
ReusableAdaptedDiscardedAdapted or Discarded, depending on targetDo not stop at raw values. Convert repeated values into semantic tokens:
--color-accent, --motion-300, nav.switch.iconColor)Start from the reference templates. Do not improvise the top-level structure unless the source clearly requires one.
Follow references/style-guide-template.md.
This file must answer:
Follow references/motion-guide-template.md.
This file must answer:
Follow references/evidence-manifest-template.md.
Include:
Component state matrix must include at least:
| Script | Namespace | Purpose |
|--------|-----------|---------|
| scripts/transition-scanner.js | __seTransition | Scan CSS transitions + extract @keyframes |
| scripts/interaction-diff.js | __seDiff | Before/after inline style diff + instant getAnimations |
| scripts/motion-tools.js | __seMotion | getAnimations snapshot + rAF sampling |
| scripts/library-detect.js | (returns directly) | Library detection + instance config extraction |
| scripts/extract-keyframes.py | CLI | Offline @keyframes extraction from downloaded CSS files |
Do not consider the extraction complete if any of the following are true:
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.