Animated Hero Sections & Scroll Effects – Sharingan

Category: Animation , Javascript | November 3, 2026
Authorrasengan-dev
Last UpdateNovember 3, 2026
LicenseMIT
Views0 views
Animated Hero Sections & Scroll Effects – Sharingan

Sharingan is an open-source collection of animated hero sections and scroll-driven landing page components for React and Web Components.

It includes WebGPU ink and particle effects, interactive DOM heroes, and GSAP-powered sections for scroll animations.

Each component is installed as editable source through the shadcn CLI. Headlines, buttons, and links stay in the DOM, and the animations support CSS theme colors and reduced-motion preferences.

Features

  • Pointer tracking and tilt effects on supported heroes.
  • Keyboard and physical gamepad navigation in the Gamepad hero.
  • Color palettes that accept CSS variables and follow theme changes.
  • Optional still posters for WebGPU effects when animation is unavailable.
  • Reduced-motion handling and animation pausing outside the viewport.
  • Scroll-driven cards, galleries, and text reveals for sections below the hero.

How to Use Sharingan

Installation

Use a shadcn-configured project with components.json and the @/ path alias. Add the Sharingan registry entry to your existing components.json:

{
  "registries": {
    "@sharingan": "https://sharingan.hiraiship.app/r/{name}.json"
  }
}

Install Conic Rays, a DOM hero with rotating light rays. Its files go to components/heroes/conic-rays/ and its shared runtime to lib/sharingan/.

npx shadcn@latest add @sharingan/conic-rays

Basic Usage: React Hero

Sharingan’s React components require React 19. Import the installed Conic Rays hero and set its text and animation options:

import { ConicRaysHero } from "@/components/heroes/conic-rays/conic-rays";
export default function LandingPage() {
  return (
    <ConicRaysHero
      content={{
        headline: "Create your next project today",
        subheadline: "A practical toolkit for your product team.",
        primaryCta: { label: "Get started", href: "/signup" },
      }}
      config={{
        colors: ["#0ea5e9", "#f97316"],
        rays: 12,
        speed: 0.8,
        origin: "top",
      }}
    />
  );
}

Add a WebGPU Hero

Install Ink Flow for an animated, pointer-responsive ink background:

npx shadcn@latest add @sharingan/ink-flow
import { InkFlowHero } from "@/components/heroes/ink-flow/ink-flow";
export default function InkLandingPage() {
  return (
    <InkFlowHero
      content={{
        headline: "Turn your ideas into working products",
        primaryCta: { label: "Start building", href: "/start" },
      }}
      config={{
        colors: ["#2563eb", "#fb7185"],
        swirl: 26,
        detail: "low",
      }}
    />
  );
}

Use a Web Component

For the Web Component API, register each custom element once before adding its tag.

<script type="module">
  import { defineInkFlowElement } from "@/components/heroes/ink-flow/ink-flow.element";
  defineInkFlowElement();
</script>
<sg-ink-flow colors="#2563eb, #fb7185" swirl="26" detail="low">
  <h1>Turn your ideas into working products</h1>
  <a href="/start">Start building</a>
</sg-ink-flow>

Available Hero Designs

The hero collection has six WebGPU effects and 12 DOM designs.

HeroMain effect
aurora-meshSlow drifting bands of light.
ink-flowCursor-responsive fluid ink.
particle-typeHeadline particles scatter and reform.
gravity-fieldParticles respond to pointer attraction.
reaction-diffusionGrowing procedural patterns.
liquid-glassRefractive glass over a product image.
gamepadInteractive controller navigates content panels.
holo-cardTilting, flipping holographic card.
split-headlineAnimated letters with pointer reactions.
marquee-typeLarge moving rows of typography.
terminal-bootTyped command and product reveal.
app-windowProduct UI assembles panel by panel.
beam-gridLight beams move across a grid.
conic-raysRotating light rays behind the heading.
gallery-fanArtwork cards open into a fan.
trail-mapAnimated route over a landscape image.
curve-reelProject cards rotate along a curved wall.
bento-tilesRaised tiles and animated bento cards.

