Cinematic UI 2.0EN

← 作品 · 第 04 / 04 · 香水新品發表

回眸

習慣憑感覺買香水的人,捲動著一場聞不到的新品發表,看著一只瓶子在燭光下轉過身來,一個調性接著一個調性,決定先試戴三天再說。

看現場 ↗讀導演筆記

回眸 — 第一格
導演 · 電影
瑟琳.席安瑪《燃燒女子的畫像(2019)》
媒材
即時擬真 3D 玻璃香水瓶,只用一支被端著走的燭火照明,香氣是程序生成的蒸氣著色器,DOM 裡有試香紙;沒有照片
主角與弧線
香水瓶與它的蒸氣:暗處的一道邊緣、逆光、側面、轉過來面對我們、特寫的液面,接著落在你的試香紙上,最後消失,只留下蒸氣的剪影。
觀眾的戲份
按住試香紙條:你的體溫會從 0:00 走到 8:00,蒸氣隨之換調;放開後會保留當時的時刻。
調色
#0b0806#ff7a2e
回眸 — 畫面 2回眸 — 畫面 3

放映

下方是正在執行的現場版,可以直接捲動。

導演筆記(treatment.md)

這是 agent 在製作過程中寫下的工作筆記,維持原文(英文)未經修飾,供想看細節的人參考。

展開全文

ISOLA 島調香所(fictional house)launches its first fragrance, 回眸 Retour. Demo site, zh-TW, one of three parallel Cinematic UI test demos. This is the scroll test: a long scroll film.

1. Development

Product truth (all fictional, stated in the footer). One Eau de Parfum, 50 ml, NT$ 4,800. Notes as time on skin: top 海鹽 sel marin · 佛手柑 bergamote (first ~30 min) → heart 蜂蠟 cire d'abeille · 鳶尾 iris (to ~3 h) → base 雪松煙 fumée de cèdre · 安息香 benjoin (to ~8 h). Offer: a sample set, 3 × 2 ml, NT$ 450 incl. shipping, fully credited to a 50 ml bottle; ships from 20 Nov; reserving costs nothing now.

The one action: 預約試香組 (reserve the sample set). Email only.

Logline. Someone who buys perfume by feel, scrolling a launch they cannot smell, watches one bottle turn round in candlelight, note by note — and decides to wear it for three days before deciding anything.

Audience arc. Arrives: "a perfume page is pictures and adjectives; I can't smell a screen." Leaves: "I know how it changes on skin hour by hour, and trying it costs me nothing I can't get back."

Controlling idea. A scent is not seen all at once; it is revealed by degrees, and only on you.

2. Casting session

Dramatic problem: intimacy with something invisible — make a smell felt as time and warmth, without pictures of people (no assets of faces, and none should be invented).

Candidate Mechanism that solves it Signature shot Risk Wrong for
Céline Sciamma — Portrait of a Lady on Fire (2019, Claire Mathon) The sitter is revealed by degrees — first from behind, then in profile, then the face — and the look itself is the subject; candle and firelight are the only light; frames held almost without score The bottle seen only as a backlit edge, the flame behind it glowing through the liquid Can drift into "period costume" (dresses, oils, cliffs) Fast, loud, many-product pages
Wong Kar-wai — In the Mood for Love (Doyle, Lee Ping-bin) Frames within frames, the subject glimpsed through gaps; repetition with variation; step-printed smear The bottle seen through a door gap, three times, each time one thing changed The obvious pick for scent / night / longing; red-and-green costume A product that should feel calm and honest
Ridley Scott — Blade Runner (Cronenweth) Smoke and backlight, shafts through blinds, layered lived-in set Vapour lit by a raking shaft across the bottle Reads as sci-fi noir; smoke as wallpaper, no arc Anything intimate

Kept: Sciamma. Her reveal-by-degrees maps one-to-one onto how a perfume actually behaves (top → heart → base), and her single-flame interiors give one light logic for the whole film. Wong Kar-wai set aside: the first name every model reaches for on perfume, and his glimpse-through-frames hides the product the page must show. Ridley Scott set aside: his smoke is atmosphere around a city, not a subject that changes. Competitor test: another perfume could not use this unchanged, because the reveal is tied to this scent's three stages and its name (回眸, a look back) is the lead's verb.

