Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/tomes --skill build-scroll-animation명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
> Use when this capability is needed.
Use when writing kernel, account, or note MASM code that reads from or writes to the advice provider (advice stack / advice map) — validate advice data.
Use when writing a Rust test that exercises a failure path or a MASM test that expects a `panic` / `assert` — assert on the specific expected error variant or error code.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | build-scroll-animation |
| description | > Use when this capability is needed. |
You are implementing a CSS scroll-driven animation for a block
in the C2 design system (adobecom/milo repository). All animation
CSS lives inside the @supports (animation-timeline: view()) { ... }
block in libs/c2/styles/styles.css.
Critical rules
- All scroll-driven animation CSS goes in
libs/c2/styles/styles.cssinside the existing@supports (animation-timeline: view())block. Do not create separate CSS files for animations.- Simplicity first: always check whether existing
parallax-*classes can achieve the effect before creating new ones. If an existing class fits, recommend it to the user. If not, create a new class. The simplicity review agent enforces this.
- Animation classes should use the
parallax-prefix whenever possible. This ensures the existingprefers-reduced-motionblanket rule and the[class*="parallax-"]base selector cover them automatically. If the prefix genuinely does not fit the effect, ask the user before proceeding with a non-standard name, and add an explicitprefers-reduced-motionoverride for it.
- The default easing is
var(--parallax-easing)(defined ascubic-bezier(0.42, 0, 0, 1)instyles.css). Do not specify a different timing function unless the design specs explicitly call for a different animation curve.- Animated properties should be compositor-friendly (
transform,opacity,filter) unless the design explicitly requires layout-affecting properties.
Do not load these upfront. Each phase tells you which file to read when it becomes relevant.
| File | Purpose |
|---|---|
scroll-animation-api.md | Core concepts: animation-timeline, view(), scroll(), animation ranges, @keyframes interaction, pitfalls. Baked-in from WebKit and MDN docs. |
existing-animations.md | Catalog of all existing parallax-* classes, their variables, keyframes, and composability. |
animation-patterns.md | Decision tree for choosing the simplest implementation path, common composition recipes, simplicity checklist. |
| File | Purpose |
|---|---|
simplicity-review.md | Self-criticism agent: reviews proposed CSS and pushes back toward simpler solutions. |
animation-verification.md | Playwright-based verification: scrolls the page and confirms animations trigger at the right positions. |
Ask the user to provide the following before proceeding:
| Input | Required | Example |
|---|---|---|
| Block name | Yes | base-card, rich-content |
| Preview URL | Yes | http://localhost:6456/some-page |
| Animation instructions | Yes | "Cards should fade in and slide up as they enter the viewport, staggered left to right" |
| Visual reference | No | Figma URL, screenshots of animation states (start/mid/end), or a verbal description of timing/easing. Do not accept video files — they cannot be analyzed and add nothing to the workflow. If the user has a video, ask them to provide screenshots of key animation states instead. |
| Target element | No | "The section containing the cards" (defaults to the block element itself) |
| Breakpoint-specific behavior | No | "Desktop only" or "Different range on mobile" |
Do not proceed until you have the block name, preview URL, and animation instructions.
Break the design squad's animation description into discrete properties:
--parallax-easing; only note
a different curve if the specs explicitly call for one)Present a structured summary to the user:
Animation breakdown:
Target: [element description]
Effect: [transform/opacity/etc. with from→to values]
Timeline: [view() / scroll()]
Range: [entry 0% entry 100% / cover 0% cover 50% / etc.]
Easing: [--parallax-easing (default) / custom if specs require]
Stagger: [none / LTR / RTL / custom]
Responsive: [all breakpoints / desktop only / etc.]
Wait for user confirmation before proceeding.
Load references/existing-animations.md now.
Compare the animation requirements from Phase 1 against every
existing parallax-* class. This is the most important phase:
parallax-move-up parallax-opacity.--parallax-* variables in a new class (reusing the
enable-parallax keyframe) would work.Load references/animation-patterns.md now and follow the
decision tree.
Recommend the class(es) to the user. Explain which classes to apply and on which element. No new CSS needed. Skip to Phase 5 for verification.
Tell the user a new class is needed, explain why existing classes fall short, then write the override class and skip to Phase 4.
Tell the user a new class is needed, explain what it will do and why it cannot reuse existing keyframes, then proceed to Phase 3.
Read the target block's CSS and JS from libs/c2/blocks/<name>/:
Read the @supports (animation-timeline: view()) block in
libs/c2/styles/styles.css to understand:
[class*="parallax-"] declarationenable-parallax keyframeLoad references/scroll-animation-api.md now if you need
to reference range names, view() parameters, or timeline syntax.
Add the new animation CSS inside the existing
@supports (animation-timeline: view()) block in
libs/c2/styles/styles.css.
Follow these rules:
Variable overrides first: if the effect can be achieved by
overriding --parallax-* variables, write only a class with
variable overrides. No new keyframe.
Minimal keyframes: if a new keyframe is needed, animate
only the properties that change. Prefer from-only keyframes
when the to state is the element's natural state.
Use CSS nesting for scoped child animations.
Responsive overrides via @media (width >= Xpx) nested
inside the animation class, using CSS custom properties for
values that change per breakpoint.
Use CSS logical properties where applicable.
No !important except in the prefers-reduced-motion
override.
Easing: use var(--parallax-easing) (the project default).
Only use a different timing function if the design specs
explicitly call for a different curve.
Naming: prefer the parallax- prefix. If the effect
genuinely does not fit the prefix, ask the user before using
a non-standard name. If a non-parallax- name is approved,
add an explicit prefers-reduced-motion override:
@media (prefers-reduced-motion: reduce) {
.your-class-name,
.your-class-name * {
animation: none !important;
}
}
Insert new CSS in a logical location within the @supports block:
parallax-move-up, parallax-opacity, etc.)@supports block, before the closing }Load agents/simplicity-review.md now and follow its procedure.
Submit the proposed CSS to the simplicity review agent. Provide:
If the agent's verdict is "Needs simplification", apply the suggested changes and re-submit. Maximum 2 review cycles.
Do not proceed to Phase 5 until the simplicity review passes (verdict is "Approved", "Use existing classes", or "Use variable override").
Load agents/animation-verification.md now and follow its
procedure.
Provide the agent with:
The agent will:
If verification fails, fix the CSS and re-verify. Maximum 3 iterations.
Output:
styles.css
(if any), formatted as a code block. If existing classes were
recommended, state "No new CSS needed."Ask the user whether to remove the /tmp/build-scroll-animation/
screenshot cache created during verification. If confirmed:
rm -rf /tmp/build-scroll-animation
Source: adobecom/milo — distributed by TomeVault.