Shared React API

Hero and section React components accept these outer props. Each component has its own content and config schema.

PropDescription
contentOptional, typed object containing the hero’s headline, links, and any component-specific data. Omitting it uses the component’s example content.
configOptional, typed object controlling colors, motion, and interaction. Each component defines its accepted values in a Zod schema.
idOptional HTML ID applied to the hero or section.
classNameOptional additional class for the root element.

Hero Content Reference

HeroAdditional public content fields
aurora-mesh, ink-flow, particle-type, gravity-field, reaction-diffusion, split-headline, beam-grid, conic-raysThe common headline, eyebrow, subheadline, and CTA fields only.
liquid-glassRequired: media: {src, alt} for the product image and its text description.
gamepadRequired: sections (1 to 4 objects with label, title, optional body, items (up to 5 strings), and quote: {text, cite}). Optional: wordmark: {title, tagline?} (defaults to the supplied SG·PAD label); collaborators (up to 2 names).
holo-cardRequired: card: {issuer, name, role?, detail?, number?}. Optional: back: {title, items?, link?}; items accepts up to 4 strings and link is a CTA object.
marquee-typeRequired: rows, an array of 2 to 4 rows, each containing 3 to 10 strings. Optional: rowsLabel for the list’s accessible label.
terminal-bootRequired: terminal: {command, output, title?, done?}. output contains 1 to 8 objects with text and optional status (ok, info, warn, muted; default ok). title defaults to ~/projects. Optional: media: {src, alt, address?}.
app-windowRequired: app: {label, name, nav, title, stats, chart, columns, rows}. nav has 2 to 6 strings; stats has 2 to 4 {label, value, delta?} items; chart: {label, points} has 6 to 32 numeric points; columns has 2 to 5 strings; rows has 2 to 5 {cells, status?} items. Each row has 2 to 5 cells; status defaults to neutral and accepts ok, warn, error, neutral.
gallery-fanRequired: artworks (3 to 9 {src, alt, title, artist, href?} objects). Optional: collaborators (up to 2 {name, card?} objects; card is a zero-based artwork index).
trail-mapRequired: photo: {src, alt} and trail: {points, stops?, label?, distance, description}. points has 2 to 24 [x, y] coordinates in percentages from 0 to 100; stops is up to 8 point indices (default []); label defaults to Trekking distance. Optional: explorers: {count, label, initials?} and destinations (up to 8 {src, alt, name, duration, rating, reviews, href?} objects).
curve-reelRequired: projects, an array of 4 to 16 {src, alt, title, href?} cards. Optional: cta and steps, up to 5 {label, card?} objects with zero-based card indices.
bento-tilesRequired: headline, integrations: {title, description, apps}, stat: {value, label}, portrait: {src, alt, focus?}, highlight: {value, label}, folder: {label}, and orbit: {title, people}. apps has 1 to 4 {name, icon} items; focus is an optional percentage pair [x, y]; people has 1 to 6 {src, alt} images. Optional: nav: {brand, links, cta?} (up to 5 {label, href} links), subheadline, and cta.

Web Component API

Each installed component includes a define<ComponentName>Element() function in <component-slug>.element.ts. Calling it registers the corresponding <sg-component-slug> tag.

For example, defineInkFlowElement() registers <sg-ink-flow>, and defineCardJourneyElement() registers <sg-card-journey>. You can pass a custom tag name to these definition functions.

The Web Component attributes mirror the component’s config fields: inkFade becomes ink-fade, countUp becomes count-up, accentAlt becomes accent-alt, and easterEgg becomes easter-egg.

Color arrays such as colors and gradient use comma-separated CSS color values. Set a boolean attribute to "false" to turn it off; omitted attributes take the schema defaults from the configuration tables.