Mechanisms (each visible on screen).

  1. Revealed by degrees: back, profile, face → the bottle is shown from behind (scene 2), in profile (3), and only turns its face to camera at the turn (4); each pose is one note stage.
  2. The look is the subject; light is a gaze that travels → the camera barely moves; the candle is carried round the bottle and its light does the revealing (relight instead of fade).
  3. Firelight as the only source → one flame practical lights wall, table, liquid and vapour; nothing else glows; the page ground is the room's dark (#0b0806).
  4. Painterly stillness, almost no score → long held frames, lock-offs and slow push-ins only; silent site (no sound toggle).
  5. The final held close-up → the dry-down is one long close shot of the liquid's meniscus and the cap, held while the hours run; nothing else moves.
  6. The ghost in the dark corridor (afterimage) → in the final image the bottle is gone and its silhouette stays, made of vapour: what a scent leaves behind.

Filmography check (last three: Bresson / von Trier / Antonioni). Differs on director, medium (live 3D + shader vapour vs. print, SVG line, archival photographs), form (long scroll film vs. short / document / click-driven hybrid), skeleton, type (Cactus Classical Serif + Bodoni Moda italic + Chocolate Classical Sans, none used before), lead (a glass bottle and its vapour), interaction (press-and-hold warmth), ending (afterimage), instruments (blotter strip + skin clock).

3. Medium

Constructed: photoreal 3D glass, lit by one flame, with the scent as procedural vapour. The film's mechanism is light revealing a subject by degrees in a dark room, so the picture must be made of real light on real material — a lit, refracting object that can turn and be relit — and the scent, which has no image, becomes vapour that carries the note's colour. Format: 1.85:1-ish desktop frames, warm black, firelight only, grain 0.03, light bloom on the flame only. Why 3D: the reveal needs one object to be relit from behind, the side and the front and to turn; a photograph cannot be relit, and a bottle photo of a fictional product would have to be generated (ruled out). Shift: none. Supporting medium: paper (the blotter strip) in the DOM — the offer document is printed on blotter paper.

4. Lead, location, asset call

