No.177 · Backgrounds· New
Corona Arcs
Soft concentric bands of light rise from a corner and slowly breathe outward, from a dark edge to a hot core, as if the page sat at the rim of a sun. The pointer nudges the centre. A background only, with no text of its own.
The prompt
Written for the variant you picked above: Crimson
Write a WebGL1 full-screen fragment shader background (no libraries): soft concentric bands of light rising from the bottom-left corner. Place a centre well below and left of the frame (about −0.25, −1.2 in screen heights) and take the distance r to it, scaled for wide screens and roughened slightly by slow noise. An envelope smoothstep(edge + 0.35, edge − 0.6, r) — the edge at about 2 screen heights, breathing ±0.04 — confines the light to the corner. Inside, banding 0.5 + 0.5·cos(π(4.4r − 0.1t)), raised to 1.4, moves the bands slowly outward; intensity = envelope × (0.3 + 0.68 × bands) plus a steady inner glow near the centre. Map intensity through four tones — ground, deep, main, a pale hot core — with smoothsteps, so the bands are soft and blurred, never lines. The pointer moves the centre a little. Render through a small WebGL1 harness: a full-screen triangle, the device pixel ratio capped at 2 and scaled down (and about 30fps) on touch, paused offscreen and in hidden tabs, one still frame under reduced motion, the pointer eased in with a slow lerp and released when it leaves, and a CSS gradient fallback without WebGL. Add a little per-pixel noise so the gradients never band. An optional fade prop softens the bottom edge into the ground colour: a gradient to the ground plus a backdrop blur masked to grow towards the edge. Children sit above the canvas. Selected variant — Crimson (crimson): Crimson arcs with a peach core: bg #0e0204, deep #5a0b1b, mid #d6324b, hot #ffb4a2. This selection takes precedence over references to other themes or options in the general brief. Implement this selected appearance; do not add a variant picker or alternative appearances unless requested. Implementation requirements: Use React and TypeScript. Keep the component self-contained, with uniquely scoped CSS and no animation libraries. Include required imports, styles and font setup in the result. Interaction: Move the pointer and the arcs' centre drifts with it. Motion: The bands breathe slowly outward. Reduced motion draws one still frame. Accessibility: Decorative and hidden from assistive tech. The top-right is dark and suits white text; keep text off the bright lower-left. Responsive behavior: Fills its container at any aspect ratio; device pixel ratio capped at 2. The optional fade softens the bottom edge into the ground colour. Touch: No pointer response on touch; the bands keep breathing. Preserve keyboard access, visible focus and reduced-motion behavior. Keep fictional demo data and simulated service calls in a separate usage example; expose callbacks for real actions and recover from rejected requests. Keep usage-example links inside the demo: use local buttons or prevent navigation. Demonstration links must not navigate to Vitrine routes or open other pages; preserve real URL support in the reusable component itself. Verify the result at narrow and wide viewport sizes, with keyboard input and reduced motion enabled.
Notes
- Interaction
- Move the pointer and the arcs' centre drifts with it.
- Motion
- The bands breathe slowly outward. Reduced motion draws one still frame.
- Accessibility
- Decorative and hidden from assistive tech. The top-right is dark and suits white text; keep text off the bright lower-left.
- Responsive
- Fills its container at any aspect ratio; device pixel ratio capped at 2. The optional fade softens the bottom edge into the ground colour.
- On touch
- No pointer response on touch; the bands keep breathing.