The Ink Flow element above reads its headline and links from HTML children. DOM heroes and scroll sections use the following structural markup in their Web Component form.

ElementRequired internal markup
<sg-gamepad>A data-sg-slide="home" panel and up to four data-sg-slide panels with data-label; data-wordmark and data-collaborators provide optional text.
<sg-holo-card>A data-sg-card element containing data-sg-front; data-sg-back is optional.
<sg-split-headline>Mark the heading with data-sg-split and the content following it with data-sg-after.
<sg-marquee-type>A data-sg-rows wrapper with data-sg-row children, each containing a list of words.
<sg-terminal-boot>data-sg-command, data-sg-line rows with data-sg-icon, and data-sg-actions; optional data-sg-done and data-sg-product.
<sg-app-window>A data-sg-window containing data-sg-panel parts; the chart uses data-sg-chart with data-points.
<sg-beam-grid>, <sg-conic-rays>HTML heading and link content as children; their effects are generated behind it.
<sg-gallery-fan>data-sg-fan containing a data-sg-card for each image; data-sg-cursor is optional.
<sg-trail-map>data-sg-visual containing data-sg-frame with data-trail route data, surrounding a data-sg-scene with the image.
<sg-curve-reel>data-sg-reel with data-sg-card items and optional data-sg-step elements.
<sg-bento-tiles>data-sg-bento containing six data-sg-card items; optional data-sg-nav.
<sg-card-journey>data-sg-statement and data-sg-grid with data-sg-copy and data-sg-panel containing data-sg-card items; optional data-sg-aside and data-sg-tab.
<sg-pinned-reveal>data-sg-headline and data-sg-frame with the image; optional data-sg-head and data-sg-caption.
<sg-scroll-read>A data-sg-read paragraph with inline <img> elements at the appropriate positions.
<sg-parallax-columns>A data-sg-grid containing two data-sg-column elements with data-sg-card items; images sit in data-sg-media wrappers.
<sg-mosaic-zoom>data-sg-stage with a data-sg-mosaic list containing one data-sg-feature and multiple data-sg-tile elements.
<sg-image-marquee>One or two data-sg-row wrappers with data-sg-track word/image lists; the second row is aria-hidden.
<sg-bento-assemble>A data-sg-grid of data-sg-tile items; numbers use data-sg-count. Optional data-sg-head and data-sg-badge.
<sg-portrait-burst>data-sg-stage containing data-sg-head and data-sg-person portraits; optional data-sg-pill facts.
<sg-case-track>data-sg-stage with data-sg-track list and data-sg-card items; optional data-sg-head and data-sg-foot.
<sg-split-word>data-sg-stage with data-sg-line, two data-sg-half elements and a data-sg-card; optional data-sg-below.

Hero Configuration Reference

WebGPU heroes

aurora-mesh