Lead: the bottle of 回眸 and the vapour that comes off it (one subject: the fragrance). Its verb is the product's: it opens in warmth and turns (回眸 = a look back). States: ① a flame alone, the bottle an unlit edge → ② back, backlit, sea-grey vapour → ③ profile, honey light, vapour rising from the neck → ④ face, turned to camera, ember vapour (the turn) → ⑤ close: the meniscus, ember glow fading (dry-down) → ⑥ on the visitor's blotter, at the hour they chose → ⑦ gone; its silhouette held in vapour. Supporting cast: a short candle (carried round, the gaze), the blotter strip (the visitor's). Location: one dark room: a lacquered table that mirrors the flame, a plaster wall the flame warms.

Asset call (answered in the brief: no paid generation). Bottle, liquid, candle, flame, vapour, wall, table: procedural (Three.js + shaders, kit/stage.js, kit/props.js). Type: Google Fonts (OFL). No photographs or footage: none would be the product, and library smoke would be someone else's light. Casting test: dailies/cast/sheet.jpg — back, profile, face, close and ghost rendered before the shot list; the close (label + meniscus) survives, so the dry-down may go close; nothing goes macro on the cap.

5. CRO notes (cro-master)

  • Focus contract. Surface: launch landing page, pre-launch stage. Audience: niche-perfume buyers arriving from social (solution-aware: they know samples exist). Promise: you can try it on your own skin before you buy. Brand cue: ISOLA / 回眸 / the bottle. Mechanism: the note timeline + a sample set credited to the bottle. Proof: concrete facts (notes and hours, size, price, credit, ship date, no charge now). Action: 預約試香組. Secondary paths: none.
  • Objections → answers placed next to the action. "I can't smell a screen" → the whole film is the notes as hours; the offer is three days on skin. "Is it worth NT$ 4,800?" → the sample set's full price is credited to the bottle. "What does reserving commit me to?" → no payment now; we email before shipping. "When?" → ships from 20 Nov. "Shipping cost?" → included.
  • No fabricated proof. No testimonials, ratings, scarcity or countdowns (the brand is new; there is nothing honest to show). Proof is specificity and risk reversal.
  • Friction. One field (email). Label visible, inline error, no account. Taiwan default would add LINE; kept out to stay at one field — noted as a test idea, not built.
  • CTA wording and placement. 「預約試香組」 everywhere, never a second verb. Persistent in the top-right chrome from the first frame (also during the loader), inside the offer, and in the final image.
  • Trade-offs, resolved for the product. Cinema wants a first frame with no words and a long pinned film; CRO wants the offer early. Resolution: the first frame has no headline in the picture, but the chrome CTA is there from frame one and jumps straight to the offer; the offer itself is a flow scene on paper, plainly lit, nothing animated over price or the form. The interaction is never required.

6. Award pass

WORLD OBJECT   the perfumer's blotter strip (試香紙 / mouillette): loader (it wicks up as the page loads),
               progress (a strip down the right edge soaking note by note), the CTA (a strip with a soaked tip),
               the visitor's part (hold the strip), the offer's paper ground, the footer (a dried strip with notes)
LEAD STATES    flame alone → back/backlit (sea) → profile (wax) → face/turned (ember) → close meniscus, dry-down
               → on your strip at your hour → gone, silhouette of vapour
LOADER         a blotter strip dipped in the dark; amber wicks up it with real load progress; when full its tip
               catches and becomes the flame of shot one (match on the flame)
CUT MATERIAL   the scent: vapour thickens across the lens and clears on the next pose (back→, face→close);
               between back and profile the light itself travels (the candle is carried, no cut);
               exception: one hard cut to paper for the offer, and back to the dark for the final image
ACCENT         flame orange #ff7a2e — "warmth: where it touches you, act here" — flame core, the CTA's soaked
               tip, the clock's current hour; under 3 % of any frame
TYPE           display: Cactus Classical Serif (zh) + Bodoni Moda (Latin); text: Chocolate Classical Sans.
               Switch: each material named twice, the Latin in Bodoni italic beside the Chinese (海鹽 *sel marin*).
               Display deliberately small (≤ 4 vw; h1 3.4 vw): the bottle carries the scale, as a held portrait does
INSTRUMENTS    ISOLA wordmark (top-left) · 預約試香組 strip (top-right) · blotter progress strip soaking
               sea→wax→ember (right edge) · skin clock 「肌膚上 0:00 → 8:00」 (bottom-left), the film's time is skin time
VERB           press and hold the blotter: your warmth runs the eight hours; let go and it stays at that hour,
               and that hour is written on your reservation
RHYTHM         set pieces: light, back, profile, the turn, dry-down, try, final. Calm document: the offer on paper.
               Phone: same film re-blocked portrait — bottle in the upper 60 %, copy in the lower third, ~65 % lengths

7. Production design

Grid: one vertical axis through the bottle; copy hangs in the left third (desktop) at reading size, never over the bottle. Density: one subject per frame. Depth: wall, bottle, vapour plane, veil. Edges: generous margins, nothing cropped except the close. Texture: film grain on canvas; DOM paper has its own fibre. Colour script: near-black + sea grey (2) → honey (3) → ember (4–5) → paper white (offer) → black + ember vapour (final). Restrained: one accent.

8. Shot list

Desktop lengths (vh). Mobile ≈ 65 %.

# · slug Beat Copy Shot Camera Blocking Light / colour Build Cut out Len E Money frame Mobile
0 · LOADER Shot one — — — Blotter strip wicks with load progress; tip catches One flame DOM strip + CSS flame Match on the flame intro 1 Strip full, tip alight Same, centred
1 · INT. ROOM — ONE FLAME Cold open; title on the second beat 回眸 / Retour / 一支香水,在你身上轉身三次。 WS, eye level, 22 mm-equiv fov 22 Slow push 11 → 9.4 Flame behind the bottle; bottle a dark edge; title resolves Flame only; wall pool warms as light rises stage, set Veil of vapour (sea) 230 2 Title sharp, bottle edge lit (0.75) Bottle upper, title lower third
2 · BACK — SEA Top note: it begins far away 前調 · 最初半小時 / 先是海風 / 海鹽 sel marin、佛手柑 bergamote MS, frontal, fov 22 Lock-off, slight rise Bottle shows its back; flame behind glows through the liquid; sea vapour crosses Backlight; grey-blue vapour — Light travels (candle carried right) 260 4 Hot core through amber, words cut on Same pose, closer
3 · PROFILE — WAX Heart: it comes closer 中調 · 到第三小時 / 然後是燭火 / 蜂蠟 cire d'abeille、鳶尾 iris MS, camera arcs 25° right Arc + push Bottle in profile; candle at its side; vapour rises from the neck Side key, honey — Continuous into the turn 260 5 Profile edge-lit, plume rising Bottle centred
4 · THE TURN — EMBER Midpoint / climax: it looks back 後調 · 到第八小時 / 它回頭了 / 雪松煙 fumée de cèdre、安息香 benjoin MS → MCU frontal Push-in as it turns 90° → 0° The bottle turns to face us; candle comes to the front; ember vapour; label read for the first time Frontal firelight; ember label texture Vapour veil thickens → clears close 360 8 Face frontal, label legible, ember plume (0.7) Push less, label centred
5 · CLOSE — DRY-DOWN Quiet scene: what lasts 第八小時 / 只剩一點暖,貼著皮膚。 CU of meniscus + shoulder, fov 18 Very slow push, held Nothing moves but the ember dimming; clock runs to 8:00 Low firelight, ember fading — Pull back (move) 220 3 Meniscus line, read-fill complete CU, copy under
6 · TRY — YOUR STRIP The visitor's part 按住試香紙 / 用你的體溫,把八小時走一遍。 / live: 第 0:00 · 海鹽、佛手柑 WS, bottle small at right, strip in front-left (DOM) Lock-off Hold the strip → hours run, strip soaks, vapour changes note; release → it stays; that hour is written on the reservation. Keyboard: hold Space/Enter on the strip; touch: long-press Firelight; vapour in the chosen note DOM strip + canvas Hard cut to paper 240 6 Strip half-soaked at 3:40 Strip centred, bottle above
7 · PAPER — THE OFFER Resolution: the deal, plainly lit 先試三天 + facts + form Flow, eye level — Paper ground, ink type; form; "your hour" line if set High key paper DOM Push back to the dark flow 3 — Single column
8 · AFTERIMAGE Final image: what it leaves 香還在 / 預約試香組 / 11 月 20 日起寄出 WS as scene 1 Lock-off Bottle gone; its silhouette stands in ember vapour; the candle where it began Flame + vapour only ghost shader — 200 5 Silhouette + CTA (0.7) Same, CTA lower third
9 · CREDITS End credits fictional notice, credits Flow — A dried strip with pencil notes Paper on dark DOM — flow 1 — —

Sequence reasons. 1 and 8 share the frame on purpose (rhyme: the bottle arrives out of the dark, then leaves its shape in it). 2→3→4 keep the camera nearly still while the light travels and the bottle turns — the reveal is the light's, not the camera's. 5 is the only close shot, earned by the casting test. 6 pulls back so the visitor's strip has room. 7 is the one change of ground. Energy 2 4 5 8 3 6 3 5: a slow rise to a middle peak, a long dry-down — the shape of a fragrance on skin. Continuity sheet. Type entrances: blur-resolve (1, 4, 8 — the signature: the scent coming into focus); read-fill (5, once); hard cut-on of note labels (2, 3, 4 — Sciamma's cuts are clean). Light events: flame lights (1), travels (2→3→4), dims (5), follows your hold (6). Camera: push (1), lock (2), arc (3), push (4), creep (5), lock (6, 8). Skeleton. Energy: slow rise, one middle peak, long decay · turn at ~45 % (the face) · opens on an empty set (one flame) · ends on an afterimage (the lead absent, its trace held).

