npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@arc-lang/arc-animations

v0.1.2

Published

71 famous CSS animations — zero JS, zero dependencies, tree-shakeable by category. Entrances, exits, attention effects, loaders, scroll-driven reveals, and special effects.

Readme

arc-animations

71 famous CSS animations. Zero JS. Zero dependencies. Tree-shakeable by category.

Animations Size Dependencies License prefers-reduced-motion Part of Arc

A curated library of the most famous and useful CSS animations — entrances, exits, attention effects, loaders, scroll-driven reveals, and special effects. Apply with a single class. Customize with CSS variables. Import only what you need.

Part of the Arc ecosystem — a full-stack web language that compiles to zero-dependency HTML, CSS, and JS.

Quick StartAnimation CatalogCustomizationTree-ShakingBrowser SupportArc Integration


Quick Start

CDN (no install):

<!-- Full bundle -->
<link rel="stylesheet" href="https://unpkg.com/arc-animations/index.css">

<!-- Or a single category -->
<link rel="stylesheet" href="https://unpkg.com/arc-animations/src/entrances.css">

npm:

npm install arc-animations
/* Full bundle */
@import "arc-animations";

/* Tree-shaken — only what you need */
@import "arc-animations/src/base.css";
@import "arc-animations/src/attention.css";

Apply an animation:

<div class="animate-zoom-in">Hello</div>
<div class="animate-shake">Error!</div>
<div class="skeleton" style="width:200px;height:20px"></div>

Animation Catalog

Entrances (19)

Elements appearing. These complement Arc's 9 built-in keyframes — no duplication.

| Class | Description | |-------|-------------| | .animate-zoom-in | Zooms in from 50% scale | | .animate-zoom-in-up | Zooms in while rising from below | | .animate-zoom-in-down | Zooms in while dropping from above | | .animate-zoom-in-left | Zooms in from the left | | .animate-zoom-in-right | Zooms in from the right | | .animate-slide-right | Slides in from the right | | .animate-flip-x | Flips in around the X axis | | .animate-flip-y | Flips in around the Y axis | | .animate-blur-in | Fades in from blur | | .animate-rotate-in | Spins and scales in | | .animate-bounce-in | Overshoots then settles | | .animate-back-in-up | Enters from below with overshoot | | .animate-back-in-down | Enters from above with overshoot | | .animate-back-in-left | Enters from left with overshoot | | .animate-back-in-right | Enters from right with overshoot | | .animate-roll-in | Rolls in from the left with rotation | | .animate-light-speed-in | Fast horizontal sweep with skew | | .animate-jack-in-the-box | Spring pop from below, elastic overshoot | | .animate-float-in | Gentle drift upward with fade |

Exits (18)

Elements disappearing.

| Class | Description | |-------|-------------| | .animate-zoom-out | Shrinks to 50% scale | | .animate-zoom-out-up | Shrinks and rises | | .animate-zoom-out-down | Shrinks and drops | | .animate-zoom-out-left | Shrinks and exits left | | .animate-zoom-out-right | Shrinks and exits right | | .animate-slide-up-out | Exits upward | | .animate-slide-down-out | Exits downward | | .animate-slide-left-out | Exits to the left | | .animate-slide-right-out | Exits to the right | | .animate-flip-x-out | Flips out around the X axis | | .animate-flip-y-out | Flips out around the Y axis | | .animate-blur-out | Fades out to blur | | .animate-rotate-out | Spins and shrinks out | | .animate-bounce-out | Shrinks with a bounce before disappearing | | .animate-back-out-left | Exits left with pull-back | | .animate-back-out-right | Exits right with pull-back | | .animate-light-speed-out | Fast sweep to the right | | .animate-hinge | Swings on top-left pivot and falls off the page (2s) |

Attention & Emphasis (14)

Draw the user's eye to existing elements.

