Skip to main content

Web Device layout component (site) · ARC 2.0.0-beta.28

site `leaf-shadow`

Layout component `leaf-shadow`: looping gobo overlay (video or procedural canvas) with mix-blend-multiply. Set src to a 100–400 KB clip; use gobo-loop to mint new clips from a scene sentence.

Web Device layout component (this site) — not an AUP primitive; not an AUP Web-only widget; not a Markdown directive.

Site package: blocklets/arcblock/.web/components/leaf-shadow/. Resolution: site override > theme default.

This site ships the package today. The player is being added to the ARC default theme (providers/runtime/web-device/themes/default/components/leaf-shadow/, ArcBlock/arc#5329). The owned gobo MP4s stay in this site. Until this site runs an arc that includes the theme package, treat the site copy as the source of truth. Site tracking: #464.

Purpose

Moving canopy-light (or any optical gobo) over a page or a section. Video loop when src is set; procedural WebGL leaf field when it is not. Blend is mix-blend-multiply.

Type on a white field is a document. Light moving over the type is a room: same words, a time of day, a reason to stay. Landing pages stop reading as a CMS template. Switch the clip (canopy, window, water, rain) and the mood changes without rewriting the copy.

Live

Full-page overlay and HUD (this site's lab):

The showcase article wears the same overlay on a real essay: Light on the page, not a picture of trees.

Not this component

ThingWhy it is different
A photograph of the sceneOverlay must be projection on a pale surface, not a subject photo
AUP widgets / Markdown directivesAuthor entry is layout only
Third-party shadow videosDo not copy other sites' loops into this repo

When to use

  • Full-page atmosphere (variant=overlay) on a landing, a long read, or a lab. The type stays the type; the weather sits on top.
  • Section-local wash (variant=wash) inside a positioned ancestor, when only one block should pick up the light.
  • Switching among owned clips in a lab HUD, or minting a new clip with gobo-loop from a sentence.

When not to use

  • The file is a portrait, UI screenshot, or readable type. Multiply will print it onto every paragraph.
  • The clip is still several megabytes. Compress first.
  • You need the overlay inside Markdown body with no layout. Put leaf-shadow in layout.aup or a named layout.

Author entry

layout.aup

Overlay with a gobo (lab / article pattern)

component fx slot=leaf-fx component=leaf-shadow
    variant=overlay
    intensity=0.2
    controls=true
    src="/en/articles/leaf-shadow-gobo/canopy.mp4"

Prefer a layout whose ancestors do not create a containing block for position: fixed (transform, filter, or a late-in-flow slot like detail-content's after-content). landing-shell is the proven host on this site. The overlay layer is position: fixed; inset: 0; the HUD is also position: fixed and will pin to the wrong box if the host is transformed.

Procedural fallback (no src)

component fx slot=leaf-fx component=leaf-shadow
    variant=overlay
    intensity=0.28

Live hosts on this site:

  • Lab: /en/leaf-shadow-lab/
  • Showcase article: /en/articles/leaf-shadow-overlay/
  • Four owned clips: /en/articles/leaf-shadow-gobo/{canopy,window,caustic,rain-ripple}.mp4

Those MP4s sit in content/articles/leaf-shadow-gobo/ without content.md, so they are not listed as articles.

Props

From manifest.json.

PropTypeDefaultRole
variantstringoverlayoverlay = fixed full page · wash = absolute, section-local
intensitynumber0.2 with src, else 0.28Opacity 0–1
speednumber1Drift speed (procedural canvas)
anglenumber0.35Light shear 0–1 (procedural canvas)
controlsbooleanfalseHUD: toggle + intensity (this site also adds clip buttons)
srcstringemptyLooping gobo URL. When set, video replaces the canvas

HUD protocol (script.js)

Buttons are data-leaf-act:

data-leaf-actdata-vEffect
toggle—Pause/hide the layer
intensity0.12 / 0.2 / 0.45Opacity
srcURLSwap the video (setSrc)

The theme package HUD is toggle + intensity only. It must not hardcode this site's /en/articles/leaf-shadow-gobo/… URLs. This site package adds four src buttons for the owned demos. script.js already handles data-leaf-act="src" in both copies.

The HUD is pointer-events: auto. The layer is pointer-events: none, so page links stay clickable.

Mint a new clip: gobo-loop

Skill: .claude/skills/gobo-loop/SKILL.md.

  1. Rewrite the user's scene as projection on a pale wall or floor. No subject portrait, furniture, or readable text.
  2. Generate a 16 still of that projection.
  3. Image-to-video, 6 seconds, 720p, camera locked, soft optical motion only.
  4. Compress:
bash
bash .claude/skills/gobo-loop/scripts/compress-gobo.sh <in.mp4> blocklets/arcblock/content/articles/leaf-shadow-gobo/<slug>.mp4

Target 100–400 KB, no audio, 12 fps. If ffmpeg is missing, stop and report the uncompressed path. Do not commit a 1 MB+ clip as done.

  1. Point src at /en/articles/leaf-shadow-gobo/<slug>.mp4. Confirm mix-blend-multiply at intensity 0.2 looks like light on paper, not a photo glued on the page.

Failed animal silhouettes (sleeping cat, golden retriever) were deleted. Do not revive them without a new still that reads as umbra.

Surfaces

layout. Not the document Markdown directive surface.

Public status

released on this site (lab + showcase article + four gobo files). Theme promotion of the player is in progress in ArcBlock/arc. Do not document the theme package as already shipping in the arc binary this site currently runs. The MP4s are site media, not theme assets.

Fallback

SituationResult
No srcProcedural canvas
prefers-reduced-motion: reduceVideo/canvas paused; intensity capped near 0.16
Dark mode + video overlayStays mix-blend-mode: multiply (see style.css)
Dark mode + procedural overlaymix-blend-mode: screen
Missing file at srcEmpty video element; no overlay texture
controls=falseNo HUD; aria-hidden="true" on the root

Sample honesty

Live lab is embedded above. The showcase article is the running overlay on a real essay. Copy AUP from the fences on this page.

Evidence

ItemPath
Site packageblocklets/arcblock/.web/components/leaf-shadow/
Manifest…/leaf-shadow/manifest.json
Renderer…/leaf-shadow/render.js
Script…/leaf-shadow/script.js
Style…/leaf-shadow/style.css
Labpages/leaf-shadow-lab/layout.aup
Article layoutlayouts/leaf-shadow-overlay.aup
Gobo filescontent/articles/leaf-shadow-gobo/*.mp4
Skill.claude/skills/gobo-loop/SKILL.md
Compress.claude/skills/gobo-loop/scripts/compress-gobo.sh
Internal matrixdocs/aup/capability-matrix.md §5