Brand Story Hero
A continuous photographic brand story with a product reveal and two distinct narrative compositions.
Install the component, then paste your configured usage. Your settings are included in the code below.
Pro source comes with Arclen UI Pro. See plans
| Property | Type | Default |
|---|---|---|
variantDirection Options: photo (Photo story), editorial (Editorial chapters) | select | "photo" |
brandBrand name Up to 60 characters | text | "RIME" |
headingOpening heading Visible in Editorial; available to assistive technology in Photo, including static output. Up to 120 characters | text | "A softer start." |
introIntroduction Visible in Editorial; available to assistive technology in Photo, including static output. Up to 240 characters | text | "Everyday cream. A moment of calm. Care that fits into the life you already live." |
productImageProduct image Bundled rime-product, an HTTPS image URL, or a raster base64 data URL. Up to 2000000 characters | image | "rime-product" |
productAltProduct image description Alternative text for the product image in both directions. Up to 240 characters | text | "RIME moisturiser in a frosted-glass jar with a brushed-silver lid" |
productLabelProduct kicker Visible in Editorial and static product chapters; accessible copy in animated Photo. Up to 100 characters | text | "The everyday cream" |
productTitleProduct heading Visible in Editorial and static product chapters; accessible copy in animated Photo. Up to 100 characters | text | "Your daily moment." |
productDescriptionProduct description Visible in Editorial and static product chapters; accessible copy in animated Photo. Up to 300 characters | text | "A rich cream, a familiar gesture. RIME makes a little room for care, morning and night." |
closingTitleClosing statement Up to 140 characters | text | "A little care, every day." |
imagesStory images Up to 15 images: the first opens the story; the other 14 fill the portrait wall. Minimum 1 itemsMaximum 15 itemsUp to 2000000 characters per item | string-list | ["rime-hero","rime-window-portrait","rime-cabinet","rime-water","rime-jar-on-ice","rime-out-the-door","rime-skin-detail","rime-hands","rime-cream-ritual","rime-mirror-grey","rime-water-jar","rime-morning","rime-still-life"] |
imageAltsImage descriptions Minimum 1 itemsMaximum 15 itemsUp to 180 characters per item | string-list | ["A quiet RIME morning portrait in soft blue window light","A woman rests her fingertips on her cheek beside a frosted window","A RIME jar on a bathroom cabinet shelf","Clear water ripples over pale mineral-blue glass","A frosted RIME jar on clear ice","A woman applies RIME cream before leaving home","A close view of cream being smoothed onto natural skin","Hands hold an open jar beside a linen towel","Hands lift a small pearl of cream from a RIME jar","A morning skincare ritual in a bathroom mirror","A hand holds a RIME jar amid clear water droplets","A woman opens a RIME jar at the bathroom mirror","A RIME jar in a cool studio still life"] |
benefitsPhotographic principles Minimum 1 itemsMaximum 3 itemsUp to 100 characters per item | string-list | ["Make the morning yours.","A texture to return to.","Keep a little calm."] |
benefitDescriptionsPrinciple descriptions Minimum 1 itemsMaximum 3 itemsUp to 240 characters per item | string-list | ["A quiet moment before the day begins. Nothing more to do, nowhere else to be.","A small scoop. A familiar gesture. Simple pleasures, close at hand.","Cool glass, soft light and the everyday rhythm of looking after yourself."] |
ctaLabelAction label Up to 60 characters | text | "Discover the ritual" |
ctaUrlAction URL Optional HTTPS address. Empty hides the action. Up to 2048 characters | text | "" |
sizingStage sizing Options: fill (Fill container), standalone (Standalone page) | select | "fill" |
stageHeightStandalone stage height Stage height cap for Standalone page sizing only. 400–1200Step 1 | number | 720 |
storyLengthStory length (viewports) Animated pinned story length in stage heights. Static and reduced-motion output ignore this setting. 4–10Step 0.5 | number | 6.5 |
radiusImage corner radius 0–64Step 1 | number | 18 |
headingSizeHeading size Scales opening, product, closing and principle headings in both directions and at phone widths. Photo keeps its opening and animated product copy visually hidden. 161 preserves the direction defaults. 48–180Step 1 | number | 161 |
productRotationProduct rotation Maximum product turn in animated mode. Static and reduced-motion output stays unrotated. 0–60Step 1 | number | 45 |
typeStyleHeading typeface Options: direction (Direction default), serif (Expressive serif), sans (Studio sans) | select | "direction" |
backgroundPaper surface | color | "#edf3f5" |
textColorPaper text | color | "#3b484f" |
darkTextImage text | color | "#f2f5f6" |
accentColorAccent | color | "#718b99" |
Brand Story Hero
A scroll-driven brand introduction that moves from an opening photograph through a portrait collection, an isolated product moment and a closing statement, then releases into three photographic principles.
Choose **Photo story** for a centered photographic wall or **Editorial chapters** for asymmetric type and an unframed product beside the copy. Both share the continuous portrait wall; Editorial stacks its headline above the photograph on narrow containers.
import { BrandStoryHero } from './brand-story-hero/src/react';
export default function Story() {
return <div style={{ height: '100svh' }}>
<BrandStoryHero variant="photo" brand="RIME" />
</div>;
}The React export also has a Component alias. It accepts settings directly plus className, style and paused.
Container and scrolling
fill uses the height of its parent and scrolls inside that region. Give the parent an explicit height. The region can receive keyboard focus, then native arrow keys and Page Down move the story. It does not intercept wheel or touch events.
standalone uses the document's native scrolling. stageHeight caps the sticky stage height to the viewport. In animated mode, storyLength controls the narrative's length in stage heights; its default is 6.5. productRotation controls the animated turn only; static and reduced-motion output ignores rotation and story length. The photographic principles follow the pinned track in normal flow, so the component continues beyond those 6.5 stage heights. Put additional page sections before or after it normally.
import { mount } from './brand-story-hero/src/core';
import './brand-story-hero/src/styles.css';
const story = mount(document.querySelector('#story')!, {
sizing: 'standalone',
variant: 'editorial',
heading: 'A softer start.',
});
story.update({ closingTitle: 'Small rituals. Lasting care.' });
// Call story.destroy() when the host is removed.The HTML delivery includes its styles and assets. The vanilla delivery exposes the same core controller. update merges partial settings. pause freezes scroll-linked transforms and the closing letter reveal; resume synchronizes the scene with the current scroll position and continues the letters. destroy releases owned listeners, observers and pending animation frames and clears the owned host.
Images and text
images accepts up to 15 bundled names, explicit HTTPS URLs, or raster base64 data URLs. The thirteen bundled photos use names beginning with rime-, including rime-hero, rime-window-portrait, rime-cream-ritual, rime-water, rime-jar-on-ice, rime-out-the-door, rime-skin-detail, rime-hands, rime-cabinet, rime-mirror-grey, rime-water-jar, rime-morning and rime-still-life. Local art needs no network request. Supply imageAlts in matching order. The first image owns the opening and center tile; the remaining images populate the wall without duplicating the opening image. With only one configured image, the wall reuses that image.
The photographic principles reuse the next three configured images and display the benefits and benefitDescriptions lists as bottom overlays. All text is escaped. Empty ctaUrl hides the action; configured actions require HTTPS. List settings are copied so callers cannot mutate defaults. Invalid settings, unknown keys, off-step numbers, invalid colours and unsupported URL schemes throw TypeError before changing the mounted story.
The RIME demonstration includes campaign photography and a transparent jar packshot. Product media, descriptions, brand and narrative copy are configurable through Content settings. Photo story keeps product copy available to assistive technology during the animated product chapter; static output displays it beside the product. Noto Serif and Inter are bundled under the SIL Open Font License.
Accessibility and motion
The initial server-rendered and no-JavaScript document includes the complete narrative. With reduced motion, content appears as a static sequence and the action remains available. The preference is observed live. Decorative portrait repetitions are hidden from assistive technology. The scene follows native scrolling and has no progress counters or motion buttons. Its closing statement reveals letter by letter with a brief fade and blur once the closing chapter is reached. Scrolling back before that chapter resets the letters. The scroll-linked scene renders only after scroll, resize or a relevant lifecycle change. Native document hiding, offscreen state and explicit pause cancel pending scene work and pause the letter animation. Reduced motion shows the complete closing statement immediately.
The controls below are generated from the component manifest.
The preview runs the component’s own JavaScript. It respects reduced motion and pauses when off screen. The HTML bundle includes a poster fallback.
Every setting in this panel comes from the component manifest. Preview size, pause and replay stay in the inspector.