| Class | Description | |-------|-------------| | .animate-shake | Rapid horizontal oscillation | | .animate-shakeX | Horizontal-only shake | | .animate-shakeY | Vertical-only shake | | .animate-head-shake | Subtle left-right with Y-axis rotation | | .animate-wobble | Figure-8 oscillation | | .animate-flash | Opacity blink | | .animate-heartbeat | Double-beat scale pulse | | .animate-rubber-band | Elastic stretch and compress | | .animate-tada | Scale pop with waggle | | .animate-jello | Gelatinous shear | | .animate-swing | Pendulum rotation around top-center | | .animate-float | Gentle infinite vertical hover (loops) | | .animate-glow | Pulsing box-shadow — customize via --glow-color (loops) | | .animate-breathe | Slow scale pulse — for CTAs and live indicators (loops) |

Loading & Progress (8)

Require specific HTML markup — see HTML Patterns.

| Pattern | Class / Element | Description | |---------|-----------------|-------------| | Skeleton shimmer | .skeleton | Linear-gradient sweep | | Bouncing dots | .dots > i × 3 | 3-dot staggered bounce | | Ping / ripple badge | .ping | Radial ripple for status indicators | | Indeterminate progress | .progress-bar > .progress-bar__fill | Sweeping bar | | Blink cursor | .animate-blink | Step-function blink | | Orbit loader | .orbit > .orbit__dot | Dot tracing a circle (pure CSS) | | Concentric ripple | .ripple | Material Design expanding rings | | Equalizer wave | .wave > i × 5 | 5-bar audio equalizer |

Scroll-Driven (4 + stagger)

Uses animation-timeline: view() — Chrome 115+, Edge 115+. Falls back via IntersectionObserver pattern.

| Class | Description | |-------|-------------| | .reveal | Fade + slide in as element enters viewport | | .fade-in-viewport | Opacity-only fade on scroll entry | | .parallax-slow | Element moves at 40% of scroll speed | | .count-up | Number animates from 0 to data-target on entry (needs 10-line JS — see scroll.css) | | .stagger-children | Apply to a list parent; children get staggered --anim-delay (up to 8 items) |

Effects (8)

Structural patterns — require specific HTML or CSS setup.

| Class | Description | |-------|-------------| | .animate-glitch | RGB channel-split text glitch | | .animate-neon | Flickering neon text glow — customize via --neon-color | | .animate-aurora | Animated mesh gradient background — customize via --aurora-1/2/3 | | .animate-gradient-shift | Animated gradient background sweep — customize via --grad-from/mid/to | | .animate-morph | Clip-path polygon morph — customize via --morph-from/to | | .typewriter | Text reveals char-by-char — set --chars to character count | | .marquee > .marquee__track | Horizontal scrolling ticker, pauses on hover | | .flip-card > .flip-card__inner > .flip-card__front + .flip-card__back | 3D card flip on hover |


Customization

Every animation reads from CSS custom properties with sensible defaults. Override at any scope:

/* Global defaults */
:root {
  --anim-duration:   0.4s;
  --anim-easing:     cubic-bezier(0.16, 1, 0.3, 1);  /* spring-like */
  --anim-delay:      0s;
  --anim-fill:       both;
  --anim-iterations: 1;
}

/* Per-element override */
.my-card {
  --anim-duration: 0.7s;
  --anim-delay:    0.1s;
}

/* Glow color */
.my-button { --glow-color: #6366f1; }

/* Neon color */
.my-logo   { --neon-color: #0ff; }

/* Aurora palette */
.my-hero   {
  --aurora-1: oklch(65% 0.25 290);
  --aurora-2: oklch(65% 0.25 160);
  --aurora-3: oklch(65% 0.25 20);
}

/* Gradient shift colors */
.my-cta    {
  --grad-from: oklch(55% 0.2 260);
  --grad-mid:  oklch(55% 0.2 320);
  --grad-to:   oklch(55% 0.2 200);
}

/* Morph shapes */
.my-blob   {
  --morph-from: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%);
  --morph-to:   polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);
}

/* Typewriter length */
.my-heading { --chars: 20; }

/* Marquee speed */
.my-ticker  { --marquee-duration: 10s; }

Tree-Shaking

Import only the categories you use. Each file is fully independent:

/* Only include what you need */
@import "arc-animations/src/base.css";       /* required — CSS vars + a11y reset */
@import "arc-animations/src/entrances.css";  /* 19 entrance animations */
@import "arc-animations/src/exits.css";      /* 18 exit animations */
@import "arc-animations/src/attention.css";  /* 14 attention animations */
@import "arc-animations/src/loading.css";    /* 8 loading patterns */
@import "arc-animations/src/scroll.css";     /* 4 scroll-driven + stagger */
@import "arc-animations/src/effects.css";    /* 8 special effects */

