Use this skill whenever the user wants iOS-style scroll fades, gradient masks, scroll-edge overlays, or top/bottom indicators on a scrollable list, dropdown, sidebar, modal, chat log, or panel.
Use this skill whenever the user wants iOS-style scroll fades, gradient masks, scroll-edge overlays, or top/bottom indicators on a scrollable list, dropdown, sidebar, modal, chat log, or panel.
It implements a reusable wrapper-based scroll fade mask pattern across React, Vue, Svelte, and vanilla JavaScript, and it is also the right skill when the user says the fade masks broke scrolling, do not show, or do not match the background.
Similar popular skills
Related neighbors and high-traction skills in the same topics — useful to compare before installing.
Troubleshooting and debugging checklist: references/troubleshooting.md
Eval prompts for regression testing: evals/evals.json
Task mapping
New implementation: open references/architecture.md plus the framework file for the user's stack.
Existing component integration: open references/architecture.md and adapt the wrapper around the user's current scroll container.
Bug report or broken behavior: open references/troubleshooting.md first, then the framework file if behavior code is involved.
Working rules
Start from the wrapper pattern in references/architecture.md. Do not improvise with conditional fade divs unless the user explicitly asks for that tradeoff.
Keep responsibilities split:
- Wrapper owns pseudo-element masks and data-fade-* state. - Inner element owns overflow-y: auto and the actual scrolling.
The wrapper must not become the scroll container by accident. Avoid recommending overflow: hidden or overflow-y: auto on the wrapper.
Match the gradient color to the real background. Use the provided white or warm variants when they fit, otherwise customize the CSS variable.
For framework implementations, prefer a reusable primitive: