stvlynn/skills

scroll-fade-mask

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.

First seen May 29, 2026

Installation

$ npx skills add stvlynn/skills --skill scroll-fade-mask

Summary

  • 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.

Also in this package

Other skills from stvlynn/skills · top by installs.

npx skills add stvlynn/skills

Browse all from stvlynn/skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 57
License app/LICENSE
Default branch main
Open issues 0
Status Active

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 3,880 B
  • docs SUMMARY.md 459 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 2 installs

SKILL.md

Scroll Fade Mask

Use this skill to implement or troubleshoot gradient fade masks on scrollable containers without breaking scrolling behavior.

What is bundled

  • Architecture and CSS system: references/architecture.md
  • Framework implementations:

- React: references/react.md - Vue 3: references/vue.md - Svelte: references/svelte.md - Vanilla JS: references/vanilla-js.md

  • 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

  1. Start from the wrapper pattern in references/architecture.md. Do not improvise with conditional fade divs unless the user explicitly asks for that tradeoff.
  2. Keep responsibilities split:

- Wrapper owns pseudo-element masks and data-fade-* state. - Inner element owns overflow-y: auto and the actual scrolling.

  1. The wrapper must not become the scroll container by accident. Avoid recommending overflow: hidden or overflow-y: auto on the wrapper.
  2. Match the gradient color to the real background. Use the provided white or warm variants when they fit, otherwise customize the CSS variable.
  3. For framework implementations, prefer a reusable primitive:

- React hook - Vue composable - Svelte action - Vanilla JS class

  1. Include ResizeObserver when you provide behavior code so the masks react to dynamic content changes.
  2. For troubleshooting, diagnose layout and overflow first, then refs/listeners, then z-index/background issues.
  3. Respond in the user's language unless the surrounding codebase clearly suggests otherwise.

Default workflow

  1. Identify the task type: implementation, integration into existing markup, or troubleshooting.
  2. Open references/architecture.md first.
  3. Open the smallest relevant framework file for the user's stack.
  4. If the user reports a bug, also open references/troubleshooting.md.
  5. Return adapted code, not a generic dump:

- CSS system - behavior primitive for their stack - integration example using their container shape - brief notes on why the wrapper pattern matters

Routing shortcuts

  • Global CSS and class variants: references/architecture.md
  • React hook + JSX usage: references/react.md
  • Vue 3 composable + template usage: references/vue.md
  • Svelte action + state wiring: references/svelte.md
  • Framework-free implementation: references/vanilla-js.md
  • "Can't scroll", masks not showing, wrong edge state: references/troubleshooting.md

Output expectations

  • Implementation requests should include the wrapper markup, the scroll container contract, and the behavior code for the user's stack.
  • Troubleshooting requests should clearly identify the likely root cause before presenting the fix.
  • When the user gives a background color, incorporate it into the recommended gradient setup.
  • Keep code production-oriented: reusable helpers, no brittle inline scroll logic unless the user asks for the fastest possible one-off patch.