Audience's part. Action: press and hold the blotter strip. Response: the skin clock runs (8 h in ~7 s), the strip soaks upward, the vapour behind changes sea → wax → ember, the current notes are named. Consequence: on release it stays at that hour; the offer prints 「你停在第 3:40,蜂蠟、鳶尾」 on the reservation and the right-edge strip keeps that soak. Equivalent: focus the strip and hold Space or Enter; long-press on touch. Never required.

Short laptop (1366 × 640): copy scales by svh; the bottle pose is unchanged (the stage widens by height); the try strip shortens to 46 svh. Ultrawide: the room extends (wall and table are 60+ units wide); copy block caps at 30 em and moves outward with the frame.

9. Copy as shipped (after talking-master)

Visible copy ≈ 221 CJK characters including chrome, legal/footer excluded (scripts/check.py: 通過; copy-check.mjs: 13/13 lines present with JS on and off).

Where Copy
Chrome ISOLA 島調香所 · 預約試香組 · 肌膚上 0:00 · 前調 中調 後調
1 回眸 Retour / 一支香水,在你身上轉身三次。
2 前調 · 最初半小時 / 先是海風 / 海鹽 sel marin、佛手柑 bergamote
3 中調 · 到第三小時 / 然後是燭火 / 蜂蠟 cire d’abeille、鳶尾 iris
4 後調 · 到第八小時 / 它回頭了 / 雪松煙 fumée de cèdre、安息香 benjoin
5 第八小時 / 只剩一點暖,貼著皮膚。
6 按住試香紙 / 用你的體溫,把八小時走一遍。 / live: 0:00 · 海鹽、佛手柑
7 試香組 · 3 × 2 ml / 先試三天 / 三支 2 ml,一天一支。在自己身上穿過,再決定要不要整瓶。 / 價格 NT$ 450,含運 / 折抵 全額折抵 50 ml 正裝(NT$ 4,800) / 寄出 11 月 20 日起,依預約順序 / 付款 現在不用付款,寄出前會先寫信跟你確認 / 預約試香組 / [你在試香紙上停在第 4:51:雪松煙、安息香。] / Email / 預約試香組 / 只用來通知寄送。
7 states 請留一個 Email,寄出前我們會用它跟你確認。 · Email 好像少了一部分,請再看一下,例如 name@example.com。 · 收到了。11 月 20 日寄出前,我們會先寫信到 … 跟你確認。(這是示範頁,不會真的寄信。)
8 香還在 / 預約試香組 / 11 月 20 日起寄出
Credits fictional-brand notice; procedural-assets note; fonts (OFL); method credit to Sciamma