| File | Size | Animations | |------|------|------------| | src/base.css | 0.4 KB | CSS vars + a11y reset | | src/entrances.css | 6.2 KB | 19 | | src/exits.css | 5.8 KB | 18 | | src/attention.css | 5.1 KB | 14 | | src/loading.css | 5.0 KB | 8 | | src/scroll.css | 3.2 KB | 4 + stagger | | src/effects.css | 8.0 KB | 8 | | index.css (all) | 34 KB | 71 |


HTML Patterns

Some animations require specific markup:

<!-- Skeleton shimmer -->
<div class="skeleton" style="width:200px;height:20px;"></div>

<!-- Bouncing dots -->
<span class="dots"><i></i><i></i><i></i></span>
<style>.dots i { background: currentColor; width:8px; height:8px; border-radius:50%; }</style>

<!-- Ping badge -->
<div class="ping" style="width:12px;height:12px;border-radius:50%;background:#22c55e;color:#22c55e"></div>

<!-- Progress bar -->
<div class="progress-bar" style="color:#6366f1">
  <div class="progress-bar__fill"></div>
</div>

<!-- Orbit loader -->
<div class="orbit" style="color:#6366f1">
  <div class="orbit__dot"></div>
</div>

<!-- Equalizer wave -->
<span class="wave" style="color:#6366f1"><i></i><i></i><i></i><i></i><i></i></span>
<style>.wave i { background:currentColor; display:inline-block; }</style>

<!-- Typewriter (monospace, set --chars to character count) -->
<p class="typewriter" style="--chars:24">Your text here exactly 24 chars</p>

<!-- Marquee (duplicate content for seamless loop) -->
<div class="marquee">
  <div class="marquee__track">Item · Item · Item · &nbsp;&nbsp;&nbsp;&nbsp; Item · Item · Item · &nbsp;&nbsp;&nbsp;&nbsp;</div>
</div>

<!-- Flip card -->
<div class="flip-card" style="width:200px;height:120px">
  <div class="flip-card__inner">
    <div class="flip-card__front">Front side</div>
    <div class="flip-card__back">Back side</div>
  </div>
</div>

<!-- Count-up (scroll entry triggers JS counting) -->
<span class="count-up" data-target="12500">0</span>
<!-- Requires 10-line JS snippet — see src/scroll.css for the full snippet -->

Browser Support

| Feature | Chrome | Firefox | Safari | Edge | |---------|:------:|:-------:|:------:|:----:| | All @keyframes animations | 43+ | 16+ | 9+ | 79+ | | CSS custom properties | 49+ | 31+ | 9.1+ | 15+ | | animation-timeline: view() (scroll-driven) | 115+ | ✗ | ✗ | 115+ | | clip-path morph | 55+ | 54+ | 13.1+ | 79+ | | backface-visibility (flip-card) | 12+ | 10+ | 4+ | 12+ | | filter: blur() | 18+ | 35+ | 9.1+ | 79+ |

Scroll-driven animations (reveal, fade-in-viewport, parallax-slow) fall back gracefully: the CSS emits an IntersectionObserver-compatible pattern where adding .is-visible triggers the animation on any browser.


Accessibility

src/base.css automatically injects:

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

All 71 animations collapse to instant on systems with reduced motion enabled. No per-animation opt-out needed.


Arc Integration

arc-animations is designed to complement Arc's 9 built-in keyframes — not replace them. Arc ships fade-in, fade-out, slide-up, slide-down, slide-in, scale-in, bounce, spin, and pulse baked into its CSS emitter with automatic tree-shaking. This library adds the remaining 71 animations that Arc doesn't include.

page "Hero"
  design
    hero
      animate: fade-in 0.4s ease   /* Arc's built-in */
<!-- Use arc-animations for everything else -->
<link rel="stylesheet" href="arc-animations/src/entrances.css">
<div class="animate-zoom-in">...</div>

Contributing

See CONTRIBUTING.md. Bug reports and animation requests welcome via GitHub Issues.


License

MIT. See LICENSE.