OptionType, default, and behavior
colorsCSS color array (1-4); default: ['var(--brand, oklch(0.66 0.2 262))', 'oklch(0.78 0.14 175)', 'oklch(0.62 0.2 305)']. Colors of the light bands.
backgroundCSS color; default: var(--background, #0b0c10). Background color.
speednumber (0.1-3); default: 1. Band animation speed.
intensitynumber (0.2-2); default: 0.75. Brightness.
pointerboolean; default: true. Pointer response.
calmnumber (0-1); default: 0.55. Clear area behind the heading.
posterstring; default: Unset. Optional fallback image.

ink-flow

OptionType, default, and behavior
colorsCSS color array (1-4); default: ['var(--brand, oklch(0.66 0.2 262))', 'oklch(0.72 0.19 330)', 'oklch(0.8 0.15 200)']. Ink colors.
backgroundCSS color; default: var(--background, #0b0c10). Canvas background.
swirlnumber (0-60); default: 24. Vorticity strength.
inkFadenumber (0.05-4); default: 0.7. Ink fade per second.
flowFadenumber (0-4); default: 0.25. Flow decay per second.
ambientboolean; default: true. Idle currents.
pointerboolean; default: true. Cursor-driven ink.
calmnumber (0-1); default: 0.7. Clear headline area.
detaillow / medium / high; default: medium. Simulation resolution.
posterstring; default: Unset. Optional fallback image.

particle-type

OptionType, default, and behavior
colorsCSS color array (1-3); default: ['var(--brand, oklch(0.66 0.2 262))', 'oklch(0.72 0.19 330)', 'oklch(0.85 0.12 95)']. Particle colors.
backgroundCSS color; default: var(--background, #0b0c10). Background color.
scatternumber (0-3); default: 1. Particle displacement strength.
springnumber (0.3-3); default: 1. Return-to-letter force.
gapnumber (1.5-6); default: 2.2. Particle spacing in CSS pixels.
sizenumber (0.3-1.2); default: 0.95. Particle size relative to gap.
pointerboolean; default: true. Pointer scattering.
posterstring; default: Unset. Optional fallback image.

gravity-field

OptionType, default, and behavior
colorsCSS color array (1-3); default: ['var(--brand, oklch(0.66 0.2 262))', 'oklch(0.75 0.16 220)', 'oklch(0.85 0.12 95)']. Particle color bands.
backgroundCSS color; default: var(--background, #0b0c10). Background color.
gravitynumber (0-3); default: 1. Pointer attraction.
flownumber (0-3); default: 1. Current drift.
sizenumber (0.5-4); default: 1.4. Particle size in CSS pixels.
pointerboolean; default: true. Pointer attraction enabled.
calmnumber (0-1); default: 0.6. Clear headline area.
detaillow / medium / high; default: medium. Particle count tier.
posterstring; default: Unset. Optional fallback image.

reaction-diffusion

OptionType, default, and behavior
colorsCSS color array (1-2); default: ['var(--brand, oklch(0.66 0.2 262))', 'oklch(0.8 0.15 160)']. Pattern colors.
backgroundCSS color; default: var(--background, #0b0c10). Background color.
patterncoral / maze / spots; default: coral. Pattern form.
speedinteger (2-24); default: 10. Simulation steps per frame.
pointerboolean; default: true. Cursor-seeded growth.
calmnumber (0-1); default: 0.8. Clear headline area.
detaillow / medium / high; default: medium. Simulation grid resolution.
posterstring; default: Unset. Optional fallback image.

liquid-glass

OptionType, default, and behavior
colorsCSS color array (1-2); default: ['var(--brand, oklch(0.66 0.2 262))', 'oklch(0.97 0.02 250)']. Glass tint and edge light.
backgroundCSS color; default: var(--background, #0b0c10). Background color.
imagestring; default: /sharingan/product.png. Image used by the effect; React hero passes content.media.src.
refractionnumber (0-2); default: 1. Distortion strength.
dropsnumber (0-5); default: 4. Animated glass drops.
pointerboolean; default: true. Pointer-controlled drop.
posterstring; default: Unset. Optional fallback image.

DOM heroes

gamepad

OptionType, default, and behavior
colorsfour CSS colors; default: #2f9d5c, #2f4bc4, #e5b41d, #d23538. Y/X/B/A button colors.
shellauto / clay / graphite / translucent; default: auto. Controller body finish.
tiltboolean; default: true. Pointer tilt.
keyboardboolean; default: true. Keyboard input.
gamepadboolean; default: true. Physical gamepad input.
easterEggboolean; default: true. Konami-code finish.

holo-card

OptionType, default, and behavior
colorsCSS color array (2-4); default: ['oklch(0.82 0.14 210)', 'oklch(0.78 0.17 320)', 'oklch(0.9 0.15 95)', 'oklch(0.82 0.15 155)']. Holographic foil colors.
surfacedark / light; default: dark. Card background.
patternguilloche / lines / none; default: guilloche. Foil engraving.
tiltboolean; default: true. Pointer tilt.
gyroboolean; default: true. Device orientation.
flipboolean; default: true. Card flip interaction.

split-headline

OptionType, default, and behavior
introrise / scatter / type; default: scatter. Letter entrance effect.
staggernumber (0-120); default: 28. Delay between letters, milliseconds.
accentCSS color; default: var(--brand, oklch(0.62 0.2 262)). Pointer highlight color.
radiusnumber (0.5-6); default: 1.4. Pointer reach in letter heights.
strengthnumber (0-1.5); default: 1. Letter response strength.
pointerboolean; default: true. Pointer letter reaction.
idleboolean; default: true. Idle text wave.

marquee-type

OptionType, default, and behavior
speednumber (0.1-4); default: 1. Text scroll speed.
directionalternate / left / right; default: alternate. Row travel direction.
lookmixed / solid / outline; default: mixed. Letter fill style.
tiltnumber (-8-8); default: -3. Band angle in degrees.
accentCSS color; default: var(--brand, oklch(0.62 0.2 262)). Pointer and separator color.
separatorstring (up to 3 characters); default: ✦. Word separator.
pointerboolean; default: true. Pointer slowdown.
scrollboolean; default: true. Page-scroll acceleration.

terminal-boot

OptionType, default, and behavior
speednumber (5-80); default: 24. Typed characters per second.
accentCSS color; default: var(--brand, oklch(0.68 0.17 262)). Terminal accent.
loopboolean; default: false. Repeat sequence.
copyboolean; default: true. Command copy button.

app-window

OptionType, default, and behavior
accentCSS color; default: var(--brand, oklch(0.62 0.2 262)). Chart and UI highlights.
staggernumber (0-300); default: 110. Panel entrance delay in milliseconds.
tiltboolean; default: true. Pointer tilt.
countUpboolean; default: true. Animated stats.

beam-grid

OptionType, default, and behavior
colorsCSS color array (1-3); default: ['var(--brand, oklch(0.62 0.2 262))', 'oklch(0.78 0.14 200)']. Beam colors.
cellnumber (24-160); default: 64. Cell size in pixels.
beamsinteger (0-16); default: 6. Concurrent beams.
speednumber (0.3-3); default: 1. Beam movement speed.
lengthnumber (40-480); default: 160. Beam length in pixels.
pointerboolean; default: true. Pointer highlight and click bursts.
calmnumber (0-1); default: 0.6. Clear headline area.

conic-rays

OptionType, default, and behavior
colorsCSS color array (1-3); default: ['var(--brand, oklch(0.66 0.2 262))', 'oklch(0.78 0.14 175)', 'oklch(0.7 0.18 305)']. Ray layer colors.
raysinteger (4-24); default: 10. Rays per layer.
spreadnumber (0.15-0.85); default: 0.42. Ray width.
speednumber (0.1-3); default: 1. Rotation speed.
origintop / center / bottom; default: top. Light origin.
intensitynumber (0.2-1.5); default: 0.8. Ray brightness.
pointerboolean; default: true. Pointer lean.
calmnumber (0-1); default: 0.45. Clear headline area.

gallery-fan

OptionType, default, and behavior
spreadnumber (0.3-1); default: 0.86. Fan width relative to hero.
anglenumber (0-40); default: 22. Outer card rotation in degrees.
depthnumber (0-500); default: 240. Card depth in pixels.
colorsCSS color array (max 2); default: ['oklch(0.6 0.2 262)', 'oklch(0.62 0.14 160)']. Collaborator cursor colors.
introboolean; default: true. Stack-to-fan opening.
pointerboolean; default: true. Nearest-card lift.
cursorsboolean; default: true. Floating collaborator cursors.

trail-map

OptionType, default, and behavior
accentCSS color; default: oklch(0.68 0.19 42). Map route and button accent.
introboolean; default: true. Route drawing animation.
walkerboolean; default: true. Animated route marker.
parallaxboolean; default: true. Pointer depth effect.
cloudsboolean; default: true. Cloud overlay animation.

curve-reel

OptionType, default, and behavior
curvaturenumber; default: 0.7. Card wall bend.
speednumber; default: 24. Cards per minute.
visiblenumber; default: 7. Visible cards on the arc.
dragboolean; default: true. Drag and swipe rotation.
tiltnumber; default: 3. Pointer tilt in degrees.
accentCSS color; default: oklch(0.68 0.2 45). Accent color.
stepsboolean; default: true. Numbered step labels.
introboolean; default: true. Opening card stack.

bento-tiles

OptionType, default, and behavior
accentCSS color; default: oklch(0.88 0.12 125). Feature card color.
marksCSS color; default: oklch(0.62 0.23 27). Portrait scanning marks.
gradientCSS color array (2-3); default: ['oklch(0.86 0.09 225)', 'oklch(0.94 0.03 250)', 'oklch(0.91 0.06 40)']. Wide card gradient.
tilesboolean; default: true. Raised background tiles.
tileSizenumber (48-160); default: 104. Tile size in pixels.
pointerboolean; default: true. Pointer tile motion.
idleboolean; default: true. Ambient tile presses.
introboolean; default: true. Entrance animation.
showNavboolean; default: true. Optional built-in navbar.

Scroll-Driven Sections

SectionEffect
card-journeyShuffling cards become a staggered stack and then a tabbed grid.
pinned-revealA pinned headline reveals a growing image.
scroll-readWords darken as the reader scrolls through text.
parallax-columnsTwo columns move at different scroll rates.
mosaic-zoomA large image returns to a mosaic grid.
image-marqueeWords and images move horizontally with scroll.
bento-assembleBento cards settle into place and figures count up.
portrait-burstPortrait cards separate around a headline.
case-trackA horizontal case-study row responds to vertical scroll.
split-wordAn oversized word separates to reveal a card and contact form.

To install a development section from a local checkout of Sharingan, use Node.js 20.18+ and pnpm. Run pnpm install, start pnpm dev, and run pnpm registry in another terminal from the project root. Point the @sharingan entry in components.json to http://localhost:3100/r/{name}.json. You can then install Card Journey:

npx shadcn@latest add @sharingan/card-journey
import { CardJourneySection } from "@/components/sections/card-journey/card-journey";
<CardJourneySection config={{ length: 2.5 }} />

Section Content Reference

SectionPublic content fields
card-journeyRequired: statement, headline, cards (3 to 9 {src, alt, title, meta?, href?} objects). Optional: aside: {title, text?}, eyebrow, text, cta, tabs (2 to 4 {label, cards?} objects). Each cards value inside a tab is an array of zero-based card indices.
pinned-revealRequired: headline, image: {src, alt}. Optional: eyebrow, caption: {title, text?}, cta: {label, href}.
scroll-readRequired: text (20 to 400 characters). Optional: eyebrow, images (up to 6 {src, alt} objects), cta. Insert {0}, {1}, etc. into the text to position image entries.
parallax-columnsRequired: headline, cards (4 to 10 {src, alt, title, text?, href?} objects). Optional: eyebrow, text.
mosaic-zoomRequired: headline, feature: {src, alt, title, meta?}, and tiles (8 to 16 {src, alt} objects). Optional: eyebrow, text, cta.
image-marqueeRequired: phrases (2 to 8 strings), images (1 to 8 {src, alt} objects). Optional: label for the accessible description of the band.
bento-assembleRequired: headline, tiles (3 to 10 tile objects). Each tile may contain size, tone, figure, title, text, label, image: {src, alt}, or avatars (up to 6 images). size accepts small, wide, tall, large (default small); tone accepts paper, accent, accent-2, photo (default paper). Optional: eyebrow, text, badge: {label, href}.
portrait-burstRequired: headline, people (6 to 12 {src, alt, name?, role?} objects). Optional: eyebrow, text, two CTAs, pills (up to 4 strings).
case-trackRequired: headline, cases (3 to 8 {title, image, href, text?, tag?, figure?} objects). image has src and alt. Optional: eyebrow, text, cta.
split-wordRequired: word, card: {title, lines, href?}. lines has 1 to 4 strings. Optional: eyebrow, split (positive integer character index), form: {action, submit?, subject?}. submit defaults to Send; subject defaults to true. Supply a real form endpoint through action.

Section Configuration Reference

card-journey

OptionType, default, and behavior
lengthnumber (1.5-5); default: 3. Pinned scroll length in screen heights.
tiltnumber (0-14); default: 6. Card rotation in degrees.
shuffleboolean; default: true. Card shuffle.
accentCSS color; default: var(--foreground, #111114). Active tab color.

pinned-reveal

OptionType, default, and behavior
lengthnumber (0.5-3); default: 1.2. Pinned scroll length in screen heights.
startnumber (0.3-0.9); default: 0.55. Initial image width fraction.
radiusnumber (0-48); default: 28. Image corner radius in pixels.
parallaxboolean; default: true. Parallax inside image frame.

scroll-read

OptionType, default, and behavior
fromnumber (0.4-0.9); default: 0.45. Opacity of unread words.
popboolean; default: true. Inline image reveals.

parallax-columns

OptionType, default, and behavior
speednumber (0-1); default: 0.5. Difference in column scroll speed.
depthboolean; default: true. Image parallax inside cards.

mosaic-zoom

OptionType, default, and behavior
lengthnumber (0.8-3); default: 1.6. Pinned scroll length in screen heights.
spreadnumber (0-1.5); default: 0.7. Initial tile spacing.

image-marquee

OptionType, default, and behavior
backgroundCSS color; default: oklch(0.93 0.19 122). Band color.
inkCSS color; default: #111114. Text color.
rowsinteger (1-2); default: 2. Number of moving rows.
distancenumber (5-60); default: 25. Travel distance as a percentage of width.

bento-assemble

OptionType, default, and behavior
lengthnumber (0.8-3); default: 1.8. Pinned scroll length in screen heights.
spreadnumber (0-1.2); default: 0.55. Initial tile offset.
countboolean; default: true. Count-up figures.
accentCSS color; default: #ee8a7b. Primary accent.
accentAltCSS color; default: #b9ccb1. Secondary accent.

portrait-burst

OptionType, default, and behavior
lengthnumber (0.8-3); default: 1.6. Pinned scroll length in screen heights.
driftnumber (0-1); default: 0.5. Portrait parallax travel.
tiltnumber (0-20); default: 8. Stack rotation in degrees.
accentCSS color; default: #ee8a7b. Label accent.

case-track

OptionType, default, and behavior
speednumber (0.5-2); default: 1. Horizontal travel-to-scroll ratio.
accentCSS color; default: #ee8a7b. Primary card accent.
accentAltCSS color; default: #b9ccb1. Alternate card accent.

split-word

OptionType, default, and behavior
lengthnumber (0.8-3); default: 1.5. Pinned scroll length in screen heights.
spreadnumber (0-1.5); default: 0.8. Initial letter spacing.
tiltnumber (-15-15); default: -4. Card lean in degrees.
accentCSS color; default: #ee8a7b. Card and submit button color.

Styling, Motion, and Browser Behavior

Sharingan uses --background, --foreground, --muted-foreground, --primary, --border, and --brand in its theme styles. Color configuration also accepts ordinary CSS colors and custom properties such as var(--brand).

WebGPU backgrounds use a color-gradient fallback or a supplied poster image when GPU rendering is unavailable. Sharingan honors prefers-reduced-motion and pauses heroes outside the viewport. Use ?motion=final or data-motion="final" on <html> to capture a repeatable still frame; ?motion=off turns off animation for previews.

Alternatives and Related Resources

You Might Be Interested In:


Leave a Reply