talking-master changes from the draft: 「現在不用付。寄出前,我們會寫信跟你確認」 → 「現在不用付款,寄出前會先寫信跟你確認」 (one sentence, clearer word); error messages say what is missing and why the email is needed instead of "invalid input"; nothing narrates strategy ("為了讓你…" style lines were never drafted); no em dashes.

10. CRO self-audit of the built page (cro-master, heuristic: no traffic data — demo)

Check Verdict Evidence
One primary action, one verb keep 預約試香組 ×4 (chrome, form title, submit, final), no competing CTA
CTA reachable from frame one keep chrome strip visible above the loader and on every frame; skip link 跳到預約
Offer specific keep 3 × 2 ml, NT$ 450 incl. shipping, credited in full, ships 20 Nov, no charge now
Main objection answered next to the action keep "can't smell a screen" → 3 days on skin; price → credit; commitment → no payment now
Proof gap, accepted pre-launch fictional brand: no reviews exist, none invented. A real launch should add perfumer + batch facts, then early-sample reviews after shipping
Friction keep one field, visible label, inline error that keeps input, confirmation states next step
Distance to offer constraint desktop ≈ 25 screens of film before the offer by scroll; mitigated by the persistent CTA + skip link, but a cold visitor who never clicks the chrome meets the price late. Test idea: a 1-line price under the title (「試香組 NT$ 450,可全額折抵」) vs. none
Taiwan channel test idea add LINE as an alternative to email (cro-master 11): not built, to keep one field
Compliance notes flagged real launch needs 化粧品 labelling/登錄, 7-day 鑑賞期 wording for distance sales, 個資 consent line beside the field

11. Screening record

