no-pointer

$npx mdskill add remotion-dev/remotion/no-pointer

Apply Remotion Studio's pointerless interaction styling to clickable controls.

  • Eliminates pointer cursor and adds hover brightening for Studio buttons and links.
  • Depends on HOVERABLE_CLASS_NAME, hoverableStyle(), and FOCUS_VISIBLE_ONLY_CLASS_NAME from hoverable.ts.
  • Uses shared constants like LIGHT_TEXT and WHITE to determine idle and hover colors.
  • Provides CSS pattern for keyboard-only focus visibility without default outline.

SKILL.md

.github/skills/no-pointerView on GitHub ↗
---
name: no-pointer
description: Apply Remotion Studio's pointerless interaction styling to clickable controls. Use when adding or revising Studio buttons or links that should use the default cursor, brighten on hover, and show focus decoration only for keyboard navigation.
---

# No Pointer

Use the established Studio interaction convention for clickable controls:

- Set `cursor: 'default'`; do not use `cursor: 'pointer'`.
- Drive purely visual hover styling through `HOVERABLE_CLASS_NAME` and
  `hoverableStyle()` from `packages/studio/src/helpers/hoverable.ts`. Do not add
  React hover state for color or background changes.
- Keep the background unchanged unless the surrounding component already uses
  a shared background-hover convention. For a text-only action, use
  `TRANSPARENT` for both `idleBackground` and `hoverBackground`.
- Use `LIGHT_TEXT` (`#A6A7A9`) as the idle color and `WHITE` (`white`) as the
  hover color. Icons and nested text must follow the same state; inspect the
  element that paints the pixels if the Studio CSS reset blocks inheritance.

## Focus styling

Remove the default outline and pointer-focus shadow, but preserve a visible
keyboard focus indicator. Add `FOCUS_VISIBLE_ONLY_CLASS_NAME` from
`packages/studio/src/helpers/hoverable.ts` to the control alongside
`HOVERABLE_CLASS_NAME`. The shared class implements this pattern:

```css
.__remotion-focus-visible-only:focus {
  outline: none;
  box-shadow: none;
}

.__remotion-focus-visible-only:focus-visible {
  box-shadow: ${FOCUS_BOX_SHADOW};
}
```

Never remove the `:focus-visible` indicator. Keep hidden actions out of the tab
order until they are discoverable.

## Verify

In a running Studio, check the control's computed styles in all relevant states:

- idle and hovered cursor: `default`;
- idle color: `rgb(166, 167, 169)`;
- hovered color: `rgb(255, 255, 255)`;
- pointer focus: no outline or box shadow;
- keyboard `Tab` focus: the standard `FOCUS_BOX_SHADOW` is visible.

For Studio code changes, run:

```bash
bunx turbo run make --filter='@remotion/studio'
bunx turbo run lint test --filter='@remotion/studio'
```

More from remotion-dev/remotion

SkillDescription
add-bugAdd a new Remotion bug entry to packages/bugs/api/[v].ts. Use when the user describes a bug and affected Remotion versions that should be surfaced through the bugs API.
add-cli-optionAdd a new Remotion CLI or config option by creating an AnyRemotionOption, registering CLI parsing, wiring config setters, and updating documentation. Use when adding or converting command-line flags or Remotion options.
add-effectAdd a new effect to @remotion/effects, including implementation, package exports, docs, demos, preview images, Remotion skill updates, formatting, and builds.
add-expertAdd a new expert to the Remotion experts page
add-new-packageAdd a new package to the Remotion monorepo, including package scaffolding, monorepo registration, documentation, build scripts, and release checklist updates. Use when creating a new @remotion package.
add-sfxAdd a new sound effect to @remotion/sfx
add-webcodecs-bugAdd a browser WebCodecs bug to the Remotion Mediabunny WebCodecs bugs docs page. Use when given a Chromium, WebKit, or Firefox issue URL that should be tracked in packages/docs/docs/mediabunny/webcodecs-bugs.mdx, especially when needing to look up the issue title, filing date, reporter, and resolution state before editing the MDX table.
canvas-capture-extensionRebuild, install, and reload the private Remotion Canvas Capture unpacked Chrome extension. Use when the extension needs to be restored after a Codex worktree was deleted, rebuilt after source changes, moved to its durable install directory, or reloaded in Chrome or Chrome Canary.
checkoutCheckout a requested branch or ref in the Remotion repo, rename the current task to the associated PR title when running in Codex, then install dependencies and build. Use when the user asks to checkout a ref and prepare the workspace.
convertStart the local @remotion/convert app and open it in the Codex browser. Use when the user invokes /convert or $convert, asks to launch convert.remotion.dev locally, or wants to inspect the Convert package UI.