css-motion-designer/SKILL.md
Design CSS animation systems and motion recipes for casino game UI. Use when building round transitions, idle loops, inter-round motion, background patterns, or CSS-only animation specs.
npx skillsauth add egorfedorov/slot-casino-game-developer-skills-for-stake-engine css-motion-designerInstall 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.
Use this skill to design production-ready CSS animation systems for casino games, especially round transitions, inter-round motion loops, and lightweight background effects.
0111222333... to encode frame states.steps(n) to create discrete jumps for grid patterns.steps(n) with repeating-linear-gradient to build scan, stripe, and barcode effects.background-position or filter shifts.steps()).steps(n) for pixel/segment patterns to avoid blurry interpolation.prefers-reduced-motion fallback.Use a repeatable sequence to create a scanning bar effect between rounds.
.interRoundSweep {
--tile-size: 12px;
--steps: 30;
--speed: 1200ms;
--c0: #0b0f1a;
--c1: #162235;
--c2: #223a55;
--c3: #2f4c6a;
background: repeating-linear-gradient(
90deg,
var(--c0) 0,
var(--c0) var(--tile-size),
var(--c1) var(--tile-size),
var(--c1) calc(var(--tile-size) * 2),
var(--c2) calc(var(--tile-size) * 2),
var(--c2) calc(var(--tile-size) * 3),
var(--c3) calc(var(--tile-size) * 3),
var(--c3) calc(var(--tile-size) * 4)
);
animation: barcodeShift var(--speed) steps(var(--steps)) infinite;
}
@keyframes barcodeShift {
0% { background-position: 0 0; }
100% { background-position: calc(var(--tile-size) * 12) 0; }
}
.roundPulse {
animation: roundPulse 600ms ease-in-out 1;
}
@keyframes roundPulse {
0% { opacity: 0; transform: scale(0.98); }
50% { opacity: 1; transform: scale(1); }
100% { opacity: 0; transform: scale(1.02); }
}
Use a 2D grid with step-based offsets to create a subtle “sparkle” during idle.
.idleSparkGrid {
--cell: 10px;
--speed: 900ms;
--steps: 18;
--bg: #0b0f1a;
--a: #162235;
--b: #1f3046;
--c: #2a3f5a;
background:
repeating-linear-gradient(0deg, var(--bg) 0, var(--bg) var(--cell), transparent var(--cell), transparent calc(var(--cell) * 2)),
repeating-linear-gradient(90deg, var(--bg) 0, var(--bg) var(--cell), transparent var(--cell), transparent calc(var(--cell) * 2)),
linear-gradient(120deg, var(--a), var(--b), var(--c));
background-size: auto, auto, 200% 200%;
animation: idleSpark var(--speed) steps(var(--steps)) infinite;
}
@keyframes idleSpark {
0% { background-position: 0 0, 0 0, 0% 50%; }
100% { background-position: 0 0, 0 0, 100% 50%; }
}
Use a fast scan band for a win highlight overlay.
.winAccentScan {
--speed: 700ms;
--accent: rgba(255, 214, 102, 0.35);
background: linear-gradient(90deg, transparent, var(--accent), transparent);
background-size: 200% 100%;
animation: winScan var(--speed) ease-out 1;
}
@keyframes winScan {
0% { background-position: 0% 0; }
100% { background-position: 200% 0; }
}
Use clip-path to create a fluttering shutter feel without heavy assets.
.reelMaskFlutter {
--speed: 800ms;
animation: flutter var(--speed) steps(12) infinite;
clip-path: polygon(0 0, 100% 0, 100% 85%, 0 100%);
}
@keyframes flutter {
0% { clip-path: polygon(0 0, 100% 0, 100% 86%, 0 100%); }
100% { clip-path: polygon(0 0, 100% 0, 100% 92%, 0 100%); }
}
Use a simple rotating gradient for loading or bet-lock states.
.loadingOrbit {
--speed: 1100ms;
background: conic-gradient(from 0deg, #0b0f1a, #1b2a40, #0b0f1a);
animation: orbit var(--speed) linear infinite;
}
@keyframes orbit {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
prefers-reduced-motion: reduce to disable non-critical loops.Return:
Motion Brief: placement, trigger conditions, duration targets.Pattern Grammar: grid size, palette, sequence encoding, steps count.Keyframes: final CSS keyframes and class names.Integration Plan: which game states show/hide the motion.Validation: performance and accessibility checks.Residual Risks: readability, distraction, or device constraints.python3 scripts/validate_css_motion_spec.py \
--input <path/to/css_motion_spec.json>
Treat non-zero exits as blocker findings.
references/workflow.md: motion design workflow.references/contracts.md: CSS motion spec contract.references/patterns.md: pattern library and casino state mapping.references/signoff-template.md: delivery checklist template.steps() for discrete pattern motion and pixel-art stability.development
Integrate, validate, and harden WebAssembly modules in frontend/backend application pipelines. Use when wiring WASM build artifacts with JS/TS loaders, validating module/loader contracts, checking init symbols and runtime assumptions, triaging WASM loading failures, or preparing release sign-off for wasm bundle integrity.
testing
Design retention-focused UX systems for games with measurable engagement impact. Use when defining habit loops, friction reduction patterns, re-engagement flows, or validating UX retention hypotheses against explicit success metrics.
testing
Design, review, and validate slot game UI/UX flows for desktop and mobile play. Use when defining control hierarchy, spin-state UX, bet/balance presentation, modal interactions, responsive layouts, accessibility constraints, animation-feedback timing, or release readiness checks for slot user experience contracts.
content-media
Define turbo/quick spin behavior, timings, and UI rules for slot games. Invoke when implementing fast spin modes, stop/skip behavior, or spin-speed UX standards.