Dailies: screening/contact-{desktop,laptop,mobile}.jpg (+ --cuts), contact-*-reduced.jpg, screening/act/contact-{desktop,mobile}.jpg (CTA hover, hold, release, keyboard hold, the hour printed on the reservation, empty / partial / valid form), screening/range/contact-{ultrawide,tablet,landscape}.jpg. Zero console errors, zero mechanical flags on the final pass.

Reshoots (named corrections):

  1. Casting: liquid invisible inside transmissive glass → opaque juice with faked translucency; flame made opaque so the glass refracts it.
  2. All scenes, reduced cut: canvas blank → the stage skipped draws when only the cast's pose changed; force a draw when act changes.
  3. Cuts 1→2, 4→5: veil read as a flat grey / brown frame (test screening called them blank) → structured smoke capped at 0.8 so the shot stays behind it.
  4. Final image: silhouette read as a glowing UI card, then as a blob figure → SDF of body + neck + cap, denser at the walls, fraying as it rises.
  5. Type: blur-resolve titles fell back to the kit's sans → font: 'inherit'; turn and final titles showed before their entrance → key p = 0 from clip start.
  6. Turn: candle flame sat behind the copy → candle moved to front-right; push-in deepened, bloom flare raised (test screener did not name the turn as climax).
  7. Close: copy over the glass and the clock over the label → camera re-aimed.
  8. Offer: fact numerals inherited the label style (selector bug); instruments over paper; wordmark invisible on paper → instruments hide on paper, chrome gets a paper ground.
  9. Landscape phone: strip over the bottle → re-blocked.

Test screening (fresh agent, sheets only): named the product, the action (reserve sample set by email) and the lead (the bottle's glow, ending as a ghost) correctly; it read the close-up / try as the climax rather than the turn. Remaining weakness, see delivery.

WebGL note: frames were rendered by headless Chrome (SwiftShader software GL). Look is judged from them; smoothness on real GPUs and phones was not measured.


Revision 2 — trigger variety and the type department

Same director, same film. Kept unchanged: Sciamma / Portrait of a Lady on Fire, the logline, the lead (bottle + vapour) and its seven states, the world object (blotter strip), the medium, the shot list and its scroll lengths, every line of visible copy, and the CRO decisions (one action 預約試香組, nothing animated over the price or the form field). What the revision answers: the skill's new rules that scroll is one trigger among at least four (this film had almost every performance scrubbed), and that a film keeps a type department around its signature move.

R2.1 What changed

  1. Kit refreshed from the skill: reel.js, stage.js, props.js were already current; reel.css (data-cut click-through, html, body { overflow-x: clip }) and type-fx.js (rebuild keeps colours, blur-resolve inherits the font by default) replaced. Nothing broke (all passes below).
  2. The gaze leans the flame (scenes 1–2): pointer / tap / ←→ carry the candle sideways behind the bottle, and the hot core travels through the liquid. A separate pose value (act.lean) is added to the scrubbed candle position, so scroll and pointer never fight.
  3. Stillness steadies the flame: 2.6 s without scroll, pointer or key and the flame stops swaying, stands taller, and the firelight stops flickering (act.calm). Any input wakes it.
  4. Choose a note (scene 6): three strip-tabs 前調 / 中調 / 後調 beside the readout. A click runs (or rewinds) the strip to 0:15 / 1:45 / 5:30; vapour, soak and readout follow; the hour is committed to the reservation exactly as a hold is. The hold stays the primary verb.
  5. The readout became type performances: the hour is an odometer bound to the strip's hour; the note name is a slit-scan switch. A separate visually hidden live region (#try-say) announces the committed hour once, so the effects' duplicate texts are never read aloud.
  6. An untouched strip invites when the visitor has been still in scene 6: its tip glows like a wick about to take.
  7. 它回頭了 and 香還在 are entry-played, no longer scrubbed: they wait for their moment (turn main ≥ 0.5; final main) and resolve at their own tempo (1.1 s / 1.6 s); they re-arm when the visitor scrolls back before them.
  8. The CTA strips soak by tween on hover / focus (the old CSS transition: --w is gone); the submit strip's tip takes more warmth as the email becomes a whole address (input).
  9. The reassurance is marked: the first time the visitor turns to the form (pointer or focus enters it), highlighter draws behind 現在不用付款 and stays.
  10. The notes left behind: a slow vertical-counter of the six materials drifts in the afterimage's left margin, faint, masked top and bottom, aria-hidden.
  11. Reduced motion: stage time frozen at one composed moment (in R1 the flame still flickered), flame steady (calm = 1), state-bound effects set instantly to the chosen state, entrances at rest.
  12. Bug found while screening, fixed in the project: the reel measured scroll before its lengths applied and Lenis kept the short page's scroll limit, because this module awaits the fonts before reel.start() (the kit's fonts.ready / load re-measures can both have fired already). On a warm cache seekScene('try') landed on the turn and Lenis clamped scrolling near 6600 px. Fix: requestAnimationFrame(() => { lenis?.resize(); reel.measure(); }) right after start.

New words (talking-master; scripts/check.py: 通過). Visible: 前調 / 中調 / 後調 on the tabs (already the film's own words). Screen-reader only: 直接選一段香調; 前調:海鹽、佛手柑 (and the other two); 第 4:51,雪松煙、安息香. No other copy changed. CRO: the tabs are muted translucent slips, never paper-white with the orange tip, so 預約試香組 remains the only primary-looking control; price and form field still never move (the highlighter marks a phrase and leaves the words still).

R2.2 Award pass, revised lines

TRIGGERS   scrubbed: camera moves, the turn, the vapour cuts, the dry-down read-fill, the skin clock.
           entry-played: 它回頭了, 香還在.  autoplay: loader + title, flame and vapour, the notes' drift.
           click: choose a note.  hover/focus: the gaze leans the flame; CTA soak; the reassurance marked.
           hold: the blotter strip.  input: the email soaks the submit tip.  idle: the flame steadies; the strip invites.
TYPE CAST  signature blur-resolve (title → turn → final) + read-fill, slit-scan, odometer, highlighter, vertical-counter

R2.3 Trigger table

18 rows of performances, 8 trigger kinds; scroll scrub drives 5 of them (about 28 %).

Beat Performance Trigger Keyboard / touch path Reduced-motion state
0 Loader strip wicks with load, tip catches and becomes shot one's flame; 回眸 / Retour blur-resolve autoplay (intro, real load progress) none needed intro run to its end first; titles at rest
1–5 camera push / lock / arc / push / creep scroll scrub keyboard scroll, touch scroll camera cuts to each scene's still pose
4 The turn bottle turns 90° → 0°, bloom flare scroll scrub same turned, label legible
1→2, 4→5 vapour veil cuts scroll scrub same hard cut
5 Close 只剩一點暖,貼著皮膚。 read-fill scroll scrub same fully lit
all skin clock + right-edge gauge follow the film scroll scrub (onFrame) same instruments hidden (chrome scrolls away)
4 The turn 它回頭了 resolves from blur scroll entry, then plays (1.1 s) once the bottle has turned keyboard scrolling fires it the same way sharp, at rest
8 Afterimage 香還在 resolves from blur scroll entry, then plays (1.6 s) same at rest
1–2 the candle leans where the visitor looks; the hot core travels through the liquid hover / pointer move ←/→ nudge it (0.35 per press); a tap on touch puts it under the finger off (lean 0)
all flame and vapour live autoplay (stage time) — frozen at one composed moment
8 Afterimage the six materials drift in vertical columns autoplay loop, fed only while the scene is on stage — frozen at t = 0
all (seen in 8) flame steadies, stands taller, firelight stops flickering idle 2.6 s any key / touch wakes it steady (calm = 1)
6 Try the untouched strip's tip glows, breathing idle in scene 6, until the strip is used — tip shown at 0.6, still
6 Try hours run, strip soaks, vapour changes note, odometer rolls, name switches; release keeps the hour and prints it on the reservation hold (pointer) focus the strip, hold Space / Enter; long-press on touch works; effects set instantly
6 Try strip runs or rewinds to the chosen note; name rolls; hour rolls; committed to the reservation click / tap 前調 中調 後調 real buttons: Tab + Enter / Space; aria-pressed jumps to the note, effects set instantly
chrome, final, form the CTA strip's soaked tip widens 0.22 → 0.66 hover / focus focus-visible gives the same answer set instantly
7 Offer 現在不用付款 marked hover / focus on the form (first time), stays focusing the email field draws it; a tap focuses it marked from the start
7 Offer submit tip soaks to 0.5 when the address is whole input typing set instantly

R2.4 Type cast

Effect Job Trigger Where
blur-resolve (signature) the scent coming into focus: opening, the turn, the afterimage autoplay (intro) · scroll entry, then play (turn, final) 回眸 / Retour, 它回頭了, 香還在
read-fill (kept) the dry-down, read as it fades scroll scrub 只剩一點暖,貼著皮膚。
slit-scan the note changes like a reel, by the visitor's hand click (note tab) · hold (crossing 0:30 / 3:00); state-bound the note name under the hour, scene 6
odometer time on skin as a counter: rolls while held, rolls to the chosen hour on click, stops exact hold (bound per frame) · click (rolled by the strip's tween); state-bound the hour readout h:mm, scene 6 (hour + minutes odometers)
highlighter point at the risk reversal at the moment of decision hover / focus on the form, once 現在不用付款, offer facts
vertical-counter set dressing: the notes left behind, drifting like vapour autoplay loop left margin of the afterimage, aria-hidden

Legibility held: per-character motion only on the 2–3-character titles; the price, facts and form never move; the odometer and slit-scan are at rest whenever nothing is changing; the drift is faint, masked and outside the copy's column. Faces checked with Chrome's platform-font report on desktop and phone: every effect was painted only by its intended face (Cactus Classical Serif, Bodoni Moda, Chocolate Classical Sans), no fallback; zero negative tracking on any effect node. Two CSS adjustments to kit output, both in style.css: the odometer's leading-zero dimming is overridden (on a clock the 0 in 4:05 is part of the time), and the slit-scan line hangs left with the hour.

R2.5 Screening record

Served on port 5762 (node static server). screening/contact-{desktop,laptop,mobile}.jpg with --cuts, screening/contact-*-reduced.jpg, screening/act/contact-{desktop,mobile}.jpg (every non-scroll trigger mid-flight and at rest), real-size crops in screening/act/crops/ (+ *-faces.json). Zero console errors and page errors on every pass. One mechanical flag, explained: cut-text on final — the vertical-counter's marquee copies are taller than their own box by design and are clipped (and masked) by it; the script measures the unclipped spans. Nothing visible is sliced. copy-check.mjs not run: the project has no copy file.

Reshoots: note tabs wrapped to two lines (前/調) → flex: none; white-space: nowrap. Drift columns too large and too bright beside 香還在 → box 13 → 9 vw, opacity .9 → .55. Idle steadying first staged on the close shot, where the flame is out of frame → screened on the afterimage, where the candle stands in frame. Note-name switch lagged the hour → 0.75 → 0.55 s. Review note (coordinator): mid-roll, the hour odometer's neighbouring digits spilled above and below 「h:mm」 into the note name, and the slit-scan's copies rose into the hour / hung below the line mid-switch. Causes, both in kit geometry (not in page CSS): each odometer window is one full 1.1em line box with overflow: hidden, much taller than the digits' ink, so the outgoing and incoming digits show in the slack and the box touches the next line; slit-scan's outer slits are open-ended (top band from −40 %, bottom band to 140 % of the line), so the rolling copies are visible outside the line. Fixed in style.css: windows clipped to the ink band (clip-path: inset(.1em -.05em .13em -.05em)), the slit-scan stage clipped to its own line (clip-path: inset(0 -.3em)). Verified with exact p poses through a ?screen-only hook (window.__fx) at 2× on desktop and phone, and by re-shooting the act's hold / note frames.

Weaknesses: the steadied flame is subtle (upright and taller, no sway) — right for Sciamma, easy to miss; mid-hold the minute wheel spins too fast to read (by design, exact at rest); the lean is pointer-first, its touch path (tap) is less discoverable; autoplay ambient has no play control in the reduced cut (it is frozen, not paused behind a button).

本站所有作品都是虛構品牌;成品是真的,全部由 agent 使用這個 skill 做出來。